分頁

協議版本: 草案

模型上下文協議(MCP)支持對可能返回大結果集的列表操作進行分頁。分頁允許服務器以較小的塊而不是一次性生成結果。

分頁在通過互聯網連接到外部服務時特別重要,但對於本地集成也很有用,可以避免大型數據集的性能問題。

分頁模型

MCP 中的分頁使用不透明的基於遊標的方法,而不是編號頁面。

  • 遊標是一個不透明的字符串令牌,表示結果集中的位置
  • 頁面大小由服務器確定,可能不是固定的

響應格式

當服務器發送包含以下內容的響應時,分頁開始:

  • 當前頁面的結果
  • 如果存在更多結果,則包含可選的 nextCursor 字段
{
  "jsonrpc": "2.0",
  "id": "123",
  "result": {
    "resources": [...],
    "nextCursor": "eyJwYWdlIjogM30="
  }
}

請求格式

收到遊標後,客戶端可以通過發出包含該遊標的請求來_繼續_分頁:

{
  "jsonrpc": "2.0",
  "method": "resources/list",
  "params": {
    "cursor": "eyJwYWdlIjogMn0="
  }
}

分頁流程

  sequenceDiagram
    participant Client as 客戶端
    participant Server as 服務器

    Client->>Server: 列表請求(無遊標)
    loop 分頁循環
      Server-->>Client: 結果頁面 + nextCursor
      Client->>Server: 列表請求(帶遊標)
    end

支持分頁的操作

以下 MCP 操作支持分頁:

  • resources/list - 列出可用資源
  • resources/templates/list - 列出資源模板
  • prompts/list - 列出可用提示
  • tools/list - 列出可用工具

實施指南

  1. 服務器應該

    • 提供穩定的遊標
    • 優雅地處理無效遊標
  2. 客戶端應該

    • 將缺少的 nextCursor 視為結果結束
    • 支持分頁和非分頁流程
  3. 客戶端必須將遊標視為不透明令牌:

    • 不要對遊標格式做假設
    • 不要嘗試解析或修改遊標
    • 不要在會話之間持久化遊標

錯誤處理

無效遊標應該導致代碼為 -32602(無效參數)的錯誤。