news 2026/10/1 10:40:55

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你用 MCP 协议打通 AI 编程工具与本地服务:Claude Code + 蓝耘实战

1. 为什么 Claude Code 需要 MCP 才能碰到本地服务

Claude Code 本身是个很强的代码生成器,但它默认只能读写你当前项目目录里的文件,跑跑 shell 命令。一旦你想让它去查蓝耘上的模型推理结果、读本地某个服务的日志、或者调一个跑在 127.0.0.1 上的接口,它就抓瞎了。MCP(Model Context Protocol)就是补上这块短板的协议层,它把「本地服务能做什么」抽象成一组工具(tools)和资源(resources),Claude Code 作为客户端去消费这些能力。

我试过最直观的场景:你让 Claude Code 帮你写了个 FastAPI 接口,它写完了,你想让它自己 curl 一下验证返回。没有 MCP 的时候,你得手动复制命令去终端跑,再把报错贴回来。有了 MCP,Claude 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_KEY="sk-你的蓝耘key"

然后source ~/.zshrc让它生效。验证一下:

echo $LANYUN_API_KEY

能打印出 Key 就说明环境变量没问题。

TaoToken 这边,你需要去官网注册并生成 API Key。地址是https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=。注册后在控制台的 API Keys 页面生成 Key,同样存到环境变量:

export TAOTOKEN_API_KEY="sk-你的taotoken key"

TaoToken 的 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 的模型请求走 TaoToken,MCP 工具调用走本地服务端,两条链路分开。

如果你用的是 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_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的taotoken key"

这样无论 settings 读哪个字段,环境变量都能覆盖。

4. 验证 MCP 连通性与一次本地工具调用

配置写完了,怎么确认真的通了?分两步:先验证 MCP 服务端本身能跑,再验证 Claude Code 能调到它。

第一步,单独跑 MCP 服务端,看它能不能正常启动:

cd ~/mcp-lanyun LANYUN_API_KEY="sk-你的蓝耘key" node mcp-server.js

如果没有任何报错,光标停在那里,说明服务端在等 stdio 输入,这是正常的。按 Ctrl+C 退出。如果报Cannot find module,说明npm install没跑或者路径不对;如果报LANYUN_API_KEY is undefined,说明环境变量没传进去。

第二步,在 Claude Code 里发一条指令,让它调用lanyun_chat工具。启动 Claude Code:

cd 你的项目目录 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 到 TaoToken,OAuth 流程可能走不通,报OAuth token exchange failed或invalid_grant。修法:在 settings 里显式设置ANTHROPIC_API_KEY,让 Claude Code 走 API Key 认证而不是 OAuth。如果还是报 OAuth 错误,检查 Claude Code 版本,升级到最新版,或者在启动时加--api-key参数。有些版本需要设置CLAUDE_CODE_USE_API_KEY=true环境变量来强制走 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 的 settings,Codex 用的是auth.json。不管哪个工具,接入任何兼容端点都需要三件套:Base URL、API Key、Model ID。Base URL 填https://taotoken.net/api,API Key 填 TaoToken 的 Key,Model 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 服务端的日志默认走 stderr,Claude Code 不会显示。如果你想调试 MCP 服务端,在代码里用console.error打印日志,然后在启动 Claude Code 的终端里看 stderr 输出。这样能定位到具体是哪一步卡住了。

链路通了之后,你会发现 Claude Code 能做的事情多了一大截。以前它只能改代码,现在它能读日志、调接口、跑本地命令,真正变成一个能动手的编程助手。蓝耘的算力和模型通过 MCP 接进来,TaoToken 的端点让模型请求更灵活,两者配合起来,日常编码效率提升很明显。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 10:40:16

大模型协同生成可运行3D游戏:Unity工程级实践指南

1. 这不是“跑个Demo”:一次真实工程级3D游戏生成的全链路复现我上周在实验室里把三台机器并排摆开,一台装着刚拉下来的 Step 5 Preview 镜像,一台跑着 DeepSeek V4 Pro 的量化推理服务,第三台是本地编译的 GLM5.3 vLLM 0.6.4 镜…

作者头像 李华
网站建设 2026/10/1 10:38:51

U-Net+CBAM裂缝分割实战:从工地图像到像素级检测

简介:本资源是一套基于深度学习的裂缝检测技术完整实现方案,面向计算机、人工智能、土木工程及自动化等专业的在校学生、教师与初级工程师,适用于课程设计、毕业设计、科研入门与工程实践参考。压缩包共3个文件,含2个核心Python脚…

作者头像 李华
网站建设 2026/10/1 10:38:41

NLP端到端工程骨架:可复现、可部署的中文文本分类与对话实践

简介:这是一份面向NLP初学者与进阶学习者的综合性实践代码包,覆盖文本分类、对话机器人、Transformer架构实现、GPT语言模型微调、图神经网络(GNN)在NLP中的应用、对抗训练、摘要抽取、知识蒸馏、VAE文本生成及中文医疗问答等11大…

作者头像 李华
网站建设 2026/10/1 10:37:09

OpenCV+LBPH实现轻量级人脸考勤系统

简介:本资源是一套基于OpenCV与Python实现的轻量级人脸识别考勤系统源码,面向计算机专业本科生、人工智能初学者及课程设计实践者,解决高校课堂/实验室场景下传统考勤效率低、易代签、数据难统计等实际问题。压缩包共28个文件,含1…

作者头像 李华
网站建设 2026/10/1 10:36:52

QT与C++德州扑克源码实战:从洗牌算法到AI决策与避坑指南

简介:基于Qt与C开发的德州扑克游戏完整源码,面向计算机相关专业学生及开发者,适用于毕业设计、课程设计或项目练手。项目实现了从发牌、下注、牌型比较到AI自动决策的完整流程,并配有图形化界面,源码经过严格测试&…

作者头像 李华
网站建设 2026/10/1 10:36:50

Flask+dlib本地人脸识别考勤系统:从环境搭建到识别调优全链路

简介:本资源是一套基于Python、Flask与dlib实现的人脸识别企业考勤管理系统,面向计算机相关专业的毕业设计学生与课程设计学习者,可帮助解决考勤场景下的人脸检测、身份识别与打卡记录管理等核心问题。压缩包共416个文件,约103.71…

作者头像 李华