架构:客户端、服务器与宿主
MCP 的架构围绕三个角色展开:宿主(Host)是用户面对的 AI 应用,客户端(Client)在宿主内与服务器对话,服务器(Server)对外提供能力。理解三角色的分工,才能读懂连接模型与后面的开发章节。
三个角色
- 宿主 Host:承载用户体验的应用,如 Claude Desktop、IDE、自研聊天机器人;负责界面、权限确认与模型调用。
- MCP 客户端 Client:宿主内嵌的协议组件,一个客户端与一台服务器保持 1:1 连接,负责发请求、收响应、处理通知。
- MCP 服务器 Server:暴露工具/资源/提示词的程序,通常独立进程运行,可以是本地命令,也可以是远程 HTTP 服务。
| 角色 | 数量关系 | 职责 |
|---|---|---|
| Host | 1(每应用) | 组织 UI、授权、模型调用 |
| MCP Client | 每台 Server 1 个 | 协议会话、消息收发 |
| MCP Server | 可多个 | 提供能力并执行 |
一次请求的旅程
用户在宿主里提问,模型决定调用某个工具时,消息这样流转:
- 宿主内的模型推理产生"调用某工具"的意图;
- 宿主先向用户展示该工具并请求授权(如需);
- MCP 客户端把调用包装成 JSON-RPC 发给对应服务器;
- 服务器执行真实动作并返回结构化结果;
- 客户端把结果交回宿主,注入模型上下文继续生成。
# 示意:工具调用在客户端眼中只是一条 JSON-RPC 消息
{"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {"name": "get_weather", "arguments": {"city": "上海"}}}
多服务器架构
一个宿主可同时连多台服务器,形成"一对多"结构(文字版示意):
# 宿主 Host(Claude Desktop / IDE / 自研应用)——一对多架构示意
# ├── MCP Client A ──▶ 服务器 A(文件系统,stdio 本地子进程)
# ├── MCP Client B ──▶ 服务器 B(数据库,stdio 本地子进程)
# └── MCP Client C ──▶ 服务器 C(内部 API,Streamable HTTP 远程)
每台服务器只提供自己那组能力,客户端按需发现与调用,互不干扰。
连接与进程模型
- 本地连接:客户端把服务器作为子进程拉起,通过标准输入/输出通信,进程退出即连接结束(stdio 传输)。
- 远程连接:服务器部署为独立 HTTP 服务,客户端用网络请求访问,通常还需授权(Streamable HTTP 传输)。 两种传输在第 6 章详述,进程模型与部署形态由此决定。
官方 SDK
官方维护的参考 SDK 以 TypeScript 与 Python 为主;生态里还有 Java、Go、C#、Rust、Kotlin 等多语言实现。语言与版本清单更新较快,请以 modelcontextprotocol.io 官方规范与 SDK 文档为准。
小结
MCP 架构可记成一句话:宿主内嵌多个客户端,每个客户端一对一连接一台服务器,服务器用标准接口把能力交给模型调用。下一章讲解服务器到底能暴露哪三类能力——原语。