MCP 架构:Client-Server 模型 本节摘要:MCP 的架构分三层:Host(你的 IDE)→ Client(协议适配层)→ Server(实际干活的进程)。理解这个分层,你就能明白为什么「一个 Server 能被所有 IDE 使用」、为什么配置里要写 和 、以及 stdio 和 SSE 两种传输方式各自适合什么场景。本节用一张架构图和逐步拆解,把 MCP 的通信机制讲透。
本节摘要:MCP 的架构分三层:Host(你的 IDE)→ Client(协议适配层)→ Server(实际干活的进程)。理解这个分层,你就能明白为什么「一个 Server 能被所有 IDE 使用」、为什么配置里要写
command和args、以及 stdio 和 SSE 两种传输方式各自适合什么场景。本节用一张架构图和逐步拆解,把 MCP 的通信机制讲透。
三层各自的职责:
| 层 | 是什么 | 做什么 |
|---|---|---|
| Host | 你的 IDE(Cursor / VS Code 等) | 管理多个 Client;决定 AI 能调用哪些 Tool;展示确认对话框 |
| Client | Host 内部的协议适配器 | 维护与一个 Server 的 1:1 连接;处理协议消息的编解码 |
| Server | 独立进程(本地或远程) | 暴露 Tool / Resource / Prompt;实际执行操作(读文件、查数据库等) |
关键概念:一个 Host 可以同时连接多个 Server(通过多个 Client)。比如你的 Cursor 同时连着 Filesystem Server、Search Server 和 Database Server——AI 根据需要选择调用哪个。
一个 MCP 连接从建立到关闭,经历以下阶段:
npx @modelcontextprotocol/server-filesystem /path/to/dir)💡 技巧:如果 AI 说「我没有这个工具」或「无法执行此操作」,很可能是 Server 没有正常启动或能力协商失败。检查 IDE 的 MCP 面板,看 Server 状态是否为「Connected」。
MCP 支持两种传输方式,适用场景不同:
command(如 npx、python)和 args(参数)http://localhost:3001/sse)选择规则:
Server 启动后,第一件事是「自我介绍」——告诉 Client 自己能做什么:
Server → Client: "我有以下能力: Tools: [read_file, write_file, list_directory] Resources: [file:///{path}] Prompts: []"
Client 收到后,把这些信息汇总给 Host。Host 再把所有已连接 Server 的能力合并,注入到 AI 的上下文中。这就是为什么 AI「知道」它可以调用 read_file——不是硬编码的,而是 Server 动态声明的。
这意味着:
MCP 底层用 JSON-RPC 2.0 格式通信。你不需要手写这些消息(IDE 和 SDK 会处理),但了解格式有助于调试:
请求示例(Client → Server,调用 Tool):
{ "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "read_file", "arguments": { "path": "/src/main.py" } }, "id": 1 }
响应示例(Server → Client):
{ "jsonrpc": "2.0", "result": { "content": [{ "type": "text", "text": "文件内容..." }] }, "id": 1 }
⚠️ 注意:日常使用不需要关心消息格式。但如果你开发自定义 Server(第 05 节)或排查连接问题,理解 JSON-RPC 格式能帮你快速定位问题(比如用 MCP Inspector 工具查看实际通信内容)。
架构清楚了,下一步就是动手:在你的 IDE 中配置第一个 MCP Server。