Skip to main content

JSON-RPC

JSONRPCErrorResponse

interface JSONRPCErrorResponse {
  jsonrpc: “2.0”;
  id?: RequestId;
  error: Error;
}

对表示发生错误的请求的响应。

JSONRPCMessage

指任何可以从网络传输中解码,或编码后发送的有效 JSON-RPC 对象。

JSONRPCNotification

interface JSONRPCNotification {
  method: string;
  params?: { [key: string]: any };
  jsonrpc: “2.0”;
}

不期望响应的通知。

JSONRPCRequest

interface JSONRPCRequest {
  method: string;
  params?: { [key: string]: any };
  jsonrpc: “2.0”;
  id: RequestId;
}

期望响应的请求。

JSONRPCResponse

对请求的响应,包含结果或错误。

JSONRPCResultResponse

interface JSONRPCResultResponse {
  jsonrpc: “2.0”;
  id: RequestId;
  result: Result;
}

对请求的成功(非错误)响应。

Common Types

Annotations

interface Annotations {
  audience?: Role[];
  priority?: number;
  lastModified?: string;
}

客户端的可选注解。客户端可以使用注解决定对象如何使用或显示。

描述此对象或数据的预期受众。

可以包含多个条目,以表示内容对多个受众有用(例如 [“user”, “assistant”])。

描述此数据对服务器运行的重要程度。

值为 1 表示“最重要”,表示该数据实际上是必需的;值为 0 表示“最不重要”,表示该数据完全可选。

资源最后修改的时刻,以 ISO 8601 格式字符串表示。

应为 ISO 8601 格式字符串(例如 “2025-01-12T15:00:58Z”)。

示例:打开文件中的最后活动时间戳、资源附加时的时间戳等。

Cursor

Cursor: string

用于表示分页游标的不透明令牌。

EmptyResult

EmptyResult: Result

表示成功但不携带数据的响应。

Error

interface Error {
  code: number;
  message: string;
  data?: unknown;
}

发生的错误类型。

错误的简短描述。message SHOULD 限制为一个简洁的单句。

关于错误的附加信息。此成员的值由发送方定义(例如详细错误信息、嵌套错误等)。

Icon

interface Icon {
  src: string;
  mimeType?: string;
  sizes?: string[];
  theme?: “light” | “dark”;
}

可在用户界面中显示、可选指定尺寸的图标。

指向图标资源的标准 URI。可以是 HTTP/HTTPS URL,也可以是 data: URI,其中包含 Base64 编码的图像数据。

消费者 SHOULD 采取措施,确保提供图标的 URL 来自与客户端/服务器相同的域或可信域。

消费者在使用 SVG 时 SHOULD 采取适当预防措施,因为 SVG 可能包含可执行 JavaScript。

当源 MIME 类型缺失或过于宽泛时,可选覆盖 MIME 类型。例如: “image/png”, “image/jpeg”,或 “image/svg+xml”

可选字符串数组,指定图标可使用的尺寸。每个字符串应采用 WxH 格式(例如 “48x48”, “96x96”)或 “any” 用于 SVG 等可缩放格式。

如果未提供,客户端应假定该图标可用于任何尺寸。

此图标所针对主题的可选说明符。 light 表示此图标设计用于浅色背景, dark 表示此图标设计用于深色背景。

如果未提供,客户端应假定该图标可用于任何主题。

LoggingLevel

LoggingLevel:
  | “debug”
  | “info”
  | “notice”
  | “warning”
  | “error”
  | “critical”
  | “alert”
  | “emergency”

日志消息的严重程度。

这些值映射到 RFC-5424 中规定的 syslog 消息严重性: https://datatracker.ietf.org/doc/html/rfc5424#section-6.2.1

ProgressToken

ProgressToken: string | number

进度令牌,用于将进度通知与原始请求关联。

RequestId

RequestId: string | number

JSON-RPC 中用于唯一标识请求的 ID。

Result

interface Result {
  _meta?: { [key: string]: unknown };
  [key: string]: unknown;
}

参见 通用字段: _meta 中关于 _meta 用法的说明。

Role

Role: “user” | “assistant”

会话中消息和数据的发送方或接收方。

Content

AudioContent

interface AudioContent {
  type: “audio”;
  data: string;
  mimeType: string;
  annotations?: Annotations;
  _meta?: { [key: string]: unknown };
}

提供给 LLM 或由 LLM 提供的音频。

Base64 编码的音频数据。

音频的 MIME 类型。不同提供方可能支持不同的音频类型。

客户端的可选注解。

参见 通用字段: _meta 中关于 _meta 用法的说明。

BlobResourceContents

interface BlobResourceContents {
  uri: string;
  mimeType?: string;
  _meta?: { [key: string]: unknown };
  blob: string;
}

此资源的 URI。

此资源的 MIME 类型(如果已知)。

参见 通用字段: _meta 中关于 _meta 用法的说明。

表示该项目二进制数据的 Base64 编码字符串。

ContentBlock

ContentBlock:
  | TextContent
  | ImageContent
  | AudioContent
  | ResourceLink
  | EmbeddedResource

EmbeddedResource

interface EmbeddedResource {
  type: “resource”;
  resource: TextResourceContents | BlobResourceContents;
  annotations?: Annotations;
  _meta?: { [key: string]: unknown };
}

嵌入到提示或工具调用结果中的资源内容。

客户端自行决定如何最好地呈现嵌入资源,以服务 LLM 和/或用户。

客户端的可选注解。

参见 通用字段: _meta 中关于 _meta 用法的说明。

ImageContent

interface ImageContent {
  type: “image”;
  data: string;
  mimeType: string;
  annotations?: Annotations;
  _meta?: { [key: string]: unknown };
}

提供给 LLM 或由 LLM 提供的图像。

Base64 编码的图像数据。

图像的 MIME 类型。不同提供方可能支持不同的图像类型。

客户端的可选注解。

参见 通用字段: _meta 中关于 _meta 用法的说明。

interface ResourceLink {
  icons?: Icon[];
  name: string;
  title?: string;
  uri: string;
  description?: string;
  mimeType?: string;
  annotations?: Annotations;
  size?: number;
  _meta?: { [key: string]: unknown };
  type: “resource_link”;
}

服务器能够读取的资源,包含在提示或工具调用结果中。

注意:工具返回的资源链接不保证出现在 resources/list 请求的结果中。

客户端可在用户界面中显示的一组可选尺寸图标。

支持渲染图标的客户端 MUST 至少支持以下 MIME 类型:

  • image/png - PNG 图像(安全,通用兼容)
  • image/jpeg (以及 image/jpg)- JPEG 图像(安全,通用兼容)

支持渲染图标的客户端 SHOULD 同时支持:

  • image/svg+xml - SVG 图像(可缩放,但需要安全预防措施)
  • image/webp - WebP 图像(现代、高效格式)

用于程序化或逻辑用途,但在过去的规范中用作显示名称,或在未提供 title 时作为回退显示名称。

用于 UI 和最终用户上下文,经过优化以便人类可读且易于理解,即使读者不熟悉特定领域术语也能理解。

如果未提供,应使用 name 进行显示(Tool 除外;对于 Tool, annotations.title 应优先于 name,如果存在)。

此资源的 URI。

描述此资源所表示的内容。

客户端可以使用它来改善 LLM 对可用资源的理解。它可以被视为给模型的“提示”。

