news 2026/5/12 22:38:10

MCP深入浅出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MCP深入浅出

文章来源:马克的技术工作坊

一、什么MCP

MCP,全称是 Model Context Protocol(模型上下文协议),是由 Anthropic 于 2024 年 11 月推出的一个开放标准协议;

它旨在解决 LLM(大型语言模型)应用与外部数据源、工具和服务之间的集成难题,提供一种标准化、安全的双向连接方式,被形象地称为“AI 领域的 USB-C 接口”或“AI 版的 Language Server Protocol(LSP)”。

可以这么理解
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 的规范概览(Specification)

MCP 的规范是开放的、技术性的协议定义,目前最新稳定版为2025-11-25(此前有 2025-06-18、2024-11-05 等版本)。权威规范基于 TypeScript schema 定义(可在 GitHub 查看),官方文档站为 modelcontextprotocol.io,中文站包括 mcpcn.com/specification。

1.基础协议(Base Protocol)

  • 通信格式:完全基于JSON-RPC 2.0(请求、响应、通知三种消息类型),支持有状态连接。
  • 传输层:支持 HTTP(Streamable 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 Features)

  • Sampling(采样):支持服务器发起的代理行为(agentic behaviors)和递归 LLM 调用。
  • Roots(根目录):服务器可查询文件系统或 URI 边界,实现作用域操作。
  • Elicitation(征询):服务器可向用户请求额外信息。

4.实用功能(Utilities)

  • 配置、进度跟踪、取消操作、错误报告、日志等。

5.安全与信任原则(Trust & Safety)

规范高度重视安全,核心要求包括:

  • 用户必须明确同意所有数据访问和操作,并保留最终控制权。
  • 提供清晰的 UI 审查授权。
  • 工具执行前需用户理解并批准(工具描述不可信)。
  • LLM 采样请求需用户显式批准。
  • 主机不得在未经同意的情况下传输数据。

6.版本演进关键特性(2025-11-25 最新版)

  • 支持图标元数据、增量范围授权、URL 模式启发、OAuth Client ID 元数据、实验性 Tasks 等。
  • 持续优化安全性和互操作性。

总体架构:采用Host(LLM 应用) → Client(连接器) → Server(数据/工具提供者)模式,实现“一次构建,到处可用”的可组合集成。


四、MCP Host

MCP Host 就是那个装着 LLM 的大应用(比如 Claude Desktop、Cursor、VS Code、Claude.ai 等);

它主要负责:

  1. 管理一个或多个 MCP Client;
  2. 发起连接;
  3. 处理用户界面、授权、工具发现等;

五、MCP Client(MCP 客户端)

  • 定义:嵌入在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 Server(MCP 服务器)

  • 定义:实现 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三者之间的关系

MCP(Model Context Protocol)整体采用 Host(主机)– Client(客户端)– Server(服务器) 的三层架构,这也是官方规范的核心设计;

一句话总结:MCP Client 是“翻译官 + 连接器”,让 LLM Host 能用标准方式和任意 MCP Server 对话。

1、三者关系对比(表格形式)

角色位置主要职责数量关系谁实现它举例
MCP Host用户直接使用的 AI 应用管理多个 Client,提供 UI 和 LLM 交互1 个应用可管理多个 ClientLLM 厂商(如 Anthropic、OpenAI)Claude Desktop、Cursor、VS Code
MCP ClientHost 内部的连接组件协议翻译、连接管理、消息路由1 Client = 1 ServerHost 内置(厂商实现)Claude 的内置 Client
MCP Server独立程序(本地/远程)提供 Resources / Tools / Prompts1 Server 可被多个 Client 连接开发者 / 社区实现文件系统 Server、GitHub Server

2、实际工作流程(简化版)

  1. 用户在 Host(如 Claude Desktop)里添加一个 MCP Server;
  2. Host 创建一个MCP Client实例,用 MCP 协议连接该 Server;
  3. LLM 需要数据/工具时 → 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"}}}

------如有理解错误的地方,欢迎指正!

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

MinIO临时凭证与预签名URL的实战应用:从生成到安全管控(代码详解)

1. MinIO临时凭证与预签名URL的核心价值 想象一下你正在开发一个网盘应用,用户需要上传私人文件到云端,但又不能让他们直接接触你的主账号密钥。这时候MinIO的临时凭证(Temporary Credentials)就像给用户发了张限时门禁卡——只能…

作者头像 李华
网站建设 2026/5/12 22:32:21

SnipKit:AI驱动的命令行片段管理器,提升开发运维效率

1. 项目概述:当终端遇上AI,你的代码片段管理革命 作为一名在命令行里摸爬滚打了十多年的老开发,我深知效率工具的价值。我们每天在终端里敲击无数命令,处理重复性任务,从部署脚本到数据库查询,从文件处理到…

作者头像 李华
网站建设 2026/5/12 22:27:43

桌面贴片机:从开源硬件到DIY,如何实现小批量电子原型快速制造

1. 桌面贴片机:一场正在发生的革命十年前,如果你告诉我,一个电子爱好者能在自家书房里,像打印文档一样“打印”出一块搭载了0402甚至0201封装的完整电路板,我大概会觉得你在描述科幻电影里的场景。那个时代&#xff0c…

作者头像 李华