跳到主要内容

MCP 协议架构

问题

MCP 的三层架构(Host/Client/Server)是如何协作的?协议的生命周期是怎样的?

答案

一、三层架构详解

层级职责关键特性
Host管理所有 Client,控制权限和安全Claude Desktop、VS Code、自建应用
Client与 Server 1:1 通信协议协商、能力发现、消息路由
Server暴露 Tools/Resources/Prompts轻量进程,专注能力提供

二、协议生命周期

三、能力协商(Capabilities)

初始化时双方声明支持的能力:

// Client 能力
{
capabilities: {
roots: { listChanged: true }, // 支持根目录列表变更通知
sampling: {} // 支持 LLM 采样请求
}
}

// Server 能力
{
capabilities: {
tools: { listChanged: true }, // 提供工具,支持工具列表变更
resources: { subscribe: true }, // 提供资源,支持订阅
prompts: { listChanged: true }, // 提供 Prompt 模板
logging: {} // 支持日志
}
}

四、消息协议:JSON-RPC 2.0

MCP 基于 JSON-RPC 2.0,有三种消息类型:

// 1. Request(需要响应)
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "query_db",
"arguments": { "sql": "SELECT * FROM users LIMIT 10" }
}
}

// 2. Response(对 Request 的回复)
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [{ "type": "text", "text": "查询到 10 条记录..." }]
}
}

// 3. Notification(无需响应)
{
"jsonrpc": "2.0",
"method": "notifications/tools/list_changed"
}

五、安全模型

安全原则
  • 用户确认:敏感工具调用需用户明确同意(Human-in-the-loop)
  • 最小权限:Server 只暴露必要的工具和资源
  • 隔离性:不同 Server 间的数据互不可见

常见面试问题

Q1: Host、Client、Server 三者的关系?

答案

  • Host 是 AI 应用(如 Claude Desktop),负责管理多个 Client
  • Client 与 Server 1:1 对应,维护一个 MCP 会话
  • Server 是工具提供者,一个 Server 提供一组相关能力
  • Host 内可有多个 Client,分别连接不同 Server

Q2: 为什么用 JSON-RPC 2.0 而不直接用 REST?

答案

  • MCP 需要双向通信(Client ↔ Server),不是简单的请求-响应
  • JSON-RPC 支持通知(无需响应)和批量调用
  • JSON-RPC 更轻量,适合 stdio/SSE 等非 HTTP 传输
  • REST 是资源导向的,MCP 是过程调用导向

相关链接