此资源的 MIME 类型(如果已知)。

客户端的可选注解。

原始资源内容的大小,以字节为单位(即在 Base64 编码或任何 token 化之前),如果已知。

宿主可以使用它来显示文件大小并估算上下文窗口用量。

参见 通用字段: _meta 中关于 _meta 用法的说明。

TextContent

interface TextContent {
  type: “text”;
  text: string;
  annotations?: Annotations;
  _meta?: { [key: string]: unknown };
}

提供给 LLM 或由 LLM 提供的文本。

消息的文本内容。

客户端的可选注解。

参见 通用字段: _meta 中关于 _meta 用法的说明。

TextResourceContents

interface TextResourceContents {
  uri: string;
  mimeType?: string;
  _meta?: { [key: string]: unknown };
  text: string;
}

此资源的 URI。

此资源的 MIME 类型(如果已知)。

参见 通用字段: _meta 中关于 _meta 用法的说明。

项目的文本。仅当项目实际可以表示为文本(而不是二进制数据)时才必须设置此字段。

completion/complete

CompleteRequest

interface CompleteRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “completion/complete”;
  params: CompleteRequestParams;
}

客户端向服务器发送的请求,用于请求补全选项。

CompleteRequestParams

interface CompleteRequestParams {
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  ref: PromptReference | ResourceTemplateReference;
  argument: { name: string; value: string };
  context?: { arguments?: { [key: string]: string } };
}

用于 completion/complete 请求的参数。

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • [key: string]: unknown
  • OptionalprogressToken?: ProgressToken

    如果指定,调用方请求此请求的带外进度通知(由 notifications/progress 表示)。此参数的值是不透明令牌,会附加到后续任何通知上。接收方没有义务提供这些通知。

参数的信息

类型声明
  • name: string

    参数名称

  • value: string

    用于补全匹配的参数值。

补全的附加可选上下文

类型声明
  • Optionalarguments?: { [key: string]: string }

    URI 模板或提示中先前已解析的变量。

CompleteResult

interface CompleteResult {
  _meta?: { [key: string]: unknown };
  completion: { values: string[]; total?: number; hasMore?: boolean };
  [key: string]: unknown;
}

服务器对 completion/complete 请求的响应

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • values: string[]

    补全值数组。不得超过 100 项。

  • Optionaltotal?: number

    可用补全选项总数。该值可以超过响应中实际发送的值数量。

  • OptionalhasMore?: boolean

    指示除当前响应提供的补全选项外是否还有更多选项,即使确切总数未知。

PromptReference

interface PromptReference {
  name: string;
  title?: string;
  type: “ref/prompt”;
}

标识一个提示。

用于程序化或逻辑用途,但在过去的规范中用作显示名称,或在未提供 title 时作为回退显示名称。

用于 UI 和最终用户上下文,经过优化以便人类可读且易于理解,即使读者不熟悉特定领域术语也能理解。

如果未提供,应使用 name 进行显示(Tool 除外;对于 Tool, annotations.title 应优先于 name,如果存在)。

ResourceTemplateReference

interface ResourceTemplateReference {
  type: “ref/resource”;
  uri: string;
}

对资源或资源模板定义的引用。

资源的 URI 或 URI 模板。

elicitation/create

ElicitRequest

interface ElicitRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “elicitation/create”;
  params: ElicitRequestParams;
}

服务器通过客户端从用户引出附加信息的请求。

ElicitRequestParams

用于通过客户端从用户引出附加信息的请求参数。

ElicitResult

interface ElicitResult {
  _meta?: { [key: string]: unknown };
  action: “accept” | “decline” | “cancel”;
  content?: { [key: string]: string | number | boolean | string[] };
  [key: string]: unknown;
}

客户端对引出请求的响应。

参见 通用字段: _meta 中关于 _meta 用法的说明。

用户响应引出的操作。

  • “accept”:用户提交了表单/确认了操作
  • “decline”:用户明确拒绝该操作
  • “cancel”:用户关闭而未明确选择

提交的表单数据,仅当 action 为 “accept” 且 mode 为 “form” 时存在。包含与所请求 schema 匹配的值。对于带外模式响应则省略。

BooleanSchema

interface BooleanSchema {
  type: “boolean”;
  title?: string;
  description?: string;
  default?: boolean;
}

ElicitRequestFormParams

interface ElicitRequestFormParams {
  task?: TaskMetadata;
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  mode?: “form”;
  message: string;
  requestedSchema: {
    $schema?: string;
    type: “object”;
    properties: { [key: string]: PrimitiveSchemaDefinition };
    required?: string[];
  };
}

通过客户端中的表单从用户引出非敏感信息的请求参数。

如果指定,调用方请求对此请求进行任务增强执行。请求会立即返回 CreateTaskResult,实际结果稍后可通过 tasks/result 获取。

任务增强受能力协商约束;接收方 MUST 在其能力中声明支持特定请求类型的任务增强。

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • [key: string]: unknown
  • OptionalprogressToken?: ProgressToken

    如果指定,调用方请求此请求的带外进度通知(由 notifications/progress 表示)。此参数的值是不透明令牌,会附加到后续任何通知上。接收方没有义务提供这些通知。

引出模式。

向用户展示的消息,用于描述正在请求哪些信息。

JSON Schema 的受限子集。只允许顶层属性,不允许嵌套。

ElicitRequestURLParams

interface ElicitRequestURLParams {
  task?: TaskMetadata;
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  mode: “url”;
  message: string;
  elicitationId: string;
  url: string;
}

通过客户端中的 URL 从用户引出信息的请求参数。

如果指定,调用方请求对此请求进行任务增强执行。请求会立即返回 CreateTaskResult,实际结果稍后可通过 tasks/result 获取。

任务增强受能力协商约束;接收方 MUST 在其能力中声明支持特定请求类型的任务增强。

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • [key: string]: unknown
  • OptionalprogressToken?: ProgressToken

    如果指定,调用方请求此请求的带外进度通知(由 notifications/progress 表示)。此参数的值是不透明令牌,会附加到后续任何通知上。接收方没有义务提供这些通知。

引出模式。

向用户展示的消息,用于解释为什么需要此交互。

引出的 ID,在服务器上下文中必须唯一。客户端 MUST 将此 ID 视为不透明值。

用户应导航到的 URL。

LegacyTitledEnumSchema

interface LegacyTitledEnumSchema {
  type: “string”;
  title?: string;
  description?: string;
  enum: string[];
  enumNames?: string[];
  default?: string;
}

请改用 TitledSingleSelectEnumSchema。此接口将在未来版本中移除。

(旧版)enum 值的显示名称。根据 JSON Schema 2020-12,这是非标准的。

MultiSelectEnumSchema

NumberSchema

interface NumberSchema {
  type: “number” | “integer”;
  title?: string;
  description?: string;
  minimum?: number;
  maximum?: number;
  default?: number;
}

PrimitiveSchemaDefinition

PrimitiveSchemaDefinition:
  | StringSchema
  | NumberSchema
  | BooleanSchema
  | EnumSchema

受限 schema 定义,仅允许 primitive 类型,不允许嵌套对象或数组。

SingleSelectEnumSchema

StringSchema

interface StringSchema {
  type: “string”;
  title?: string;
  description?: string;
  minLength?: number;
  maxLength?: number;
  format?: “uri” | “email” | “date” | “date-time”;
  default?: string;
}

TitledMultiSelectEnumSchema

