通用类型

注解

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

客户端的可选注解。客户端可以使用注解来说明对象的使用或显示方式

audience?: Role[]

描述此对象或数据的目标客户。

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

lastModified?: string

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

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

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

priority?: number

描述此数据对于操作服务器的重要性。

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

音频内容

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

提供给 LLM 或来自 LLM 的音频。

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

annotations?: Annotations

客户端的可选注解。

data: string

base64 编码的音频数据。

mimeType: string

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

二进制资源内容

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

特定资源或子资源的内容。

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

blob: string

一个 base64 编码的字符串,表示项目的二进制数据。

mimeType?: string

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

uri: string

此资源的 URI。

布尔模式

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

客户端能力

interface ClientCapabilities {
  elicitation?: object;
  experimental?: { [key: string]: object };
  roots?: { listChanged?: boolean };
  sampling?: object;
}

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

elicitation?: object

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

experimental?: { [key: string]: object }

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

roots?: { listChanged?: boolean }

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

类型声明
  • 可选listChanged?: boolean

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

sampling?: object

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

内容块

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

游标

Cursor: string

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

嵌入式资源

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

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

如何为 LLM 和/或用户最好地呈现嵌入式资源,由客户端决定。

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

annotations?: Annotations

客户端的可选注解。

空结果

EmptyResult: Result

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

枚举模式

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

图像内容

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

提供给 LLM 或来自 LLM 的图像。

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

annotations?: Annotations

客户端的可选注解。

data: string

base64 编码的图像数据。

mimeType: string

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

实现

interface Implementation {
  name: string;
  title?: string;
  version: string;
}

描述 MCP 实现的名称和版本,并带有用于 UI 表示的可选标题。

name: string

旨在用于程序化或逻辑用途,但在过去的规范中用作显示名称或后备(如果标题不存在)。

title?: string

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

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

JSONRPC 错误

interface JSONRPCError {
  error: { code: number; data?: unknown; message: string };
  id: RequestId;
  jsonrpc: “2.0”;
}

对请求的响应,指示发生了错误。

error: { code: number; data?: unknown; message: string }
类型声明
  • code: number

    发生的错误类型。

  • 可选data?: unknown

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

  • message: string

    错误的简短描述。消息应限于简洁的单句。

JSONRPC 通知

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

一个不期望响应的通知。

params?: { _meta?: { [key: string]: unknown }; [key: string]: unknown }
类型声明
  • [key: string]: unknown
  • 可选_meta?: { [key: string]: unknown }

    有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

JSONRPC 请求

interface JSONRPCRequest {
  id: RequestId;
  jsonrpc: “2.0”;
  method: string;
  params?: {
    _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
    [key: string]: unknown;
  };
}

一个期望响应的请求。

params?: {
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  [key: string]: unknown;
}
类型声明
  • [key: string]: unknown
  • 可选_meta?: { progressToken?: ProgressToken; [key: string]: unknown }

    有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

    • 可选progressToken?: ProgressToken

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

JSONRPC 响应

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

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

日志级别

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

日志消息的严重性。

这些对应于 RFC-5424 中指定的 syslog 消息严重性:https://datatracker.ietf.org/doc/html/rfc5424#section-6.2.1

模型提示

interface ModelHint {
  name?: string;
}

用于模型选择的提示。

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

name?: string

模型名称的提示。

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

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

客户端也可以将该字符串映射到不同提供商的模型名称或不同的模型系列,只要它填补了类似的定位即可;例如

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

模型偏好

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

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

由于 LLM 可以在多个维度上变化,因此选择“最佳”模型很少是直接的。不同的模型在不同领域表现出色——有些速度更快但能力较弱,有些能力更强但更昂贵,等等。该接口允许服务器在多个维度上表达其优先级,以帮助客户端为其用例做出适当的选择。

这些偏好始终是建议性的。客户端可以忽略它们。如何解释这些偏好以及如何平衡它们与其他考虑因素也由客户端决定。

costPriority?: number

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

hints?: ModelHint[]

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

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

客户端应优先考虑这些提示,而不是数字优先级,但仍可使用优先级从模糊匹配中进行选择。

intelligencePriority?: number

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

speedPriority?: number

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

数字模式

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

原始模式定义

PrimitiveSchemaDefinition:
  | StringSchema
  | NumberSchema
  | BooleanSchema
  | EnumSchema

仅允许原始类型而不允许嵌套对象或数组的受限模式定义。

进度令牌

