inspector/docs
Repository files (latest commit first)
Filename Latest commit message Latest commit date
cliffhall 9b35e530fc fix: send an empty-string pagination cursor verbatim on every list adapter (#2220)
An MCP cursor is an opaque string: the spec constrains neither its content
nor its length, so `""` is a `nextCursor` a server may legitimately return
and the client is required to send back verbatim.

`listPrompts`, `listResources`, `listResourceTemplates` and
`listRequestorTasks` built their request params with `cursor ? { cursor } : {}`,
a truthiness check that cannot distinguish "no cursor" from "the cursor is
the empty string". Against a server that paginates with `""` they dropped it
and re-requested page one — a list that silently stops at the first page, or
a walk that loops on it forever. Nothing surfaced an error, because the
request was well-formed; it just asked the wrong question. `listTools` (and
the later `listSkills`) already used `cursor !== undefined`; this brings the
other four into line.

`getReplayableParams` in `protocolReplay.ts` existed partly to mirror the
asymmetry — its `method === "tools/list" || params.cursor !== ""` special
case collapses to `typeof params.cursor === "string"` now that the adapters
agree, and its long comment is updated rather than left describing a state
that no longer exists.

Coverage:

- `inspectorClient-list-cursor.test.ts` asserts the outbound params of all
  five adapters — `""` carried, an absent cursor sending no `cursor` key,
  a non-empty cursor forwarded unchanged. `listTools` is the control.
- `test-servers/configs/empty-cursor-http.json` (`emptyStringCursor`) hands
  out `""` as the cursor for page two, the shape no other fixture produces,
  and `empty-cursor.test.ts` walks all three of its lists end to end.
- Removing the fix from any one adapter fails exactly its two cases.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EN2UfrkQZvtrviMtqURRm4
Signed-off-by: cliffhall <cliff@futurescale.com>
2026-09-06 13:28:44 -04:00
..
images docs: restore the missing docs/ targets and split the catalog-seeding wording (#1811) (#1812) 2026-07-27 20:37:14 -04:00
architecture.md Merge branch 'v2/main' into v2/chore/2163-agent-skills 2026-08-29 23:06:01 -04:00
docker.md chore: extract AGENTS.md recipes into agent skills 2026-08-29 00:36:37 -04:00
inspector-roadmap-2026-h2.md chore(scripts): rename the local pre-push gate off ci, and guard it out of CI (#2146) 2026-08-26 23:56:34 -04:00
launcher-config-consolidation-plan.md docs: restore the missing docs/ targets and split the catalog-seeding wording (#1811) (#1812) 2026-07-27 20:37:14 -04:00
mcp-app-review.md fix(web): move the app origin off 6276, bound the publish route 2026-08-24 08:45:40 -04:00
mcp-server-configuration.md fix(auth): refuse a grant whose authorization server cannot be established (#2144) 2026-08-28 06:18:58 -04:00
publishing.md chore: extract AGENTS.md recipes into agent skills 2026-08-29 00:36:37 -04:00
quality-gate.md chore: address Copilot review round 2 (#2226) 2026-09-05 16:27:46 -04:00
skill-authoring.md Review round 8: using a fixture, not connecting, is the trigger 2026-09-05 18:03:37 -04:00
test-servers.md fix: send an empty-string pagination cursor verbatim on every list adapter (#2220) 2026-09-06 13:28:44 -04:00
v1-to-v2-migration.md fix(web): bound retained app documents by size; correct the cookie claim 2026-08-24 08:45:40 -04:00