Skip to main content
协议版本: 草案
模型上下文协议(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
    }
  }
}
对于具有多个参数的提示或URI模板,客户端应在后续请求中包含先前的补全结果,以提供上下文信息,这些信息应放在 context.arguments 对象中。 请求:
{
  "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"
      }
    }
  }
}
响应:
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "completion": {
      "values": ["flask"],
      "total": 1,
      "hasMore": false
    }
  }
}

引用类型

协议支持两种类型的补全引用:
类型描述示例
ref/prompt按名称引用提示{"type": "ref/prompt", "name": "code_review"}
ref/resource引用资源URI{"type": "ref/resource", "uri": "file:///{path}"}

补全结果

服务器返回一个按相关性排序的补全值数组,包括:
  • 每次响应最多100项
  • 可选的匹配项总数
  • 一个布尔值,表示是否还有更多结果

消息流程

数据类型

CompleteRequest

  • ref: 一个 PromptReferenceResourceReference
  • argument: 包含以下字段的对象:
    • name: 参数名称
    • value: 当前值
  • context: 包含以下字段的对象:
    • arguments: 已解析参数名称到其值的映射

CompleteResult

  • completion: 包含以下字段的对象:
    • values: 建议数组(最多100项)
    • total: 可选的匹配总数
    • hasMore: 是否存在更多结果的标志

错误处理

服务器为常见失败情况返回标准的JSON-RPC错误:
  • 方法未找到:-32601(不支持的能力)
  • 提示名称无效:-32602(参数无效)
  • 缺少必需参数:-32602(参数无效)
  • 内部错误:-32603(内部错误)

实现考虑

  1. 服务器
    • 按相关性对建议排序
    • 在适当的情况下实现模糊匹配
    • 对补全请求进行限速
    • 验证所有输入
  2. 客户端
    • 对快速连续的补全请求进行防抖处理
    • 在适当的情况下缓存补全结果
    • 优雅地处理缺失或部分结果

安全性

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