MCP 协议踩坑记:让 AI Agent 自己查数据库调接口

0 阅读1分钟

上周接了个需求,要让 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 系列也在跟进。