协议版本: draft
Model Context Protocol (MCP) 支持对可能返回大量结果集的列表操作进行分页。分页允许服务器分段生成结果,而不是一次性全部返回。 分页对于通过互联网连接外部服务尤其重要,同时对于本地集成也非常有用,可避免处理大型数据集时的性能问题。

分页模型

MCP 中的分页采用基于不透明游标的方法,而非编号页码。
  • cursor 是一个不透明的字符串标记,代表结果集中一个位置
  • 页面大小 由服务器决定,客户端禁止假设页面大小为固定值。

响应格式

当服务器发送包含以下内容的 响应 时,分页开始:
  • 当前结果页面
  • 如果有更多结果,则提供一个可选的 nextCursor 字段
{
  "jsonrpc": "2.0",
  "id": "123",
  "result": {
    "resources": [...],
    "nextCursor": "eyJwYWdlIjogM30="
  }
}

请求格式

接收到游标后,客户端可以通过发出包含该游标的请求继续分页操作:
{
  "jsonrpc": "2.0",
  "method": "resources/list",
  "params": {
    "cursor": "eyJwYWdlIjogMn0="
  }
}

分页流程

分页支持的操作

以下MCP操作支持分页:
  • resources/list - 列出可用的资源
  • resources/templates/list - 列出资源模板
  • prompts/list - 列出可用提示
  • tools/list - 列出可用工具

实施指导原则

  1. Servers 应当:
    • 提供稳定的光标
    • 优雅处理无效游标
  2. Clients 应当:
    • 把缺少的nextCursor认为代表结果结束
    • 支持分页以及非分页流
  3. Clients 必须 将游标视为不透明的令牌:
    • 不要对游标格式做出假设
    • 不要尝试解析或修改游标
    • 不要在会话之间持续使用游标

错误处理

无效的光标 应当 导致错误码为 -32602 的错误(无效参数)。