模型上下文协议(MCP)支持对可能返回大型结果集的列表操作进行分页处理。分页机制允许服务器分批次返回结果,而非一次性返回全部数据。
分页在通过互联网连接外部服务时尤为重要,同时对本地集成也很有用,可避免大数据集导致的性能问题。
分页模型
MCP中的分页采用不透明的基于游标的方式,而非编号分页。
- 游标是一个不透明的字符串令牌,表示结果集中的位置
- 分页大小由服务器决定,客户端不得假设固定分页大小
响应格式
当服务器返回以下内容时即开始分页:
- 当前页的结果集
- 如果还有更多结果则包含可选的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:列出可用工具
实现指南
- 服务端应当:
- 提供稳定的游标
- 妥善处理无效游标
- 客户端应当:
- 将缺失的nextCursor视为查询结束
- 同时支持分页和非分页流程
- 客户端必须将游标视为不透明令牌:
- 不要对游标格式做任何假设
- 不要尝试解析或修改游标
- 不要跨会话持久化游标
错误处理
无效游标应当返回错误码-32602(Invalid params)。