Does anyone's tools/list actually paginate? A measurement.

Run: 2026-09-27 15:11 UTC · Sample: 40 servers · Servers that answered: 16 · Servers that paginated: 0

This exists because issue #177 was closed with an honest caveat: the fix walks a paginated tools/list to the end and refuses to present a truncated enumeration as complete, and that behaviour is executed by tests — but no test had ever observed a real third-party server paginate. The bounds in that fix (20 pages, 2,000 tools, dedupe by name, hard error on a repeated cursor) were therefore a stance about a protocol feature, not a survey of it. This page is the survey.

Method

tools/survey-mcp-tools-list-pagination.mjs reads https://registry.modelcontextprotocol.io/v0/servers (the official MCP registry), takes records that advertise a streamable-http remote, and sends each one:

  1. an anonymous initialize declaring protocol revision 2025-06-18,
  2. a tools/list using the returned session id when the server issued one,
  3. a second tools/list with the returned cursor — only if the first response carried a nextCursor.

No credentials are used or requested, nothing is written, and no server is called more than three times. Requests are sequential with a short delay.

The sample is not random. It is the first 40 streamable-http endpoints in the registry's default order at that timestamp, which is alphabetical by server identifier — so it over-represents names starting with a/ac/ad/ae/ag. Treat it as a snapshot, not as a population estimate.

Result

Of 40 attempted:

OutcomeCount
Answered initialize and returned a tool list16
Rejected anonymously (401)21
Rejected anonymously (403)1
400 on initialize1
502, no result1

The 16 that answered:

ServerEndpointTools on page 1Revision answeredTransport shapenextCursor?
ad.getle/leadsmcp.getle.ad/mcp352025-06-18JSONno
ai.afg/afgafg.ai/mcp182025-06-18SSEno
ac.tandem/docs-mcptandem.ac/mcp132025-06-18JSONno
ai.agentberg/agentbergagentberg.ai/mcp112025-06-18SSEno
agency.goji/gojimcp.goji.agency/mcp92025-06-18SSEno
ai.adoraads/beautymcp.adoraads.ai/beauty62024-11-05JSONno
ai.agent-bev/bev-doormcp.bev-buyer.ai/mcp62025-06-18JSONno
ag.hood/name-servicewww.hood.ag/api/mcp52025-06-18JSONno
ai.advisorsai/service-navigatoradvisorsai.ai/mcp52025-06-18JSONno
ai.afmr/discoveryafmr.ai/api/rpc42025-06-18JSONno
ai.afmr/discoveryafmr.ai/mcp42025-06-18JSONno
ad.inside/inside-adsapp.inside.ad/api/mcp32025-06-18JSONno
agency.ottobot/licensed-house-paintershouse-painters-mcp.ottobot2025.workers.dev/mcp32025-06-18JSONno
agency.ottobot/contractor-license-changeslicense-changes-mcp.ottobot2025.workers.dev/mcp22025-06-18JSONno
agency.ottobot/business-contact-finderbusiness-contact-finder-mcp.ottobot2025.workers.dev/mcp12025-06-18JSONno
ai.advisorsai/store-readinessadvisorsai.ai/store-readiness-mcp12025-06-18JSONno

Three things are worth more than the headline:

  1. 0 of 16 emitted nextCursor. The largest list seen was 35 tools, returned in one page. So today the pagination path in our gateway is insurance against a server that has not been met yet — which is the honest way to describe a fix for an unobserved failure, and the way #177 should be read.
  2. 1 of 16 answered with 2024-11-05 after being asked with 2025-06-18. A server in the wild does pick an older revision than the client declared. That is the concrete case for #178: when this was measured, our governed upstream client sent a revision and never read the answer, so a negotiation like this one was invisible to us and to its callers. master now captures the answer and publishes it per upstream in the servers array of GET /mcp/tools - available from source and from the rolling :latest / :master image tags, which were built from master on 2026-09-27 - but not from the versioned 0.8.0 tag, which predates it - and whether a mismatching revision should be refused or merely reported is still being decided on the issue.
  3. 22 of 40 advertised remote endpoints cannot be introspected anonymously (401/403). Any claim of the form "N% of MCP servers do X" that was measured this way is really a claim about the fraction that lets you look.

What this does not show

Reproduce

node tools/survey-mcp-tools-list-pagination.mjs 40

The script prints a JSON tally plus one row per server. It makes outbound requests to third-party services that are not ours; run it knowingly, and keep the timestamp with any number you quote from it.

Related measurement

The same 40 endpoints were asked a second question an hour later: will they agree to a protocol revision that does not exist? Two of the eighteen that produced a JSON-RPC answer echoed 9999-99-99 with HTTP 200, and one server answered 2024-11-05 to both probes. See mcp-protocol-revision-tolerance.md.