ProgressToken: string | number

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

提示

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

arguments?: PromptArgument[]

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

description?: string

此提示提供的可选说明

name: string

旨在用于程序化或逻辑用途,但在过去的规范中用作显示名称或后备(如果标题不存在)。

title?: string

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

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

提示参数

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

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

description?: string

参数的人类可读描述。

name: string

旨在用于程序化或逻辑用途,但在过去的规范中用作显示名称或后备(如果标题不存在)。

required?: boolean

是否必须提供此参数。

title?: string

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

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

提示消息

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

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

这与 `SamplingMessage` 类似,但也支持从 MCP 服务器嵌入资源。

提示引用

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

标识一个提示。

name: string

旨在用于程序化或逻辑用途,但在过去的规范中用作显示名称或后备(如果标题不存在)。

title?: string

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

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

请求 ID

RequestId: string | number

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

资源

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

annotations?: Annotations

客户端的可选注解。

description?: string

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

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

mimeType?: string

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

name: string

旨在用于程序化或逻辑用途,但在过去的规范中用作显示名称或后备(如果标题不存在)。

size?: number

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

主机可以使用此信息来显示文件大小和估计上下文窗口使用量。

title?: string

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

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

uri: string

此资源的 URI。

资源内容

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

特定资源或子资源的内容。

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

mimeType?: string

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

uri: string

此资源的 URI。

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

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

annotations?: Annotations

客户端的可选注解。

description?: string

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

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

mimeType?: string

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

name: string

旨在用于程序化或逻辑用途,但在过去的规范中用作显示名称或后备(如果标题不存在)。

size?: number

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

主机可以使用此信息来显示文件大小和估计上下文窗口使用量。

title?: string

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

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

uri: string

此资源的 URI。

资源模板

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

annotations?: Annotations

客户端的可选注解。

description?: string

此模板的用途描述。

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

mimeType?: string

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

name: string

旨在用于程序化或逻辑用途,但在过去的规范中用作显示名称或后备(如果标题不存在)。

title?: string

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

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

uriTemplate: string

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

资源模板引用

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

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

uri: string

资源的 URI 或 URI 模板。

结果

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

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

角色

Role: “user” | “assistant”

对话中消息和数据的发送者或接收者。

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

name?: string

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

uri: string

标识根的 URI。目前这*必须*以 file:// 开头。此限制可能会在协议的未来版本中放宽,以允许其他 URI 方案。

采样消息

interface SamplingMessage {
  content: TextContent | ImageContent | AudioContent;
  role: Role;
}

描述向 LLM API 发出或从其接收的消息。

服务器能力

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

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

completions?: object

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

experimental?: { [key: string]: object }

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

logging?: object

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

prompts?: { listChanged?: boolean }

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

类型声明
  • 可选listChanged?: boolean

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

resources?: { listChanged?: boolean; subscribe?: boolean }

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

类型声明
  • 可选listChanged?: boolean

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

  • 可选subscribe?: boolean

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

tools?: { listChanged?: boolean }

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

类型声明
  • 可选listChanged?: boolean

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

字符串模式

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

文本内容

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

提供给 LLM 或来自 LLM 的文本。

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

annotations?: Annotations

客户端的可选注解。

text: string

消息的文本内容。

文本资源内容

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

特定资源或子资源的内容。

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

mimeType?: string

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

text: string

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

uri: string

此资源的 URI。

工具

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

annotations?: ToolAnnotations

可选的附加工具信息。

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

description?: string

对工具的人类可读描述。

客户端可以使用此描述来提高 LLM 对可用工具的理解。可以将其视为给模型的“提示”。

inputSchema: {
  properties?: { [key: string]: object };
  required?: string[];
  type: “object”;
}

一个 JSON Schema 对象,定义了工具的预期参数。

name: string

旨在用于程序化或逻辑用途,但在过去的规范中用作显示名称或后备(如果标题不存在)。

outputSchema?: {
  properties?: { [key: string]: object };
  required?: string[];
  type: “object”;
}

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

title?: string

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

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

工具注解

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

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

注意:ToolAnnotations 中的所有属性都是提示。它们不保证能忠实地描述工具行为(包括像 title 这样的描述性属性)。

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

destructiveHint?: boolean

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

(此属性仅在 readOnlyHint == false 时有意义)

默认值:true

idempotentHint?: boolean

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

(此属性仅在 readOnlyHint == false 时有意义)

默认值:false

openWorldHint?: boolean

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

