SQL自然语言查询工具

MCP工具通过LangChain SQL代理实现自然语言查询数据库功能,适用于开发者和数据分析师快速获取数据库信息。

  • by taixingbi
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 taixingbi/mcp-tool-sql

使用说明

mcp工具sql

MCP(模型上下文协议)服务器将LangChain SQL代理作为工具公开。使用自然语言查询数据库。

设计

┌─────────────┐     JSON-RPC      ┌──────────────┐     /mcp/      ┌─────────────────┐
│   Client    │ ────────────────► │   FastAPI    │ ─────────────► │  MCP (FastMCP)   │
│  (curl/IDE) │   tools/call      │   :8000      │   streamable   │  sql_agent tool  │
└─────────────┘                   └──────────────┘      HTTP       └────────┬────────┘
                                                                           │
                                                                           ▼
┌─────────────┐     SQL + results  ┌─────────────────┐     invoke    ┌─────────────────┐
│   MySQL     │ ◄───────────────── │ LangChain SQL   │ ◄─────────────│  ChatOpenAI      │
│ job_descr.  │                    │ Agent (tool-    │   question    │  (gpt-4o-mini)   │
│ salaries    │                    │ calling)        │               └─────────────────┘
└─────────────┘                    └─────────────────┘

组件

  • 快速API –HTTP服务器,安装MCP /mcp
  • 快速MCP –MCP服务器,暴露 sql_agent 通过JSON-RPC工具
  • LangChain SQL代理 –通过工具包计划和运行SQL(模式检查、查询执行)
  • SQLDatabaseToolkit 连接到MySQL(job_descriptions, salaries),提供工具
  • ChatOpenAI -自然语言法学硕士→ SQL和答案生成

工作流程

部署(推送到main)

git push origin main  →  GitHub Actions  →  flyctl deploy  →  Fly.io

需要 FLY_API_TOKEN 在回购秘密。

请求流

Client  →  POST /mcp/ (JSON-RPC tools/call)  →  sql_agent(question, limit)
         →  LangChain agent.invoke  →  LLM plans SQL  →  Execute on MySQL
         →  LLM formats answer  →  SqlAgentResponse (ok, answer, token_usage, error)

设置

python3.11 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

创建 .env 文件包含 OPENAI_API_KEY, MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE.

跑

本地

uvicorn mcp_server:app --reload --port 8000

码头工人

docker build -t mcp-server .
docker run -p 8000:8000 --env-file .env mcp-server

Fly.io

brew install flyctl
fly auth login
fly launch   # creates app on first run
fly secrets set OPENAI_API_KEY=xxx LANGCHAIN_API_KEY=xxx MYSQL_PASSWORD=xxx MYSQL_HOST=xxx MYSQL_PORT=xxx MYSQL_USER=xxx MYSQL_DATABASE=xxx
fly deploy

推到 main 通过GitHub操作触发自动部署(需要 FLY_API_TOKEN 秘密)。

用法

curl -N -sS "https://your-app.fly.dev/mcp/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"sql_agent","arguments":{"args":{"question":"List 5 job titles","limit":5}}}}'