1. 从一次“查不到表”的排查说起
MCP 全称 Model Context Protocol,模型上下文协议,简单说就是给大模型接外部工具和数据源的一套标准接口,你可以把它理解成 AI 世界的 USB-C:不管对面是数据库、文件系统还是远程 API,只要按 MCP 规范封装,客户端就能用统一方式发现工具、调用工具、拿回结果。它适合谁?适合已经在用 Cline、Claude Code 这类支持 MCP 的客户端,又想让模型直接读 MySQL、查天气、跑脚本的开发者。阿里云百炼负责提供模型能力,Cline 负责当 MCP Client 和任务编排器,mysql-mcp-server 则是那个真正连数据库的 MCP Server。
我试过把这三者串起来时,卡在一个很典型的现象:Cline 里 MCP 图标显示已连接,但让它“统计 mcp_test_db 有几张表”,模型却回一句“我没有可用的数据库工具”。这说明握手阶段可能过了,但工具发现或鉴权环节断了。要定位这种问题,得先搞清楚一次完整链路到底发生了什么:Cline 启动 mysql-mcp-server 子进程,通过 stdio 发tools/list请求,拿到工具清单后拼进 prompt,模型决定调用tools/call,Cline 再把参数写进子进程 stdin,服务查完 MySQL 从 stdout 回传,最后模型把结果转成自然语言。任何一环配置错位,都会表现成“连上了但用不了”。下面按这条链路拆开讲,并给出可直接复制的 settings.json 骨架和 TaoToken 统一 Key 配置片段。
2. TaoToken 前置:统一 Key 与接入地址
在把 MCP 服务接进 Cline 之前,先解决模型侧的鉴权。Cline 本身不提供模型,它需要你填一个 OpenAI Compatible 的 Base URL 和 API Key。如果你同时用阿里云百炼的 qwen、Claude、GPT 等多个模型,每个平台单独管 Key 会很乱,TaoToken 的作用就是把这些模型的调用收敛到一个入口,Key 也统一成一把。
TaoToken 官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 接入地址是 https://taotoken.net/api ,注意这个 API 地址后面不加 UTM 参数,直接作为 Base URL 使用。你需要在控制台创建 API Key,入口在 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,Key 管理页面在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。拿到 Key 之后,Cline 的 API Provider 选 OpenAI Compatible,Base URL 填https://taotoken.net/api,API Key 填你创建的那把,Model ID 按你要用的模型填,比如qwen-max或claude-sonnet-4-5。
这里有个容易踩的坑:Base URL 末尾不要自己加/v1,TaoToken 的接入地址已经处理了路径,多加一层会导致 404。另外 MCP 服务本身的鉴权(比如 MySQL 的用户名密码)和模型鉴权是两套东西,不要混在一起配。模型 Key 管的是“谁能调用大模型”,MySQL 环境变量管的是“MCP 服务能连哪个库”,两者独立。
如果你后续要做长期编码或 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. 可复制配置:mysql-mcp-server 与 settings.json 骨架
先把 mysql-mcp-server 跑起来。这个项目是 Node.js 写的,需要 Node 18 以上。克隆、安装、构建三步:
git clone https://github.com/dpflucas/mysql-mcp-server.git cd mysql-mcp-server npm install npm run build构建产物在build/index.js,这就是 MCP 服务的入口。它的数据库连接信息全部走环境变量,所以启动前先设好:
export MYSQL_HOST=127.0.0.1 export MYSQL_PORT=3306 export MYSQL_USER=your_user export MYSQL_PASSWORD=your_password export MYSQL_DATABASE=mcp_test_dbWindows 下用set代替export。设完后直接手动启动一次,确认服务能起来:
node /absolute/path/to/mysql-mcp-server/build/index.js正常会看到类似输出:
[Setup] MySQL configuration: { host: '127.0.0.1', port: 3306, user: 'your_user', database: 'mcp_test_db' } [Setup] Creating MySQL connection pool [Setup] Starting MySQL MCP server [Setup] MySQL MCP server running on stdio看到running on stdio就说明 stdio 模式握手就绪,Ctrl+C 退出。接下来把这段启动逻辑写进 Cline 的 MCP 配置。Cline 的 MCP 配置文件就是settings.json里的mcpServers段,骨架如下:
{ "mcpServers": { "mysql": { "command": "node", "args": ["/absolute/path/to/mysql-mcp-server/build/index.js"], "env": { "MYSQL_HOST": "127.0.0.1", "MYSQL_PORT": "3306", "MYSQL_USER": "your_user", "MYSQL_PASSWORD": "your_password", "MYSQL_DATABASE": "mcp_test_db" }, "disabled": false, "autoApprove": [] } } }几个参数的含义对照一下:
| 字段 | 作用 | 注意点 |
|---|---|---|
| command | 启动 MCP 服务的可执行程序 | 用node,不要写npx除非你确认包已发布 |
| args | 传给 command 的参数 | 必须是build/index.js的绝对路径 |
| env | 注入子进程的环境变量 | MySQL 连接信息全在这里,和模型 Key 无关 |
| disabled | 是否禁用该服务 | 设 false 才会随 Cline 启动 |
| autoApprove | 自动批准的工具列表 | 留空表示每次调用都需确认,安全优先 |
在 VSCode 里打开 Cline,点右上角 MCP Server 图标,切到 Installed 标签,点 Configure MCP Servers,把上面这段粘进去,改成你自己的路径和数据库信息,保存。Cline 会自动拉起这个子进程。如果图标变绿或显示 connected,说明 stdio 通道建立成功。
4. 验证请求:用 Cline 发起一次 MySQL 查询
配置保存后,新建一个 Task,先不要勾 Auto-approve,手动走一遍确认链路。输入:
统计 mcp_test_db 数据库有几张表,并列出表名预期行为是:Cline 先向 mysql-mcp-server 发tools/list,拿到类似list_tables、describe_table、execute_query这样的工具清单;然后把这些工具描述拼进 prompt 发给模型;模型判断需要调用工具,返回 function call;Cline 把调用参数写进子进程 stdin;服务查完 MySQL 从 stdout 回传结果;模型再把结果组织成自然语言。
如果数据库里还没有表,先建一个测试库和表:
CREATE DATABASE IF NOT EXISTS mcp_test_db; USE mcp_test_db; CREATE TABLE IF NOT EXISTS users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(64), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS orders ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT, amount DECIMAL(10,2) );再让 Cline 执行一次查询,正常会返回类似“mcp_test_db 中共有 2 张表:users、orders”。这一步同时验证了两件事:MCP 服务连通(stdio 握手和工具发现成功),以及模型鉴权生效(TaoToken 的 Key 能正常调用模型并返回 function call)。如果模型侧 Key 配错,你会看到 401 或“invalid api key”;如果 MCP 侧环境变量配错,你会看到连接池创建失败或ECONNREFUSED。
想单独验证模型通道,可以打开模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite ,发一句“你好”确认 Key 可用,再回到 Cline 排查 MCP 侧。
5. 本篇常见错排查
现象一:MCP 显示 connected,但模型说没有可用工具。多半是tools/list返回了空,或者工具描述没被拼进 prompt。先手动跑一次node build/index.js,确认服务能启动;再检查args路径是不是绝对路径,相对路径在 Cline 子进程里会解析失败。另外disabled必须是 false。
现象二:启动就报Cannot find module。说明npm run build没执行,或者build/index.js不存在。回到项目目录重新npm install && npm run build,确认build目录下有index.js。
现象三:ECONNREFUSED 127.0.0.1:3306。MySQL 没启动,或者MYSQL_HOST、MYSQL_PORT填错。先用mysql -h 127.0.0.1 -P 3306 -u your_user -p手动连一次,确认网络和账号没问题。注意env里的值都是字符串,端口写"3306"而不是3306。
现象四:模型返回 401 或鉴权失败。检查 Cline 的 API Provider 是否选了 OpenAI Compatible,Base URL 是否为https://taotoken.net/api,Key 是否从 API Keys 页面复制完整。如果之前填过别的平台地址,清空重填。
现象五:Cline 执行命令时提示 Shell Integration Unavailable。这是 Cline 自身的终端集成问题,和 MCP 无关。Windows 下把默认终端设为 Git Bash,或者把 PowerShell 升到 7+,重启 VSCode 即可。
现象六:调用工具时一直转圈不返回。大概率是子进程 stdout 没有按行刷新。mysql-mcp-server 用\n分隔消息,如果你改过服务代码,确认每条响应都以换行结尾。另外autoApprove留空时每次调用都要手动点确认,别以为是卡住了。
6. 把链路固定下来
整套跑通后,建议把settings.json里的mcpServers段单独备份一份,换机器时直接替换路径和环境变量即可。模型侧统一用 TaoToken 的 Key,MCP 侧每个服务独立配 env,两边解耦,排查时能快速定位是模型通道还是工具通道的问题。需要新建 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 为准。如果后面要接 Claude Code 这类客户端,Anthropic 兼容入口在 https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude-code-anthropic&utm_campaign=rewrite ,配置逻辑和 Cline 类似,都是 Base URL 加 Key 两件事。