默认值:true

readOnlyHint?: boolean

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

默认值:false

title?: string

工具的人类可读标题。

completion/complete

完成请求

interface CompleteRequest {
  method: “completion/complete”;
  params: {
    argument: { name: string; value: string };
    context?: { arguments?: { [key: string]: string } };
    ref: PromptReference | ResourceTemplateReference;
  };
}

从客户端到服务器的请求,用于请求补全选项。

params: {
  argument: { name: string; value: string };
  context?: { arguments?: { [key: string]: string } };
  ref: PromptReference | ResourceTemplateReference;
}
类型声明
  • argument: { name: string; value: string }

    参数信息

    • name: string

      参数的名称

    • value: string

      用于补全匹配的参数值。

  • 可选context?: { arguments?: { [key: string]: string } }

    用于补全的可选附加上下文

    • 可选arguments?: { [key: string]: string }

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

完成结果

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

completion: { hasMore?: boolean; total?: number; values: string[] }
类型声明
  • 可选hasMore?: boolean

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

  • 可选total?: number

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

  • values: string[]

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

elicitation/create

引出请求

interface ElicitRequest {
  method: “elicitation/create”;
  params: {
    message: string;
    requestedSchema: {
      properties: { [key: string]: PrimitiveSchemaDefinition };
      required?: string[];
      type: “object”;
    };
  };
}

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

params: {
  message: string;
  requestedSchema: {
    properties: { [key: string]: PrimitiveSchemaDefinition };
    required?: string[];
    type: “object”;
  };
}
类型声明
  • message: string

    要呈现给用户的消息。

  • requestedSchema: {
      properties: { [key: string]: PrimitiveSchemaDefinition };
      required?: string[];
      type: “object”;
    }

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

引出结果

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

action: “accept” | “decline” | “cancel”

用户响应引出请求的操作。

  • “accept”:用户提交了表单/确认了操作
  • “decline”:用户明确拒绝了操作
  • “cancel”:用户未做明确选择就关闭了
content?: { [key: string]: string | number | boolean }

提交的表单数据,仅在 action 为 “accept” 时存在。包含与请求的模式匹配的值。

initialize

初始化请求

interface InitializeRequest {
  method: “initialize”;
  params: {
    capabilities: ClientCapabilities;
    clientInfo: Implementation;
    protocolVersion: string;
  };
}

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

params: {
  capabilities: ClientCapabilities;
  clientInfo: Implementation;
  protocolVersion: string;
}
类型声明
  • capabilities: ClientCapabilities
  • clientInfo: Implementation
  • protocolVersion: string

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

初始化结果

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

instructions?: string

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

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

protocolVersion: string

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

logging/setLevel

设置级别请求

interface SetLevelRequest {
  method: “logging/setLevel”;
  params: { level: LoggingLevel };
}

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

params: { level: LoggingLevel }
类型声明
  • 客户端希望从服务器接收的日志记录级别。服务器应将此级别及更高级别(即更严重)的所有日志作为通知/消息发送给客户端。

notifications/cancelled

已取消通知

interface CancelledNotification {
  method: “notifications/cancelled”;
  params: { reason?: string; requestId: RequestId };
}

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

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

此通知表示结果将被弃用,因此任何相关的处理都应停止。

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

params: { reason?: string; requestId: RequestId }
类型声明
  • 可选reason?: string

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

  • requestId: RequestId

    要取消的请求的 ID。

    此 ID 必须对应于先前在相同方向发出的请求的 ID。

notifications/initialized

已初始化通知

interface InitializedNotification {
  method: “notifications/initialized”;
  params?: { _meta?: { [key: string]: unknown }; [key: string]: unknown };
}

此通知在初始化完成后从客户端发送到服务器。

params?: { _meta?: { [key: string]: unknown }; [key: string]: unknown }
类型声明
  • [key: string]: unknown
  • 可选_meta?: { [key: string]: unknown }

    有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

notifications/message

日志消息通知

interface LoggingMessageNotification {
  method: “notifications/message”;
  params: { data: unknown; level: LoggingLevel; logger?: string };
}

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

params: { data: unknown; level: LoggingLevel; logger?: string }
类型声明
  • data: unknown

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

  • 此日志消息的严重性。

  • 可选logger?: string

    发出此消息的记录器的可选名称。

notifications/progress

进度通知

interface ProgressNotification {
  method: “notifications/progress”;
  params: {
    message?: string;
    progress: number;
    progressToken: ProgressToken;
    total?: number;
  };
}

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

