自動完成

協議版本: 2024-11-05

模型上下文協議(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
    participant Server

    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. 客戶端應該

    • 對快速完成請求進行去抖動處理
    • 在適當情況下緩存完成結果
    • 優雅地處理缺失或部分結果

安全性

實現必須

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