MCP tools/list repeating a cursor: Claude Code 2.1.295 and Sume
Claude Code 2.1.295 stops asking a server for the same tools page up to 20 times. Sume's tools/list returns one page with no nextCursor, so it never loops.

Claude Code 2.1.295 (Oct 8) no longer asks an MCP server for the same page up to 20 times when the server keeps repeating a pagination cursor. Sume's hosted tools/list is not paginated: it returns { tools: [...] } in one response with no nextCursor, so this bug cannot happen against https://mcp.sume.com/mcp.
What was the bug?
A paginated MCP list answers with a cursor for the next page. A server that returns the same cursor again sends a client into a loop. Per the changelog, Claude Code used to request the same page up to 20 times; 2.1.295 stops that.
| Version | Date | Change |
|---|---|---|
| 2.1.295 | Oct 8 2026 | Servers that repeat a pagination cursor are no longer asked for the same page up to 20 times |
Does Sume paginate tools?
No. In the server source, the tools/list handler returns the whole list in one response and sets no cursor. The initialize reply reports listChanged: false, so there is no push for a changed list either. The list you see depends on the session: OAuth mcp:read only shows read-only tools, while mcp:write or an API key shows the full hosted set.
What if your own MCP server paginates?
Check three things before you blame the client:
- Each page returns a new
nextCursor, or none on the last page. - Cursors do not depend on a clock or a random value that changes between identical requests.
- The last page omits the cursor rather than returning an empty string.
How do you check the Sume tool list?
Call tools_list through your client and count the tools against the live list in MCP tools and gates. The docs say not to assume parity with the HTTP API, so use tools_list and tools_schema as the contract.
Sources
Related posts
More in Developers
- Move an OpenRouter-style video client to Sume: the 400s to expect
Sume /v1/videos matches the OpenRouter video shape, but size, provider.options and seed return 400. The differences table and a Python asyncio polling client.
- Music router 400 negative_prompt_unsupported: the fix and its cost
A non-empty negative_prompt on Sume's music router returns 400 negative_prompt_unsupported. Move the exclusions into prompt; a rejected call is not billed.
- Alert when a pricing_skus rate moves: a nightly diff of the model list
Save GET /v1/videos/models rates each night and diff them. A one-cent-per-second move costs $0.30 on a 30 s clip and $300 over 1,000 of them. Python, 25 lines.
- Node: stream a Sume video to disk with pipeline and a short-file check
Download a finished Sume video from /v1/videos/{id}/content in Node without loading it into memory, and fail if the file is shorter than content-length.
Written by Sume