跳到主要内容

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;
}

一个期待响应的请求。

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;
}

发生的错误类型代码。

错误的简短描述。该消息应(SHOULD)限制为简洁的单句。

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

Icon (图标)

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

一个可选尺寸的图标,可以在用户界面中显示。

指向图标资源的标准 URI。可以是 HTTP/HTTPS URL 或带有 Base64 编码图像数据的 data: URI。

消费者应(SHOULD)采取步骤确保提供图标的 URL 来自与客户端/服务器相同的域名或受信任的域名。

消费者在消费 SVG 时应(SHOULD)采取适当的预防措施,因为它们可能包含可执行的 JavaScript。

如果源 MIME 类型缺失或过于通用,可选用此项覆盖。例如:“image/png”“image/jpeg”“image/svg+xml”

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

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

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

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

LoggingLevel (日志级别)

LoggingLevel:
  | “debug” (调试)
  | “info” (信息)
  | “notice” (注意)
  | “warning” (警告)
  | “error” (错误)
  | “critical” (严重)
  | “alert” (警报)
  | “emergency” (紧急)

日志消息的严重程度。

这些映射到 syslog 消息严重程度,如 RFC-5424 中所指定:https://datatracker.ietf.org/doc/html/rfc5424#section-6.2.1

ProgressToken (进度令牌)

ProgressToken: string | number

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

RequestId (请求 ID)

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 (Blob 资源内容)

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 图像(现代、高效的格式)

用于编程或逻辑用途,但在过去的规范中用作显示名称或作为回退(如果标题不存在)。

用于 UI 和最终用户上下文——经过优化,易于人类阅读和理解,即使是不熟悉特定领域术语的人也能读懂。

如果未提供,应使用名称进行显示(工具除外,如果存在 annotations.title,则应优先于 name)。

此资源的 URI。

该资源所代表含义的描述。

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

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

客户端的可选注解。

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

主机可以使用它来显示文件大小并估计上下文窗口的使用情况。

关于 _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
  • 可选progressToken?: ProgressToken

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

参数的信息

类型声明
  • name: string

    参数的名称

  • value: string

    用于补全匹配的参数值。

补全的附加可选上下文

类型声明
  • 可选arguments?: { [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 项。

  • 可选total?: number

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

  • 可选hasMore?: boolean

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

PromptReference (提示词引用)

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

标识一个提示词。

用于编程或逻辑用途,但在过去的规范中用作显示名称或作为回退(如果标题不存在)。

用于 UI 和最终用户上下文——经过优化,易于人类阅读和理解,即使是不熟悉特定领域术语的人也能读懂。

如果未提供,应使用名称进行显示(工具除外,如果存在 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” 时存在。包含匹配请求架构的值。对于带外 (out-of-band) 模式的响应,此项省略。

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
  • 可选progressToken?: ProgressToken

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

引导模式。

向用户显示的描述所请求信息的消息。

JSON 架构的受限子集。仅允许顶级属性,不允许嵌套。

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
  • 可选progressToken?: ProgressToken

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

引导模式。

向用户显示的解释为何需要此次交互的消息。

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

用户应导航至的 URL。

EnumSchema (枚举架构)

LegacyTitledEnumSchema

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

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

(遗留) 枚举值的显示名称。根据 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

受限的架构定义,仅允许原始类型,不允许嵌套对象或数组。

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[];
}

多选枚举架构,每个选项带有显示标题。

枚举字段的可选标题。

枚举字段的可选说明。

要选择的最小项目数。

要选择的最大项目数。

包含枚举选项和显示标签的数组项目架构。

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

    带有值和显示标签的枚举选项数组。

可选的默认值。

TitledSingleSelectEnumSchema

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

单选枚举架构,每个选项带有显示标题。

枚举字段的可选标题。

枚举字段的可选说明。

带有值和显示标签的枚举选项数组。

类型声明
  • const: string

    枚举值。

  • title: string

    此选项的显示标签。

可选的默认值。

UntitledMultiSelectEnumSchema

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

不带选项显示标题的多选枚举架构。

枚举字段的可选标题。

枚举字段的可选说明。

要选择的最小项目数。

要选择的最大项目数。

数组项目架构。

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

    可供选择的枚举值数组。

可选的默认值。

UntitledSingleSelectEnumSchema

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

不带选项显示标题的单选枚举架构。

枚举字段的可选标题。

枚举字段的可选说明。

可供选择的枚举值数组。

可选的默认值。

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
  • 可选progressToken?: ProgressToken

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

客户端支持的模型上下文协议 (Model Context Protocol) 的最新版本。客户端也可以决定支持旧版本。

InitializeResult

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

服务器在收到客户端的初始化请求后发送此响应。

关于 _meta 的用法说明,请参阅 常规字段:_meta

服务器希望使用的模型上下文协议版本。这可能与客户端请求的版本不一致。如果客户端不支持此版本,则必须断开连接。

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

客户端可以使用它来提高 LLM 对可用工具、资源等的理解。可以将其视为给模型的“提示”。例如,此信息可以被添加到系统提示词 (system prompt) 中。

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 };
    };
  };
}

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

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