interface TitledMultiSelectEnumSchema {
  type: “array”;
  title?: string;
  description?: string;
  minItems?: number;
  maxItems?: number;
  items: { anyOf: { const: string; title: string }[] };
  default?: string[];
}

多选枚举的 schema,其中每个选项都有显示标题。

enum 字段的可选标题。

enum 字段的可选描述。

要选择的最少项目数。

要选择的最多项目数。

数组项的 schema,包含 enum 选项和显示标签。

类型声明
  • anyOf: { const: string; title: string }[]

    包含值和显示标签的 enum 选项数组。

可选默认值。

TitledSingleSelectEnumSchema

interface TitledSingleSelectEnumSchema {
  type: “string”;
  title?: string;
  description?: string;
  oneOf: { const: string; title: string }[];
  default?: string;
}

单选枚举的 schema,其中每个选项都有显示标题。

enum 字段的可选标题。

enum 字段的可选描述。

包含值和显示标签的 enum 选项数组。

类型声明
  • const: string

    enum 值。

  • title: string

    此选项的显示标签。

可选默认值。

UntitledMultiSelectEnumSchema

interface UntitledMultiSelectEnumSchema {
  type: “array”;
  title?: string;
  description?: string;
  minItems?: number;
  maxItems?: number;
  items: { type: “string”; enum: string[] };
  default?: string[];
}

多选枚举的 schema,选项不带显示标题。

enum 字段的可选标题。

enum 字段的可选描述。

要选择的最少项目数。

要选择的最多项目数。

数组项的 schema。

类型声明
  • type: “string”
  • enum: string[]

    可供选择的 enum 值数组。

可选默认值。

UntitledSingleSelectEnumSchema

interface UntitledSingleSelectEnumSchema {
  type: “string”;
  title?: string;
  description?: string;
  enum: string[];
  default?: string;
}

单选枚举的 schema,选项不带显示标题。

enum 字段的可选标题。

enum 字段的可选描述。

可供选择的 enum 值数组。

可选默认值。

initialize

InitializeRequest

interface InitializeRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “initialize”;
  params: InitializeRequestParams;
}

客户端首次连接时向服务器发送此请求,要求服务器开始初始化。

InitializeRequestParams

interface InitializeRequestParams {
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  protocolVersion: string;
  capabilities: ClientCapabilities;
  clientInfo: Implementation;
}

用于 initialize 请求的参数。

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • [key: string]: unknown
  • OptionalprogressToken?: ProgressToken

    如果指定,调用方请求此请求的带外进度通知(由 notifications/progress 表示)。此参数的值是不透明令牌,会附加到后续任何通知上。接收方没有义务提供这些通知。

客户端支持的最新 Model Context Protocol 版本。客户端 MAY 也决定支持较旧版本。

InitializeResult

interface InitializeResult {
  _meta?: { [key: string]: unknown };
  protocolVersion: string;
  capabilities: ServerCapabilities;
  serverInfo: Implementation;
  instructions?: string;
  [key: string]: unknown;
}

服务器收到客户端的 initialize 请求后发送此响应。

参见 通用字段: _meta 中关于 _meta 用法的说明。

服务器希望使用的 Model Context Protocol 版本。这可能与客户端请求的版本不一致。如果客户端无法支持此版本,则 MUST 断开连接。

描述如何使用服务器及其功能的说明。

客户端可以使用它来改善 LLM 对可用工具、资源等的理解。它可以被视为给模型的“提示”。例如,此信息 MAY 添加到系统提示中。

ClientCapabilities

interface ClientCapabilities {
  experimental?: { [key: string]: object };
  roots?: { listChanged?: boolean };
  sampling?: { context?: object; tools?: object };
  elicitation?: { form?: object; url?: object };
  tasks?: {
    list?: object;
    cancel?: object;
    requests?: {
      sampling?: { createMessage?: object };
      elicitation?: { create?: object };
    };
  };
}

客户端可能支持的能力。已知能力在此 schema 中定义,但这不是一个封闭集合:任何客户端都可以定义自己的附加能力。

客户端支持的实验性、非标准能力。

如果客户端支持列出根目录,则存在。

类型声明
  • OptionallistChanged?: boolean

    客户端是否支持根目录列表变更通知。

如果客户端支持从 LLM 采样,则存在。

类型声明
  • Optionalcontext?: object

    客户端是否支持通过 includeContext 参数包含上下文。如果未声明,服务器 SHOULD 仅使用 includeContext: “none” (或省略它)。

  • Optionaltools?: object

    客户端是否支持通过 tools 和 toolChoice 参数使用工具。

如果客户端支持来自服务器的引出,则存在。

如果客户端支持任务增强请求,则存在。

类型声明
  • Optionallist?: object

    此客户端是否支持 tasks/list。

  • Optionalcancel?: object

    此客户端是否支持 tasks/cancel。

  • Optionalrequests?: { sampling?: { createMessage?: object }; elicitation?: { create?: object } }

    指定哪些请求类型可以使用任务增强。

    • Optionalsampling?: { createMessage?: object }

      对采样相关请求的任务支持。

      • OptionalcreateMessage?: object

        客户端是否支持任务增强的 sampling/createMessage 请求。

    • Optionalelicitation?: { create?: object }

      对引出相关请求的任务支持。

      • Optionalcreate?: object

        客户端是否支持任务增强的 elicitation/create 请求。

Implementation

interface Implementation {
  icons?: Icon[];
  name: string;
  title?: string;
  version: string;
  description?: string;
  websiteUrl?: string;
}

描述 MCP 实现。

客户端可在用户界面中显示的一组可选尺寸图标。

支持渲染图标的客户端 MUST 至少支持以下 MIME 类型:

  • image/png - PNG 图像(安全,通用兼容)
  • image/jpeg (以及 image/jpg)- JPEG 图像(安全,通用兼容)

支持渲染图标的客户端 SHOULD 同时支持:

  • image/svg+xml - SVG 图像(可缩放,但需要安全预防措施)
  • image/webp - WebP 图像(现代、高效格式)

用于程序化或逻辑用途,但在过去的规范中用作显示名称,或在未提供 title 时作为回退显示名称。

用于 UI 和最终用户上下文,经过优化以便人类可读且易于理解,即使读者不熟悉特定领域术语也能理解。

如果未提供,应使用 name 进行显示(Tool 除外;对于 Tool, annotations.title 应优先于 name,如果存在)。

关于此实现作用的可选人类可读描述。

客户端或服务器可以使用它来提供关于自身用途和能力的上下文。例如,服务器可以描述其提供的资源或工具类型,客户端可以描述其预期用例。

此实现网站的可选 URL。

ServerCapabilities

interface ServerCapabilities {
  experimental?: { [key: string]: object };
  logging?: object;
  completions?: object;
  prompts?: { listChanged?: boolean };
  resources?: { subscribe?: boolean; listChanged?: boolean };
  tools?: { listChanged?: boolean };
  tasks?: {
    list?: object;
    cancel?: object;
    requests?: { tools?: { call?: object } };
  };
}

服务器可能支持的能力。已知能力在此 schema 中定义,但这不是一个封闭集合:任何服务器都可以定义自己的附加能力。

服务器支持的实验性、非标准能力。

如果服务器支持向客户端发送日志消息,则存在。

如果服务器支持参数自动补全建议,则存在。

如果服务器提供任何提示模板,则存在。

