Skip to content

MCP 协议的架构包含哪些核心组件?Server 和 Client 分别负责什么? ​

  • 标签:AI、大模型、Agent

🏛 业务架构师 ​

MCP 架构三角色 + 三类能力:

Client(客户端):嵌在 Host 应用里的协议连接器,负责与 Server 建立会话、能力协商、消息收发。开发者一般不直接操作它,但它承接着"发现工具列表→传递调用请求→接收结果"的协议职责。

Server(服务端):能力提供方,暴露三类标准能力:

  • Tools(工具):可执行的动作(创建工单、查询库存)——有副作用,需要权限管控;
  • Resources(资源):可读取的数据(文件、配置、数据库记录)——只读、可缓存;
  • Prompts(提示模板):预制的提示词方案——把最佳实践封装复用。

Host(宿主应用):Claude Desktop、Cursor、企业自研 Agent 平台等终端应用,聚合多个 Client,面向用户。

职责划分的业务意义:Server 归"能力供给方"(业务系统团队)建设和维护——他们最懂接口和口径;Host 归"应用方"组合编排;Client 是协议粘合剂。这天然形成了企业内的分工界面:中台团队建 MCP Server 市场(注册、鉴权、审计、版本),业务团队做 Host 应用按需订阅——像 API 治理一样治理 AI 能力。

2026 年实践提醒:Server 的远程化部署(HTTP 传输+OAuth2)已成为生产主流,别再让工具能力散落在员工本机;每个 Server 要有 Owner 和 SLA,无主 Server 是安全隐患。

🏗 系统架构师 ​

MCP 架构的Host-Client-Server 三组件,我按职责与边界讲:

  • Host(宿主应用):承载 LLM 与用户交互的应用本体(IDE、Claude Desktop、自研 Agent 平台)——拥有用户会话与最终决定权:工具是否暴露给模型、调用是否放行、结果如何处理。安全责任主要在这里(不可信的 Server 输出不能直接进上下文);
  • Client(协议客户端):Host 内部的协议连接器,与 Server 一一对应(一个 Host 挂 N 个 Client)——负责 JSON-RPC 消息编解码、初始化握手、能力协商、请求关联与超时。它把协议复杂度从 Host 业务逻辑中隔离出来;
  • Server(能力提供方):暴露三类原语——Tools(可执行动作,模型可触发)、Resources(可读数据:文件、记录、数据库行)、Prompts(可复用提示模板)。部署形态:本地子进程(stdio)或远程服务(Streamable HTTP)。

职责分界的关键设计:Client/Server 分离实现了进程与故障隔离——Server 崩溃只影响该能力,不拖垮 Host;权限可以在 Client 层统一收口(审计、限流);能力协商(capabilities 交集)保证前后兼容。

架构师点评:这就是经典的"应用 - 驱动 - 设备"三层(类比 USB:Host 是电脑、Client 是控制器、Server 是外设)。生产上补一块:MCP 网关——多 Server 的统一注册、鉴权、审计、限流,否则 N 个直连 Server 的治理成本失控。

💻 全栈开发专家 ​

MCP 架构三角色 + 各自职责:

Host(宿主应用):跑 LLM 的应用——Claude Desktop、Cursor、IDE、我们的 Agent 服务。职责:聚合多个 Server 的能力、把工具定义转成模型可用的格式、执行授权决策(弹窗让用户确认)、驱动 Agent 循环。它是「大脑所在、责任所在」。

Client(客户端连接器):内嵌在 Host 里的协议端点,与一个 Server 维持 1:1 连接。职责:JSON-RPC 消息编解码、能力协商(initialize 握手)、订阅工具/资源变更通知。Host 要接 N 个 Server 就有 N 个 Client——隔离性是设计意图:单个 Server 崩溃不拖垮 Host。

Server(能力提供方):独立进程或服务,封装对外的数据与操作。暴露三类原语:

  • Tools:可执行函数(有副作用),模型主动调用(查库、发请求);
  • Resources:只读数据(文件、表结构、日志),应用控制加载;
  • Prompts:预置提示模板,人发起复用。
Host(Claude/IDE/Agent应用)
 ├─ Client[1] ←stdio→ Server[git]
 ├─ Client[2] ←stdio→ Server[postgres]
 └─ Client[3] ←HTTP→  Server[内部API](远程,OAuth)

传输两种:stdio(本地子进程,stdout 通信)和 Streamable HTTP(远程服务化)。

开发落地:Java 侧 spring-ai-starter-mcp-server 暴露 @Tool 方法、starter-mcp-client 接外部 Server;排查看协议日志(--mcp-log-level),80% 的集成问题出在能力协商和 schema 不兼容。