> ## Documentation Index
> Fetch the complete documentation index at: https://mcp.transdocs.org/llms.txt
> Use this file to discover all available pages before exploring further.

# 概述

<div id="enable-section-numbers" />

<Info>**协议修订版本**: 草案</Info>

模型上下文协议（Model Context Protocol）由几个关键组件组成，这些组件协同工作：

* **基础协议**：核心 JSON-RPC 消息类型
* **生命周期管理**：连接初始化、能力协商和会话控制
* **授权**：基于 HTTP 传输的认证和授权框架
* **服务器功能**：服务器提供的资源、提示词和工具
* **客户端功能**：客户端提供的采样和根目录列表
* **实用工具**：日志记录、参数补全等通用功能

所有实现 **必须** 支持基础协议和生命周期管理组件。其他组件可以根据应用程序的具体需求选择实现。

这些协议层建立了清晰的关注点分离，同时支持客户端和服务器之间的丰富交互。模块化设计使实现可以仅支持其所需的特性。

## 消息

MCP 客户端与服务器之间的所有消息 **必须** 遵循 [JSON-RPC 2.0](https://www.jsonrpc.org/specification) 规范。协议定义了以下类型的消息：

### 请求

请求由客户端发送到服务器，或由服务器发送到客户端，用于启动一个操作。

```typescript theme={null}
{
  jsonrpc: "2.0";
  id: string | number;
  method: string;
  params?: {
    [key: string]: unknown;
  };
}
```

* 请求 **必须** 包含一个字符串或整数的 ID。
* 与基础 JSON-RPC 不同，ID **不能** 为 `null`。
* 请求的 ID **不得** 在同一会话中由发送方重复使用。

### 响应

响应是对请求的回复，包含操作的结果或错误信息。

```typescript theme={null}
{
  jsonrpc: "2.0";
  id: string | number;
  result?: {
    [key: string]: unknown;
  }
  error?: {
    code: number;
    message: string;
    data?: unknown;
  }
}
```

* 响应 **必须** 包含与其对应的请求相同的 ID。
* 响应进一步细分为 **成功结果** 或 **错误**。必须设置 `result` 或 `error` 之一，**不能同时设置两者**。
* 结果可以遵循任意 JSON 对象结构，而错误至少 **必须** 包含错误代码和消息。
* 错误代码 **必须** 是整数。

### 通知

通知由客户端发送到服务器，或由服务器发送到客户端，是一种单向消息。接收方 **不得** 发送响应。

```typescript theme={null}
{
  jsonrpc: "2.0";
  method: string;
  params?: {
    [key: string]: unknown;
  };
}
```

* 通知 **不得** 包含 ID。

## 认证（Auth）

MCP 提供了一个[授权](/specification/draft/basic/authorization)框架供 HTTP 使用。使用基于 HTTP 的传输的实现 **应该** 遵循此规范；而使用 STDIO 传输的实现 **不应该** 遵循此规范，而是应从环境中获取凭证。

此外，客户端和服务器 **可以** 协商它们自己的自定义认证和授权策略。

如需进一步讨论并为 MCP 的认证机制发展做出贡献，请加入我们：
[GitHub Discussions](https://github.com/modelcontextprotocol/specification/discussions)，共同塑造协议的未来！

## 协议结构定义（Schema）

协议的完整规范定义为一个
[TypeScript 结构定义](https://github.com/modelcontextprotocol/specification/blob/main/schema/draft/schema.ts)。
这是所有协议消息和结构的权威来源。

还有一个
[JSON Schema](https://github.com/modelcontextprotocol/specification/blob/main/schema/draft/schema.json)，
它由 TypeScript 的权威定义自动生成，可用于各种自动化工具。

### 通用字段

#### `_meta`

`_meta` 属性/参数由 MCP 保留，供客户端和服务器在其交互中附加额外的元数据。

某些键名由 MCP 保留用于协议级别的元数据，如下所述；实现 **不得** 对这些键中的值做出假设。

此外，[schema](https://github.com/modelcontextprotocol/specification/blob/main/schema/draft/schema.ts) 中的定义可能为特定用途保留特定名称的元数据，这些定义中声明了具体用途。

**键名格式：** 有效的 `_meta` 键名包含两个部分：一个可选的 **前缀** 和一个 **名称**。

**前缀：**

* 如果指定了前缀，**必须** 是一系列由点（`.`）分隔的标签，后跟一个斜杠（`/`）。
  * 每个标签 **必须** 以字母开头，以字母或数字结尾；中间字符可以是字母、数字或连字符（`-`）。
* 以零个或多个有效标签开头，后跟 `modelcontextprotocol` 或 `mcp`，再后跟任意有效标签的任何前缀均被 **保留供 MCP 使用**。
  * 例如：`modelcontextprotocol.io/`、`mcp.dev/`、`api.modelcontextprotocol.org/` 和 `tools.mcp.com/` 均为保留前缀。

**名称：**

* 除非为空，**必须** 以字母数字字符（`[a-z0-9A-Z]`）开头和结尾。
* 中间 **可以** 包含连字符（`-`）、下划线（`_`）、点（`.`）和字母数字字符。