类型声明
  • OptionallistChanged?: boolean

    此服务器是否支持提示列表变更通知。

如果服务器提供任何可读取资源,则存在。

类型声明
  • Optionalsubscribe?: boolean

    此服务器是否支持订阅资源更新。

  • OptionallistChanged?: boolean

    此服务器是否支持资源列表变更通知。

如果服务器提供任何可调用工具,则存在。

类型声明
  • OptionallistChanged?: boolean

    此服务器是否支持工具列表变更通知。

如果服务器支持任务增强请求,则存在。

类型声明
  • Optionallist?: object

    此服务器是否支持 tasks/list。

  • Optionalcancel?: object

    此服务器是否支持 tasks/cancel。

  • Optionalrequests?: { tools?: { call?: object } }

    指定哪些请求类型可以使用任务增强。

    • Optionaltools?: { call?: object }

      对工具相关请求的任务支持。

      • Optionalcall?: object

        服务器是否支持任务增强的 tools/call 请求。

logging/setLevel

SetLevelRequest

interface SetLevelRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “logging/setLevel”;
  params: SetLevelRequestParams;
}

客户端向服务器发送的请求,用于启用或调整日志记录。

SetLevelRequestParams

interface SetLevelRequestParams {
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  level: LoggingLevel;
}

用于 logging/setLevel 请求的参数。

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • [key: string]: unknown
  • OptionalprogressToken?: ProgressToken

    如果指定,调用方请求此请求的带外进度通知(由 notifications/progress 表示)。此参数的值是不透明令牌,会附加到后续任何通知上。接收方没有义务提供这些通知。

客户端希望从服务器接收的日志级别。服务器应将此级别及更高级别(即更严重)的所有日志作为 notifications/message 发送给客户端。

notifications/cancelled

CancelledNotification

interface CancelledNotification {
  jsonrpc: “2.0”;
  method: “notifications/cancelled”;
  params: CancelledNotificationParams;
}

任一方都可以发送此通知,表示正在取消先前发出的请求。

该请求 SHOULD 仍在处理中,但由于通信延迟,此通知始终可能在请求已经完成后才到达。

此通知表示结果将不再使用,因此任何相关处理 SHOULD 停止。

客户端 MUST NOT 尝试取消其 initialize 请求的参数。

对于任务取消,请使用 tasks/cancel 请求,而不是此通知。

CancelledNotificationParams

interface CancelledNotificationParams {
  _meta?: { [key: string]: unknown };
  requestId?: RequestId;
  reason?: string;
}

用于 notifications/cancelled 通知的参数。

参见 通用字段: _meta 中关于 _meta 用法的说明。

要取消的请求 ID。

这 MUST 对应于先前在同一方向发出的请求 ID。取消非任务请求时 MUST 提供此字段。取消任务时 MUST NOT 使用此字段(请改用 tasks/cancel 请求)。

描述取消原因的可选字符串。此字符串 MAY 被记录或展示给用户。

notifications/initialized

InitializedNotification

interface InitializedNotification {
  jsonrpc: “2.0”;
  method: “notifications/initialized”;
  params?: NotificationParams;
}

初始化完成后,客户端向服务器发送此通知。

notifications/tasks/status

TaskStatusNotification

interface TaskStatusNotification {
  jsonrpc: “2.0”;
  method: “notifications/tasks/status”;
  params: TaskStatusNotificationParams;
}

接收方向请求方发送的可选通知,用于告知任务状态已更改。接收方不要求发送这些通知。

TaskStatusNotificationParams

TaskStatusNotificationParams: NotificationParams & Task

用于 notifications/tasks/status 通知的参数。

notifications/message

LoggingMessageNotification

interface LoggingMessageNotification {
  jsonrpc: “2.0”;
  method: “notifications/message”;
  params: LoggingMessageNotificationParams;
}

从服务器传递给客户端的日志消息 JSONRPCNotification。如果客户端未发送 logging/setLevel 请求,服务器 MAY 自动决定发送哪些消息。

LoggingMessageNotificationParams

interface LoggingMessageNotificationParams {
  _meta?: { [key: string]: unknown };
  level: LoggingLevel;
  logger?: string;
  data: unknown;
}

用于 notifications/message 通知的参数。

参见 通用字段: _meta 中关于 _meta 用法的说明。

此日志消息的严重程度。

发出此消息的 logger 的可选名称。

要记录的数据,例如字符串消息或对象。此处允许任何可 JSON 序列化的类型。

notifications/progress

ProgressNotification

interface ProgressNotification {
  jsonrpc: “2.0”;
  method: “notifications/progress”;
  params: ProgressNotificationParams;
}

带外通知,用于告知接收方长时间运行请求的进度更新。

ProgressNotificationParams

interface ProgressNotificationParams {
  _meta?: { [key: string]: unknown };
  progressToken: ProgressToken;
  progress: number;
  total?: number;
  message?: string;
}

用于 notifications/progress 通知的参数。

参见 通用字段: _meta 中关于 _meta 用法的说明。

初始请求中给出的进度令牌,用于将此通知与正在进行的请求关联。

目前为止的进度。即使总量未知,每次取得进展时该值也应增加。

要处理的项目总数(或所需总进度),如果已知。

描述当前进度的可选消息。

notifications/prompts/list_changed

PromptListChangedNotification

interface PromptListChangedNotification {
  jsonrpc: “2.0”;
  method: “notifications/prompts/list_changed”;
  params?: NotificationParams;
}

服务器向客户端发送的可选通知,用于告知其提供的提示列表已更改。即使客户端先前没有订阅,服务器也可以发出此通知。

notifications/resources/list_changed

ResourceListChangedNotification

interface ResourceListChangedNotification {
  jsonrpc: “2.0”;
  method: “notifications/resources/list_changed”;
  params?: NotificationParams;
}

服务器向客户端发送的可选通知,用于告知其可读取的资源列表已更改。即使客户端先前没有订阅,服务器也可以发出此通知。

notifications/resources/updated

ResourceUpdatedNotification

interface ResourceUpdatedNotification {
  jsonrpc: “2.0”;
  method: “notifications/resources/updated”;
  params: ResourceUpdatedNotificationParams;
}

服务器向客户端发送的通知,用于告知某个资源已更改,可能需要重新读取。仅当客户端先前发送过 resources/subscribe 请求时,才应发送此通知。

ResourceUpdatedNotificationParams

interface ResourceUpdatedNotificationParams {
  _meta?: { [key: string]: unknown };
  uri: string;
}

用于 notifications/resources/updated 通知的参数。

参见 通用字段: _meta 中关于 _meta 用法的说明。

已更新资源的 URI。这可能是客户端实际订阅资源的子资源。

notifications/roots/list_changed

RootsListChangedNotification

interface RootsListChangedNotification {
  jsonrpc: “2.0”;
  method: “notifications/roots/list_changed”;
  params?: NotificationParams;
}

客户端向服务器发送的通知,用于告知根目录列表已更改。每当客户端添加、移除或修改任何根目录时,都应发送此通知。随后服务器应使用 ListRootsRequest 请求更新后的根目录列表。

notifications/tools/list_changed

ToolListChangedNotification

interface ToolListChangedNotification {
  jsonrpc: “2.0”;
  method: “notifications/tools/list_changed”;
  params?: NotificationParams;
}

服务器向客户端发送的可选通知,用于告知其提供的工具列表已更改。即使客户端先前没有订阅,服务器也可以发出此通知。