params: {
  message?: string;
  progress: number;
  progressToken: ProgressToken;
  total?: number;
}
类型声明
  • 可选message?: string

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

  • progress: number

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

  • progressToken: ProgressToken

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

  • 可选total?: number

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

notifications/prompts/list_changed

提示列表变更通知

interface PromptListChangedNotification {
  method: “notifications/prompts/list_changed”;
  params?: { _meta?: { [key: string]: unknown }; [key: string]: unknown };
}

从服务器到客户端的可选通知,告知其提供的提示列表已更改。服务器可以在没有任何来自客户端的先前订阅的情况下发出此通知。

params?: { _meta?: { [key: string]: unknown }; [key: string]: unknown }
类型声明
  • [key: string]: unknown
  • 可选_meta?: { [key: string]: unknown }

    有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

notifications/resources/list_changed

资源列表变更通知

interface ResourceListChangedNotification {
  method: “notifications/resources/list_changed”;
  params?: { _meta?: { [key: string]: unknown }; [key: string]: unknown };
}

从服务器到客户端的可选通知,告知其可读取的资源列表已更改。服务器可以在没有任何来自客户端的先前订阅的情况下发出此通知。

params?: { _meta?: { [key: string]: unknown }; [key: string]: unknown }
类型声明
  • [key: string]: unknown
  • 可选_meta?: { [key: string]: unknown }

    有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

notifications/resources/updated

资源更新通知

interface ResourceUpdatedNotification {
  method: “notifications/resources/updated”;
  params: { uri: string };
}

从服务器到客户端的通知,告知其资源已更改,可能需要重新读取。此通知仅应在客户端先前发送了 resources/subscribe 请求时发送。

params: { uri: string }
类型声明
  • uri: string

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

notifications/roots/list_changed

根列表变更通知

interface RootsListChangedNotification {
  method: “notifications/roots/list_changed”;
  params?: { _meta?: { [key: string]: unknown }; [key: string]: unknown };
}

从客户端到服务器的通知,告知其根列表已更改。每当客户端添加、删除或修改任何根时,都应发送此通知。然后,服务器应使用 ListRootsRequest 请求更新的根列表。

params?: { _meta?: { [key: string]: unknown }; [key: string]: unknown }
类型声明
  • [key: string]: unknown
  • 可选_meta?: { [key: string]: unknown }

    有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

notifications/tools/list_changed

工具列表变更通知

interface ToolListChangedNotification {
  method: “notifications/tools/list_changed”;
  params?: { _meta?: { [key: string]: unknown }; [key: string]: unknown };
}

从服务器到客户端的可选通知,告知其提供的工具列表已更改。服务器可以在没有任何来自客户端的先前订阅的情况下发出此通知。

params?: { _meta?: { [key: string]: unknown }; [key: string]: unknown }
类型声明
  • [key: string]: unknown
  • 可选_meta?: { [key: string]: unknown }

    有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

ping

Ping 请求

interface PingRequest {
  method: “ping”;
  params?: {
    _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
    [key: string]: unknown;
  };
}

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

params?: {
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  [key: string]: unknown;
}
类型声明
  • [key: string]: unknown
  • 可选_meta?: { progressToken?: ProgressToken; [key: string]: unknown }

    有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

    • 可选progressToken?: ProgressToken

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

prompts/get

获取提示请求

interface GetPromptRequest {
  method: “prompts/get”;
  params: { arguments?: { [key: string]: string }; name: string };
}

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

params: { arguments?: { [key: string]: string }; name: string }
类型声明
  • 可选arguments?: { [key: string]: string }

    用于提示模板化的参数。

  • name: string

    提示或提示模板的名称。

获取提示结果

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

description?: string

提示的可选描述。

prompts/list

列出提示请求

interface ListPromptsRequest {
  method: “prompts/list”;
  params?: { cursor?: string };
}

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

params?: { cursor?: string }
类型声明
  • 可选cursor?: string

    表示当前分页位置的不透明令牌。如果提供,服务器应返回此游标之后的结果。

列出提示结果

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

nextCursor?: string

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

resources/list

列出资源请求

interface ListResourcesRequest {
  method: “resources/list”;
  params?: { cursor?: string };
}

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

params?: { cursor?: string }
类型声明
  • 可选cursor?: string

    表示当前分页位置的不透明令牌。如果提供,服务器应返回此游标之后的结果。

列出资源结果

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

