Skip to content
📖0 阅读·🤍0 点赞

Model Context Protocol (MCP) 架构详解

简介

Model Context Protocol (MCP) 是一个开放协议,用于连接 AI 应用程序与外部数据源和工具。通过 MCP,AI 应用可以安全地访问各种上下文信息,执行操作,并与外部系统交互。

项目组成

MCP 包含以下项目组件:

组件说明
MCP 规范定义 MCP 的实现规范,概述客户端和服务器的实现要求
MCP SDK为不同编程语言提供的 MCP 实现 SDK
MCP 开发工具用于开发 MCP 服务器和客户端的工具,包括 MCP Inspector
MCP 参考服务器实现MCP 服务器的参考实现

核心概念

参与者

MCP 采用客户端-服务器架构,其中 MCP 主机(如 Claude Code 或 Claude Desktop 等 AI 应用)与一个或多个 MCP 服务器建立连接。MCP 主机通过为每个 MCP 服务器创建一个 MCP 客户端来实现这一点。每个 MCP 客户端与其对应的 MCP 服务器维持专用连接。

┌─────────────────────────────────────────────────────────────────┐
│                        MCP Host (AI 应用)                         │
│                     (Claude Desktop / VSCode)                     │
├─────────────────────────────────────────────────────────────────┤
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐          │
│  │  MCP Client  │  │  MCP Client  │  │  MCP Client  │  ...      │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘          │
└─────────┼──────────────────┼──────────────────┼─────────────────┘
          │                  │                  │
          ▼                  ▼                  ▼
  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐
  │  MCP Server  │  │  MCP Server  │  │  MCP Server  │
  │  (Filesystem)│  │   (Sentry)   │  │   (Database) │
  └──────────────┘  └──────────────┘  └──────────────┘

MCP 架构中的关键角色

角色说明
MCP 主机 (Host)协调和管理的 AI 应用程序,管理一个或多个 MCP 客户端
MCP 客户端 (Client)维护与 MCP 服务器连接的组件,从 MCP 服务器获取上下文供主机使用
MCP 服务器 (Server)向 MCP 客户端提供上下文的程序

服务器类型

MCP 服务器可以本地运行远程运行

  • 本地 MCP 服务器:使用 STDIO 传输层,通常在同一台机器上运行,服务单个 MCP 客户端

    • 示例:Claude Desktop 启动的文件系统服务器
  • 远程 MCP 服务器:使用 Streamable HTTP 传输层,通常运行在远程平台上,服务多个 MCP 客户端

    • 示例:运行在 Sentry 平台上的官方 Sentry MCP 服务器

实例说明

以 Visual Studio Code 为例:

  1. VSCode 作为 MCP 主机
  2. 当 VSCode 连接到 Sentry MCP 服务器时,VSCode 运行时创建一个 MCP 客户端对象来维护连接
  3. 当 VSCode 再连接到本地文件系统服务器时,创建另一个 MCP 客户端对象来维护此连接

协议层级

MCP 由两个层级组成:

┌─────────────────────────────────────────────────────────────┐
│                     Transport Layer (传输层)                   │
│  ┌──────────────────────┐  ┌──────────────────────────────┐ │
│  │   Stdio Transport    │  │  Streamable HTTP Transport   │ │
│  │  (标准输入/输出流)     │  │  (HTTP POST + SSE)           │ │
│  └──────────────────────┘  └──────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│                      Data Layer (数据层)                      │
│              基于 JSON-RPC 2.0 的交换协议                      │
├─────────────────────────────────────────────────────────────┤
│  Lifecycle  │  Server  │  Client  │  Utility  │  Primitives │
│  Management │ Features │ Features │ Features  │             │
└─────────────────────────────────────────────────────────────┘

数据层 (Data Layer)

数据层实现基于 JSON-RPC 2.0 的交换协议,定义消息结构和语义:

