自动补全

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

用户交互模型

MCP中的自动补全功能设计用于支持类似IDE代码补全的交互式用户体验。

例如,应用程序可以在用户输入时通过下拉菜单或弹出窗口显示补全建议,用户可以从可用选项中进行筛选和选择。

然而,具体实现可以根据需要采用任何适合的界面模式—协议本身不强制要求任何特定的用户交互模型。

协议消息

请求补全建议

要获取补全建议,客户端通过引用类型发送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": {
    "completion": {
      "values": ["python", "pytorch", "pyside"],
      "total": 10,
      "hasMore": true
    }
  }
}

引用类型

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

类型 描述 示例
ref/prompt 通过名称引用提示词 {"type": "ref/prompt", "name": "code_review"}
ref/resource 引用资源URI {"type": "ref/resource", "uri": "file:///{path}"}

补全结果

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

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

消息流

Server Client Server Client 用户输入参数 用户继续输入 completion/complete补全建议completion/complete优化后的建议

数据类型

CompleteRequest

  • refPromptReferenceResourceReference
  • argument:包含以下内容的对象:
    • name:参数名称
    • value:当前值

CompleteResult

  • completion:包含以下内容的对象:
    • values:建议数组(最多100个)
    • total:可选的匹配总数
    • hasMore:额外结果标志

实现注意事项

  1. 服务器应该

    • 按相关性排序返回建议
    • 在适当的情况下实现模糊匹配
    • 限制补全请求的速率
    • 验证所有输入
  2. 客户端应该

    • 对快速补全请求进行去抖动处理
    • 在适当的情况下缓存补全结果
    • 优雅地处理缺失或部分结果

安全性

实现必须

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