【MCP协议】服务端特性:分页机制

185 阅读1分钟

模型上下文协议(MCP)支持对可能返回大型结果集的列表操作进行分页处理。分页机制允许服务器分批次返回结果,而非一次性返回全部数据。

分页在通过互联网连接外部服务时尤为重要,同时对本地集成也很有用,可避免大数据集导致的性能问题。

分页模型

MCP中的分页采用不透明的基于游标的方式,而非编号分页。

  • 游标是一个不透明的字符串令牌,表示结果集中的位置
  • 分页大小由服务器决定,客户端不得假设固定分页大小

响应格式

当服务器返回以下内容时即开始分页:

  • 当前页的结果集
  • 如果还有更多结果则包含可选的nextCursor字段
{
  "jsonrpc": "2.0",
  "id": "123",
  "result": {
    "resources": [...],
    "nextCursor": "eyJwYWdlIjogM30="
  }
}

请求格式

客户端收到游标后,可通过包含该游标的请求继续分页:

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

分页流程

mcp_page.png

支持分页的操作

以下MCP操作支持分页机制:

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

实现指南

  1. 服务端应当
  • 提供稳定的游标
  • 妥善处理无效游标
  1. 客户端应当
  • 将缺失的nextCursor视为查询结束
  • 同时支持分页和非分页流程
  1. 客户端必须将游标视为不透明令牌:
  • 不要对游标格式做任何假设
  • 不要尝试解析或修改游标
  • 不要跨会话持久化游标

错误处理

无效游标应当返回错误码-32602(Invalid params)。