MCP深入浅出
文章来源马克的技术工作坊一、什么MCPMCP全称是 Model Context Protocol模型上下文协议是由 Anthropic 于 2024 年 11 月推出的一个开放标准协议它旨在解决 LLM大型语言模型应用与外部数据源、工具和服务之间的集成难题提供一种标准化、安全的双向连接方式被形象地称为“AI 领域的 USB-C 接口”或“AI 版的 Language Server ProtocolLSP”。可以这么理解LLM大模型大脑负责思考和决策MCP协议USB-C接口标准制定插拔、通信、协商、安全等统一规则MCP Server服务器端实现真正的手脚或外设MCP Client客户端插在LLM Host上的“插头”负责按照MCP协议与Server进行JOSN-RPC通信。补充LLM host例如Claude Desktop、Cursor、Windsurf 等支持 MCP 的应用都内置了MCP Client二、MCP核心目的过去将 LLM 连接到文件系统、数据库、API、代码仓库等外部资源时需要为不同厂商的模型和每个数据源单独开发适配器N×M 问题。MCP 通过一套统一的协议让任意兼容的 LLM 主机Host都能无缝访问服务器Server提供的上下文和能力极大降低集成成本提升 AI 应用的动态性和实用性。三、MCP 的规范概览SpecificationMCP 的规范是开放的、技术性的协议定义目前最新稳定版为2025-11-25此前有 2025-06-18、2024-11-05 等版本。权威规范基于 TypeScript schema 定义可在 GitHub 查看官方文档站为 modelcontextprotocol.io中文站包括 mcpcn.com/specification。1.基础协议Base Protocol通信格式完全基于JSON-RPC 2.0请求、响应、通知三种消息类型支持有状态连接。传输层支持 HTTPStreamable HTTP 单端点、本地传输等。生命周期管理包括 initialize初始化、shutdown关闭、能力协商Capability Negotiation等方法确保客户端Client和服务器在连接时协商支持的功能。授权与安全强制使用 OAuth 2.1含 PKCE、HTTPS支持 OpenID Connect Discovery 等。强调用户明确同意explicit consent、数据隐私和工具安全。2.核心原语Primitives服务器特性规范将交互分为三大主要原语服务器可按需实现其中一部分或全部Resources资源提供上下文数据如文件、数据库记录支持增量授权、链接、URI 模式等。Prompts提示模板服务器可公开结构化的提示模板和工作流供 LLM 使用。Tools工具暴露可执行函数类似工具调用支持结构化输出、采样工具调用、图标元数据等。3.客户端特性Client FeaturesSampling采样支持服务器发起的代理行为agentic behaviors和递归 LLM 调用。Roots根目录服务器可查询文件系统或 URI 边界实现作用域操作。Elicitation征询服务器可向用户请求额外信息。4.实用功能Utilities配置、进度跟踪、取消操作、错误报告、日志等。5.安全与信任原则Trust Safety规范高度重视安全核心要求包括用户必须明确同意所有数据访问和操作并保留最终控制权。提供清晰的 UI 审查授权。工具执行前需用户理解并批准工具描述不可信。LLM 采样请求需用户显式批准。主机不得在未经同意的情况下传输数据。6.版本演进关键特性2025-11-25 最新版支持图标元数据、增量范围授权、URL 模式启发、OAuth Client ID 元数据、实验性 Tasks 等。持续优化安全性和互操作性。总体架构采用HostLLM 应用 → Client连接器 → Server数据/工具提供者模式实现“一次构建到处可用”的可组合集成。四、MCP HostMCP Host 就是那个装着 LLM 的大应用比如 Claude Desktop、Cursor、VS Code、Claude.ai 等它主要负责管理一个或多个 MCP Client发起连接处理用户界面、授权、工具发现等五、MCP ClientMCP 客户端定义嵌入在MCP Host主机应用内部的协议连接器负责与特定的 MCP Server 建立并维护连接。作用使用 MCP 协议JSON-RPC 2.0与 Server 通信自动翻译把 LLM 原生的 tool calling 格式Claude 的 tool use、OpenAI 的 function calling 等转换成标准 MCP 调用反之亦然处理能力协商、安全授权、状态管理隔离不同 Server 的连接一个 Client 只连一个 Server特点由 Host 动态创建和管理一个 Host 可以同时运行多个 Client连多个不同的 Server负责“插头适配”工作让不同厂商的 LLM 都能无缝使用同一个 Server内置在支持 MCP 的应用中Claude Desktop、Cursor、VS Code、Gemini 等六、MCP ServerMCP 服务器定义实现 MCP 协议的独立程序可以是本地进程或远程服务负责真正提供内容和能力。作用它是“手脚”和“数据源”向 LLM 暴露具体的Resources资源文件、数据库记录、网页内容等上下文数据Tools工具可执行的函数、API 调用等Prompts提示模板结构化的工作流模板特点一次开发到处可用开发者只写一份 MCP Server 代码Python、Node.js、Go 等均有 SDK。完全独立于具体 LLM 厂商不关心你是 Claude、OpenAI 还是 Gemini。可以本地运行STDIO 传输或远程部署Streamable HTTP。示例文件系统 MCP Server、GitHub MCP Server、数据库 MCP Server、浏览器工具 Server 等。七、LLM Host、MCP Client、MCP Server三者之间的关系MCPModel Context Protocol整体采用 Host主机– Client客户端– Server服务器 的三层架构这也是官方规范的核心设计一句话总结MCP Client 是“翻译官 连接器”让 LLM Host 能用标准方式和任意 MCP Server 对话。1、三者关系对比表格形式角色位置主要职责数量关系谁实现它举例MCP Host用户直接使用的 AI 应用管理多个 Client提供 UI 和 LLM 交互1 个应用可管理多个 ClientLLM 厂商如 Anthropic、OpenAIClaude Desktop、Cursor、VS CodeMCP ClientHost 内部的连接组件协议翻译、连接管理、消息路由1 Client 1 ServerHost 内置厂商实现Claude 的内置 ClientMCP Server独立程序本地/远程提供 Resources / Tools / Prompts1 Server 可被多个 Client 连接开发者 / 社区实现文件系统 Server、GitHub Server2、实际工作流程简化版用户在 Host如 Claude Desktop里添加一个 MCP ServerHost 创建一个MCP Client实例用 MCP 协议连接该 ServerLLM 需要数据/工具时 → Client 把请求转成 MCP 格式 → Server 执行 → 结果返回给 Client → Client 再转成 LLM 原生格式 → LLM 继续思考八、实践MCP Server通常使用python对应执行命令uvx、node对应执行命令npx、java、C#等进行编写的常用的MCP Server网站mcp.so、mcpmarket.com、smithery.ai;可以在Visual Studio Code上面下载Cline来自定义mcpServer或者下载已经开发好的MCP Server在进行像大模型已经提问时会自动获取已经存在的工具并进行调用cline_mcp_settings.json内容第一个工具是高德地图调用MCP Server第二个是网站抓取MCP Server{mcpServers:{amap-maps:{disabled:false,timeout:60,type:stdio,command:npx,args:[-y,amap/amap-maps-mcp-server],env:{AMAP_MAPS_API_KEY:api_key}},fetch:{args:[mcp-server-fetch],command:uvx}}}------如有理解错误的地方欢迎指正