如果客户端支持列出根 (roots),则存在此项。

类型声明
  • OptionallistChanged?: boolean

    客户端是否支持根列表更改的通知。

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

类型声明
  • Optionalcontext?: object

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

  • Optionaltools?: object

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

如果客户端支持来自服务器的引导 (elicitation),则存在此项。

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

类型声明
  • 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 图像(现代、高效的格式)

用于编程或逻辑用途,但在过去的规范中用作显示名称或作为回退(如果标题不存在)。

用于 UI 和最终用户上下文——经过优化,易于人类阅读和理解,即使是不熟悉特定领域术语的人也能读懂。

如果未提供,应使用名称进行显示(工具除外,如果存在 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 } };
  };
}

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

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

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

如果服务器支持参数自动完成建议,则存在此项。

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

类型声明
  • 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
  • 可选progressToken?: ProgressToken

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

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

notifications/cancelled (通知/已取消)

CancelledNotification

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

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

该请求应仍处于进行中,但由于通信延迟,此通知总是有可能在请求完成后才到达。

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

客户端不得尝试取消其 initialize 请求。

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

CancelledNotificationParams

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

notifications/cancelled 通知参数。

关于 _meta 的用法说明,请参阅 常规字段:_meta

要取消的请求 ID。

这必须对应于之前沿相同方向发出的请求 ID。取消非任务请求时必须提供此项。不得将其用于取消任务 (请改用 tasks/cancel 请求)。

描述取消原因的可选字符串。这可能会被记录或呈现给用户。

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 请求,则服务器可以决定自动发送哪些消息。

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

    已完成的引出(elicitation)任务的 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;
}

由客户端使用,用于获取由服务器提供的提示(prompt)。

GetPromptRequestParams

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

prompts/get 请求的参数。

关于 _meta 的用法说明,请参阅 常规字段:_meta

类型声明
  • [key: string]: unknown
  • 可选progressToken?: 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 图像(现代、高效的格式)

用于编程或逻辑用途,但在过去的规范中用作显示名称或作为回退(如果标题不存在)。

用于 UI 和最终用户上下文——经过优化,易于人类阅读和理解,即使是不熟悉特定领域术语的人也能读懂。

如果未提供,应使用名称进行显示(工具除外,如果存在 annotations.title,则应优先于 name)。

此提示所提供内容的可选说明。

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

关于 _meta 的用法说明,请参阅 常规字段:_meta

PromptArgument (提示词参数)

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

描述提示可接受的参数。

用于编程或逻辑用途,但在过去的规范中用作显示名称或作为回退(如果标题不存在)。

用于 UI 和最终用户上下文——经过优化,易于人类阅读和理解,即使是不熟悉特定领域术语的人也能读懂。

