
1. 为什么你的 Claude Code 需要一个 MCP 服务器MCP 全称 Model Context Protocol中文叫模型上下文协议。你可以把它理解成 Claude Code 的“外设接口标准”Claude Code 本身是个很聪明的大脑但它默认只能读写你项目里的文件、跑跑终端命令。一旦你想让它查数据库、读 GitHub Issue、调内部 API它就没手没脚了。MCP 就是给这个大脑接上眼睛和手脚的协议——只要某个工具按 MCP 标准暴露自己的能力Claude Code 就能直接调用它。这篇聚焦的是 MCP 协议在 Claude Code 里的落地路径重点对比 stdio 和 SSE 两种传输方式在本地与远程场景下的配置差异。stdio 适合本地进程Claude Code 直接 fork 一个子进程通过标准输入输出通信延迟低、无需网络SSE 适合远程服务Claude Code 通过 HTTP 长连接接收服务器推送的事件天然支持多客户端和 OAuth 鉴权。搞不清这两者的适用边界是很多人配 MCP 时反复踩坑的根源。适合谁看已经在用 Claude Code、想接入第一个 MCP server 的开发者或者手里有远程 MCP 服务、不知道怎么在 Claude Code 侧配置的人。下面我会给出可复制的配置片段、完整的接入步骤以及一次工具调用的验证流程。为了让远程调用稳定我会用 TaoToken 作为 API 接入层来演示它的 Base URL 和 Key 管理方式对 MCP 场景比较友好。先说结论本地工具用 stdio远程服务用 SSE 或 streamable HTTP作用域按“个人实验用 local、团队共享用 project、跨项目常用用 user”来选。这三条定下来后面基本不会乱。2. TaoToken 前置准备与 MCP 环境搭建在配置 MCP 之前得先把 Claude Code 的模型调用链路准备好。Claude Code 默认走 Anthropic 官方接口但如果你想让 MCP 工具调用和模型推理都走同一个可控的接入层可以先把 Base URL 和 Key 配好。TaoToken 提供的就是这一层一个兼容 Anthropic 接口规范的接入地址配合 API Key 使用。第一步拿到 API Key。访问 https://taotoken.net/api-keys 创建密钥复制出来先存好。注意这个 Key 只在创建时完整显示一次丢了就得重建。第二步配置 Claude Code 的接入信息。Claude Code 读取环境变量的方式比较直接你可以在 shell 里 export也可以写进项目级的配置文件。我习惯用环境变量干净export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的key如果你用的是 Claude Code 的 settings 文件可以写成 JSON{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的key } }第三步确认 Claude Code 能正常对话。跑一句claude -p say hi能返回内容就说明模型链路通了。这一步不通后面 MCP 配了也白搭因为工具调用结果最终还是要送回模型处理。第四步检查 MCP 相关命令是否可用。Claude Code 内置了claude mcp子命令直接跑claude mcp --help看输出。如果提示命令不存在说明你的 Claude Code 版本太旧升级一下。这里有个容易忽略的点MCP server 本身可能也需要访问外部 API比如你接一个天气 MCP它内部要调天气服务。这种情况下MCP server 自己的环境变量和 Claude Code 的模型接入是两套东西别混在一起。claude mcp add里的-e参数是传给 MCP server 进程的不是给 Claude Code 用的。环境搭好后建议先跑一次claude mcp list此时应该是空的。空列表是正常的说明还没有配置任何 server。接下来我们就从 stdio 开始配第一个。3. stdio 与 SSE 的可复制配置片段这一节是核心直接给可复制的配置。先讲 stdio再讲 SSE最后给一个 JSON 配置的完整示例。stdio 服务器的添加语法是claude mcp add name command [args...]。假设你有一个本地的 MCP server 可执行文件在/opt/mcp/weather-server需要传入 API Key 和缓存目录claude mcp add weather-local \ -e WEATHER_API_KEYabc123 \ -e CACHE_DIR/tmp/mcp-cache \ -- /opt/mcp/weather-server --verbose注意--后面的内容全部是传给 server 进程的命令和参数-e是环境变量。stdio 模式下Claude Code 会 fork 这个进程通过 stdin/stdout 收发 JSON-RPC 消息。你不需要指定端口也不需要网络。SSE 服务器的语法是claude mcp add --transport sse name url。假设远程有一个 MCP 服务在https://mcp.example.com/sse需要自定义请求头claude mcp add --transport sse remote-tools \ https://mcp.example.com/sse \ -e X-API-Keyyour-remote-keySSE 模式下Claude Code 作为客户端发起 HTTP 连接服务器通过 event stream 推送消息。如果服务器需要 OAuth先不加 Key添加后用/mcp命令走鉴权流程。还有一种 streamable HTTP语法是claude mcp add --transport http name url适合支持流式 HTTP 的远程服务claude mcp add --transport http http-tools \ https://api.example.com/mcp \ -e AuthorizationBearer your-token如果你更喜欢用 JSON 一次性配置claude mcp add-json可以直接吃一个 JSON 对象claude mcp add-json weather-api \ {type:stdio,command:/opt/mcp/weather-server,args:[--api-key,abc123],env:{CACHE_DIR:/tmp}}项目级共享则写进.mcp.json放在项目根目录{ mcpServers: { shared-tools: { command: /opt/mcp/shared-server, args: [], env: { API_KEY: team-key } }, remote-sse: { type: sse, url: https://mcp.example.com/sse, env: { X-API-Key: remote-key } } } }作用域用-s指定local是默认只对当前项目当前用户可见project写进.mcp.json可提交到版本库user跨所有项目可用。团队协作选 project个人常用工具选 user敏感凭据选 local。配置完跑claude mcp list应该能看到 server 名称和状态。如果状态是 failed先看下一节的排查。4. 验证一次完整的 MCP 工具调用配好不等于能用得实际跑一次工具调用。我用一个本地 stdio 的 echo server 来演示逻辑简单方便你对照。假设 server 暴露了一个echo工具接收message参数并原样返回。添加claude mcp add echo-server -- /opt/mcp/echo-server然后在 Claude Code 交互模式里输入 用 echo 工具把 hello mcp 返回给我Claude Code 会先识别到有可用工具然后发起工具调用。你会在终端看到类似这样的过程模型输出一个 tool_use 块Claude Code 把请求转发给 echo-serverserver 返回结果Claude Code 再把结果塞回对话。最终输出应该是hello mcp。如果你想在非交互模式验证可以用-p加--allowedToolsclaude -p call echo tool with message test \ --allowedTools mcp__echo-server__echo注意工具名的格式是mcp__server名__工具名中间是双下划线。这个命名规则在配置权限白名单时必须严格匹配写错了工具就不会被调用。对于 SSE 远程 server验证方式一样只是底层走网络。你可以先用 curl 确认 SSE 端点活着curl -N https://mcp.example.com/sse如果能看到event: endpoint之类的推送说明服务端正常。然后在 Claude Code 里用/mcp命令查看连接状态状态显示 connected 再发起调用。验证成功的标志有三个claude mcp list显示 connected/mcp菜单里能看到 server 暴露的工具列表实际调用返回了预期结果。三个都满足才算真正跑通。如果工具调用返回了结果但模型没继续处理通常是模型接入层的问题检查一下 Base URL 和 Key 是否生效。TaoToken 的接入文档里有针对 Claude Code 的配置说明可以对照排查。5. 常见报错排查401、local proxy failed 与 OAuth配 MCP 时遇到的报错就那么几类逐个说。401 Unauthorized。这个最常见分两种来源。一种是模型接入层的 401说明ANTHROPIC_API_KEY无效或过期重新在 https://taotoken.net/api-keys 生成一个换上。另一种是 MCP server 自己的 401比如 SSE 远程服务需要X-API-Key你-e传的 Key 不对。区分方法看报错发生在工具调用前还是调用中。调用前就是模型层调用中就是 server 层。local proxy failed / connection refused。stdio server 启动失败时常见。原因通常是命令路径写错、可执行文件没有执行权限、或者 server 进程启动就崩了。先手动跑一遍 server 命令看它能不能独立启动/opt/mcp/weather-server --verbose如果手动跑也报错那就是 server 本身的问题跟 Claude Code 无关。如果手动能跑但 Claude Code 里失败检查claude mcp get name输出的 command 和 args 是否和你预期一致。另外MCP_TIMEOUT默认可能偏短启动慢的 server 可以设长一点MCP_TIMEOUT10000 claudereading choices 相关报错。这类通常出现在模型返回格式异常时比如接入层返回的响应结构不符合 Anthropic 规范。检查 Base URL 是否写成了带多余路径的形式正确写法是https://taotoken.net/api不要在后面加/v1之类。如果用的是第三方客户端确认它请求的是 messages 接口。OAuth 鉴权失败。SSE 或 HTTP 远程 server 需要 OAuth 时添加 server 后要在 Claude Code 里跑/mcp选对应 server 的 authenticate。浏览器会自动打开授权页完成后 token 会被安全存储。如果浏览器没弹出来手动复制终端里给的 URL。授权后如果还是连不上在/mcp里选 clear authentication 清掉重来。注意 OAuth 只对 SSE 和 HTTP 传输有效stdio 不走这套。工具名不匹配。权限白名单里写mcp__server__tool但实际工具名大小写或下划线不对会导致工具被静默跳过。用/mcp菜单看准确的工具名复制粘贴别手打。排查顺序建议先确认模型链路通能正常对话再确认 server 进程能独立启动最后确认 Claude Code 侧配置和实际一致。三层逐层排除比瞎改配置快得多。6. 把 MCP 接入固定成你的日常流程跑通第一个 MCP 之后建议把配置固定下来别每次重配。我的做法是个人常用工具放 user 作用域团队共享的放 project 作用域的.mcp.json并提交版本库带敏感 Key 的实验性 server 放 local。模型接入层用环境变量统一管理Base URL 固定为https://taotoken.net/apiKey 从 https://taotoken.net/api-keys 生成后写进 shell 配置或项目的 settings 文件。这样换项目时只需要改 MCP 配置模型链路不用动。如果你要长期跑编码类 Agent 任务可以考虑用 Coding Plan 把调用额度固定下来避免临时 Key 过期打断工作流。接入文档在 https://taotoken.net/doc 有完整说明模型对话调试可以用 https://taotoken.net/chat 快速验证。最后一个实用技巧每次加完新 server先跑claude mcp get name确认配置再用/mcp看连接状态最后发一个最小工具调用验证。三步走完再投入实际使用能省掉大量“配了但没生效”的困惑。