协议版本: 2024-11-05
Model Context Protocol (MCP) 提供了一种标准化方式,让服务器能为提示和资源URI提供参数自动补全建议。这实现了丰富的、类似IDE的体验,使用户在输入参数值时能获得上下文相关的建议。

用户交互模型

MCP中的补全功能旨在支持类似IDE代码补全的交互式用户体验。 例如,应用程序可以在用户输入时以下拉或弹出菜单的形式显示完成建议,并提供从可用选项中筛选和选择的功能。 不过,各实现方案可以根据自身需求通过任意接口模式提供完成功能——该协议本身并不强制规定任何特定的用户交互模式。

协议消息

请求补全功能

To get completion suggestions, clients send a completion/complete request specifying what is being completed through a reference type: 请求:
{
  "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": {
    "completion": {
      "values": ["python", "pytorch", "pyside"],
      "total": 10,
      "hasMore": true
    }
  }
}

引用类型

该协议支持两种类型的完成引用:
类型描述示例
参考/提示通过名称引用提示{"type": "ref/prompt", "name": "code_review"}
ref/resource引用一个资源URI{"type": "ref/resource", "uri": "file:///{path}"}

完成结果

服务器返回按相关性排序的完成值数组,其中包含:
  • 单次响应最大条目数为 100
  • 可选的可用匹配总数
  • 布尔值,指示是否存在更多结果

消息流

数据类型

完成请求

  • ref: 一个 PromptReferenceResourceReference
  • argument: Object containing:
    • name: 参数名称
    • value: 当前值

最终结果

  • completion: Object containing:
    • values: 建议数组(最多100个)
    • total: 可选的总匹配数
    • hasMore: 附加结果标志

实施注意事项

  1. Servers 应当:
    • 按相关性排序返回建议
    • 在适当场景中实现模糊匹配
    • 对完成请求进行速率限制
    • 验证所有输入
  2. Clients 应当:
    • 抑制快速完成请求
    • 适当地缓存补全结果
    • 优雅地处理缺失或部分结果

安全性

Implementations 必须:
  • 验证所有完成输入项
  • 实施适当的速率限制
  • 控制对敏感建议的访问
  • 防止基于完成度的信息泄露