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-serverFly.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}}}}'