
1. Claude MCP 到底是什么能帮我们做什么Claude MCP 全称 Model Context Protocol翻译过来叫模型上下文协议是 Anthropic 推出的一个开放标准。你可以把它理解成 AI 世界里的 USB-C 接口以前每个外部工具都要给 Claude 单独写一套对接代码现在只要工具实现了 MCP 协议Claude 就能用同一套方式调用它。这个协议基于 JSON-RPC 2.0支持双向通信本地跑一个 ServerClaude Desktop 作为 Client 去连它就能让模型读取文件、查数据库、调 API、执行终端命令。它解决的核心痛点是「模型只会聊天碰不到真实世界的数据」。比如你想让 Claude 总结本地某个目录里的日志纯对话模型做不到但挂一个文件系统 MCP Server 上去Claude 就能列出目录、读文件、返回摘要。再比如你想让 Claude 帮你查 GitHub issue、操作 SQLite、跑一段脚本这些都能通过 MCP 暴露成工具给模型调用。适合谁用三类人最值得上手一是日常用 Claude Desktop 做开发辅助的工程师想让模型直接读项目文件二是做 AI Agent 的开发者需要一个标准化的工具接入层三是想把自己内部系统接给大模型的产品团队MCP 省掉了为每个模型单独适配的成本。MCP 的架构分三块Host 是发起方比如 Claude DesktopClient 是 Host 内部负责和 Server 通信的连接器Server 就是你自己写的、暴露工具的程序。通信方式目前主流是 stdio也就是 Host 启动一个子进程通过标准输入输出传 JSON-RPC 消息。还有 SSE 方式走网络但本地开发用 stdio 最省事。一个最小 MCP Server 需要实现的能力包括声明自己支持哪些工具tools/list、接收调用请求tools/call、返回结果。协议还支持 resources 和 prompts但工具是最常用的。你写完之后Claude Desktop 启动时会读配置文件把 Server 拉起来之后模型在对话里就能看到这些工具并按需调用。我实测下来整个链路打通的关键就两点Server 能被正确启动、配置里的命令和路径没写错。剩下的就是工具逻辑本身。下面从环境准备开始一步步把这条链路搭起来。2. 前置准备Node.js 环境与 TaoToken API 通道配置写 MCP Server 之前先把运行环境和模型通道准备好。MCP Server 本身是本地进程和模型 API 是两回事但 Claude Desktop 要调用模型模型请求得走一个可用的 API 通道。这里我们把通道指到 TaoToken它兼容 Anthropic 的接口格式配置起来不用改代码逻辑。先装 Node.js建议 18 以上我用的是 20 LTS。去官网下载安装包或者用 nvm 管理版本。装完验证node -v npm -v然后建项目目录初始化mkdir mcp-demo cd mcp-demo npm init -y npm install modelcontextprotocol/sdkmodelcontextprotocol/sdk是官方提供的 SDK封装了 JSON-RPC 的收发和工具注册省得你手写协议解析。装完之后目录里会有 node_modules 和 package.json。接下来处理 API 通道。Claude Desktop 默认连 Anthropic 官方接口我们要把它改到 TaoToken。先去控制台拿 Key访问 https://taotoken.net/api-keys 创建 API Key复制出来。这个 Key 后面要填到 Claude Desktop 的配置里。TaoToken 的 API 地址是 https://taotoken.net/api它兼容 Anthropic 的/v1/messages接口。也就是说 Claude Desktop 发出的请求格式不用变只要把 base URL 和 Key 换掉就行。模型 ID 用claude-sonnet-4-5这类官方命名TaoToken 会做转发。这里有个容易踩的坑Claude Desktop 的 MCP 配置和模型 API 配置是分开的两块。MCP 那块管的是「启动哪些本地 Server」模型那块管的是「请求发到哪个地址」。很多人配完 MCP 发现工具不出现其实是模型通道没通或者反过来。所以两块都要检查。如果你还没决定用哪个模型可以先到 https://taotoken.net/api 的模型对话页面测一下 Key 能不能正常返回确认通道没问题再往下走。这一步花两分钟能省掉后面一半的排查时间。环境准备好之后目录结构大概是这样mcp-demo/ ├── node_modules/ ├── package.json ├── server.js # 待写 └── claude_desktop_config.json # 待配package.json里记得加type: module因为 SDK 用的是 ESM 语法。改完长这样{ name: mcp-demo, version: 1.0.0, type: module, dependencies: { modelcontextprotocol/sdk: ^1.0.0 } }到这里前置就齐了Node 能跑、SDK 装好、TaoToken Key 拿到手。下一节开始写 Server 代码和配置文件。3. 可复制配置写一个最小 MCP Server 并接入 Claude Desktop先写 Server。新建server.js实现一个最简单的工具给定两个数字返回和。虽然功能简单但协议该有的部分一个不少你照着改就能扩展成读文件、查库。import { Server } from modelcontextprotocol/sdk/server/index.js; import { StdioServerTransport } from modelcontextprotocol/sdk/server/stdio.js; import { CallToolRequestSchema, ListToolsRequestSchema, } from modelcontextprotocol/sdk/types.js; const server new Server( { name: demo-server, version: 1.0.0 }, { capabilities: { tools: {} } } ); server.setRequestHandler(ListToolsRequestSchema, async () ({ tools: [ { name: add_numbers, description: 计算两个数字之和, inputSchema: { type: object, properties: { a: { type: number, description: 第一个数字 }, b: { type: number, description: 第二个数字 }, }, required: [a, b], }, }, ], })); server.setRequestHandler(CallToolRequestSchema, async (request) { if (request.params.name add_numbers) { const { a, b } request.params.arguments; return { content: [{ type: text, text: 结果是 ${a b} }], }; } throw new Error(未知工具: ${request.params.name}); }); const transport new StdioServerTransport(); await server.connect(transport);这段代码做了三件事声明 Server 能力、注册工具列表、处理调用请求。StdioServerTransport负责通过标准输入输出收发消息Claude Desktop 启动它之后就能通信。写完先本地跑一下确认不报错node server.js如果卡住不动是正常的因为它在等 stdin 输入。按 CtrlC 退出即可。要是报模块找不到检查package.json里的type: module有没有加。接下来配 Claude Desktop。配置文件位置macOS~/Library/Application Support/Claude/claude_desktop_config.jsonWindows%APPDATA%\Claude\claude_desktop_config.json打开没有就新建写入{ mcpServers: { demo-server: { command: node, args: [/绝对路径/mcp-demo/server.js] } } }注意args里必须是绝对路径相对路径 Claude Desktop 找不到。Windows 上路径写成C:\\Users\\you\\mcp-demo\\server.js这种双反斜杠格式。然后配模型通道。Claude Desktop 本身不直接暴露 base URL 设置需要通过环境变量或它支持的配置项把请求指到 TaoToken。在同一个配置文件里加上环境变量段{ mcpServers: { demo-server: { command: node, args: [/绝对路径/mcp-demo/server.js] } }, env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的TaoToken Key } }这里三件套要写全Base URL 是https://taotoken.net/apiKey 是你在控制台创建的那串Model ID 在对话时选claude-sonnet-4-5。三者缺一请求就会 401 或者连不上。保存配置后完全退出 Claude Desktop 再重启不是关窗口是彻底退出进程。重启后看输入框旁边有没有出现工具图标有就说明 Server 被拉起来了。4. 验证请求一次成功的工具调用日志长什么样配置完最重要的一步是验证链路真的通了。分两层验证先确认 MCP Server 被 Claude Desktop 识别再确认模型能通过 TaoToken 调用工具。第一层重启 Claude Desktop 后在对话里输入「用 add_numbers 算一下 3 加 5」。如果工具注册成功Claude 会弹出一个调用确认显示它要执行add_numbers参数是a3, b5。你点允许它就会把请求发给本地 Server。第二层看返回。正常情况下你会看到类似这样的结果工具调用: add_numbers 输入: { a: 3, b: 5 } 输出: 结果是 8同时本地 Server 的 stderr 会打印 JSON-RPC 消息。如果你想看得更清楚可以在server.js里加一行日志server.setRequestHandler(CallToolRequestSchema, async (request) { console.error(收到调用:, JSON.stringify(request.params)); // ...原有逻辑 });注意用console.error而不是console.log因为 stdout 被协议占用了往 stdout 打日志会破坏 JSON-RPC 消息导致连接断开。这是个高频坑。再验证模型通道。在对话里问一个需要模型推理的问题比如「帮我解释一下 MCP 协议的作用」。如果 TaoToken 通道正常你会收到模型返回的文本。如果这里报错说明是 API 通道问题不是 MCP 问题。一次完整的成功日志从 Claude Desktop 角度看是这样的流程用户提问 → 模型判断需要调工具 → Host 通过 stdio 发tools/call→ Server 执行并返回 → 模型拿到结果组织语言 → 返回给用户。任何一环断了表现都不一样工具不出现是配置问题工具出现但调用失败是 Server 逻辑问题模型不回复是 API 通道问题。想单独测 Server 而不经过 Claude Desktop可以用官方提供的 inspectornpx modelcontextprotocol/inspector node server.js它会起一个网页界面你能手动发tools/list和tools/call看到原始 JSON 往返。排查协议层问题时这个工具很好用。验证通过后你可以把add_numbers换成真实逻辑比如读文件import { readFile } from fs/promises; // 在 CallToolRequestSchema 里加分支 if (request.params.name read_file) { const { path } request.params.arguments; const content await readFile(path, utf-8); return { content: [{ type: text, text: content }] }; }记得在ListToolsRequestSchema里同步注册这个工具否则模型看不到它。5. 常见错误排查401、local proxy failed、reading choices 怎么解配 MCP 最容易卡在几个固定报错上我按出现频率排一下对照着查。401 Unauthorized模型通道的 Key 不对或没生效。检查ANTHROPIC_API_KEY是不是复制完整有没有多余空格。确认 Key 是在 https://taotoken.net/api-keys 创建的且没过期。如果 Key 没问题检查ANTHROPIC_BASE_URL是不是写成了https://taotoken.net/api少写/api或者多写/v1都会 401。local proxy failed / connection refusedClaude Desktop 启动 Server 失败。九成是args里的路径不对。用绝对路径Windows 注意双反斜杠。另一个原因是node不在系统 PATH 里Claude Desktop 找不到命令。解决办法是command写 node 的绝对路径比如/usr/local/bin/node。可以用which node查。reading choices of undefined这是响应格式不符合预期。通常是 base URL 指错了地方请求打到了不兼容的端点。确认地址是https://taotoken.net/api它兼容 Anthropic 的 messages 格式。如果你用的是 OpenAI 格式的客户端接口路径不一样别混用。工具列表为空Server 起来了但工具没注册。检查ListToolsRequestSchema的 handler 有没有正确返回tools数组。还有可能是 Server 启动时抛异常退出了去看 Claude Desktop 的日志。macOS 日志在~/Library/Logs/Claude/Windows 在%APPDATA%\Claude\logs\。OAuth 相关报错如果你接的是需要 OAuth 的远程 MCP Server本地 stdio 方式不涉及。但要是配置里混了远程 Server 的字段可能触发认证流程。本地开发阶段建议先只用 stdio把远程的配置注释掉。连接建立后立刻断开多半是往 stdout 打了非协议内容。检查所有console.log改成console.error。SDK 内部也用 stdout任何额外输出都会污染消息流。排查顺序建议这样走先确认node server.js能手动跑起来不报错再用 inspector 确认工具能列出和调用最后才去 Claude Desktop 里测。分层排查比一上来就盯着 Desktop 日志快得多。如果 401 和连接问题都排除了但模型还是不回复去 https://taotoken.net/api 的模型对话页面单独测一下 Key能返回就说明通道没问题问题在 Desktop 配置。这一步能把「通道问题」和「配置问题」彻底分开。6. 把链路用起来从 demo 到真实工具的下一步demo 跑通之后真正有价值的是把日常重复操作封装成 MCP 工具。比如你经常要查项目里的 TODO 注释可以写一个list_todos工具遍历指定目录返回所有含 TODO 的行。再比如你有个本地 SQLite 存着业务数据写个query_db工具让 Claude 直接查。写真实工具时注意几点输入参数用inputSchema描述清楚模型靠这个决定怎么传参返回内容尽量结构化纯文本也行但别太长超长内容模型处理起来慢涉及写操作的工具比如删文件、改数据最好在返回里带上「已执行」的确认信息方便你核对。如果你要做长期编码辅助或者 Agent 类应用单次调用按量计费可能不如包月划算可以看看 https://taotoken.net/coding-plan 的 Coding Plan适合高频使用的场景。接入文档在 https://taotoken.net/doc 里面有各语言的示例和接口说明扩展工具时对着查参数格式。Claude Code 那边也支持 MCP配置方式类似但它是通过claude mcp add命令注册或者改~/.claude/settings.json。如果你同时用 Desktop 和 Claude Code建议把 Server 路径和 Key 统一管理避免两处配置不一致。Anthropic 官方的 ClaudeCode 接入说明在 https://taotoken.net/claude-code-anthropic 里面有完整的 settings 片段。最后给个实用建议每加一个新工具先用 inspector 单独测通再进 Claude Desktop。这样出问题时你能立刻定位是工具逻辑还是集成配置。工具多了之后给每个工具写清楚 description模型选工具的准确率会明显提升。链路打通只是开始工具设计得好不好才决定这套东西好不好用。