协议版本: 草案
用户交互模型
MCP中的补全功能旨在支持类似于IDE代码补全的交互式用户体验。 例如,应用程序可以在用户输入时通过下拉菜单或弹出窗口显示补全建议,并提供过滤和选择可用选项的功能。 然而,实现可以自由地通过任何适合其需求的界面模式来暴露补全功能——协议本身不强制要求任何特定的用户交互模型。能力声明
支持补全功能的服务器必须声明completions 能力:
协议消息
请求补全
为了获取补全建议,客户端发送一个completion/complete 请求,通过引用类型指定正在补全的内容:
请求:
context.arguments 对象中。
请求:
引用类型
协议支持两种类型的补全引用:| 类型 | 描述 | 示例 |
|---|---|---|
ref/prompt | 按名称引用提示 | {"type": "ref/prompt", "name": "code_review"} |
ref/resource | 引用资源URI | {"type": "ref/resource", "uri": "file:///{path}"} |
补全结果
服务器返回一个按相关性排序的补全值数组,包括:- 每次响应最多100项
- 可选的匹配项总数
- 一个布尔值,表示是否还有更多结果
消息流程
数据类型
CompleteRequest
ref: 一个PromptReference或ResourceReferenceargument: 包含以下字段的对象:name: 参数名称value: 当前值
context: 包含以下字段的对象:arguments: 已解析参数名称到其值的映射
CompleteResult
completion: 包含以下字段的对象:values: 建议数组(最多100项)total: 可选的匹配总数hasMore: 是否存在更多结果的标志
错误处理
服务器应为常见失败情况返回标准的JSON-RPC错误:- 方法未找到:
-32601(不支持的能力) - 提示名称无效:
-32602(参数无效) - 缺少必需参数:
-32602(参数无效) - 内部错误:
-32603(内部错误)
实现考虑
-
服务器应:
- 按相关性对建议排序
- 在适当的情况下实现模糊匹配
- 对补全请求进行限速
- 验证所有输入
-
客户端应:
- 对快速连续的补全请求进行防抖处理
- 在适当的情况下缓存补全结果
- 优雅地处理缺失或部分结果
安全性
实现必须:- 验证所有补全输入
- 实现适当的限速机制
- 控制对敏感建议的访问
- 防止基于补全的信息泄露