数据库 MCP:让 Agent 自己查数据、写报表

上周我在折腾一件事------让 Harness Agent 帮我查生产数据库的慢查询。

你别说,这事听起来简单,真正干起来就发现:Agent 会写代码,但它不知道怎么连数据库啊。它又没长手,总不能自己去装个 MySQL Client 再敲 SQL 吧?

这就是 MCP 的用武之地了。上一篇我写了怎么手搓一个文件操作的 MCP Server,今天咱们整点更实用的------数据库 MCP Server,让 Agent 通过自然语言直接查数据库、生成报表。

我那次的需求是这样的:有个线上服务最近响应变慢了,我想知道哪些 SQL 在拖后腿。以前的做法是:登录跳板机 → 连 MySQL → 敲 SHOW PROCESSLIST → 翻 slow_query_log → 复制到本地 → 分析。一整套下来至少半小时,中间还容易被打断,回来忘了自己查到哪了。

有了数据库 MCP Server 之后,我在 Harness 里直接说了一句:

"帮我查一下 production 库过去 24 小时的慢查询,按执行次数倒排,给我一份摘要。"

然后就去倒咖啡了。回来的时候,Agent 已经把结果整理好了,还补了一句:"发现 order_list 表有个全表扫描,建议加索引。"

笑死,比我 DBA 同事还积极。


先说怎么搭这个数据库 MCP Server。其实思路很简单:MCP 本质上是一个标准化的工具调用协议,你暴露给 Agent 的每个"工具"(Tool),就是一个它可以调用的函数。数据库 MCP 说白了就是把 SQL 查询封装成 Tool。

我选了 Python 的 mcp 库来搭,代码量不大。核心就三个东西:

connect:连数据库,传入连接串就行。我用的是 MySQL,但 PostgreSQL、SQLite 都一个套路。

query :执行 SQL 并返回结果。这里有个坑------我第一次跑的时候,直接把原始 SQL 执行能力暴露给了 Agent。结果 Agent 来了一句 SELECT * FROM users,把 50 万行记录全拉回来了。好家伙,差点把我数据库搞崩。

所以一定要加安全限制 :默认只允许 SELECT,禁止 DELETEDROPUPDATE。而且查询结果要做截断,比如最多返回 100 行。

describe :让 Agent 先看表结构,再决定查什么。这个特别重要------Agent 又不认识你的数据库,你不给它看 SHOW TABLESDESCRIBE 的结果,它怎么知道该查哪张表?

有意思的是,我第一次设计这个 Tool 列表的时候,觉得三个够用了。结果真用起来发现,还差一个------ask_confirm 。Agent 查完数据想干点什么的时候,让它先问一句"我要执行 XX 操作,确认吗?"。不然哪天它自己给自己开了个 DROP DATABASE 的权限,那就真·灾难了。

说到这个,我踩过一个更深的坑。一开始我把数据库密码写死在 MCP Server 的配置文件里,心想"反正就我一个人用"。结果有一天我让 Agent 去查数据,它顺手把配置文件和密码一起写进了日志------然后日志被同步到了团队群里。同事在群里问:"ReleaseU,你的数据库密码是 Abcd1234 吗?"

我:......

所以密码一定要走环境变量,走密钥管理服务,不要写死在代码里。MCP Server 的配置模板里支持从环境变量读取,这个习惯一定要养成。


再说说报表生成。单纯查数据只是第一步,真正爽的是让 Agent 把数据整理成报表。

我写了一个 generate_report 的 Tool,给它传 SQL 和报表格式,它自动跑查询、汇总数据、生成 Markdown 表格。比如:

"按天统计过去一周的订单量,生成一个趋势报表。"

Agent 会先 describe 看表结构,发现 orders 表有 created_atamount 字段,然后自己拼 SQL:

sql 复制代码
SELECT DATE(created_at) AS day, COUNT(*) AS order_count, SUM(amount) AS total_amount
FROM orders
WHERE created_at >= NOW() - INTERVAL 7 DAY
GROUP BY DATE(created_at)
ORDER BY day;

然后跑出来,格式化成一个表格,最后还加了一句:"周三订单量最高,周六最低,建议检查周末的运营活动。"

嘿,还能当半个运营分析师用。

不过说实话,现阶段数据库 MCP 也不是什么都好。有几个问题我必须要提:

第一是 Agent 的 SQL 水平参差不齐 。我用 GPT-4 和 DeepSeek 分别试过同一个需求------"查一下过去一个月每个用户的复购率"。GPT 写出来的 SQL 逻辑是对的,但嵌套了四层子查询,跑起来慢得要死。DeepSeek 倒是简洁,但搞混了 COUNT(DISTINCT ...)COUNT(...) 的区别。所以如果你要上生产环境,建议给 Agent 加一个 SQL Review 的中间层,或者限制它只能查预定义的视图,别直接裸查原表。

第二个问题是结果的可视化。 Agent 能给你 Markdown 表格,但你要是想要一张折线图或者柱状图,它目前还做不到。我现在的做法是让 Agent 把数据导出成 CSV,然后我再丢给其他工具去画图。这个环节如果能打通,体验会更完整。

第三个是连接管理。 多个 Agent 同时连同一个数据库,连接池怎么管理?长连接还是短连接?我现在是每个请求新建连接,用完后关闭,但高频场景下效率不高。这块还在摸索中。


总的来说,数据库 MCP 是我目前觉得实用性最高的一个方向。它把 Agent 的能力从"写代码"延伸到了"取数据、分析数据"------这其实是很多日常工作里最耗时的环节。

你猜怎么着?我写完这篇的时候,那个 DBA 同事刚好路过,看到我在让 Agent 查慢查询,问我这是什么工具。我说完他沉默了两秒,然后说:"那你把我分析慢查询的活儿也干了吧。"

我:"......那你的工资分我一半?"

他没接话,走了。但我知道他回去肯定也在偷偷搭 MCP Server 了。

下一篇咱们整 GitHub MCP------让 Agent 自己提 PR、做 Code Review、管 Issue,一条龙自动化。你准备好把代码审查也交给 Agent 了吗?评论区聊聊,你是敢让 Agent 提 PR 的那种人,还是觉得"这件事得我自己来"?

相关推荐
deepseek231 小时前
Tenable联合OpenAI做AI Inspector:第三方Agent、Skill与MCP组件如何过供应链验收
人工智能·ai agent·mcp
TMT星球1 小时前
涂鸦智能携Doova机器人亮相IFA 2026,帮助独居老人乐享智慧生活
人工智能·机器人
stormzhangV1 小时前
用 GPT-6-Astra,先检查这几个设置
人工智能·openai·ai编程
楚兴1 小时前
ACP 到底解决了什么?让 IDE 和 Coding Agent 解耦
人工智能·后端·架构
众壹新能源科技1 小时前
经营口径与运维口径不一致时,发电量报表怎么对账
运维·数据库·人工智能
用户73499134716531 小时前
超越实时:Video DeltaNet 如何让视频生成比播放更快
人工智能
匠测AI说1 小时前
第一周:从 0 写出 v0.1.0,回归测试 90 项全过(附架构图)
人工智能
楚兴1 小时前
DeepSeek Harness 到底在做什么?拆开 Agent 的运行时
人工智能·后端·架构
baopixiaoz1 小时前
BeeQuant × BeeAgent:AI驱动智能交易
大数据·人工智能·python·区块链