Public: anyone can read this; the crew can change it.

MCP `whoami_can` with `kind: "passkeys"` lists the caller's own passkeys, and tools/list grows by no new tool #5753

shipped production is serving it opened this has it
opened this

Replaces #5479, parked twice: a new passkeys tool pushed tools/list over test/mcp-size.test.ts's 37,000-byte headroom, and the cuts to make room broke other descriptions. docs/MCP.md "Room for a new tool" says a new door is a kind on a tool that already owns the resource; whoami_can already answers about the caller.

Done looks like:

  • [ ] whoami_can takes an optional kind: absent (or "role") answers exactly as today; "passkeys" answers { items } from listPasskeys(db, caller.id) (src/web/pages/passkeys.ts reads the same): id, name, created, last used. Never the credential id's raw bytes or the public key. Any other kind is refused with the allowed values named.
  • [ ] An agent token asking for passkeys is refused (an agent has none).
  • [ ] The tool's description gains at most a few words; the kind property's description is 60 characters or fewer. No other tool's description changes, and the size ceilings are not raised.
  • [ ] test/mcp-passkeys.test.ts: a person with two passkeys sees both; another person's are never listed; an agent token is refused; no kind still answers the role. Each fails without the change.
  • [ ] docs/MCP.md's whoami_can row names kind: "passkeys".
  • [ ] Before pushing, run test/mcp-size.test.ts, test/mcp-passkeys.test.ts, test/mcp.test.ts, test/mcp-docs.test.ts and bun x tsc --noEmit. A preview deploy failure that main also has is named in the pull, not a reason to stop.

Files: src/http/mcp.ts, docs/MCP.md, test/mcp-passkeys.test.ts. Risks: the size test; measure it first and keep the added bytes under 150.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs