上周接了个需求,要让 AI Agent 自己去查数据库、调第三方接口,不再是只能聊天的花瓶。
折腾了两天 MCP 协议,终于跑通了,把踩坑经历记一下。
什么是 MCP
MCP(Model Context Protocol)是 Anthropic 搞的一个开放协议,让 LLM 能通过标准化的方式调用外部工具。简单说就是给 AI 装上手和脚。
之前用 function calling 也能做,但每个模型的实现不一样,切模型就得改代码。MCP 统一了这层,理论上写一次 tool server,所有支持 MCP 的模型都能用。
实操:搭一个查数据库的 MCP Server
from mcp import MCPServer, tool
import sqlite3
server = MCPServer()
@server.tool(description="查询数据库,输入 SQL 语句")
def query_db(sql: str) -> str:
conn = sqlite3.connect("app.db")
cursor = conn.execute(sql)
rows = cursor.fetchall()
conn.close()
return str(rows[:20])
server.run(port=8080)
客户端接入也很简单:
from openai import OpenAI
client = OpenAI(
api_key="your-key",
base_url="https://api.ofox.ai/v1"
)
resp = client.chat.completions.create(
model="claude-opus-4-6",
messages=[{"role": "user", "content": "帮我查一下最近7天的订单总额"}],
tools=[{"type": "mcp", "server_url": "http://localhost:8080"}]
)
print(resp.choices[0].message.content)
踩坑记录
坑1:端口冲突
MCP Server 默认 8080,跟我本地的其他服务撞了。改端口就行但文档没写清楚。
坑2:SQL 注入
直接把 LLM 生成的 SQL 扔进数据库执行,想想就刺激。加了个白名单限制只允许 SELECT。
坑3:超时
复杂查询超过 30 秒 MCP 就断了,得自己加 timeout 处理。
小结
MCP 的思路是对的——标准化工具调用协议,让 AI Agent 真正能干活。目前生态还早期,但值得关注。
我现在用 ofox.ai 的聚合 API 测不同模型对 MCP 的支持情况,Claude 系列支持最好,GPT 系列也在跟进。