自动补全

自动补全

社区译文;来源: MCP 80041ab0

模型上下文协议(MCP)为服务器提供了一种标准方式,用于为提示词和资源模板的参数提供自动补全建议。 当用户为特定提示词(以名称标识)或资源模板(以 URI 标识)填写参数值时,服务器可以提供上下文相关的建议。

为简洁起见,本页的请求示例省略了 _meta 请求元数据 (io.modelcontextprotocol/protocolVersion、 io.modelcontextprotocol/clientInfo 和 io.modelcontextprotocol/clientCapabilities)。每个请求 MUST 包含 必需的 _meta 字段;参见 _meta 。

用户交互模型

MCP 中的自动补全旨在支持类似 IDE 代码补全的交互式用户体验。

例如,应用程序可以在用户输入时通过下拉菜单或弹出菜单显示自动补全建议,并允许用户筛选和选择可用选项。

但是,实现可以自由地通过任何符合自身需求的界面模式公开自动补全;协议本身不强制规定任何特定的用户交互模型。

能力

支持自动补全的服务器 MUST 声明 completions 能力:

{
  "capabilities": {
    "completions": {}
  }
}

协议消息

请求自动补全

为了获取自动补全建议,客户端发送 completion/complete 请求,并通过引用类型指定要补全的对象:

请求:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "completion/complete",
  "params": {
    "ref": {
      "type": "ref/prompt",
      "name": "code_review"
    },
    "argument": {
      "name": "language",
      "value": "py"
    }
  }
}

响应:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "resultType": "complete",
    "completion": {
      "values": ["python", "pytorch", "pyside"],
      "total": 10,
      "hasMore": true
    }
  }
}

对于包含多个参数的提示词或 URI 模板,客户端应在 context.arguments 对象中包含之前的补全结果, 为后续请求提供上下文。

请求:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "completion/complete",
  "params": {
    "ref": {
      "type": "ref/prompt",
      "name": "code_review"
    },
    "argument": {
      "name": "framework",
      "value": "fla"
    },
    "context": {
      "arguments": {
        "language": "python"
      }
    }
  }
}

响应:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "resultType": "complete",
    "completion": {
      "values": ["flask"],
      "total": 1,
      "hasMore": false
    }
  }
}

引用类型

协议支持两种自动补全引用类型:

类型说明示例
ref/prompt按名称引用提示词{"type": "ref/prompt", "name": "code_review"}
ref/resource引用资源 URI 或 URI 模板{"type": "ref/resource", "uri": "file:///{path}"}

自动补全结果

服务器返回按相关性排序的自动补全值数组,其中包含:

  • 每个响应最多 100 项
  • 可选的可用匹配总数
  • 表示是否存在更多结果的布尔值

消息流

  sequenceDiagram
    participant Client
    participant Server

    Note over Client: User types argument
    Client->>Server: completion/complete
    Server-->>Client: Completion suggestions

    Note over Client: User continues typing
    Client->>Server: completion/complete
    Server-->>Client: Refined suggestions

数据类型

CompleteRequest

  • ref:PromptReference 或 ResourceTemplateReference。对于 ResourceTemplateReference,uri 是 URI 或 URI 模板。
  • argument:包含以下字段的对象:
    • name:参数名称
    • value:当前值
  • context:包含以下字段的对象:
    • arguments:已解析的参数名称到对应值的映射。

CompleteResult

  • completion:包含以下字段的对象:
    • values:建议数组(最多 100 项)
    • total:可选的匹配总数
    • hasMore:是否存在更多结果的标志

错误处理

对于常见失败情形,服务器 SHOULD 返回标准 JSON-RPC 错误:

  • 未找到方法:-32601(不支持该能力)
  • 无效的提示词名称:-32602(参数无效)
  • 缺少必需参数:-32602(参数无效)
  • 内部错误:-32603(内部错误)

实现注意事项

  1. 服务器 SHOULD:

    • 按相关性排序后返回建议
    • 在适用时实现模糊匹配
    • 对自动补全请求进行速率限制
    • 验证所有输入
  2. 客户端 SHOULD:

    • 对快速连续的自动补全请求进行防抖
    • 在适用时缓存自动补全结果
    • 妥善处理缺失或不完整的结果

安全

实现 MUST:

  • 验证所有自动补全输入
  • 实施适当的速率限制
  • 控制对敏感建议的访问
  • 防止通过自动补全泄露信息