手把手教你用 MCP 协议打通 AI 编程工具与本地服务:Claude Code + 蓝耘实战

发布时间:2026/10/1 10:41:05
手把手教你用 MCP 协议打通 AI 编程工具与本地服务:Claude Code + 蓝耘实战 1. 为什么 Claude Code 需要 MCP 才能碰到本地服务Claude Code 本身是个很强的代码生成器但它默认只能读写你当前项目目录里的文件跑跑 shell 命令。一旦你想让它去查蓝耘上的模型推理结果、读本地某个服务的日志、或者调一个跑在 127.0.0.1 上的接口它就抓瞎了。MCPModel Context Protocol就是补上这块短板的协议层它把「本地服务能做什么」抽象成一组工具tools和资源resourcesClaude Code 作为客户端去消费这些能力。我试过最直观的场景你让 Claude Code 帮你写了个 FastAPI 接口它写完了你想让它自己 curl 一下验证返回。没有 MCP 的时候你得手动复制命令去终端跑再把报错贴回来。有了 MCPClaude Code 可以直接调用一个叫http_request的工具自己发请求、自己看响应、自己改代码。蓝耘在这里的角色是提供本地算力和模型服务你通过 MCP 把蓝耘的 API 封装成工具Claude Code 就能在对话里直接调用蓝耘的模型做推理而不是只能靠云端那个默认模型。适合谁看已经有蓝耘账号、本地装了 Node.js 和 Claude Code、想让 AI 编程工具直接调用本地算力或本地服务的开发者。如果你还没装 Claude Code下面会带一句安装命令但重点在 MCP 配置和连通性验证。核心检索词先摆出来MCP 协议、Claude Code、蓝耘、AI 编程工具、本地服务。这四个词贯穿全文你搜到这篇大概率就是卡在「怎么把本地服务接进 Claude Code」这一步。先说清楚一个常见误解MCP 不是让 Claude Code 变成万能遥控器它只是定义了一套 JSON-RPC 的通信格式。服务端暴露什么能力客户端才能用什么能力。所以你得先写一个 MCP 服务端把蓝耘的 API 或者本地服务包装成工具然后在 Claude Code 的 settings 里注册这个服务端。两步缺一不可。另外Claude Code 默认走的是 Anthropic 的 API 端点。如果你想把模型请求也切到 TaoToken 这类兼容端点需要在环境变量或 settings 里改 Base URL。这一步和 MCP 配置是独立的但经常一起出现因为很多人既想用 MCP 调本地工具又想用更灵活的 API 端点跑模型。下面会分开讲避免混在一起排障时抓瞎。2. TaoToken 前置准备与蓝耘 API Key 获取在写 MCP 服务端之前先把两个 Key 准备好蓝耘的 API Key 和 TaoToken 的 API Key。蓝耘的 Key 用来让 MCP 服务端能调蓝耘的模型或算力接口TaoToken 的 Key 用来让 Claude Code 的模型请求走 TaoToken 的兼容端点。两者用途不同别搞混。蓝耘 API Key 的获取路径登录蓝耘控制台找到 API Key 管理页面生成一个 Key。这个 Key 通常是一串以sk-开头的字符串。把它存到环境变量里别硬编码在代码里。比如在~/.zshrc或~/.bashrc里加一行export LANYUN_API_KEYsk-你的蓝耘key然后source ~/.zshrc让它生效。验证一下echo $LANYUN_API_KEY能打印出 Key 就说明环境变量没问题。TaoToken 这边你需要去官网注册并生成 API Key。地址是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。注册后在控制台的 API Keys 页面生成 Key同样存到环境变量export TAOTOKEN_API_KEYsk-你的taotoken keyTaoToken 的 API 端点基础地址是https://taotoken.net/api这个后面配置 Claude Code 的 Base URL 时会用到。注意这个地址不带 UTM 参数直接写进配置里就行。Node.js 版本确认一下MCP SDK 要求 v18 以上node -v npm -v如果低于 18去 Node.js 官网下个 LTS 版本装上。Claude Code 的安装命令是一行npm install -g anthropic-ai/claude-code装完后claude --version能打印版本号就 OK。这里插一句关于 TaoToken 的定位它提供的是 OpenAI 兼容的 API 端点所以 Claude Code 里改 Base URL 的时候格式和改 OpenAI 端点类似。但 Claude Code 本身是 Anthropic 系的工具它的配置字段名可能和纯 OpenAI 客户端不一样下面会给出具体的 settings 片段。还有一个前置检查确认你的本地服务或蓝耘接口能通。比如蓝耘的 API 端点你可以先用 curl 测一下curl -X POST https://api.lanyun.net/v1/chat/completions \ -H Authorization: Bearer $LANYUN_API_KEY \ -H Content-Type: application/json \ -d {model:你的模型ID,messages:[{role:user,content:ping}]}如果返回 401说明 Key 不对如果返回 404说明端点路径不对如果返回 200 但内容为空检查模型 ID。这一步别跳过否则后面 MCP 调不通你会以为是 MCP 配置问题其实是 Key 或端点错了。TaoToken 的 Key 也测一下curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:gpt-4o-mini,messages:[{role:user,content:ping}]}能返回 choices 数组就说明 Key 和端点都通。这两个 curl 测试是后面排障的基线记住它们。3. 可复制的 MCP 服务端与 Claude Code settings 配置这一节是全文的核心所有配置片段都可以直接复制。先建一个目录放 MCP 服务端代码mkdir -p ~/mcp-lanyun cd ~/mcp-lanyun npm init -y npm install modelcontextprotocol/sdk然后创建mcp-server.js内容如下。这个服务端暴露两个工具lanyun_chat用来调蓝耘的模型接口read_local_file用来读本地文件演示本地服务能力。import { Server } from modelcontextprotocol/sdk/server/index.js; import { StdioServerTransport } from modelcontextprotocol/sdk/server/stdio.js; const server new Server( { name: lanyun-mcp-server, version: 1.0.0 }, { capabilities: { tools: {} } } ); server.setRequestHandler(tools/list, async () ({ tools: [ { name: lanyun_chat, description: 调用蓝耘模型接口进行对话, inputSchema: { type: object, properties: { prompt: { type: string, description: 用户输入 } }, required: [prompt] } }, { name: read_local_file, description: 读取本地文件内容, inputSchema: { type: object, properties: { path: { type: string, description: 文件绝对路径 } }, required: [path] } } ] })); server.setRequestHandler(tools/call, async (request) { const { name, arguments: args } request.params; if (name lanyun_chat) { const resp await fetch(https://api.lanyun.net/v1/chat/completions, { method: POST, headers: { Authorization: Bearer ${process.env.LANYUN_API_KEY}, Content-Type: application/json }, body: JSON.stringify({ model: 你的蓝耘模型ID, messages: [{ role: user, content: args.prompt }] }) }); const data await resp.json(); return { content: [{ type: text, text: JSON.stringify(data.choices?.[0]?.message ?? data) }] }; } if (name read_local_file) { const fs await import(fs/promises); const content await fs.readFile(args.path, utf-8); return { content: [{ type: text, text: content }] }; } throw new Error(Unknown tool: ${name}); }); const transport new StdioServerTransport(); await server.connect(transport);注意model字段要换成你蓝耘控制台里实际的模型 ID别照抄。LANYUN_API_KEY从环境变量读所以启动这个服务端之前要确保环境变量已经 export。接下来配置 Claude Code。在项目根目录创建.claude/settings.json内容如下{ mcpServers: { lanyun-local: { command: node, args: [/Users/你的用户名/mcp-lanyun/mcp-server.js], env: { LANYUN_API_KEY: sk-你的蓝耘key } } }, env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的taotoken key } }这里有两个关键点。第一mcpServers里的args必须写绝对路径相对路径在 Claude Code 启动时的工作目录不确定容易找不到文件。第二env里的ANTHROPIC_BASE_URL改成 TaoToken 的 API 地址ANTHROPIC_API_KEY填 TaoToken 的 Key。这样 Claude Code 的模型请求走 TaoTokenMCP 工具调用走本地服务端两条链路分开。如果你用的是 Claude Code 的全局配置而不是项目级配置路径在~/.claude/settings.json字段结构一样。项目级配置优先级更高建议先用项目级测试。配置写完后重启 Claude Code。在项目目录下运行claude然后输入/mcp命令应该能看到lanyun-local这个服务端的状态是 connected。如果显示 failed看下一节的排障。还有一个细节Claude Code 的 settings 里env字段的ANTHROPIC_BASE_URL是否生效取决于你用的 Claude Code 版本。有些版本读的是ANTHROPIC_BASE_URL有些读的是ANTHROPIC_API_BASE。如果改完发现模型请求还是走默认端点检查一下版本或者直接在 shell 里 export 这两个变量做兜底export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的taotoken key这样无论 settings 读哪个字段环境变量都能覆盖。4. 验证 MCP 连通性与一次本地工具调用配置写完了怎么确认真的通了分两步先验证 MCP 服务端本身能跑再验证 Claude Code 能调到它。第一步单独跑 MCP 服务端看它能不能正常启动cd ~/mcp-lanyun LANYUN_API_KEYsk-你的蓝耘key node mcp-server.js如果没有任何报错光标停在那里说明服务端在等 stdio 输入这是正常的。按 CtrlC 退出。如果报Cannot find module说明npm install没跑或者路径不对如果报LANYUN_API_KEY is undefined说明环境变量没传进去。第二步在 Claude Code 里发一条指令让它调用lanyun_chat工具。启动 Claude Codecd 你的项目目录 claude然后在对话里输入请调用 lanyun_chat 工具prompt 参数填 用一句话解释什么是 MCP 协议Claude Code 应该会弹出一个工具调用确认你按回车允许。如果一切正常它会返回蓝耘模型的回复。这个过程你能看到 Claude Code 的界面上显示Calling tool: lanyun_chat然后返回结果。如果这一步成功了说明 MCP 链路通了。再测一下read_local_file请调用 read_local_file 工具读取 /etc/hosts 文件的前几行这个工具读的是本地文件验证的是 MCP 服务端对本地环境的访问能力。如果返回了 hosts 文件内容说明本地服务能力也通了。第三步验证 TaoToken 的模型请求。在 Claude Code 里直接问一个普通问题比如「写一个 Python 的快速排序」然后看它的响应。如果响应正常说明ANTHROPIC_BASE_URL改到 TaoToken 生效了。你可以通过查看 TaoToken 控制台的用量记录来确认请求确实走了 TaoToken而不是默认端点。这里有个实测细节Claude Code 在调用 MCP 工具时可能会同时发起模型请求和工具请求。如果 TaoToken 的并发限制比较严可能会看到工具调用成功但模型回复延迟。这时候检查 TaoToken 控制台的并发设置或者把 MCP 工具调用和模型请求错开测试。成功的结果长这样Claude Code 界面上先显示工具调用然后显示工具返回的文本最后模型基于工具返回的内容继续对话。整个链路是你的输入 → Claude Code → MCP 服务端 → 蓝耘 API → 返回 → Claude Code → 显示给你。中间任何一环断了都会在界面上看到对应的错误。如果lanyun_chat返回的是{error: invalid api key}说明蓝耘 Key 不对如果返回{error: model not found}说明模型 ID 写错了如果 Claude Code 显示MCP server lanyun-local failed to start说明args路径不对或者 Node.js 版本太低。5. 常见报错排查401、local proxy failed、reading choices、OAuth这一节按真实报错来每个报错给出原因和修法。401 Unauthorized最常见。出现在两个地方。一是 MCP 服务端调蓝耘时返回 401说明LANYUN_API_KEY不对或没传进服务端。检查.claude/settings.json里mcpServers.lanyun-local.env.LANYUN_API_KEY是否填了正确的 Key或者 shell 里有没有 export。二是 Claude Code 调 TaoToken 时返回 401说明ANTHROPIC_API_KEY不对。检查 settings 里的env.ANTHROPIC_API_KEY或者 shell 里的TAOTOKEN_API_KEY。注意 TaoToken 的 Key 和蓝耘的 Key 是两套别混用。local proxy failed这个报错通常出现在 Claude Code 启动时提示无法连接到本地代理或 MCP 服务端。原因一般是mcpServers里的command或args路径不对。比如你写了command: node但系统 PATH 里 node 不在默认位置或者args用了相对路径。修法把command改成 node 的绝对路径用which node查args改成 MCP 服务端 JS 文件的绝对路径。另外检查 MCP 服务端有没有语法错误单独跑一次node mcp-server.js看能不能启动。reading choices 报错这个报错一般出现在模型返回的 JSON 结构不符合预期时。比如你调蓝耘接口返回的不是标准的choices数组而 MCP 服务端代码里写了data.choices[0]就会报Cannot read properties of undefined (reading choices)。修法在 MCP 服务端里加一层判断先打印data看实际返回结构再决定取哪个字段。蓝耘的接口如果和 OpenAI 不完全兼容字段名可能不一样。另外 TaoToken 返回的也是 OpenAI 兼容格式如果 Claude Code 报 reading choices检查 TaoToken 的响应是否被中间层改过。OAuth 相关报错Claude Code 某些版本会尝试 OAuth 登录如果你改了 Base URL 到 TaoTokenOAuth 流程可能走不通报OAuth token exchange failed或invalid_grant。修法在 settings 里显式设置ANTHROPIC_API_KEY让 Claude Code 走 API Key 认证而不是 OAuth。如果还是报 OAuth 错误检查 Claude Code 版本升级到最新版或者在启动时加--api-key参数。有些版本需要设置CLAUDE_CODE_USE_API_KEYtrue环境变量来强制走 Key 认证。MCP 工具调用无响应Claude Code 显示调用了工具但一直卡住不返回。原因可能是 MCP 服务端里的 fetch 请求超时或者蓝耘接口响应太慢。修法在 MCP 服务端的 fetch 里加AbortController设置超时比如 30 秒。另外检查蓝耘接口的延迟如果延迟太高考虑换模型或换端点。settings.json 不生效改完配置重启 Claude Code 后/mcp里看不到服务端。检查文件路径是不是.claude/settings.json项目根目录下而不是settings.json放在别处。另外 JSON 格式必须严格多一个逗号都会导致解析失败。用cat .claude/settings.json | python -m json.tool验证 JSON 合法性。CC Switch / Cline MCP / Codex auth.json 三件套如果你同时用多个 AI 编程工具注意每个工具的配置格式不一样。CC Switch 用的是自己的配置文件Cline MCP 用的是 VS Code 的 settingsCodex 用的是auth.json。不管哪个工具接入任何兼容端点都需要三件套Base URL、API Key、Model ID。Base URL 填https://taotoken.net/apiAPI Key 填 TaoToken 的 KeyModel ID 填你要用的模型名。这三个字段缺一不可少一个就会报认证或模型找不到的错误。排障的通用思路先单独测蓝耘接口curl再单独测 TaoToken 接口curl再单独跑 MCP 服务端node最后在 Claude Code 里测。逐层排除别一上来就怀疑 Claude Code 本身。6. 把 MCP 链路用起来从验证到日常编码连通性验证通过后日常怎么用最直接的方式是把 MCP 工具当成 Claude Code 的扩展能力。比如你让 Claude Code 写一个调用蓝耘模型的函数写完直接让它用lanyun_chat工具测一下返回不用你手动复制代码去跑。再比如你本地有个日志文件以前你得手动tail -f看现在可以让 Claude Code 调read_local_file读日志然后让它分析报错。整个过程在编辑器里完成不用切终端。如果你想让 MCP 服务端支持更多本地服务比如查数据库、调本地 HTTP 接口照着mcp-server.js里的tools/list和tools/call加就行。每加一个工具在tools/list里声明 schema在tools/call里实现逻辑。Claude Code 会自动发现新工具不用改 Claude Code 的配置。关于 TaoToken 的 Coding Plan如果你长期用 Claude Code 做编码和 Agent 任务可以了解一下它的套餐比按量计费更适合高频使用。模型对话功能可以用来单独验证模型响应API Keys 页面管理你的 Key接入文档里有更详细的端点说明。这些入口在 TaoToken 控制台都能找到。最后说一个实用技巧MCP 服务端的日志默认走 stderrClaude Code 不会显示。如果你想调试 MCP 服务端在代码里用console.error打印日志然后在启动 Claude Code 的终端里看 stderr 输出。这样能定位到具体是哪一步卡住了。链路通了之后你会发现 Claude Code 能做的事情多了一大截。以前它只能改代码现在它能读日志、调接口、跑本地命令真正变成一个能动手的编程助手。蓝耘的算力和模型通过 MCP 接进来TaoToken 的端点让模型请求更灵活两者配合起来日常编码效率提升很明显。