分頁
協議版本: 2024-11-05
模型上下文協議(MCP)支持對可能返回大量結果集的列表操作進行分頁。分頁允許服務器以較小的塊而不是一次性返回所有結果。
分頁在通過互聯網連接到外部服務時尤為重要,但對於本地集成也很有用,可以避免大數據集帶來的性能問題。
分頁模型
MCP中的分頁使用不透明的基於遊標的方法,而不是編號頁面。
- 遊標是一個不透明的字符串令牌,表示結果集中的位置
- 頁面大小由服務器確定,並且可能不是固定的
響應格式
當服務器發送包含以下內容的響應時,分頁開始:
- 當前頁面的結果
- 如果存在更多結果,則包含可選的
nextCursor字段
{
"jsonrpc": "2.0",
"id": "123",
"result": {
"resources": [...],
"nextCursor": "eyJwYWdlIjogM30="
}
}請求格式
收到遊標後,客戶端可以通過發出包含該遊標的請求來_繼續_分頁:
{
"jsonrpc": "2.0",
"method": "resources/list",
"params": {
"cursor": "eyJwYWdlIjogMn0="
}
}分頁流程
sequenceDiagram
participant Client
participant Server
Client->>Server: 列表請求(無遊標)
loop 分頁循環
Server-->>Client: 結果頁面 + nextCursor
Client->>Server: 列表請求(帶遊標)
end
支持分頁的操作
以下MCP操作支持分頁:
resources/list- 列出可用資源resources/templates/list- 列出資源模板prompts/list- 列出可用提示tools/list- 列出可用工具
實現指南
服務器應該:
- 提供穩定的遊標
- 優雅地處理無效遊標
客戶端應該:
- 將缺失的
nextCursor視為結果的結束 - 支持分頁和非分頁流程
- 將缺失的
客戶端必須將遊標視為不透明令牌:
- 不要對遊標格式做假設
- 不要嘗試解析或修改遊標
- 不要在會話之間持久化遊標
錯誤處理
無效遊標應該導致代碼為-32602(無效參數)的錯誤。