notifications/elicitation/complete

ElicitationCompleteNotification

interface ElicitationCompleteNotification {
  jsonrpc: “2.0”;
  method: “notifications/elicitation/complete”;
  params: { elicitationId: string };
}

服务器向客户端发送的可选通知,用于告知某个带外引出请求已完成。

类型声明
  • elicitationId: string

    已完成引出的 ID。

ping

PingRequest

interface PingRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “ping”;
  params?: RequestParams;
}

由服务器或客户端发出的 ping,用于检查对方是否仍然存活。接收方必须及时响应,否则可能会断开连接。

tasks

CreateTaskResult

interface CreateTaskResult {
  _meta?: { [key: string]: unknown };
  task: Task;
  [key: string]: unknown;
}

对任务增强请求的响应。

参见 通用字段: _meta 中关于 _meta 用法的说明。

RelatedTaskMetadata

interface RelatedTaskMetadata {
  taskId: string;
}

用于将消息与任务关联的元数据。请将其包含在请求参数的 _meta 字段中,键为 io.modelcontextprotocol/related-task

此消息关联的任务标识符。

Task

interface Task {
  taskId: string;
  status: TaskStatus;
  statusMessage?: string;
  createdAt: string;
  lastUpdatedAt: string;
  ttl: number | null;
  pollInterval?: number;
}

与任务关联的数据。

任务标识符。

当前任务状态。

描述当前任务状态的可选人类可读消息。可为任何状态提供上下文,包括:

  • “cancelled” 状态的原因
  • “completed” 状态的摘要
  • “failed” 状态的诊断信息(例如错误详情、出错原因)

任务创建时的 ISO 8601 时间戳。

任务最后更新时的 ISO 8601 时间戳。

自创建起的实际保留时长,以毫秒为单位;null 表示无限制。

建议轮询间隔,以毫秒为单位。

TaskMetadata

interface TaskMetadata {
  ttl?: number;
}

用于以任务执行增强请求的元数据。请将其包含在请求参数的 task 字段中。

请求自创建起保留任务的时长,以毫秒为单位。

TaskStatus

TaskStatus: “working” | “input_required” | “completed” | “failed” | “cancelled”

任务的状态。

tasks/get

GetTaskRequest

interface GetTaskRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “tasks/get”;
  params: { taskId: string };
}

用于检索任务状态的请求。

类型声明
  • taskId: string

    要查询的任务标识符。

GetTaskResult

GetTaskResult: Result & Task

对 tasks/get 请求的响应。

tasks/result

GetTaskPayloadRequest

interface GetTaskPayloadRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “tasks/result”;
  params: { taskId: string };
}

用于检索已完成任务结果的请求。

类型声明
  • taskId: string

    要检索其结果的任务标识符。

GetTaskPayloadResult

interface GetTaskPayloadResult {
  _meta?: { [key: string]: unknown };
  [key: string]: unknown;
}

对 tasks/result 请求的响应。其结构与原始请求的结果类型匹配。例如,tools/call 任务会返回 CallToolResult 结构。

参见 通用字段: _meta 中关于 _meta 用法的说明。

tasks/list

ListTasksRequest

interface ListTasksRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  params?: PaginatedRequestParams;
  method: “tasks/list”;
}

用于检索任务列表的请求。

ListTasksResult

interface ListTasksResult {
  _meta?: { [key: string]: unknown };
  nextCursor?: string;
  tasks: Task[];
  [key: string]: unknown;
}

对 tasks/list 请求的响应。

参见 通用字段: _meta 中关于 _meta 用法的说明。

表示最后一个返回结果之后分页位置的不透明令牌。如果存在,可能还有更多可用结果。

tasks/cancel

CancelTaskRequest

interface CancelTaskRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “tasks/cancel”;
  params: { taskId: string };
}

用于取消任务的请求。

类型声明
  • taskId: string

    要取消的任务标识符。

CancelTaskResult

CancelTaskResult: Result & Task

对 tasks/cancel 请求的响应。

prompts/get

GetPromptRequest

interface GetPromptRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “prompts/get”;
  params: GetPromptRequestParams;
}

客户端用于获取服务器提供的提示。

GetPromptRequestParams

interface GetPromptRequestParams {
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  name: string;
  arguments?: { [key: string]: string };
}

用于 prompts/get 请求的参数。

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • [key: string]: unknown
  • OptionalprogressToken?: ProgressToken

    如果指定,调用方请求此请求的带外进度通知(由 notifications/progress 表示)。此参数的值是不透明令牌,会附加到后续任何通知上。接收方没有义务提供这些通知。

提示或提示模板的名称。

用于模板化提示的参数。

GetPromptResult

interface GetPromptResult {
  _meta?: { [key: string]: unknown };
  description?: string;
  messages: PromptMessage[];
  [key: string]: unknown;
}

服务器对客户端 prompts/get 请求的响应。

参见 通用字段: _meta 中关于 _meta 用法的说明。

提示的可选描述。

PromptMessage

interface PromptMessage {
  role: Role;
  content: ContentBlock;
}

描述作为提示一部分返回的消息。

这类似于 SamplingMessage,但也支持嵌入来自 MCP 服务器的资源。

prompts/list

ListPromptsRequest

interface ListPromptsRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  params?: PaginatedRequestParams;
  method: “prompts/list”;
}

由客户端发送,用于请求服务器拥有的提示和提示模板列表。

ListPromptsResult

interface ListPromptsResult {
  _meta?: { [key: string]: unknown };
  nextCursor?: string;
  prompts: Prompt[];
  [key: string]: unknown;
}

服务器对客户端 prompts/list 请求的响应。

参见 通用字段: _meta 中关于 _meta 用法的说明。

表示最后一个返回结果之后分页位置的不透明令牌。如果存在,可能还有更多可用结果。

Prompt

interface Prompt {
  icons?: Icon[];
  name: string;
  title?: string;
  description?: string;
  arguments?: PromptArgument[];
  _meta?: { [key: string]: unknown };
}

服务器提供的提示或提示模板。

客户端可在用户界面中显示的一组可选尺寸图标。

支持渲染图标的客户端 MUST 至少支持以下 MIME 类型:

  • image/png - PNG 图像(安全,通用兼容)
  • image/jpeg (以及 image/jpg)- JPEG 图像(安全,通用兼容)

支持渲染图标的客户端 SHOULD 同时支持:

  • image/svg+xml - SVG 图像(可缩放,但需要安全预防措施)
  • image/webp - WebP 图像(现代、高效格式)

用于程序化或逻辑用途,但在过去的规范中用作显示名称,或在未提供 title 时作为回退显示名称。

用于 UI 和最终用户上下文,经过优化以便人类可读且易于理解,即使读者不熟悉特定领域术语也能理解。

如果未提供,应使用 name 进行显示(Tool 除外;对于 Tool, annotations.title 应优先于 name,如果存在)。

对此提示所提供内容的可选描述。

用于模板化提示的参数列表。

参见 通用字段: _meta 中关于 _meta 用法的说明。

PromptArgument

interface PromptArgument {
  name: string;
  title?: string;
  description?: string;
  required?: boolean;
}

描述提示可以接受的参数。

用于程序化或逻辑用途,但在过去的规范中用作显示名称,或在未提供 title 时作为回退显示名称。

