本篇是《MCP 开发实战教程》专栏的第 1 篇。作为开篇我们将从一个真实痛点出发带你理解 MCP 到底是什么、为什么会出现、它的架构是怎么设计的以及它在 2026 年的最新生态状态。引言你可能有过这种体验你开发了一个 AI 助手它很聪明能聊天、能写代码、能分析文档。但有一天产品经理走过来说“能不能让它帮我们查一下 Jira 上的 bug再看看 GitHub 上那个 PR 的 review 意见顺便把今天的销售数据从数据库里拉出来做个汇总。”于是你开始写集成代码。Jira 一套 APIGitHub 一套 API数据库又是另一套连接方式。每个 AI 客户端Claude、ChatGPT、Cursor都要单独适配一遍。如果你有 3 个 AI 应用和 5 个外部系统那就是 3×5 15 套集成代码。再加上认证、错误处理、版本兼容……这就是所谓的N×M 集成问题。MCPModel Context Protocol就是为了解决这个问题而生的。简单来说MCP 就是AI 领域的 USB-C 接口。你的笔记本只需要一个 USB-C 口就能连接显示器、硬盘、手机、充电器——因为这些设备都遵循同一个标准。MCP 对 AI 做的是同样的事建一次服务器所有支持 MCP 的 AI 客户端都能直接用。本篇会带你搞清楚三件事MCP 的架构是怎么设计的、它的核心组件各自负责什么、以及它在 2026 年的生态治理状态。1. MCP 是什么1.1 定义MCPModel Context Protocol是一个开放标准和开源框架由 Anthropic 于 2024 年 11 月首次发布用于标准化 AI 系统如大语言模型与外部工具、数据源和服务之间的连接方式。用更严谨的话说MCP 定义了一套基于 JSON-RPC 2.0 的通信协议让 AI 应用能够以统一的方式发现、调用外部能力而不需要为每个外部系统写专门的集成代码。1.2 类比从万能充到USB-C在 MCP 出现之前AI 集成外部工具的方式就像早期手机充电器——每款手机一根专用线。Claude 要连 GitHub得写一套 Claude-GitHub 适配器ChatGPT 要连同一个 GitHub又得写一套 ChatGPT-GitHub 适配器。这些适配器互不兼容换一个 AI 客户端就要重写。MCP 的出现相当于整个行业统一到了 USB-C。你只需要为 GitHub 写一个 MCP 服务器之后 Claude、ChatGPT、Cursor、VS Code Copilot——任何支持 MCP 的客户端都能直接连接它不需要任何额外适配。这个类比当然有局限USB-C 是硬件接口标准而 MCP 是软件协议标准。USB-C 解决的是物理连接问题MCP 解决的是语义连接问题——不只是能连上还要能理解对方有什么能力、怎么调用。但核心思路是一样的标准化连接消除重复适配。1.3 为什么需要 MCPMCP 解决的核心问题可以归纳为三个第一N×M 集成问题。没有 MCP 时N 个 AI 应用对接 M 个外部系统需要 N×M 套集成代码。有了 MCP只需要 M 个 MCP 服务器 N 个 MCP 客户端总共 NM 套代码。当 N 和 M 都在增长时这个差异是巨大的。第二能力发现。传统集成方式需要硬编码每个工具的接口定义。MCP 提供了标准化的能力发现机制——客户端连接服务器后可以动态查询你有哪些工具每个工具需要什么参数。这意味着 AI 可以在运行时发现新能力而不是在开发时就绑定死。第三跨模型可移植性。你为 Claude 建的工具集成切换到 ChatGPT 就不能用了。但如果你建的是 MCP 服务器任何支持 MCP 的模型都能用。这对企业来说意味着投资一次集成不会被任何单一 AI 厂商锁定。2. 核心架构Host、Client、ServerMCP 采用经典的客户端-服务器架构但有三个关键角色而不是传统的两个。2.1 Host宿主Host是运行 AI 模型的应用程序也是用户直接交互的界面。它可以是桌面应用Claude Desktop、ChatGPT 桌面版IDE 插件Cursor、VS Code GitHub Copilot、Windsurf终端工具Claude Code、OpenCode云端平台Claude Web、Amazon KiroHost 的职责是接收用户输入调用 LLM 进行推理管理一个或多个 MCP Client 实例控制安全边界哪些操作需要用户确认、哪些数据可以暴露给服务器你可以把 Host 想象成一个项目经理——它自己不干活但负责协调 LLM大脑和各个 MCP Server外包团队之间的合作。2.2 Client客户端MCP Client是 Host 内部的一个组件负责与单个 MCP Server 建立和维护连接。关键规则一个 Client 对应一个 ServerHost 为每个要连接的 MCP Server 创建一个独立的 Client 实例协议翻译Client 将 Host 的需求翻译成 MCP 协议消息再将 Server 的响应翻译回来连接管理Client 负责握手、能力协商、会话维护举个具体例子当你在 Claude Desktop 中配置了 3 个 MCP ServerGitHub、Slack、数据库Claude Desktop 会创建 3 个 Client 实例分别与这 3 个 Server 保持独立连接。在实践中你通常不需要自己实现 Client——Host 应用已经内置了。你作为开发者主要做的是实现 Server 端。2.3 Server服务器MCP Server是你作为开发者需要构建的部分。它是一个轻量级进程负责声明自己的能力我有哪些工具、资源、提示模板接收调用请求AI 模型决定使用某个工具时执行实际操作查询数据库、调用 API、读写文件等返回结果将执行结果格式化后返回给 Client一个设计良好的 MCP Server 应该职责单一每个 Server 专注一个领域GitHub Server 只管 GitHub数据库 Server 只管数据库独立运行Server 之间互不依赖可以独立部署和升级安全可控通过 Host 的安全策略控制访问范围2.4 传输层Transport LayerHost/Client 和 Server 之间的通信需要一个传输机制。MCP 定义了两种标准传输方式传输方式适用场景特点STDIO本地集成Server 运行在同一台机器上零网络开销、单客户端、安全性高不暴露网络端口Streamable HTTP远程服务器通信HTTP POST 发送请求、SSE 推送流式响应、支持多客户端、支持 OAuth 认证STDIO是最常见的方式——Host 以子进程的方式启动 MCP Server通过标准输入/输出stdin/stdout交换 JSON-RPC 消息。这种方式简单、安全数据不经过网络、延迟低非常适合开发者本地使用。Streamable HTTP是为远程场景设计的——Server 部署在云端或内网服务器上Client 通过 HTTP 连接。这种方式支持多个客户端同时连接适合企业级部署。注意早期版本使用 HTTPSSE 作为远程传输方式后来 Streamable HTTP 取代了它。即将发布的 2026-07-28 规范 RC 版计划引入无状态核心设计届时 MCP Server 将可以在普通 HTTP 基础设施上水平扩展不再需要 sticky session。2.5 整体工作流把上面的组件串起来一个完整的 MCP 交互流程是这样的用户提问“帮我看看 GitHub 上 mcp-server 这个仓库最近的 issue”Host 转发给 LLMLLM 分析意图决定需要调用 GitHub 相关工具Host 查看能力清单Client 已从 GitHub MCP Server 获取了工具列表知道有list_issues这个工具LLM 构造调用LLM 决定调用list_issues(repomcp-server, stateopen)Client 发送请求Client 将调用请求通过 STDIO/HTTP 发送给 ServerServer 执行操作Server 调用 GitHub API获取 issue 列表Server 返回结果将结果格式化为 JSON 返回LLM 综合回答LLM 拿到结果后用自然语言总结给用户整个过程中LLM 不需要知道 GitHub API 的细节Server 不需要知道用户用的是什么 AI 客户端。MCP 协议就是它们之间的通用语言。3. 核心原语Tools、Resources、PromptsMCP Server 可以向 Client 暴露三种核心能力称为原语Primitives原语方向说明类比Tools工具Server → Client可执行的操作LLM 可以主动调用员工的技能会查数据库、会发邮件Resources资源Server → Client只读数据Client 可以读取以提供上下文员工的参考资料文档、数据表Prompts提示模板Server → Client预定义的提示模板帮助 LLM 更好地使用服务员工的操作手册标准化流程3.1 Tools工具Tools 是 MCP 最核心的原语。它代表一个可执行的操作——LLM 可以决定在对话过程中调用它。一个 Tool 的定义包含名称如list_issues描述告诉 LLM 这个工具做什么“列出 GitHub 仓库的 issue”输入参数JSON Schema 格式定义参数名、类型、是否必填{name:list_issues,description:列出指定 GitHub 仓库的 issue 列表,inputSchema:{type:object,properties:{repo:{type:string,description:仓库名格式owner/repo},state:{type:string,enum:[open,closed,all],default:open}},required:[repo]}}LLM 看到这个定义后就能理解当我需要查看某个仓库的 issue 时我可以调用list_issues传入repo参数。3.2 Resources资源Resources 代表只读数据。与 Tools 不同Resources 不执行操作它们只是提供信息让 LLM 在推理时参考。比如一个数据库 MCP Server 可以暴露一个 Resourceschema://main内容是数据库的表结构定义。Client 读取这个 Resource 后LLM 就知道了数据库有哪些表、每个表有哪些字段在生成 SQL 时就不会出错。Resources 通过 URI 标识支持静态和动态两种静态固定内容如配置文件动态内容随时间变化如数据库 schema用{uri}模板参数3.3 Prompts提示模板Prompts 是预定义的提示模板帮助用户或 LLM 更高效地使用 Server 的能力。比如一个代码审查 MCP Server 可以提供一个 Promptreview_pr它预定义了审查的步骤和关注点。用户选择这个 Prompt 后Client 会按照模板构造完整的提示发送给 LLM确保审查过程标准化。Prompts 也可以包含动态参数——用户选择模板后Server 根据参数填充具体内容。3.4 双向能力Sampling 和 Elicitation除了上面三种 Server → Client 的原语MCP 还定义了两种反向能力Sampling采样Server 可以请求 Client 调用 LLM 进行推理。这意味着 Server 不只是被动等待调用它可以在处理过程中主动请求 AI 的帮助。Elicitation引出Server 可以在执行过程中向用户提问。比如一个支付 Server 在扣款前可以弹出确认框让用户确认金额。这两种能力让 MCP 从单向调用变成了双向协作。Sampling 最早在 2025-06-18 规范中引入当时称为 human-in-the-loop2025-11-25 规范对其进行了增强并新增了 URL 模式的 Elicitation。4. 治理与生态从 Anthropic 到行业标准4.1 AAIF 与 Linux 基金会MCP 最初由 Anthropic 于 2024 年 11 月发布。随着 OpenAI、Google、Microsoft 等巨头纷纷采纳Anthropic 意识到一个由单一公司控制的协议无法获得行业的完全信任。2025 年 12 月Anthropic 将 MCP 捐赠给 Linux 基金会新成立的Agentic AI FoundationAAIF。这是一个专注于智能体 AI 技术的开放基金会采用 Linux 基金会成熟的治理模式。AAIF 的创始成员阵容说明了 MCP 的行业地位角色成员联合创始人Anthropic、OpenAI、Block支持成员AWS、Google、Microsoft、Cloudflare、GitHub、Bloomberg 等这意味着MCP 不再属于任何单一公司而是行业共同拥有的开放标准技术决策由社区驱动通过技术指导委员会和贡献者共识做出企业可以放心投资不用担心被单一厂商锁定或协议被随意更改AAIF 的治理模式借鉴了 Kubernetes、CNCF 等成功的开源项目经验。Jim ZemlinLinux 基金会执行董事在 AAIF 成立时表示那些在 AI 模型上竞争的公司正在 AAIF 内部协作建设让智能体协同工作的基础设施。4.2 MCP RegistryMCP Registryregistry.modelcontextprotocol.io是 MCP 生态的应用商店于 2025 年 9 月上线。它的定位是MCP 服务器的权威元数据仓库——一个统一的发现入口让开发者知道有哪些 MCP 服务器可以用。核心设计原则单一事实来源所有公开可用的 MCP 服务器的权威元数据厂商中立不偏袒任何特定服务器或组织安全标准利用现有包管理器npm、PyPI、Docker的安全机制元注册表Registry 只存元数据服务器描述、安装方式不存实际代码每个 Registry 条目使用标准化的server.json格式{name:io.github.user/my-server,description:我的 MCP 服务器,version:1.0.0,packages:[{registryType:npm,identifier:my-mcp-server}]}到 2026 年 5 月官方 Registry 已收录近2000 个MCP 服务器而更广泛的社区生态已超过 10,000 个活跃服务器覆盖从 GitHub、Slack、数据库到金融、医疗等各个领域。4.3 主流客户端支持MCP 已经获得了几乎所有主流 AI 客户端的支持客户端厂商本地 Server远程 ServerOAuth 支持Claude DesktopAnthropic✅✅✅ChatGPTOpenAI⚠️✅✅CursorCursor Inc.✅✅✅VS Code CopilotMicrosoft✅✅✅KiroAWS✅✅✅OpenCode开源社区✅✅✅⚠️ 说明ChatGPT 的 MCP 支持目前在 Developer Mode测试版中可用主要面向远程 Server。本地 Server 需通过隧道如 localtunnel暴露为远程地址后才能连接。Kiro 说明Kiro 由 AWS 团队开发但定位为独立的 agentic IDE 产品不绑定 AWS 账号支持 Google/GitHub 登录。详见 kiro.dev。Python 和 TypeScript SDK 的月下载量合计约9700 万次数据来源MCP SDK 下载统计2026 年 3 月。整个 MCP 生态已有超过10,000 个活跃服务器和177,000 个注册工具来源arXiv 论文。这些数字说明 MCP 已经不是一个实验性协议而是事实上的行业标准。5. 实战感受 MCP 的工作流说了这么多概念不如亲手体验一下。下面我们用 FastMCPPython SDK搭建一个最简单的 MCP Server感受完整的工作流。5.1 环境准备# 需要 Python 3.11python--version# 安装 FastMCPpipinstallfastmcp依赖fastmcp3.0FastMCP 3.0 于 2026 年 2 月 18 日 GA当前最新 v3.1.1,python3.115.2 创建 MCP Server创建文件my_first_server.pyfromdatetimeimportdatetimefromfastmcpimportFastMCP# 创建 MCP Server 实例mcpFastMCP(我的第一个服务器)# 定义一个 Tool查询当前时间mcp.tool()defget_current_time()-str:获取当前时间returndatetime.now().strftime(%Y-%m-%d %H:%M:%S)# 定义一个 Tool做加法mcp.tool()defadd(a:float,b:float)-str:计算两个数的和returnf{a}{b}{ab}# 定义一个 Resource服务器信息mcp.resource(info://server)defserver_info()-str:返回服务器基本信息return这是一个 MCP 入门示例服务器提供时间和计算工具。# 启动服务器STDIO 模式if__name____main__:mcp.run()这段代码做了三件事创建了一个名为我的第一个服务器的 MCP Server注册了两个 Toolget_current_time和add和一个 Resourceinfo://server以 STDIO 模式启动5.3 用 FastMCP CLI 测试FastMCP 自带了开发测试工具不需要配置完整的 AI 客户端就能测试# 以开发模式运行可以在终端中交互式测试fastmcp dev my_first_server.py预期输出浏览器打开 MCP Inspector 界面你可以看到Tools标签下列出get_current_time和add两个工具Resources标签下列出info://server资源你可以在界面上手动调用工具查看返回结果5.4 配置到 Claude Desktop如果你想在 Claude Desktop 中使用这个 Server编辑配置文件macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.jsonLinux:~/.config/Claude/claude_desktop_config.json{mcpServers:{my-first-server:{command:python,args:[/绝对路径/my_first_server.py]}}}重启 Claude Desktop 后你就能在对话中使用这些工具了。试着问 Claude现在几点了它会自动调用get_current_time工具。5.5 预期效果当你问 Claude “帮我算一下 42 加 58” 时Claude 会识别到需要计算从工具列表中找到add工具构造调用add(a42, b58)通过 MCP 协议发送给 ServerServer 返回 “42.0 58.0 100.0”Claude 用自然语言回答“42 加 58 等于 100”整个过程你只需要写十几行 Python 代码不需要了解任何 Claude API 或网络编程。6. 深入理解为什么这样设计6.1 Host 和 Client 为什么要分开你可能会问既然 Client 总是内嵌在 Host 中为什么不把它们合成一个概念原因是一个 Host 需要同时管理多个连接。Claude Desktop 可能同时连着 GitHub Server、Slack Server、数据库 Server每个连接都有自己的状态、能力、权限。将 Client 抽象出来每个 Client 只负责一个连接职责清晰便于管理。类比一下Host 是一个项目经理Client 是项目经理派出的各个联络人。每个联络人对接一个外包团队Server项目经理通过联络人了解各团队的状态并分配任务。6.2 为什么用 JSON-RPC 而不是 RESTMCP 选择 JSON-RPC 2.0 而不是更常见的 REST API有几个原因维度REST APIJSON-RPC 2.0通信模式请求-响应请求-响应 通知单向消息连接方式无状态有状态会话能力协商需要额外机制如 OpenAPI协议内置双向通信需要 WebSocket 补充原生支持通知和请求MCP 需要有状态会话Client 连接 Server 后要维持上下文、双向通知Server 可以通知 Client 工具列表变了、能力协商握手阶段互相声明支持的功能。JSON-RPC 2.0 天然支持这些特性而 REST 需要大量额外约定。6.3 安全边界在哪里MCP 的安全模型基于一个核心原则Host 是安全的最终裁决者。Server 不能直接访问 LLM必须通过 Client 中转Host 可以审查所有消息Server 不能绕过 Host 直接操作用户数据访问范围由 Host 通过 Roots 机制限定敏感操作需要用户确认Host 可以配置哪些工具调用需要用户批准这意味着即使 MCP Server 有安全漏洞或恶意行为它也无法直接触达用户的敏感数据——因为 Host 作为守门人控制着所有数据流向。但这也意味着Host 的安全实现至关重要。一个不负责任的 Host比如允许所有工具调用不经过用户确认会让整个安全模型形同虚设。这也是为什么我们在后面的章节会专门讲 MCP 安全。7. 常见误区在学习 MCP 的过程中有几个常见误区值得注意误区 1“MCP 就是给 AI 加插件”不完全对。插件系统通常是封闭的、由平台控制的。MCP 是开放协议任何人可以实现 Server 或 Client不需要平台审批。而且 MCP 强调的是协议标准化不是功能扩展。误区 2“有了 Function Calling 就不需要 MCP”Function Calling 是模型层面的能力模型决定调用什么函数MCP 是连接层面的协议函数的实际发现、调用、结果传输。两者互补而非替代。Function Calling 解决模型怎么决定调用MCP 解决调用怎么实际执行。误区 3“MCP 只适合本地开发”早期 MCP 确实以 STDIO 本地传输为主。但 2025-06 规范引入了 Streamable HTTP即将发布的 2026-07-28 RC 更计划引入无状态核心设计让 MCP Server 可以在云端水平扩展。MCP 已经是生产级的协议了。误区 4“MCP 是 Anthropic 的私有协议”曾经是但现在不是了。2025 年 12 月MCP 已捐赠给 Linux 基金会下的 AAIF由 OpenAI、Anthropic、Block 联合创始AWS、Google、Microsoft 等共同参与治理。它是一个真正的行业标准。总结MCP 是 AI 领域的USB-C它通过标准化协议解决了 N×M 集成问题让 AI 应用可以建一次到处用。这是 MCP 存在的根本原因。三个角色各司其职Host宿主负责协调和安全Client客户端负责协议通信Server服务器负责暴露外部能力。你作为开发者主要做的是实现 Server 端。三种核心原语定义能力Tools 是可执行操作Resources 是只读数据Prompts 是标准化模板。加上 Sampling 和 Elicitation 两种反向能力构成了完整的协作模型。MCP 已经是行业标准AAIF 治理、MCP Registry、9700 万月下载量、所有主流客户端支持——这些都说明 MCP 不再是实验品而是生产级基础设施。安全模型以 Host 为核心Host 是安全的最终裁决者控制着所有数据流向。这意味着 Host 的安全实现质量直接决定了整个系统的安全性。下篇预告理论讲完了下一篇我们动手。《5 分钟搭建第一个 MCP 服务器》将带你从零开始用 FastMCP 搭建一个真正有用的 MCP Server——不只是 Hello World而是一个能查询数据库、调用 API 的实战级服务器。附录参考资料MCP 官方文档MCP 官方博客AAIF 官网MCP RegistryMCP GitHub 仓库Anthropic MCP 发布公告Linux Foundation AAIF 成立公告Everything your team needs to know about MCP in 2026FastMCP 官方文档MCPShield: A Formal Security Framework for MCP-Based AI Agents
第 01 篇:MCP 概念与架构 —— AI 世界的“USB-C“
本篇是《MCP 开发实战教程》专栏的第 1 篇。作为开篇我们将从一个真实痛点出发带你理解 MCP 到底是什么、为什么会出现、它的架构是怎么设计的以及它在 2026 年的最新生态状态。引言你可能有过这种体验你开发了一个 AI 助手它很聪明能聊天、能写代码、能分析文档。但有一天产品经理走过来说“能不能让它帮我们查一下 Jira 上的 bug再看看 GitHub 上那个 PR 的 review 意见顺便把今天的销售数据从数据库里拉出来做个汇总。”于是你开始写集成代码。Jira 一套 APIGitHub 一套 API数据库又是另一套连接方式。每个 AI 客户端Claude、ChatGPT、Cursor都要单独适配一遍。如果你有 3 个 AI 应用和 5 个外部系统那就是 3×5 15 套集成代码。再加上认证、错误处理、版本兼容……这就是所谓的N×M 集成问题。MCPModel Context Protocol就是为了解决这个问题而生的。简单来说MCP 就是AI 领域的 USB-C 接口。你的笔记本只需要一个 USB-C 口就能连接显示器、硬盘、手机、充电器——因为这些设备都遵循同一个标准。MCP 对 AI 做的是同样的事建一次服务器所有支持 MCP 的 AI 客户端都能直接用。本篇会带你搞清楚三件事MCP 的架构是怎么设计的、它的核心组件各自负责什么、以及它在 2026 年的生态治理状态。1. MCP 是什么1.1 定义MCPModel Context Protocol是一个开放标准和开源框架由 Anthropic 于 2024 年 11 月首次发布用于标准化 AI 系统如大语言模型与外部工具、数据源和服务之间的连接方式。用更严谨的话说MCP 定义了一套基于 JSON-RPC 2.0 的通信协议让 AI 应用能够以统一的方式发现、调用外部能力而不需要为每个外部系统写专门的集成代码。1.2 类比从万能充到USB-C在 MCP 出现之前AI 集成外部工具的方式就像早期手机充电器——每款手机一根专用线。Claude 要连 GitHub得写一套 Claude-GitHub 适配器ChatGPT 要连同一个 GitHub又得写一套 ChatGPT-GitHub 适配器。这些适配器互不兼容换一个 AI 客户端就要重写。MCP 的出现相当于整个行业统一到了 USB-C。你只需要为 GitHub 写一个 MCP 服务器之后 Claude、ChatGPT、Cursor、VS Code Copilot——任何支持 MCP 的客户端都能直接连接它不需要任何额外适配。这个类比当然有局限USB-C 是硬件接口标准而 MCP 是软件协议标准。USB-C 解决的是物理连接问题MCP 解决的是语义连接问题——不只是能连上还要能理解对方有什么能力、怎么调用。但核心思路是一样的标准化连接消除重复适配。1.3 为什么需要 MCPMCP 解决的核心问题可以归纳为三个第一N×M 集成问题。没有 MCP 时N 个 AI 应用对接 M 个外部系统需要 N×M 套集成代码。有了 MCP只需要 M 个 MCP 服务器 N 个 MCP 客户端总共 NM 套代码。当 N 和 M 都在增长时这个差异是巨大的。第二能力发现。传统集成方式需要硬编码每个工具的接口定义。MCP 提供了标准化的能力发现机制——客户端连接服务器后可以动态查询你有哪些工具每个工具需要什么参数。这意味着 AI 可以在运行时发现新能力而不是在开发时就绑定死。第三跨模型可移植性。你为 Claude 建的工具集成切换到 ChatGPT 就不能用了。但如果你建的是 MCP 服务器任何支持 MCP 的模型都能用。这对企业来说意味着投资一次集成不会被任何单一 AI 厂商锁定。2. 核心架构Host、Client、ServerMCP 采用经典的客户端-服务器架构但有三个关键角色而不是传统的两个。2.1 Host宿主Host是运行 AI 模型的应用程序也是用户直接交互的界面。它可以是桌面应用Claude Desktop、ChatGPT 桌面版IDE 插件Cursor、VS Code GitHub Copilot、Windsurf终端工具Claude Code、OpenCode云端平台Claude Web、Amazon KiroHost 的职责是接收用户输入调用 LLM 进行推理管理一个或多个 MCP Client 实例控制安全边界哪些操作需要用户确认、哪些数据可以暴露给服务器你可以把 Host 想象成一个项目经理——它自己不干活但负责协调 LLM大脑和各个 MCP Server外包团队之间的合作。2.2 Client客户端MCP Client是 Host 内部的一个组件负责与单个 MCP Server 建立和维护连接。关键规则一个 Client 对应一个 ServerHost 为每个要连接的 MCP Server 创建一个独立的 Client 实例协议翻译Client 将 Host 的需求翻译成 MCP 协议消息再将 Server 的响应翻译回来连接管理Client 负责握手、能力协商、会话维护举个具体例子当你在 Claude Desktop 中配置了 3 个 MCP ServerGitHub、Slack、数据库Claude Desktop 会创建 3 个 Client 实例分别与这 3 个 Server 保持独立连接。在实践中你通常不需要自己实现 Client——Host 应用已经内置了。你作为开发者主要做的是实现 Server 端。2.3 Server服务器MCP Server是你作为开发者需要构建的部分。它是一个轻量级进程负责声明自己的能力我有哪些工具、资源、提示模板接收调用请求AI 模型决定使用某个工具时执行实际操作查询数据库、调用 API、读写文件等返回结果将执行结果格式化后返回给 Client一个设计良好的 MCP Server 应该职责单一每个 Server 专注一个领域GitHub Server 只管 GitHub数据库 Server 只管数据库独立运行Server 之间互不依赖可以独立部署和升级安全可控通过 Host 的安全策略控制访问范围2.4 传输层Transport LayerHost/Client 和 Server 之间的通信需要一个传输机制。MCP 定义了两种标准传输方式传输方式适用场景特点STDIO本地集成Server 运行在同一台机器上零网络开销、单客户端、安全性高不暴露网络端口Streamable HTTP远程服务器通信HTTP POST 发送请求、SSE 推送流式响应、支持多客户端、支持 OAuth 认证STDIO是最常见的方式——Host 以子进程的方式启动 MCP Server通过标准输入/输出stdin/stdout交换 JSON-RPC 消息。这种方式简单、安全数据不经过网络、延迟低非常适合开发者本地使用。Streamable HTTP是为远程场景设计的——Server 部署在云端或内网服务器上Client 通过 HTTP 连接。这种方式支持多个客户端同时连接适合企业级部署。注意早期版本使用 HTTPSSE 作为远程传输方式后来 Streamable HTTP 取代了它。即将发布的 2026-07-28 规范 RC 版计划引入无状态核心设计届时 MCP Server 将可以在普通 HTTP 基础设施上水平扩展不再需要 sticky session。2.5 整体工作流把上面的组件串起来一个完整的 MCP 交互流程是这样的用户提问“帮我看看 GitHub 上 mcp-server 这个仓库最近的 issue”Host 转发给 LLMLLM 分析意图决定需要调用 GitHub 相关工具Host 查看能力清单Client 已从 GitHub MCP Server 获取了工具列表知道有list_issues这个工具LLM 构造调用LLM 决定调用list_issues(repomcp-server, stateopen)Client 发送请求Client 将调用请求通过 STDIO/HTTP 发送给 ServerServer 执行操作Server 调用 GitHub API获取 issue 列表Server 返回结果将结果格式化为 JSON 返回LLM 综合回答LLM 拿到结果后用自然语言总结给用户整个过程中LLM 不需要知道 GitHub API 的细节Server 不需要知道用户用的是什么 AI 客户端。MCP 协议就是它们之间的通用语言。3. 核心原语Tools、Resources、PromptsMCP Server 可以向 Client 暴露三种核心能力称为原语Primitives原语方向说明类比Tools工具Server → Client可执行的操作LLM 可以主动调用员工的技能会查数据库、会发邮件Resources资源Server → Client只读数据Client 可以读取以提供上下文员工的参考资料文档、数据表Prompts提示模板Server → Client预定义的提示模板帮助 LLM 更好地使用服务员工的操作手册标准化流程3.1 Tools工具Tools 是 MCP 最核心的原语。它代表一个可执行的操作——LLM 可以决定在对话过程中调用它。一个 Tool 的定义包含名称如list_issues描述告诉 LLM 这个工具做什么“列出 GitHub 仓库的 issue”输入参数JSON Schema 格式定义参数名、类型、是否必填{name:list_issues,description:列出指定 GitHub 仓库的 issue 列表,inputSchema:{type:object,properties:{repo:{type:string,description:仓库名格式owner/repo},state:{type:string,enum:[open,closed,all],default:open}},required:[repo]}}LLM 看到这个定义后就能理解当我需要查看某个仓库的 issue 时我可以调用list_issues传入repo参数。3.2 Resources资源Resources 代表只读数据。与 Tools 不同Resources 不执行操作它们只是提供信息让 LLM 在推理时参考。比如一个数据库 MCP Server 可以暴露一个 Resourceschema://main内容是数据库的表结构定义。Client 读取这个 Resource 后LLM 就知道了数据库有哪些表、每个表有哪些字段在生成 SQL 时就不会出错。Resources 通过 URI 标识支持静态和动态两种静态固定内容如配置文件动态内容随时间变化如数据库 schema用{uri}模板参数3.3 Prompts提示模板Prompts 是预定义的提示模板帮助用户或 LLM 更高效地使用 Server 的能力。比如一个代码审查 MCP Server 可以提供一个 Promptreview_pr它预定义了审查的步骤和关注点。用户选择这个 Prompt 后Client 会按照模板构造完整的提示发送给 LLM确保审查过程标准化。Prompts 也可以包含动态参数——用户选择模板后Server 根据参数填充具体内容。3.4 双向能力Sampling 和 Elicitation除了上面三种 Server → Client 的原语MCP 还定义了两种反向能力Sampling采样Server 可以请求 Client 调用 LLM 进行推理。这意味着 Server 不只是被动等待调用它可以在处理过程中主动请求 AI 的帮助。Elicitation引出Server 可以在执行过程中向用户提问。比如一个支付 Server 在扣款前可以弹出确认框让用户确认金额。这两种能力让 MCP 从单向调用变成了双向协作。Sampling 最早在 2025-06-18 规范中引入当时称为 human-in-the-loop2025-11-25 规范对其进行了增强并新增了 URL 模式的 Elicitation。4. 治理与生态从 Anthropic 到行业标准4.1 AAIF 与 Linux 基金会MCP 最初由 Anthropic 于 2024 年 11 月发布。随着 OpenAI、Google、Microsoft 等巨头纷纷采纳Anthropic 意识到一个由单一公司控制的协议无法获得行业的完全信任。2025 年 12 月Anthropic 将 MCP 捐赠给 Linux 基金会新成立的Agentic AI FoundationAAIF。这是一个专注于智能体 AI 技术的开放基金会采用 Linux 基金会成熟的治理模式。AAIF 的创始成员阵容说明了 MCP 的行业地位角色成员联合创始人Anthropic、OpenAI、Block支持成员AWS、Google、Microsoft、Cloudflare、GitHub、Bloomberg 等这意味着MCP 不再属于任何单一公司而是行业共同拥有的开放标准技术决策由社区驱动通过技术指导委员会和贡献者共识做出企业可以放心投资不用担心被单一厂商锁定或协议被随意更改AAIF 的治理模式借鉴了 Kubernetes、CNCF 等成功的开源项目经验。Jim ZemlinLinux 基金会执行董事在 AAIF 成立时表示那些在 AI 模型上竞争的公司正在 AAIF 内部协作建设让智能体协同工作的基础设施。4.2 MCP RegistryMCP Registryregistry.modelcontextprotocol.io是 MCP 生态的应用商店于 2025 年 9 月上线。它的定位是MCP 服务器的权威元数据仓库——一个统一的发现入口让开发者知道有哪些 MCP 服务器可以用。核心设计原则单一事实来源所有公开可用的 MCP 服务器的权威元数据厂商中立不偏袒任何特定服务器或组织安全标准利用现有包管理器npm、PyPI、Docker的安全机制元注册表Registry 只存元数据服务器描述、安装方式不存实际代码每个 Registry 条目使用标准化的server.json格式{name:io.github.user/my-server,description:我的 MCP 服务器,version:1.0.0,packages:[{registryType:npm,identifier:my-mcp-server}]}到 2026 年 5 月官方 Registry 已收录近2000 个MCP 服务器而更广泛的社区生态已超过 10,000 个活跃服务器覆盖从 GitHub、Slack、数据库到金融、医疗等各个领域。4.3 主流客户端支持MCP 已经获得了几乎所有主流 AI 客户端的支持客户端厂商本地 Server远程 ServerOAuth 支持Claude DesktopAnthropic✅✅✅ChatGPTOpenAI⚠️✅✅CursorCursor Inc.✅✅✅VS Code CopilotMicrosoft✅✅✅KiroAWS✅✅✅OpenCode开源社区✅✅✅⚠️ 说明ChatGPT 的 MCP 支持目前在 Developer Mode测试版中可用主要面向远程 Server。本地 Server 需通过隧道如 localtunnel暴露为远程地址后才能连接。Kiro 说明Kiro 由 AWS 团队开发但定位为独立的 agentic IDE 产品不绑定 AWS 账号支持 Google/GitHub 登录。详见 kiro.dev。Python 和 TypeScript SDK 的月下载量合计约9700 万次数据来源MCP SDK 下载统计2026 年 3 月。整个 MCP 生态已有超过10,000 个活跃服务器和177,000 个注册工具来源arXiv 论文。这些数字说明 MCP 已经不是一个实验性协议而是事实上的行业标准。5. 实战感受 MCP 的工作流说了这么多概念不如亲手体验一下。下面我们用 FastMCPPython SDK搭建一个最简单的 MCP Server感受完整的工作流。5.1 环境准备# 需要 Python 3.11python--version# 安装 FastMCPpipinstallfastmcp依赖fastmcp3.0FastMCP 3.0 于 2026 年 2 月 18 日 GA当前最新 v3.1.1,python3.115.2 创建 MCP Server创建文件my_first_server.pyfromdatetimeimportdatetimefromfastmcpimportFastMCP# 创建 MCP Server 实例mcpFastMCP(我的第一个服务器)# 定义一个 Tool查询当前时间mcp.tool()defget_current_time()-str:获取当前时间returndatetime.now().strftime(%Y-%m-%d %H:%M:%S)# 定义一个 Tool做加法mcp.tool()defadd(a:float,b:float)-str:计算两个数的和returnf{a}{b}{ab}# 定义一个 Resource服务器信息mcp.resource(info://server)defserver_info()-str:返回服务器基本信息return这是一个 MCP 入门示例服务器提供时间和计算工具。# 启动服务器STDIO 模式if__name____main__:mcp.run()这段代码做了三件事创建了一个名为我的第一个服务器的 MCP Server注册了两个 Toolget_current_time和add和一个 Resourceinfo://server以 STDIO 模式启动5.3 用 FastMCP CLI 测试FastMCP 自带了开发测试工具不需要配置完整的 AI 客户端就能测试# 以开发模式运行可以在终端中交互式测试fastmcp dev my_first_server.py预期输出浏览器打开 MCP Inspector 界面你可以看到Tools标签下列出get_current_time和add两个工具Resources标签下列出info://server资源你可以在界面上手动调用工具查看返回结果5.4 配置到 Claude Desktop如果你想在 Claude Desktop 中使用这个 Server编辑配置文件macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.jsonLinux:~/.config/Claude/claude_desktop_config.json{mcpServers:{my-first-server:{command:python,args:[/绝对路径/my_first_server.py]}}}重启 Claude Desktop 后你就能在对话中使用这些工具了。试着问 Claude现在几点了它会自动调用get_current_time工具。5.5 预期效果当你问 Claude “帮我算一下 42 加 58” 时Claude 会识别到需要计算从工具列表中找到add工具构造调用add(a42, b58)通过 MCP 协议发送给 ServerServer 返回 “42.0 58.0 100.0”Claude 用自然语言回答“42 加 58 等于 100”整个过程你只需要写十几行 Python 代码不需要了解任何 Claude API 或网络编程。6. 深入理解为什么这样设计6.1 Host 和 Client 为什么要分开你可能会问既然 Client 总是内嵌在 Host 中为什么不把它们合成一个概念原因是一个 Host 需要同时管理多个连接。Claude Desktop 可能同时连着 GitHub Server、Slack Server、数据库 Server每个连接都有自己的状态、能力、权限。将 Client 抽象出来每个 Client 只负责一个连接职责清晰便于管理。类比一下Host 是一个项目经理Client 是项目经理派出的各个联络人。每个联络人对接一个外包团队Server项目经理通过联络人了解各团队的状态并分配任务。6.2 为什么用 JSON-RPC 而不是 RESTMCP 选择 JSON-RPC 2.0 而不是更常见的 REST API有几个原因维度REST APIJSON-RPC 2.0通信模式请求-响应请求-响应 通知单向消息连接方式无状态有状态会话能力协商需要额外机制如 OpenAPI协议内置双向通信需要 WebSocket 补充原生支持通知和请求MCP 需要有状态会话Client 连接 Server 后要维持上下文、双向通知Server 可以通知 Client 工具列表变了、能力协商握手阶段互相声明支持的功能。JSON-RPC 2.0 天然支持这些特性而 REST 需要大量额外约定。6.3 安全边界在哪里MCP 的安全模型基于一个核心原则Host 是安全的最终裁决者。Server 不能直接访问 LLM必须通过 Client 中转Host 可以审查所有消息Server 不能绕过 Host 直接操作用户数据访问范围由 Host 通过 Roots 机制限定敏感操作需要用户确认Host 可以配置哪些工具调用需要用户批准这意味着即使 MCP Server 有安全漏洞或恶意行为它也无法直接触达用户的敏感数据——因为 Host 作为守门人控制着所有数据流向。但这也意味着Host 的安全实现至关重要。一个不负责任的 Host比如允许所有工具调用不经过用户确认会让整个安全模型形同虚设。这也是为什么我们在后面的章节会专门讲 MCP 安全。7. 常见误区在学习 MCP 的过程中有几个常见误区值得注意误区 1“MCP 就是给 AI 加插件”不完全对。插件系统通常是封闭的、由平台控制的。MCP 是开放协议任何人可以实现 Server 或 Client不需要平台审批。而且 MCP 强调的是协议标准化不是功能扩展。误区 2“有了 Function Calling 就不需要 MCP”Function Calling 是模型层面的能力模型决定调用什么函数MCP 是连接层面的协议函数的实际发现、调用、结果传输。两者互补而非替代。Function Calling 解决模型怎么决定调用MCP 解决调用怎么实际执行。误区 3“MCP 只适合本地开发”早期 MCP 确实以 STDIO 本地传输为主。但 2025-06 规范引入了 Streamable HTTP即将发布的 2026-07-28 RC 更计划引入无状态核心设计让 MCP Server 可以在云端水平扩展。MCP 已经是生产级的协议了。误区 4“MCP 是 Anthropic 的私有协议”曾经是但现在不是了。2025 年 12 月MCP 已捐赠给 Linux 基金会下的 AAIF由 OpenAI、Anthropic、Block 联合创始AWS、Google、Microsoft 等共同参与治理。它是一个真正的行业标准。总结MCP 是 AI 领域的USB-C它通过标准化协议解决了 N×M 集成问题让 AI 应用可以建一次到处用。这是 MCP 存在的根本原因。三个角色各司其职Host宿主负责协调和安全Client客户端负责协议通信Server服务器负责暴露外部能力。你作为开发者主要做的是实现 Server 端。三种核心原语定义能力Tools 是可执行操作Resources 是只读数据Prompts 是标准化模板。加上 Sampling 和 Elicitation 两种反向能力构成了完整的协作模型。MCP 已经是行业标准AAIF 治理、MCP Registry、9700 万月下载量、所有主流客户端支持——这些都说明 MCP 不再是实验品而是生产级基础设施。安全模型以 Host 为核心Host 是安全的最终裁决者控制着所有数据流向。这意味着 Host 的安全实现质量直接决定了整个系统的安全性。下篇预告理论讲完了下一篇我们动手。《5 分钟搭建第一个 MCP 服务器》将带你从零开始用 FastMCP 搭建一个真正有用的 MCP Server——不只是 Hello World而是一个能查询数据库、调用 API 的实战级服务器。附录参考资料MCP 官方文档MCP 官方博客AAIF 官网MCP RegistryMCP GitHub 仓库Anthropic MCP 发布公告Linux Foundation AAIF 成立公告Everything your team needs to know about MCP in 2026FastMCP 官方文档MCPShield: A Formal Security Framework for MCP-Based AI Agents