架构:客户端、服务器与宿主

MCP 的架构围绕三个角色展开:宿主(Host)是用户面对的 AI 应用,客户端(Client)在宿主内与服务器对话,服务器(Server)对外提供能力。理解三角色的分工,才能读懂连接模型与后面的开发章节。

三个角色

MCP 架构:宿主-客户端-服务器

  • 宿主 Host:承载用户体验的应用,如 Claude Desktop、IDE、自研聊天机器人;负责界面、权限确认与模型调用。
  • MCP 客户端 Client:宿主内嵌的协议组件,一个客户端与一台服务器保持 1:1 连接,负责发请求、收响应、处理通知。
  • MCP 服务器 Server:暴露工具/资源/提示词的程序,通常独立进程运行,可以是本地命令,也可以是远程 HTTP 服务。
角色数量关系职责
Host1(每应用)组织 UI、授权、模型调用
MCP Client每台 Server 1 个协议会话、消息收发
MCP Server可多个提供能力并执行

一次请求的旅程

用户在宿主里提问,模型决定调用某个工具时,消息这样流转:

  1. 宿主内的模型推理产生"调用某工具"的意图;
  2. 宿主先向用户展示该工具并请求授权(如需);
  3. MCP 客户端把调用包装成 JSON-RPC 发给对应服务器;
  4. 服务器执行真实动作并返回结构化结果;
  5. 客户端把结果交回宿主,注入模型上下文继续生成。
# 示意:工具调用在客户端眼中只是一条 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 架构可记成一句话:宿主内嵌多个客户端,每个客户端一对一连接一台服务器,服务器用标准接口把能力交给模型调用。下一章讲解服务器到底能暴露哪三类能力——原语。

笔记加载中…