用于 UI 和最终用户上下文,经过优化以便人类可读且易于理解,即使读者不熟悉特定领域术语也能理解。

如果未提供,应使用 name 进行显示(Tool 除外;对于 Tool, annotations.title 应优先于 name,如果存在)。

参数的人类可读描述。

是否必须提供此参数。

resources/list

ListResourcesRequest

interface ListResourcesRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  params?: PaginatedRequestParams;
  method: “resources/list”;
}

由客户端发送,用于请求服务器拥有的资源列表。

ListResourcesResult

interface ListResourcesResult {
  _meta?: { [key: string]: unknown };
  nextCursor?: string;
  resources: Resource[];
  [key: string]: unknown;
}

服务器对客户端 resources/list 请求的响应。

参见 通用字段: _meta 中关于 _meta 用法的说明。

表示最后一个返回结果之后分页位置的不透明令牌。如果存在,可能还有更多可用结果。

Resource

interface Resource {
  icons?: Icon[];
  name: string;
  title?: string;
  uri: string;
  description?: string;
  mimeType?: string;
  annotations?: Annotations;
  size?: number;
  _meta?: { [key: string]: unknown };
}

服务器能够读取的已知资源。

客户端可在用户界面中显示的一组可选尺寸图标。

支持渲染图标的客户端 MUST 至少支持以下 MIME 类型:

  • image/png - PNG 图像(安全,通用兼容)
  • image/jpeg (以及 image/jpg)- JPEG 图像(安全,通用兼容)

支持渲染图标的客户端 SHOULD 同时支持:

  • image/svg+xml - SVG 图像(可缩放,但需要安全预防措施)
  • image/webp - WebP 图像(现代、高效格式)

用于程序化或逻辑用途,但在过去的规范中用作显示名称,或在未提供 title 时作为回退显示名称。

用于 UI 和最终用户上下文,经过优化以便人类可读且易于理解,即使读者不熟悉特定领域术语也能理解。

如果未提供,应使用 name 进行显示(Tool 除外;对于 Tool, annotations.title 应优先于 name,如果存在)。

此资源的 URI。

描述此资源所表示的内容。

客户端可以使用它来改善 LLM 对可用资源的理解。它可以被视为给模型的“提示”。

此资源的 MIME 类型(如果已知)。

客户端的可选注解。

原始资源内容的大小,以字节为单位(即在 Base64 编码或任何 token 化之前),如果已知。

宿主可以使用它来显示文件大小并估算上下文窗口用量。

参见 通用字段: _meta 中关于 _meta 用法的说明。

resources/read

ReadResourceRequest

interface ReadResourceRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “resources/read”;
  params: ReadResourceRequestParams;
}

由客户端发送到服务器,用于读取特定资源 URI。

ReadResourceRequestParams

interface ReadResourceRequestParams {
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  uri: string;
}

用于 resources/read 请求的参数。

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • [key: string]: unknown
  • OptionalprogressToken?: ProgressToken

    如果指定,调用方请求此请求的带外进度通知(由 notifications/progress 表示)。此参数的值是不透明令牌,会附加到后续任何通知上。接收方没有义务提供这些通知。

资源的 URI。URI 可以使用任何协议;由服务器决定如何解释它。

ReadResourceResult

interface ReadResourceResult {
  _meta?: { [key: string]: unknown };
  contents: (TextResourceContents | BlobResourceContents)[];
  [key: string]: unknown;
}

服务器对客户端 resources/read 请求的响应。

参见 通用字段: _meta 中关于 _meta 用法的说明。

resources/subscribe

SubscribeRequest

interface SubscribeRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “resources/subscribe”;
  params: SubscribeRequestParams;
}

由客户端发送,用于请求在特定资源变化时从服务器接收 resources/updated 通知。

SubscribeRequestParams

interface SubscribeRequestParams {
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  uri: string;
}

用于 resources/subscribe 请求的参数。

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • [key: string]: unknown
  • OptionalprogressToken?: ProgressToken

    如果指定,调用方请求此请求的带外进度通知(由 notifications/progress 表示)。此参数的值是不透明令牌,会附加到后续任何通知上。接收方没有义务提供这些通知。

资源的 URI。URI 可以使用任何协议;由服务器决定如何解释它。

resources/templates/list

ListResourceTemplatesRequest

interface ListResourceTemplatesRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  params?: PaginatedRequestParams;
  method: “resources/templates/list”;
}

由客户端发送,用于请求服务器拥有的资源模板列表。

ListResourceTemplatesResult

interface ListResourceTemplatesResult {
  _meta?: { [key: string]: unknown };
  nextCursor?: string;
  resourceTemplates: ResourceTemplate[];
  [key: string]: unknown;
}

服务器对客户端 resources/templates/list 请求的响应。

参见 通用字段: _meta 中关于 _meta 用法的说明。

表示最后一个返回结果之后分页位置的不透明令牌。如果存在,可能还有更多可用结果。

ResourceTemplate

interface ResourceTemplate {
  icons?: Icon[];
  name: string;
  title?: string;
  uriTemplate: string;
  description?: string;
  mimeType?: string;
  annotations?: Annotations;
  _meta?: { [key: string]: unknown };
}

服务器上可用资源的模板描述。

客户端可在用户界面中显示的一组可选尺寸图标。

支持渲染图标的客户端 MUST 至少支持以下 MIME 类型:

  • image/png - PNG 图像(安全,通用兼容)
  • image/jpeg (以及 image/jpg)- JPEG 图像(安全,通用兼容)

支持渲染图标的客户端 SHOULD 同时支持:

  • image/svg+xml - SVG 图像(可缩放,但需要安全预防措施)
  • image/webp - WebP 图像(现代、高效格式)

用于程序化或逻辑用途,但在过去的规范中用作显示名称,或在未提供 title 时作为回退显示名称。

用于 UI 和最终用户上下文,经过优化以便人类可读且易于理解,即使读者不熟悉特定领域术语也能理解。

如果未提供,应使用 name 进行显示(Tool 除外;对于 Tool, annotations.title 应优先于 name,如果存在)。

可用于构造资源 URI 的 URI 模板(依据 RFC 6570)。

描述此模板的用途。

客户端可以使用它来改善 LLM 对可用资源的理解。它可以被视为给模型的“提示”。

与此模板匹配的所有资源的 MIME 类型。仅当所有匹配此模板的资源都具有相同类型时才应包含。

客户端的可选注解。

参见 通用字段: _meta 中关于 _meta 用法的说明。

resources/unsubscribe

UnsubscribeRequest

interface UnsubscribeRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “resources/unsubscribe”;
  params: UnsubscribeRequestParams;
}

由客户端发送,用于请求取消来自服务器的 resources/updated 通知。此前应已有 resources/subscribe 请求。

UnsubscribeRequestParams

interface UnsubscribeRequestParams {
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  uri: string;
}

用于 resources/unsubscribe 请求的参数。

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • [key: string]: unknown
  • OptionalprogressToken?: ProgressToken

    如果指定,调用方请求此请求的带外进度通知(由 notifications/progress 表示)。此参数的值是不透明令牌,会附加到后续任何通知上。接收方没有义务提供这些通知。

资源的 URI。URI 可以使用任何协议;由服务器决定如何解释它。

roots/list

ListRootsRequest

interface ListRootsRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “roots/list”;
  params?: RequestParams;
}

