Skip to content

补全

协议版本: 2025-11-25

模型上下文协议(MCP)为服务器提供了一种标准化方式,用于为提示和资源模板的参数提供自动补全建议。当用户填写特定提示(通过名称标识)或资源模板(通过 URI 标识)的参数值时,服务器可以提供上下文相关的建议。

1 用户交互模型

MCP 中的补全被设计为支持类似于 IDE 代码补全的交互式用户体验。

例如,应用程序可以在用户输入时在下拉菜单或弹出菜单中显示补全建议,具有从可用选项中过滤和选择的能力。

然而,实现可以通过任何适合其需求的界面模式公开补全——协议本身不强制要求任何特定的用户交互模型。

2 能力

支持补全的服务器必须声明 completions 能力:

json
{
  "capabilities": {
    "completions": {}
  }
}

3 协议消息

3.1 请求补全

要获取补全建议,客户端发送 completion/complete 请求,通过引用类型指定正在补全的内容:

请求:

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "completion/complete",
  "params": {
    "ref": {
      "type": "ref/prompt",
      "name": "code_review"
    },
    "argument": {
      "name": "language",
      "value": "py"
    }
  }
}

响应:

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "completion": {
      "values": ["python", "pytorch", "pyside"],
      "total": 10,
      "hasMore": true
    }
  }
}

对于具有多个参数的提示或 URI 模板,客户端应该在 context.arguments 对象中包含先前的补全,以为后续请求提供上下文。

请求:

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "completion/complete",
  "params": {
    "ref": {
      "type": "ref/prompt",
      "name": "code_review"
    },
    "argument": {
      "name": "framework",
      "value": "fla"
    },
    "context": {
      "arguments": {
        "language": "python"
      }
    }
  }
}

响应:

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "completion": {
      "values": ["flask"],
      "total": 1,
      "hasMore": false
    }
  }
}

3.2 引用类型

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

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

3.3 补全结果

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

  • 每个响应最多 100 个项目
  • 可选的可用匹配总数
  • 指示是否存在其他结果的布尔值

4 消息流程

5 数据类型

5.1 CompleteRequest

  • refPromptReferenceResourceReference
  • argument:包含以下内容的对象:
    • name:参数名称
    • value:当前值
  • context:包含以下内容的对象:
    • arguments:已解析参数名称到其值的映射

5.2 CompleteResult

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

6 错误处理

服务器应该为常见故障情况返回标准 JSON-RPC 错误:

  • 方法未找到:-32601(能力不支持)
  • 无效提示名称:-32602(无效参数)
  • 缺少必需参数:-32602(无效参数)
  • 内部错误:-32603(内部错误)

7 实现注意事项

  1. 服务器应该

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

    • 对快速补全请求进行防抖
    • 在适当时缓存补全结果
    • 优雅地处理缺失或部分结果

8 安全

实现必须

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