模型上下文协议(MCP)为服务器提供了一种标准化方式,用于为提示词和资源URI提供参数自动补全建议。这使得用户可以在输入参数值时获得上下文相关的建议,实现类似IDE的丰富体验。
用户交互模型
MCP中的补全功能旨在支持类似IDE代码补全的交互式用户体验。
例如,应用程序可以在用户输入时以下拉菜单或弹出窗口的形式显示补全建议,并允许用户从可用选项中进行筛选和选择。
不过,具体实现可以自由选择最适合其需求的界面呈现方式——协议本身并不强制要求任何特定的用户交互模式。
能力声明
支持自动补全功能的服务器必须声明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条建议
- 可选的匹配结果总数
- 布尔值标识是否存在更多结果
示例响应结构:
{
"values": ["python", "pytorch", "pyspark"],
"total": 42,
"hasMore": true
}
消息交互流程
数据类型
CompleteRequest
interface CompleteRequest {
ref: PromptReference | ResourceReference; // 提示模板或资源引用
argument: { // 当前参数
name: string; // 参数名称
value: string; // 已输入值
};
}
- ref: PromptReference 或者 ResourceReference
- argument: 包括两个字段,name(参数名) 和 value(参数值)
CompleteResult
interface CompleteResult {
completion: {
values: string[]; // 建议值数组(最多100条)
total?: number; // 可选的总匹配数
hasMore: boolean; // 是否存在更多结果
};
}
- values: 建议值数组,最多100条
- total: 可选的总匹配数
- hasMore: 是否存在更多结果
错误处理
服务器应返回以下标准JSON-RPC错误:
- Method not found: -32601 (Capability not supported)
- Invalid prompt name: -32602 (Invalid params)
- Missing required arguments: -32602 (Invalid params)
- Internal errors: -32603 (Internal error)
实现建议
- 服务端应当:
- 按相关性排序建议结果
- 实现模糊匹配逻辑
- 进行请求限流
- 严格验证输入参数
- 客户端应当:
- 对频繁请求进行防抖处理
- 合理缓存补全结果
- 优雅处理不完整结果
安全要求
实现方必须:
- 验证所有补全输入
- 实施速率限制
- 控制敏感建议的访问权限
- 防止通过补全功能的信息泄露