由服务器发送,用于向客户端请求根目录 URI 列表。根目录允许服务器请求可操作的特定目录或文件。根目录的常见示例是提供一组服务器应操作的仓库或目录。

当服务器需要了解文件系统结构或访问客户端有权限读取的特定位置时,通常使用此请求。

ListRootsResult

interface ListRootsResult {
  _meta?: { [key: string]: unknown };
  roots: Root[];
  [key: string]: unknown;
}

客户端对服务器 roots/list 请求的响应。此结果包含 Root 对象数组,每个对象表示服务器可操作的根目录或文件。

参见 通用字段: _meta 中关于 _meta 用法的说明。

Root

interface Root {
  uri: string;
  name?: string;
  _meta?: { [key: string]: unknown };
}

表示服务器可操作的根目录或文件。

标识根目录的 URI。当前 必须 以 file:// 开头。未来协议版本可能会放宽此限制,以允许其他 URI scheme。

根目录的可选名称。可用于为根目录提供人类可读标识符,这对显示目的或在应用的其他部分引用该根目录可能有用。

参见 通用字段: _meta 中关于 _meta 用法的说明。

sampling/createMessage

CreateMessageRequest

interface CreateMessageRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “sampling/createMessage”;
  params: CreateMessageRequestParams;
}

服务器通过客户端对 LLM 进行采样的请求。客户端对选择哪个模型拥有完全决定权。客户端还应在开始采样前告知用户,以允许用户检查请求(人工参与流程)并决定是否批准。

CreateMessageRequestParams

interface CreateMessageRequestParams {
  task?: TaskMetadata;
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  messages: SamplingMessage[];
  modelPreferences?: ModelPreferences;
  systemPrompt?: string;
  includeContext?: “none” | “thisServer” | “allServers”;
  temperature?: number;
  maxTokens: number;
  stopSequences?: string[];
  metadata?: object;
  tools?: Tool[];
  toolChoice?: ToolChoice;
}

用于 sampling/createMessage 请求的参数。

如果指定,调用方请求对此请求进行任务增强执行。请求会立即返回 CreateTaskResult,实际结果稍后可通过 tasks/result 获取。

任务增强受能力协商约束;接收方 MUST 在其能力中声明支持特定请求类型的任务增强。

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • [key: string]: unknown
  • OptionalprogressToken?: ProgressToken

    如果指定,调用方请求此请求的带外进度通知(由 notifications/progress 表示)。此参数的值是不透明令牌,会附加到后续任何通知上。接收方没有义务提供这些通知。

服务器关于选择哪个模型的偏好。客户端 MAY 忽略这些偏好。

服务器希望用于采样的可选系统提示。客户端 MAY 修改或省略此提示。

请求包含来自一个或多个 MCP 服务器(包括调用方)的上下文,并附加到提示中。客户端 MAY 忽略此请求。

默认值为 “none”。值 “thisServer” 和 “allServers” 已软弃用。仅当客户端声明 ClientCapabilities.sampling.context 时,服务器 SHOULD 使用这些值。这些值可能会在未来规范版本中移除。

请求采样的最大 token 数(用于防止补全失控)。

客户端 MAY 选择采样少于所请求最大值的 token。

要传递给 LLM 提供方的可选元数据。此元数据的格式由提供方决定。

模型在生成期间可使用的工具。如果提供此字段但未声明 ClientCapabilities.sampling.tools,客户端 MUST 返回错误。

控制模型如何使用工具。如果提供此字段但未声明 ClientCapabilities.sampling.tools,客户端 MUST 返回错误。默认值为 { mode: “auto” }

CreateMessageResult

interface CreateMessageResult {
  _meta?: { [key: string]: unknown };
  model: string;
  stopReason?: string;
  role: Role;
  content: SamplingMessageContentBlock | SamplingMessageContentBlock[];
  [key: string]: unknown;
}

客户端对服务器 sampling/createMessage 请求的响应。客户端应在返回采样消息前告知用户,以允许用户检查响应(人工参与流程)并决定是否允许服务器查看。

参见 通用字段: _meta 中关于 _meta 用法的说明。

生成该消息的模型名称。

采样停止的原因(如果已知)。

标准值:

  • “endTurn”:assistant 轮次自然结束
  • “stopSequence”:遇到停止序列
  • “maxTokens”:达到最大 token 限制
  • “toolUse”:模型想要使用一个或多个工具

此字段是开放字符串,以允许提供方特定的停止原因。

ModelHint

interface ModelHint {
  name?: string;
}

用于模型选择的提示。

此处未声明的键目前未由规范指定,由客户端自行解释。

模型名称提示。

客户端 SHOULD 将其视为模型名称的子字符串;例如:

  • claude-3-5-sonnet 应匹配 claude-3-5-sonnet-20241022
  • sonnet 应匹配 claude-3-5-sonnet-20241022, claude-3-sonnet-20240229等。
  • claude 应匹配任何 Claude 模型

客户端 MAY 也将该字符串映射到其他提供方的模型名称或不同模型系列,只要它填补类似定位;例如:

  • gemini-1.5-flash 可匹配 claude-3-haiku-20240307

ModelPreferences

interface ModelPreferences {
  hints?: ModelHint[];
  costPriority?: number;
  speedPriority?: number;
  intelligencePriority?: number;
}

服务器在采样期间向客户端请求的模型选择偏好。

由于 LLM 可能在多个维度上存在差异,选择“最佳”模型很少是直接的。不同模型擅长不同方面:有些更快但能力较弱,有些能力更强但成本更高,等等。此接口允许服务器表达其在多个维度上的优先级,以帮助客户端为其用例做出合适选择。

这些偏好始终是建议性的。客户端 MAY 忽略它们。客户端也自行决定如何解释这些偏好,以及如何在其他考虑因素之间权衡。

用于模型选择的可选提示。

如果指定多个提示,客户端 MUST 按顺序评估它们(采用第一个匹配项)。

客户端 SHOULD 优先使用这些提示,而不是数字优先级;但在匹配不明确时 MAY 仍使用优先级进行选择。

选择模型时成本的优先程度。值为 0 表示成本不重要,值为 1 表示成本是最重要因素。

选择模型时采样速度(延迟)的优先程度。值为 0 表示速度不重要,值为 1 表示速度是最重要因素。

选择模型时智能和能力的优先程度。值为 0 表示智能不重要,值为 1 表示智能是最重要因素。

SamplingMessage

interface SamplingMessage {
  role: Role;
  content: SamplingMessageContentBlock | SamplingMessageContentBlock[];
  _meta?: { [key: string]: unknown };
}

描述发送给 LLM API 或从 LLM API 接收的消息。

参见 通用字段: _meta 中关于 _meta 用法的说明。

SamplingMessageContentBlock

SamplingMessageContentBlock:
  | TextContent
  | ImageContent
  | AudioContent
  | ToolUseContent
  | ToolResultContent

ToolChoice

interface ToolChoice {
  mode?: “none” | “required” | “auto”;
}

控制采样请求的工具选择行为。

控制模型的工具使用能力:

  • “auto”:模型决定是否使用工具(默认)
  • “required”:模型在完成前 MUST 使用至少一个工具
  • “none”:模型 MUST NOT 使用任何工具

ToolResultContent

interface ToolResultContent {
  type: “tool_result”;
  toolUseId: string;
  content: ContentBlock[];
  structuredContent?: { [key: string]: unknown };
  isError?: boolean;
  _meta?: { [key: string]: unknown };
}

