菜单

MCP 协议

相关源文件

目的与范围

模型控制协议 (MCP) 是一种通信协议,旨在促进 LLM 驱动的应用程序与其支持服务之间的交互。本文档解释了 mcp-go 库中实现的 MCP 协议的基本组成部分、消息结构和通信模式。有关资源(Resources)、提示(Prompts)和工具(Tools)实现的具体信息,请参阅相应的页面:资源提示工具

来源: mcp/types.go1-3

协议概述

MCP 协议遵循基于 JSON-RPC 2.0 的架构,旨在促进客户端和服务器之间的标准化通信。它提供了一种结构化的方式来管理 LLM 驱动的应用程序中的资源、执行提示和调用工具。

该协议是版本化的,最新版本在代码中指定为 LATEST_PROTOCOL_VERSION

来源: mcp/types.go73-81

消息结构

MCP 协议以 JSON-RPC 2.0 为基础,采用标准化消息类型处理请求、响应、通知和错误。

核心消息类型

每种消息类型在协议中都有特定的用途

消息类型目的
JSONRPCRequest由客户端或服务器发送以请求操作,需要响应
JSONRPCResponse作为对请求的回复发送,包含操作结果
JSONRPCError当请求失败时发送,包含错误详情
JSONRPCNotification异步发送,不需要响应

来源: mcp/types.go74-218

协议方法

协议为不同的操作定义了特定的方法

来源: mcp/types.go11-49

协议初始化

在客户端和服务器能够有效使用 MCP 进行通信之前,它们必须经过初始化过程,以协商能力和协议版本。

初始化流程

来源: mcp/types.go264-299

能力协商

在初始化过程中,客户端和服务器会交换有关其能力的信息

来源: mcp/types.go304-342

核心协议组件

MCP 协议围绕几个核心组件构建

1. 资源

资源是客户端可以从服务器读取的数据片段。这些数据可以包括文件、数据库记录或任何其他形式的数据。协议提供了列出可用资源、获取资源模板以及读取特定资源的方法。

来源: mcp/types.go399-552

2. 提示

提示是用于生成 LLM 文本输入的模板。协议允许客户端列出可用的提示,并检索已填充参数的特定提示。

来源: mcp/types.go657-698

3. 工具

工具是服务器可以代表客户端执行的功能。协议提供了列出可用工具以及调用带参数的特定工具的方法。

来源: mcp/utils.go207-267

通信模式

MCP 协议支持多种通信模式

请求-响应

最基本的模式是请求-响应,即客户端发送请求,服务器作出响应。

来源: mcp/types.go183-202

通知

通知是单向消息,不需要响应。它们可用于资源更新或日志记录等事件。

来源: mcp/types.go191-195

进度报告

对于长时间运行的操作,协议支持进度通知。

来源: mcp/types.go360-375 mcp/utils.go128-150

取消

该协议还支持取消进行中的请求。

来源: mcp/types.go234-260

错误处理

MCP 中的错误处理遵循 JSON-RPC 2.0 规范,并使用标准化错误代码

错误代码姓名描述
-32700PARSE_ERROR收到无效 JSON
-32600INVALID_REQUEST发送的 JSON 不是有效的请求对象
-32601METHOD_NOT_FOUND方法不存在/不可用
-32602INVALID_PARAMS无效方法参数
-32603INTERNAL_ERROR内部 JSON-RPC 错误

来源: mcp/types.go222-227

协议扩展

MCP 协议旨在可扩展。客户端和服务器功能都包含一个 experimental 字段,可包含自定义扩展。

来源: mcp/types.go304-342 mcp/types.go90-101 mcp/types.go111-171

实用功能

协议包含多项实用功能,以增强通信

分页

对于可能返回大型列表的方法(例如列出资源或工具),协议支持基于游标的分页。

来源: mcp/types.go377-394

日志记录

协议还支持具有不同严重级别的服务器到客户端日志记录。

来源: mcp/types.go554-599

mcp-go 中的实现

mcp-go 仓库提供了 MCP 协议的 Go 语言实现,并附带用于创建和处理各种消息类型的实用函数。这些实用工具通过为常见操作提供类型安全的方法,使使用该协议变得更加容易。

来源: mcp/utils.go8-57 mcp/utils.go207-373

总结

模型控制协议为 LLM 驱动的应用程序与其支持服务之间的通信提供了结构化框架。通过其标准化的消息格式和方法,它实现了以下功能:

  1. 发现和读取资源
  2. 检索和使用提示模板
  3. 发现和调用工具
  4. 进度报告和取消
  5. 事件通知

该协议旨在可扩展,允许未来的增长和定制,同时保持一致的基础结构。

来源: mcp/types.go1-3