Completion
协议修订日期: 2025-03-26
Model Context Protocol(MCP)提供了一种标准化的方法,服务器可以通过它为提示和资源 URI 提供参数自动补全建议。这使用户在输入参数值时能够获得丰富的类似于 IDE 的上下文建议体验。
用户交互模型
MCP 中的自动补全旨在支持类似于 IDE 代码补全的交互式用户体验。
例如,应用可以在用户输入时通过下拉或弹出菜单显示补全建议,并能够根据可用选项进行筛选和选择。
然而,协议本身并不强制规定特定的用户交互模型,具体实现可以自由选择任何适合其需求的界面模式。
功能声明
支持 Completion 的服务器必须声明 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": {
"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 项
- 可选的总匹配项数
- 是否有其他结果的布尔值
消息流程
sequenceDiagram participant 客户端 participant 服务器 Note over 客户端: 用户输入参数 客户端->>服务器: completion/complete 服务器-->>客户端: 补全建议 Note over 客户端: 用户继续输入 客户端->>服务器: completion/complete 服务器-->>客户端: 进一步补全建议
数据类型
CompleteRequest
ref
: 一个PromptReference
或ResourceReference
argument
: 包含以下内容的对象:name
: 参数名称value
: 当前值
CompleteResult
completion
: 包含以下内容的对象:values
: 建议的数组(最多 100 项)total
: 可选的总匹配项数hasMore
: 其他结果标记
错误处理
服务器 应该 在常见失败情况下返回标准的 JSON-RPC 错误:
- 方法未找到:
-32601
(不支持的功能) - 无效的提示名称:
-32602
(参数无效) - 缺少必要参数:
-32602
(参数无效) - 内部错误:
-32603
(内部错误)
实现注意事项
-
服务器 应该:
- 返回按相关性排序的建议
- 在适用场景下实施模糊匹配
- 对补全请求进行速率限制
- 验证所有输入
-
客户端 应该:
- 对快速补全请求进行去抖处理
- 在适当情况下对补全结果进行缓存
- 优雅地处理缺失或部分结果
安全性
实现必须:
- 验证所有补全输入
- 实施适当的速率限制
- 控制对敏感建议的访问
- 防止基于补全的敏感信息泄露