工具使用的结果,由用户提供回 assistant。

此结果对应的工具使用 ID。

这 MUST 与先前 ToolUseContent 中的 ID 匹配。

工具使用的非结构化结果内容。

其格式与 CallToolResult.content 相同,可包含文本、图像、音频、资源链接和嵌入资源。

可选的结构化结果对象。

如果工具定义了 outputSchema,此对象 SHOULD 符合该 schema。

工具使用是否产生错误。

如果为 true,内容通常描述发生的错误。默认值:false

关于工具结果的可选元数据。客户端在后续采样请求中包含工具结果时 SHOULD 保留此字段,以启用缓存优化。

参见 通用字段: _meta 中关于 _meta 用法的说明。

ToolUseContent

interface ToolUseContent {
  type: “tool_use”;
  id: string;
  name: string;
  input: { [key: string]: unknown };
  _meta?: { [key: string]: unknown };
}

assistant 发出的调用工具请求。

此工具使用的唯一标识符。

此 ID 用于将工具结果与对应的工具使用相匹配。

要调用的工具名称。

传递给工具的参数,符合该工具的输入 schema。

关于工具使用的可选元数据。客户端在后续采样请求中包含工具使用时 SHOULD 保留此字段,以启用缓存优化。

参见 通用字段: _meta 中关于 _meta 用法的说明。

tools/call

CallToolRequest

interface CallToolRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  method: “tools/call”;
  params: CallToolRequestParams;
}

客户端用于调用服务器提供的工具。

CallToolRequestParams

interface CallToolRequestParams {
  task?: TaskMetadata;
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  name: string;
  arguments?: { [key: string]: unknown };
}

用于 tools/call 请求的参数。

如果指定,调用方请求对此请求进行任务增强执行。请求会立即返回 CreateTaskResult,实际结果稍后可通过 tasks/result 获取。

任务增强受能力协商约束;接收方 MUST 在其能力中声明支持特定请求类型的任务增强。

参见 通用字段: _meta 中关于 _meta 用法的说明。

类型声明
  • [key: string]: unknown
  • OptionalprogressToken?: ProgressToken

    如果指定,调用方请求此请求的带外进度通知(由 notifications/progress 表示)。此参数的值是不透明令牌,会附加到后续任何通知上。接收方没有义务提供这些通知。

工具名称。

用于工具调用的参数。

CallToolResult

interface CallToolResult {
  _meta?: { [key: string]: unknown };
  content: ContentBlock[];
  structuredContent?: { [key: string]: unknown };
  isError?: boolean;
  [key: string]: unknown;
}

服务器对工具调用的响应。

参见 通用字段: _meta 中关于 _meta 用法的说明。

表示工具调用非结构化结果的内容对象列表。

表示工具调用结构化结果的可选 JSON 对象。

工具调用是否以错误结束。

如果未设置,则假定为 false(调用成功)。

任何源自工具的错误 SHOULD 在结果对象内报告,并将 isError 设为 true, 而不是 作为 MCP 协议级错误响应报告。否则,LLM 将无法看到发生了错误并自行纠正。

但是,在 查找 工具时发生的任何错误、表示服务器不支持工具调用的错误,或任何其他异常情况,都应报告为 MCP 错误响应。

tools/list

ListToolsRequest

interface ListToolsRequest {
  jsonrpc: “2.0”;
  id: RequestId;
  params?: PaginatedRequestParams;
  method: “tools/list”;
}

由客户端发送,用于请求服务器拥有的工具列表。

ListToolsResult

interface ListToolsResult {
  _meta?: { [key: string]: unknown };
  nextCursor?: string;
  tools: Tool[];
  [key: string]: unknown;
}

服务器对客户端 tools/list 请求的响应。

参见 通用字段: _meta 中关于 _meta 用法的说明。

表示最后一个返回结果之后分页位置的不透明令牌。如果存在,可能还有更多可用结果。

Tool

interface Tool {
  icons?: Icon[];
  name: string;
  title?: string;
  description?: string;
  inputSchema: {
    $schema?: string;
    type: “object”;
    properties?: { [key: string]: object };
    required?: string[];
  };
  execution?: ToolExecution;
  outputSchema?: {
    $schema?: string;
    type: “object”;
    properties?: { [key: string]: object };
    required?: string[];
  };
  annotations?: ToolAnnotations;
  _meta?: { [key: string]: unknown };
}

客户端可调用工具的定义。

客户端可在用户界面中显示的一组可选尺寸图标。

支持渲染图标的客户端 MUST 至少支持以下 MIME 类型:

  • image/png - PNG 图像(安全,通用兼容)
  • image/jpeg (以及 image/jpg)- JPEG 图像(安全,通用兼容)

支持渲染图标的客户端 SHOULD 同时支持:

  • image/svg+xml - SVG 图像(可缩放,但需要安全预防措施)
  • image/webp - WebP 图像(现代、高效格式)

用于程序化或逻辑用途,但在过去的规范中用作显示名称,或在未提供 title 时作为回退显示名称。

用于 UI 和最终用户上下文,经过优化以便人类可读且易于理解,即使读者不熟悉特定领域术语也能理解。

如果未提供,应使用 name 进行显示(Tool 除外;对于 Tool, annotations.title 应优先于 name,如果存在)。

工具的人类可读描述。

客户端可以使用它来改善 LLM 对可用工具的理解。它可以被视为给模型的“提示”。

定义工具预期参数的 JSON Schema 对象。

此工具的执行相关属性。

可选 JSON Schema 对象,用于定义工具在 CallToolResult 的 structuredContent 字段中返回的输出结构。

未显式提供 $schema 时,默认使用 JSON Schema 2020-12。目前限制为根级别的 type: “object”。

可选的附加工具信息。

显示名称优先级顺序为:title、annotations.title,然后是 name。

参见 通用字段: _meta 中关于 _meta 用法的说明。

ToolAnnotations

interface ToolAnnotations {
  title?: string;
  readOnlyHint?: boolean;
  destructiveHint?: boolean;
  idempotentHint?: boolean;
  openWorldHint?: boolean;
}

向客户端描述 Tool 的附加属性。

注意:ToolAnnotations 中的所有属性都是 hints。它们不保证如实描述工具行为(包括像 title)。

客户端绝不应基于从不受信任服务器收到的 ToolAnnotations 做出工具使用决策。

工具的人类可读标题。

如果为 true,则该工具不会修改其环境。

默认值:false

如果为 true,则该工具可能对其环境执行破坏性更新。如果为 false,则该工具只执行增量更新。

(此属性仅当 readOnlyHint == false

默认值:true

如果为 true,则使用相同参数重复调用该工具不会对其环境产生额外影响。

(此属性仅当 readOnlyHint == false

默认值:false

如果为 true,则此工具可能与外部实体的“开放世界”交互。如果为 false,则该工具的交互域是封闭的。例如,网络搜索工具的世界是开放的,而记忆工具的世界不是。

默认值:true

ToolExecution

interface ToolExecution {
  taskSupport?: “forbidden” | “optional” | “required”;
}

工具的执行相关属性。

指示此工具是否支持任务增强执行。这允许客户端通过轮询任务系统来处理长时间运行的操作。

  • “forbidden”:工具不支持任务增强执行(缺省时的默认值)
  • “optional”:工具可以支持任务增强执行
  • “required”:工具要求任务增强执行

默认值:“forbidden”