如果未提供,应使用名称进行显示(工具除外,如果存在 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 图像(现代、高效的格式)

用于编程或逻辑用途,但在过去的规范中用作显示名称或作为回退(如果标题不存在)。

用于 UI 和最终用户上下文——经过优化,易于人类阅读和理解,即使是不熟悉特定领域术语的人也能读懂。

如果未提供,应使用名称进行显示(工具除外,如果存在 annotations.title,则应优先于 name)。

此资源的 URI。

该资源所代表含义的描述。

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

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

客户端的可选注解。

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

主机可以使用它来显示文件大小并估计上下文窗口的使用情况。

关于 _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
  • 可选progressToken?: 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
  • 可选progressToken?: 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 图像(现代、高效的格式)

用于编程或逻辑用途,但在过去的规范中用作显示名称或作为回退(如果标题不存在)。

用于 UI 和最终用户上下文——经过优化,易于人类阅读和理解,即使是不熟悉特定领域术语的人也能读懂。

如果未提供,应使用名称进行显示(工具除外,如果存在 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
  • 可选progressToken?: ProgressToken

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

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

roots/list (根目录/列表)

ListRootsRequest

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

由服务器发送,用于请求客户端的根 URI 列表。根(Roots)允许服务器请求特定的目录或文件进行操作。一个常见的根示例是提供一组仓库或目录,供服务器在其中操作。

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

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 方案。

根的可选名称。这可以用于为根提供一个人类可读的标识符,这在显示目的或在应用程序的其他部分引用该根时可能很有用。

关于 _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
  • 可选progressToken?: ProgressToken

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

服务器对模型选择的偏好。客户端可以忽略这些偏好。

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

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

默认值为 “none”。“thisServer” 和 “allServers” 值已被软废弃。只有当客户端声明了 ClientCapabilities.sampling.context 时,服务器才应使用这些值。在未来的规范版本中,这些值可能会被删除。

请求采样的最大令牌(token)数(以防止生成无限内容)。

客户端可以选择采样少于请求最大值的令牌。

传递给 LLM 提供者的可选元数据。此元数据的格式由提供者特定。

模型在生成过程中可能使用的工具。如果提供了此字段但未声明 ClientCapabilities.sampling.tools,则客户端必须返回错误。

控制模型如何使用工具。如果提供了此字段但未声明 ClientCapabilities.sampling.tools,则客户端必须返回错误。默认值为 { 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”:助手轮次的自然结束
  • “stopSequence”:遇到停止序列
  • “maxTokens”:达到最大 Token 限制
  • “toolUse”:模型希望使用一个或多个工具

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

ModelHint (模型提示)

interface ModelHint {
  name?: string;
}

用于模型选择的提示信息。

未在此处声明的键目前在规范中未作说明,由客户端自行解释。

关于模型名称的提示。

客户端“应该”(SHOULD)将其视为模型名称的子字符串;例如:

  • claude-3-5-sonnet 应该匹配 claude-3-5-sonnet-20241022
  • sonnet 应该匹配 claude-3-5-sonnet-20241022claude-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 或从其接收的消息。

关于 _meta 的用法说明,请参阅 常规字段:_meta

ToolChoice (工具选择)

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

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

控制模型的工具使用能力

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

ToolResultContent (工具结果内容)

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

工具调用的结果,由用户提供回助手。

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

这“必须”与之前 ToolUseContent 中的 ID 相匹配。

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

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

一个可选的结构化结果对象。

如果该工具定义了 outputSchema,则此对象“应该”(SHOULD)符合该模式。

工具调用是否导致了错误。

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

有关工具结果的可选元数据。当在后续采样请求中包含工具结果时,客户端“应该”保留此字段,以实现缓存优化。

关于 _meta 的用法说明,请参阅 常规字段:_meta

ToolUseContent (工具使用内容)

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

助手发出的调用工具的请求。

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

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

要调用的工具名称。

要传递给工具的参数,符合工具的输入模式(input schema)。

有关工具调用的可选元数据。当在后续采样请求中包含工具调用时,客户端“应该”保留此字段,以实现缓存优化。

关于 _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
  • 可选progressToken?: 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 图像(现代、高效的格式)

用于编程或逻辑用途,但在过去的规范中用作显示名称或作为回退(如果标题不存在)。

用于 UI 和最终用户上下文——经过优化,易于人类阅读和理解,即使是不熟悉特定领域术语的人也能读懂。

如果未提供,应使用名称进行显示(工具除外,如果存在 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;
}

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

注意:ToolAnnotations 中的所有属性都是**提示**。它们不保证能忠实描述工具行为(包括像 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”