Administrator
发布于 2025-03-23 / 64 阅读
0
0

Model Context Protocol (MCP) 架构

概述

Model Context Protocol (MCP) 是一个基于客户端-服务器架构的开放协议,用于连接大型语言模型 (LLM) 应用和各类数据源与工具。MCP 由 Anthropic 主导开发,并于 2024 年 11 月开源。核心架构包括:

  • 宿主(Hosts): LLM 应用程序(如 Claude Desktop 或 IDE),负责发起连接

  • 客户端(Clients): 在宿主应用程序内部维护与服务器的 1:1 连接

  • 服务器(Servers): 向客户端提供上下文、工具和提示

MCP 的价值

MCP 解决了 AI 系统集成中的几个关键问题:

  • 简化集成复杂度:将 N×M 集成问题(N个AI应用需要与M个数据源分别集成)转变为 N+M 问题(每个应用和数据源只需实现一次 MCP 协议)

  • 提供实时信息访问:使 AI 模型能够连接到最新的信息源,减少"幻觉"问题

  • 促进标准化:建立通用设计模式,简化开发流程

  • 支持复杂 AI 代理:通过维持跨工具和数据集的上下文,支持更复杂的 AI 代理系统

核心组件

协议层 (Protocol Layer)

协议层处理消息框架、请求/响应链接和高级通信模式:

class Protocol<Request, Notification, Result> {
    // 处理传入请求
    setRequestHandler<T>(schema: T, handler: (request: T, extra: RequestHandlerExtra) => Promise<Result>): void
​
    // 处理传入通知
    setNotificationHandler<T>(schema: T, handler: (notification: T) => Promise<void>): void
​
    // 发送请求并等待响应
    request<T>(request: Request, schema: T, options?: RequestOptions): Promise<T>
​
    // 发送单向通知(只发送不返回)
    notification(notification: Notification): Promise<void>
}

传输层 (Transport Layer)

传输层处理客户端和服务器之间的实际通信。MCP 支持多种传输机制:

  1. 标准输入/输出传输 (Stdio Transport)

    • 使用标准输入/输出进行通信

    • 适用于本地进程

  2. HTTP 与 SSE 传输

    • 使用服务器发送事件 (Server-Sent Events) 实现服务器到客户端的消息传递

    • 使用 HTTP POST 实现客户端到服务器的消息传递

所有传输均使用 JSON-RPC 2.0 交换消息。

消息类型

MCP 有四种主要的消息类型:

  1. 请求 (Requests): 期望从另一方得到响应

    interface Request {
      method: string;
      params?: { ... };
    }
  2. 结果 (Results): 请求的成功响应

    interface Result {
      [key: string]: unknown;
    }
  3. 错误 (Errors): 表示请求失败

    interface Error {
      code: number;
      message: string;
      data?: unknown;
    }
  4. 通知 (Notifications): 单向消息,不期望响应

    interface Notification {
      method: string;
      params?: { ... };
    }

连接生命周期

1. 初始化

  1. 客户端发送 initialize 请求,包含协议版本和功能

  2. 服务器响应其协议版本和功能

  3. 客户端发送 initialized 通知作为确认

  4. 开始正常的消息交换

2. 消息交换

初始化后,支持以下模式:

  • 请求-响应: 客户端或服务器发送请求,另一方响应

  • 通知: 任一方发送单向消息

3. 终止

连接可通过以下方式终止:

  • 通过 close() 进行干净的关闭

  • 传输断开连接

  • 错误条件

错误处理

MCP 定义了标准错误代码:

enum ErrorCode {
  // 标准 JSON-RPC 错误代码
  ParseError = -32700,
  InvalidRequest = -32600,
  MethodNotFound = -32601,
  InvalidParams = -32602,
  InternalError = -32603
}

SDK 和应用程序可以定义自己的高于 -32000 的错误代码。

MCP 生态系统

Anthropic 已经启动了 MCP 的三个主要组件:

  1. MCP 规范和 SDK:提供协议的详细说明和开发工具包

  2. Claude Desktop 应用中的本地 MCP 服务器支持:允许 Claude 读取和写入计算机文件系统

  3. 开源 MCP 服务器仓库:预构建的 MCP 服务器,用于连接到各种流行服务和数据源

预构建的 MCP 服务器

Anthropic 提供了多个预构建的 MCP 服务器,包括:

  • Google Drive

  • Slack

  • GitHub

  • Git

  • Postgres

  • Puppeteer

生态系统合作伙伴

多家公司已经采用或正在集成 MCP:

  • Block 和 Apollo:已将 MCP 集成到其系统中

  • Zed、Replit、Codeium 和 Sourcegraph:正在使用 MCP 增强其开发平台

参考链接


评论