功能说明
生命周期管理处理客户端和服务器之间的连接初始化、能力协商和连接终止
服务器功能服务器提供的核心功能:工具、资源、提示模板
客户端功能客户端提供的功能:LLM 采样、用户输入请求、日志记录
实用功能通知(实时更新)和进度跟踪(长时间运行操作)

传输层 (Transport Layer)

传输层管理客户端和服务器之间的通信通道和身份验证:

传输机制说明
Stdio 传输使用标准输入/输出流进行本地进程间通信,无网络开销,性能最优
Streamable HTTP 传输使用 HTTP POST 发送消息,支持 Server-Sent Events 流式传输,支持远程服务器通信,支持标准 HTTP 身份验证

数据层协议

原语 (Primitives)

MCP 原语是 MCP 中最重要的概念,定义了客户端和服务器可以相互提供的内容。

服务器原语

服务器可以暴露的三种核心原语:

原语说明示例
工具 (Tools)AI 应用可调用的可执行函数文件操作、API 调用、数据库查询
资源 (Resources)提供上下文信息的数据源文件内容、数据库记录、API 响应
提示 (Prompts)构建语言模型交互的可重用模板系统提示、少样本示例

每个原语类型都有相关方法用于发现(*/list)、检索(*/get),有些情况下还包括执行(tools/call)。

示例:数据库 MCP 服务器

一个提供数据库上下文的 MCP 服务器可以暴露:

  • 工具:查询数据库
  • 资源:数据库架构
  • 提示:与工具交互的少样本示例

客户端原语

客户端可以暴露的原语,允许 MCP 服务器作者构建更丰富的交互:

原语说明方法
采样 (Sampling)服务器请求客户端 AI 应用提供语言模型补全sampling/complete
引出 (Elicitation)服务器请求用户提供额外信息或确认操作elicitation/request
日志 (Logging)服务器向客户端发送日志消息用于调试和监控日志消息

实用原语

跨越服务器和客户端的实用原语:

原语说明
任务 (Tasks)实验性功能:持久执行包装器,支持延迟结果检索和状态跟踪

通知 (Notifications)

协议支持实时通知,实现服务器和客户端之间的动态更新。

例如:

  • 当服务器的可用工具发生变化时(新功能可用或现有工具被修改)
  • 服务器可以发送工具更新通知,告知连接的客户端这些变化

通知作为 JSON-RPC 2.0 通知消息发送(不期望响应),使 MCP 服务器能够向连接的客户端提供实时更新。


工作流程示例

数据层交互流程

以下是 MCP 客户端-服务器交互的分步演示:

1. 初始化 (Initialize)
   Client → Server: initialize
   Server → Client: initialize response (capabilities)

2. 发现工具 (List Tools)
   Client → Server: tools/list
   Server → Client: tools/list response (available tools)

3. 调用工具 (Call Tool)
   Client → Server: tools/call
   Server → Client: tools/call response (result)

4. 接收通知 (Notification)
   Server → Client: notification (tool list changed)

这个流程展示了:

  1. 生命周期序列:连接初始化和能力协商
  2. 工具操作:发现和执行
  3. 通知:动态更新机制

总结

Model Context Protocol (MCP) 的架构设计具有以下特点:

特性说明
模块化数据层与传输层分离,支持多种传输机制
可扩展通过原语机制,服务器可以灵活提供功能
标准化基于 JSON-RPC 2.0,易于实现和互操作
实时性支持通知机制,实现动态更新
安全传输层支持多种身份验证机制

对于开发者来说,数据层协议(特别是原语机制)是最值得关注的部分,因为它定义了开发者可以从 MCP 服务器向 MCP 客户端共享上下文的方式。


参考资源

💬

评论功能

当前站点为 GitHub Pages 镜像版本,不支持评论功能。

如需发表评论,请访问主域名版本:

🚀 前往 主域名 版本评论
✅ 支持文字评论
✅ 支持图片上传

用代码书写人生 | This site is powered by Netlify

🌙