nextCursor?: string

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

resources/read

读取资源请求

interface ReadResourceRequest {
  method: “resources/read”;
  params: { uri: string };
}

从客户端发送到服务器,以读取特定的资源 URI。

params: { uri: string }
类型声明
  • uri: string

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

读取资源结果

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

resources/subscribe

订阅请求

interface SubscribeRequest {
  method: “resources/subscribe”;
  params: { uri: string };
}

从客户端发送,请求服务器在特定资源更改时发送 resources/updated 通知。

params: { uri: string }
类型声明
  • uri: string

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

resources/templates/list

列出资源模板请求

interface ListResourceTemplatesRequest {
  method: “resources/templates/list”;
  params?: { cursor?: string };
}

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

params?: { cursor?: string }
类型声明
  • 可选cursor?: string

    表示当前分页位置的不透明令牌。如果提供,服务器应返回此游标之后的结果。

列出资源模板结果

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

nextCursor?: string

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

resources/unsubscribe

取消订阅请求

interface UnsubscribeRequest {
  method: “resources/unsubscribe”;
  params: { uri: string };
}

从客户端发送,请求取消来自服务器的 resources/updated 通知。此请求应在先前的 resources/subscribe 请求之后发送。

params: { uri: string }
类型声明
  • uri: string

    要取消订阅的资源的 URI。

roots/list

列出根请求

interface ListRootsRequest {
  method: “roots/list”;
  params?: {
    _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
    [key: string]: unknown;
  };
}

从服务器发送,请求客户端的根 URI 列表。根允许服务器请求特定的目录或文件进行操作。根的一个常见示例是提供一组服务器应操作的存储库或目录。

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

params?: {
  _meta?: { progressToken?: ProgressToken; [key: string]: unknown };
  [key: string]: unknown;
}
类型声明
  • [key: string]: unknown
  • 可选_meta?: { progressToken?: ProgressToken; [key: string]: unknown }

    有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

    • 可选progressToken?: ProgressToken

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

列出根结果

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

sampling/createMessage

创建消息请求

interface CreateMessageRequest {
  method: “sampling/createMessage”;
  params: {
    includeContext?: “none” | “thisServer” | “allServers”;
    maxTokens: number;
    messages: SamplingMessage[];
    metadata?: object;
    modelPreferences?: ModelPreferences;
    stopSequences?: string[];
    systemPrompt?: string;
    temperature?: number;
  };
}

服务器通过客户端请求对 LLM 进行采样的请求。客户端完全有权决定选择哪个模型。客户端还应在开始采样前通知用户,以便用户检查请求(人在环路中)并决定是否批准。

params: {
  includeContext?: “none” | “thisServer” | “allServers”;
  maxTokens: number;
  messages: SamplingMessage[];
  metadata?: object;
  modelPreferences?: ModelPreferences;
  stopSequences?: string[];
  systemPrompt?: string;
  temperature?: number;
}
类型声明
  • 可选includeContext?: “none” | “thisServer” | “allServers”

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

  • maxTokens: number

    服务器请求的最大采样令牌数。客户端可以选择采样少于请求数量的令牌。

  • messages: SamplingMessage[]
  • 可选metadata?: object

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

  • 可选modelPreferences?: ModelPreferences

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

  • 可选stopSequences?: string[]
  • 可选systemPrompt?: string

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

  • 可选temperature?: number

创建消息结果

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

客户端对服务器 sampling/create_message 请求的响应。客户端在返回采样消息前应通知用户,以便用户检查响应(人在环路中)并决定是否允许服务器看到它。

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

model: string

生成该消息的模型的名称。

stopReason?: string

采样停止的原因,如果已知的话。

tools/call

调用工具请求

interface CallToolRequest {
  method: “tools/call”;
  params: { arguments?: { [key: string]: unknown }; name: string };
}

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

调用工具结果

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

content: ContentBlock[]

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

isError?: boolean

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

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

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

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

structuredContent?: { [key: string]: unknown }

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

tools/list

列出工具请求

interface ListToolsRequest {
  method: “tools/list”;
  params?: { cursor?: string };
}

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

params?: { cursor?: string }
类型声明
  • 可选cursor?: string

    表示当前分页位置的不透明令牌。如果提供,服务器应返回此游标之后的结果。

列出工具结果

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

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

_meta?: { [key: string]: unknown }

有关 _meta 用法的说明,请参见 [specification/2025-06-18/basic/index#general-fields]。

nextCursor?: string

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