補全

協議版本: 草案

模型上下文協議(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 as 客戶端
    participant Server as 服務器

    Note over Client: 用戶輸入參數
    Client->>Server: completion/complete
    Server-->>Client: 補全建議

    Note over Client: 用戶繼續輸入
    Client->>Server: completion/complete
    Server-->>Client: 細化建議

數據類型

CompleteRequest

  • refPromptReferenceResourceReference
  • argument:包含以下內容的對象:
    • name:參數名稱
    • value:當前值

CompleteResult

  • completion:包含以下內容的對象:
    • values:建議數組(最多 100 個)
    • total:可選的匹配總數
    • hasMore:額外結果標誌

實施考慮

  1. 服務器應該

    • 返回按相關性排序的建議
    • 在適當的地方實現模糊匹配
    • 限制補全請求速率
    • 驗證所有輸入
  2. 客戶端應該

    • 對快速補全請求進行去抖動
    • 在適當的地方緩存補全結果
    • 優雅地處理缺失或部分結果

安全

實現必須

  • 驗證所有補全輸入
  • 實施適當的速率限制
  • 控制對敏感建議的訪問
  • 防止基於補全的信息洩露