1. Chat 场景下 MySQL 查询链路的真实痛点
Chat to MySQL 这件事,听起来像是给 AI 装上一双能直接翻数据库的手,但真正落地时,问题往往不在 SQL 本身,而在「服务怎么被调用起来」。我在本地联调环境里反复试过几种方案,最典型的卡点有三个:一是 MCP Server 的启动命令和 DSN 拼接容易写错,尤其是密码里带特殊字符时;二是 Chat 端拿到的工具配置格式和 MCP Server 实际暴露的协议对不上,SSE 和 stdio 混用直接导致连接超时;三是模型侧没有统一的 Key 通道,换一个模型就要改一遍环境变量,联调效率极低。
这篇内容聚焦的就是这条链路:从 MySQL 库表准备,到 MCP Server 服务调用配置,再到 Chat 端接入与连通性验证。适合正在做本地开发、需要让 AI 助手直接查业务库的读者。我会给出可复制的settings.json/config.toml骨架,配合 TaoToken 统一 Key 通道,把「Chat 到 MySQL」的查询链路一次跑通。整个过程不需要你改编辑器,也不需要把生产库暴露出去,全部在本地或内网联调环境完成。
核心检索词先明确:MCP Server 是模型上下文协议的服务端实现,负责把数据库、文件、API 等能力包装成模型可调用的工具;Chat to MySQL 就是让对话模型通过 MCP Server 发起 SQL 查询并返回自然语言结果。下面按步骤拆开。
2. TaoToken 前置:统一 Key 与 API 通道接入
在配置 MCP Server 之前,先把模型侧的调用通道固定下来。TaoToken 在这里的角色是统一 Key 和 API 入口,避免你在多个模型供应商之间来回切换配置。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数。
你需要先拿到一个可用的 API Key。进入控制台创建 Key 的路径是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,创建完成后复制保存。这个 Key 后面会同时用于 Chat 端的模型调用和 MCP Server 的工具调用鉴权。
如果你只是验证模型对话是否通,可以直接用模型对话页面测试:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。但本篇的重点是 MCP Server 服务调用,所以 Key 要写进 MCP 配置里。
注意:API Key 不要硬编码在会提交到 Git 的文件里,建议用环境变量注入,下面配置示例会体现这一点。
对于长期做编码和 Agent 联调的读者,Coding Plan 会更省心,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,遇到协议细节可以先查这里。
3. 可复制配置:MCP Server 与 Chat 端骨架
3.1 MySQL 侧准备
先确认库表和账号权限。联调环境建议单独建一个只读账号,避免 Chat 端误写。示例表用一张运营数据表即可:
CREATE TABLE edu_payment ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, region VARCHAR(64) NOT NULL, amount DECIMAL(12,2) NOT NULL, pay_time DATETIME NOT NULL ); CREATE USER 'chat_ro'@'%' IDENTIFIED BY 'ChatRo_2024!'; GRANT SELECT ON edu_db.edu_payment TO 'chat_ro'@'%'; FLUSH PRIVILEGES;密码里带!这类特殊字符时,DSN 里要做 URL 编码,否则 MCP Server 启动会直接报解析失败。这是第一个高频坑。
3.2 MCP Server 启动配置
MCP Server 用 stdio 传输时,配置写在settings.json里。下面这份骨架可以直接改:
{ "mcpServers": { "edu-table": { "command": "npx", "args": [ "-y", "@bytebase/dbhub", "--transport", "stdio", "--dsn", "mysql://chat_ro:ChatRo_2024%21@127.0.0.1:3306/edu_db" ], "env": { "TAOTOKEN_API_KEY": "${TAOTOKEN_API_KEY}", "TAOTOKEN_BASE_URL": "https://taotoken.net/api" } } } }注意%21就是!的 URL 编码。TAOTOKEN_API_KEY从系统环境变量读取,不要写死。
如果你用的是 SSE 传输方式,配置结构不同,需要单独写config.toml:
[mcp_servers.edu-table] url = "http://127.0.0.1:8090/edu-table" transport = "sse" timeout = 180 [mcp_servers.edu-table.env] TAOTOKEN_API_KEY = "${TAOTOKEN_API_KEY}" TAOTOKEN_BASE_URL = "https://taotoken.net/api"SSE 模式下,MCP Server 会暴露一个 HTTP 端点,Chat 端通过这个 URL 建立长连接。端口和路径要和实际启动参数一致,否则会出现 404 或连接被拒。
3.3 Chat 端工具配置
Chat 端接入 MCP 工具时,配置格式要去掉外层mcpServers,并显式声明transport。这是第二个高频坑,很多人直接把 MCP Server 的配置整段贴过去,结果协议不匹配。
{ "mcp-mysql": { "timeout": 180, "url": "http://127.0.0.1:8090/edu-table", "transport": "sse" } }如果 Chat 端走的是 stdio,则不需要url,而是引用command和args。两种模式不要混用。
4. 验证请求与成功结果
配置写完后,先做连通性验证,不要直接上 Chat 对话。分三步:
第一步,单独启动 MCP Server,观察日志:
TAOTOKEN_API_KEY=your_key npx -y @bytebase/dbhub \ --transport stdio \ --dsn "mysql://chat_ro:ChatRo_2024%21@127.0.0.1:3306/edu_db"正常启动会输出监听信息和工具列表。如果卡在connecting,多半是 DSN 或网络问题。
第二步,用 curl 验证 SSE 端点是否可达:
curl -N http://127.0.0.1:8090/edu-table \ -H "Accept: text/event-stream"返回event: endpoint或心跳数据,说明 SSE 通道正常。
第三步,在 Chat 端发起真实查询。测试问题可以是「近一年支付用户主要来自哪几个区域?」。模型会通过 MCP Server 生成并执行 SQL,返回类似:
根据 edu_payment 表统计,近一年支付用户主要集中在华东、华南、华北三个区域, 其中华东占比约 42%,华南约 27%,华北约 18%。如果返回的是 SQL 原文而不是自然语言结果,说明 Chat 端的工具调用结果没有回传给模型,检查transport和timeout配置。
5. 本篇常见错排查
5.1 DSN 解析失败
报错关键词:invalid DSN、parse error。原因通常是密码含特殊字符未编码,或端口写成字符串。解决:对密码做 URL 编码,端口用数字。
5.2 SSE 连接超时
报错关键词:ETIMEDOUT、connect ECONNREFUSED。先确认 MCP Server 是否真的在监听该端口,再确认防火墙是否放行。本地联调常见的是端口被其他进程占用,换一个端口即可。
5.3 工具配置格式错误
报错关键词:transport not supported、missing url。Chat 端配置和 MCP Server 配置格式不同,前者不需要mcpServers外层,且必须带transport。对照第 3.3 节的骨架逐字段检查。
5.4 模型侧鉴权失败
报错关键词:401、invalid api key。检查TAOTOKEN_API_KEY是否注入成功,以及TAOTOKEN_BASE_URL是否写成https://taotoken.net/api。注意 API 地址不带 UTM 参数,带参数可能导致鉴权异常。
5.5 查询结果为空但无报错
多半是账号权限不足或表名写错。用只读账号手动执行一次 SQL 确认:
SELECT region, COUNT(*) FROM edu_payment WHERE pay_time >= DATE_SUB(NOW(), INTERVAL 1 YEAR) GROUP BY region;手动能查出结果,说明 MCP Server 侧配置没问题,问题在 Chat 端的提示词或工具调用参数。
6. 接入与排障入口
如果你在配置 MCP Server 或验证服务调用时遇到鉴权、协议、超时问题,优先去 API Keys 页面确认 Key 状态:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,再对照接入文档排查:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。
需要先验证模型对话是否正常,可以用模型对话页面快速测试:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。长期做编码和 Agent 联调的,直接看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。
最后提醒一句:联调环境跑通后,把只读账号、端口、Key 都换成独立配置,不要和生产库混用。MCP Server 的日志级别调到 debug,能省掉大量猜问题的时间。