MCP (Model Context Protocol) 技术理解:从 JSON-RPC 到 Agentic AI 的配置骨架

发布时间:2026/10/2 6:16:26
MCP (Model Context Protocol) 技术理解:从 JSON-RPC 到 Agentic AI 的配置骨架 1. 从一次 Agent 工具接入的返工说起MCP 到底解决了什么如果你正在做 Agentic AI 相关的开发大概率遇到过这样的场景给 Agent 接一个查数据库的工具写一套 schema接一个读文件的工具再写一套换个模型供应商schema 格式又得改一遍。工具描述全塞进 system prompttoken 消耗肉眼可见地涨长对话到后面模型开始忘记工具怎么调。这不是你代码写得不好而是传统 Function Calling 的集成方式本身就存在碎片化问题。MCPModel Context Protocol就是冲着这个问题来的。它是 Anthropic 在 2024 年 11 月开源的一套通信协议核心目标是让大模型以标准化、安全、可插拔的方式访问外部数据、工具和服务。你可以把它理解成AI 应用的 USB-C 接口——以前每个设备一个充电口现在统一成一个标准谁都能插。它标准化了三类能力。Resources 是只读资源比如本地文件、API 返回的 JSON、数据库查询结果通常不需要用户批准。Tools 是可执行函数带参数和返回值比如调天气 API、发邮件、创建工单这类通常需要用户确认。Prompts 是预定义的提示模板或工作流 SOP比如生成周报模板代码审查 checklist不需要批准。架构上是典型的 client-server 模型。MCP Client 是 AI 应用宿主比如 Claude Desktop、Cursor、你自己写的 Agent 框架MCP Server 是暴露能力的后端可以在本地、云端或企业内网两者之间用 JSON-RPC 风格通信WebSocket 为主支持 streaming也有 HTTP fallback。Client 通过 URL 连接 ServerServer 返回 capability manifest告诉 Client 自己支持哪些 resources、tools、prompts。和传统 Function Calling 比MCP 的优势在几个维度上比较明显。标准化程度上传统方式每个模型自己定义 schemaMCP 是统一协议跨模型兼容。上下文占用上传统方式工具描述全塞 promptMCP 支持动态加载只在需要时拉取详细 schema。连接方式上传统方式走模型厂商中转MCP 直连 Server企业内网场景延迟优势明显。安全性上MCP 有 Server 端控制加 human-in-the-loop 批准粒度更细。资源类型上MCP 是 Resources Tools Prompts 三合一比单纯的 function 丰富。这篇文章不会停留在概念层面。我会带你走一遍从协议理解到可运行配置的完整路径交付可复制的 MCP 客户端配置骨架包含 settings.json 和 config.toml 示例最后做一次本地连通性验证。适合正在做 Agent 工具接入、想搞清楚 MCP 配置结构、或者被 JSON-RPC 报错卡住的开发者。2. TaoToken 前置准备MCP 客户端接入的 Key 与 Base URL 配置在写 MCP 配置之前先把模型侧的接入信息准备好。MCP 本身是工具协议但 Client 最终还是要调用 LLM 来决策该调哪个工具所以你需要一个能用的模型 API 端点。这里以 TaoToken 为例说明配置方式它的 API 地址是 https://taotoken.net/api兼容 OpenAI 风格的接口调用。先拿 Key。打开 https://taotoken.net/api-keys 登录后创建一个新的 API Key。建议按项目或环境分开建 Key比如 dev 一个、prod 一个方便后续排查问题时定位是哪个环境在调。Key 创建后只显示一次复制到安全的地方后面配置里要用。拿到 Key 之后你需要确认两件事Base URL 和 Model ID。Base URL 就是 https://taotoken.net/api 注意不要在后面多加/v1之类的路径具体路径由 SDK 或客户端自己拼接。Model ID 取决于你想用哪个模型在控制台或文档里能看到可用列表。这两个信息加上 Key就是 MCP 客户端配置里的三件套。如果你用的是 Claude Code 这类工具它有自己的配置文件格式。Claude Code 的配置通常在~/.claude/settings.json或项目级的.claude/settings.json。里面需要填 Base URL、API Key 和 Model ID。有些版本还支持ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY环境变量配置优先级上环境变量会覆盖文件配置排查问题时要注意这一点。对于 Cline、Roo Code 这类 VS Code 插件配置入口在插件的设置面板里通常有 API Provider 下拉框选 OpenAI Compatible 或类似选项然后填 Base URL、API Key、Model ID。Cline 还支持 MCP Servers 的配置在设置里能找到 MCP Servers 区域点 Configure MCP Servers 会打开一个 JSON 文件这就是我们下一节要重点讲的配置骨架。如果你打算长期跑编码类 Agent 任务可以了解一下 Coding Plan 的额度方式地址是 https://taotoken.net/coding-plan 。它适合那种需要持续调用模型、跑长任务的场景比按次计费更可控。不过这一节的重点是把 Key 和 Base URL 准备好下一节直接进配置文件。有一点要提醒MCP Server 的配置和模型 API 的配置是两套东西。模型 API 配置告诉 Client 去哪里调 LLMMCP Server 配置告诉 Client 有哪些工具可以用。两者在同一个配置文件里但属于不同区块改的时候别混在一起。我见过有人把 MCP Server 的 URL 填到了模型 Base URL 里结果一直报连接错误排查半天才发现是填错位置了。3. 可复制配置骨架settings.json 与 config.toml 的 MCP 接入写法这一节是全文的核心直接给可复制的配置片段。MCP 客户端的配置格式因工具而异但结构上大同小异一个 mcpServers 对象里面每个 key 是一个 Server 的名字value 是这个 Server 的启动方式或连接信息。先看 Claude Desktop 和 Cline 常用的settings.json格式。这个文件在 Claude Desktop 里通常是~/Library/Application Support/Claude/claude_desktop_config.jsonmacOS或%APPDATA%\Claude\claude_desktop_config.jsonWindows。Cline 的话在 VS Code 的设置里点开 MCP 配置编辑的是类似的 JSON。{ mcpServers: { filesystem: { command: npx, args: [ -y, modelcontextprotocol/server-filesystem, /Users/yourname/projects ] }, fetch: { command: uvx, args: [mcp-server-fetch] }, my-custom-server: { command: node, args: [/path/to/your/mcp-server/build/index.js], env: { API_KEY: your-server-api-key } } } }这段配置里mcpServers是固定字段。filesystem是一个 Server 的名字你可以随便起但建议见名知意。command是启动命令args是参数数组。env是传给 Server 进程的环境变量敏感信息放这里比硬编码在 args 里好。注意npx和uvx的区别npx跑 Node.js 包uvx跑 Python 包。如果你的机器上没有对应的运行时命令会直接失败。建议先在终端里手动跑一遍npx -y modelcontextprotocol/server-filesystem /tmp看看能不能起来能起来再写进配置。再看config.toml格式。有些工具比如某些 Rust 写的 Agent 框架或者自研 Client 会用 TOML。结构上等价只是语法不同。[mcp_servers.filesystem] command npx args [-y, modelcontextprotocol/server-filesystem, /Users/yourname/projects] [mcp_servers.fetch] command uvx args [mcp-server-fetch] [mcp_servers.my_custom_server] command node args [/path/to/your/mcp-server/build/index.js] [mcp_servers.my_custom_server.env] API_KEY your-server-api-keyTOML 里用[mcp_servers.名字]开一个表env用[mcp_servers.名字.env]再开一个子表。数组用方括号字符串用双引号。注意 TOML 里布尔值是小写true/false和 JSON 一样但日期时间格式不同MCP 配置里一般用不到。如果你用的是 Claude Code它的 MCP 配置在~/.claude.json或项目级的.mcp.json里。格式和上面的settings.json类似但字段名可能略有差异。Claude Code 还支持claude mcp add命令来添加 Server比如claude mcp add filesystem npx -y modelcontextprotocol/server-filesystem /Users/yourname/projects这条命令会自动帮你写进配置文件。不过自动写入的格式有时候和手动编辑的不完全一样排查问题时建议直接看配置文件原文。对于 Codex 这类工具配置可能在auth.json或类似的认证文件里。Codex 的 MCP 支持相对新配置结构上也是mcpServers对象但字段名可能是mcp_servers或mcp具体看版本。如果你在 Codex 里配 MCP建议先查一下当前版本的文档因为这块变动比较频繁。配置写完之后有一个容易踩的坑路径问题。args里的路径如果是相对路径解析的基准目录取决于 Client 的工作目录不同工具行为不一样。建议一律用绝对路径省得排查。另外 Windows 上路径要用双反斜杠\\或正斜杠/JSON 里反斜杠是转义字符写C:\Users会报错要写C:\\Users或C:/Users。还有一个坑是命令的可用性。npx和uvx需要对应的运行时在 PATH 里。如果你用的是 nvm 管理的 NodeGUI 应用比如 Claude Desktop可能读不到 nvm 的环境变量导致npx找不到。解决办法是在command里写npx的绝对路径比如/Users/yourname/.nvm/versions/node/v20.0.0/bin/npx。这个坑很常见后面排障章节会再展开。4. 本地连通性验证从 JSON-RPC 握手到工具列表返回配置写好了怎么确认 MCP Server 真的连上了这一节给你一套可操作的验证流程从进程启动到 JSON-RPC 握手再到工具列表返回一步步看结果。第一步先单独启动 Server 进程确认它能跑起来。以 filesystem Server 为例npx -y modelcontextprotocol/server-filesystem /tmp如果这条命令能正常启动并保持运行不报错退出说明 Server 本身没问题。如果报command not found是 npx 不在 PATH如果报模块找不到是包名写错了如果报权限错误是路径不可读。这一步先把 Server 单独跑通再进 Client 配置。第二步用 MCP Inspector 做协议级验证。MCP Inspector 是官方提供的调试工具能直接和 Server 做 JSON-RPC 交互看到完整的请求和响应。npx modelcontextprotocol/inspector npx -y modelcontextprotocol/server-filesystem /tmp这条命令会启动一个本地 Web 界面默认在http://localhost:5173。打开后你能看到 Server 的 capabilities包括支持哪些 tools、resources、prompts。点 List Tools 会发一个tools/list的 JSON-RPC 请求返回工具列表。点某个工具再填参数会发tools/call请求返回执行结果。这一步的价值在于它把 MCP 的 JSON-RPC 通信过程可视化了。你能看到请求长这样{ jsonrpc: 2.0, id: 1, method: tools/list, params: {} }响应长这样{ jsonrpc: 2.0, id: 1, result: { tools: [ { name: read_file, description: Read a file from the filesystem, inputSchema: { type: object, properties: { path: { type: string } }, required: [path] } } ] } }看到这个结构你就理解了 MCP 的本质它就是一套约定好的 JSON-RPC 方法名和参数格式。tools/list拿工具列表tools/call调工具resources/list拿资源列表resources/read读资源prompts/list拿提示模板。Client 和 Server 之间就是靠这些方法名通信。第三步回到 Client 里验证。重启你的 ClientClaude Desktop、Cline 等在对话里问一句你有哪些工具可以用。如果配置正确模型会列出 filesystem Server 提供的工具。然后让它读一个文件比如读一下 /tmp/test.txt 的内容。如果文件存在模型会调用read_file工具并返回内容。这一步如果失败看 Client 的日志。Claude Desktop 的日志在~/Library/Logs/Claude/mcp.logmacOSCline 的在 VS Code 的输出面板里选 Cline 或 MCP。日志里会显示 Server 启动命令、stderr 输出、JSON-RPC 请求响应。常见的错误信息包括spawn npx ENOENT找不到 npx、Connection closedServer 启动后立刻退出、Method not found方法名写错。第四步验证模型 API 侧是否正常。MCP 工具能列出来但模型调用时可能因为 API 配置问题失败。这时候用一个简单的对话测试在 Client 里问一个不需要工具的问题比如11 等于几。如果这个都失败说明模型 API 配置有问题检查 Base URL、API Key、Model ID 三件套。如果这个成功但工具调用失败说明 MCP 配置有问题回到第二步用 Inspector 排查。如果你想单独验证模型 API可以用 curl 直接打curl https://taotoken.net/api/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer YOUR_API_KEY \ -d { model: YOUR_MODEL_ID, messages: [{role: user, content: 11}] }返回里有choices数组就说明 API 通了。如果返回 401是 Key 问题如果返回 404是 Base URL 或路径问题如果返回model not found是 Model ID 写错了。验证通过的标准是Client 能列出工具能成功调用一次工具并拿到结果模型 API 能正常返回对话。三个都过说明 MCP 接入链路完整。5. 常见报错排查401、local proxy failed、reading choices、OAuth这一节把 MCP 接入过程中最常见的几类报错拆开讲每个都给现象、原因和解决动作。401 Unauthorized。现象是模型 API 调用返回 401或者 Client 日志里显示认证失败。原因通常是 API Key 写错、Key 过期、或者 Key 没有对应模型的权限。解决动作先确认 Key 复制完整没有多余空格然后在控制台检查 Key 状态是否有效再用 curl 单独测一次排除是 Client 配置问题还是 Key 本身问题。如果 curl 也 401就是 Key 的问题重新建一个。注意有些 Client 会把 Key 存在环境变量里如果你改了配置文件但环境变量没改实际生效的是环境变量这个要检查。local proxy failed。现象是 Client 启动 MCP Server 时报连接失败日志里有local proxy failed或ECONNREFUSED。原因通常是 Server 进程没起来或者 Client 连的端口不对。解决动作先在终端手动跑 Server 启动命令确认能起来如果手动能起来但 Client 起不来检查command路径是不是绝对路径GUI 应用可能读不到 shell 的 PATH如果是网络型 ServerHTTP/SSE检查 URL 和端口是否可达用curl或telnet测一下。reading choices 报错。现象是模型 API 返回的 JSON 里没有choices字段Client 解析失败。原因通常是 Base URL 配错了请求打到了错误的端点返回了非预期格式。解决动作确认 Base URL 是https://taotoken.net/api不要多加/v1或/chat/completions具体路径由 SDK 拼接用 curl 直接打一次看返回结构里有没有choices如果返回的是 HTML 或错误页说明 URL 完全不对。OAuth 相关报错。现象是某些 MCP Server 需要 OAuth 认证Client 报OAuth flow failed或invalid_token。原因通常是 OAuth 配置缺失或回调地址不对。解决动作查该 Server 的文档确认是否需要 OAuth如果需要按文档配置 client_id、client_secret、redirect_uri有些 Server 支持用 API Key 替代 OAuth优先用 Key 方式简化配置。OAuth 流程涉及浏览器跳转在无头环境或远程服务器上可能跑不通这种情况建议换用支持 Key 认证的 Server。Server 启动后立刻退出。现象是 Client 日志显示 Server 进程启动后马上结束没有明显报错。原因可能是 Server 需要参数但没传或者运行时版本不兼容。解决动作在终端手动跑启动命令看 stderr 输出检查 Node/Python 版本是否满足 Server 要求如果是npx拉的包加-y避免交互式确认卡住。工具列表为空。现象是 Client 连上了 Server但tools/list返回空数组。原因可能是 Server 本身没注册工具或者权限配置限制了工具暴露。解决动作用 MCP Inspector 直接连 Server看tools/list返回什么如果 Inspector 也返回空是 Server 的问题如果 Inspector 有但 Client 没有是 Client 配置或版本问题。Claude Code 里 MCP 不生效。现象是配置写进了~/.claude.json但 Claude Code 不认。原因可能是配置字段名不对或者需要重启 Claude Code。解决动作用claude mcp list命令看当前识别的 Server 列表如果列表为空检查配置文件路径和字段名Claude Code 对配置格式比较严格建议用claude mcp add命令添加而不是手动编辑。排查的通用思路是分层先确认 Server 能单独跑再确认 Client 能连上 Server再确认模型 API 能通最后确认工具调用链路完整。每一层用对应的工具验证不要跳步。我试过在 Client 里反复调不通最后发现是 Server 单独跑就报错前面全在白费劲。6. 从配置骨架到 Agentic AI 工作流下一步怎么走配置跑通之后你手里就有了一套可运行的 MCP 接入骨架。接下来可以往几个方向走。一是接更多 Server。官方和社区有大量现成的 MCP Server比如 GitHub、Notion、数据库查询、浏览器控制。每个 Server 的接入方式都是往mcpServers里加一个条目结构完全一样。你可以按需组合比如 filesystem fetch github 三个一起上Agent 就能读本地文件、抓网页、查仓库。二是自己写 Server。官方有 Node.js 和 Python 的 SDK实现三个核心 endpointcapabilities 返回能力清单invoke 处理工具调用stream 处理流式响应。写完之后用 MCP Inspector 验证再写进 Client 配置。自研 Server 的价值在于接内部系统比如公司内部 API、私有数据库、内部知识库。三是理解 Code Mode 的思路。传统方式是暴露几百个工具每个工具一个 schematoken 消耗大。Code Mode 只暴露search()和execute(code)两个工具让模型写代码调用 SDK。Cloudflare 的经典方案里token 消耗固定在 1000 左右比暴露大量工具省很多。这个思路适合工具数量多的场景。四是关注安全和审计。MCP 的 human-in-the-loop 机制默认开启工具调用前需要用户确认。生产环境里要配置权限粒度Server 端决定哪些资源暴露给哪个 Client。审计日志记录所有调用方便追溯。这些在企业落地时是必选项。如果你在配置过程中卡住了可以先看接入文档里面有各客户端的详细配置说明。需要验证模型是否正常工作时可以用模型对话页面快速测一下。长期跑编码类 Agent 任务的话Coding Plan 的额度方式可能更适合。MCP 的价值不在于它多复杂而在于它把工具接入这件事标准化了。以前每个模型、每个工具都要写一遍集成代码现在一套配置走天下。你花在配置上的时间会随着接入的 Server 数量增加而摊薄。第一个 Server 配半小时第二个可能就五分钟。这就是标准化的意义。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询