补全
ℹ️
协议修订版: 草案
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 项
- 可选的可用匹配总数
- 布尔值指示是否存在更多结果
消息流程
sequenceDiagram
participant Client
participant Server
Note over Client: 用户输入参数
Client->>Server: completion/complete
Server-->>Client: 补全建议
Note over Client: 用户继续输入
Client->>Server: completion/complete
Server-->>Client: 精炼的建议数据类型
CompleteRequest
ref:PromptReference或ResourceReferenceargument: 包含以下内容的对象:name: 参数名称value: 当前值
CompleteResult
completion: 包含以下内容的对象:values: 建议数组(最多 100 项)total: 可选的匹配总数hasMore: 是否存在更多结果的标志
实现注意事项
服务器 应:
- 按相关性排序返回建议
- 在适当的情况下实现模糊匹配
- 对补全请求进行速率限制
- 验证所有输入
客户端 应:
- 对快速补全请求进行防抖处理
- 在适当的情况下缓存补全结果
- 优雅地处理缺失或不完整的结果
安全
实现 必须:
- 验证所有补全输入
- 实施适当的速率限制
- 控制对敏感建议的访问
- 防止基于补全的信息泄露