Connect
The desk publishes an MCP (Model Context Protocol) server at /api/mcp so
an AI agent can query the corpus directly instead of scraping the pages a human reads. It exists for
the same reason the corpus exists: the whole point of this desk is that its claims are checkable, not
just readable. verify_piece is the cleanest example — hand it a slug and it hands back
the SHA-256 of the piece's canonical JSON and published HTML as of the last sync, so an agent (or a
suspicious human standing behind one) can re-hash the live page and confirm what it read is what the
desk actually shipped. Nobody has to take the byline's word for it.
Set it up
Claude Code:
claude mcp add --transport http stochastic-parrot https://thestochasticparrot.com/api/mcp
claude.ai: Settings → Connectors → Add custom connector, then paste:
https://thestochasticparrot.com/api/mcp
Any other MCP client that speaks streamable-HTTP JSON-RPC 2.0 should work the same way — point it at the same URL.
What the tools do
Read tools need no key and are open to everyone. They mirror the site's own pages and its static JSON datasets — nothing here is not already public, this is just a shape a machine can call directly.
Full-text search over every published piece — titles, deks, context lines, outlet names, source headlines. Best matches first.
One piece's full detail: headline, outlets, verified contradictions with verbatim spans, naming/framing splits, the full source list.
Published pieces, newest first — filterable by outlet, kind, and date range.
The public corrections ledger: every logged error, what was wrong, what changed.
Story chains — multi-piece storylines tracked over time. Omit the id to list them.
The provenance record for one piece: SHA-256 hashes of its canonical JSON and published HTML, as of the last corpus sync. Re-hash the live page and compare — that is the whole verification story this desk has to offer, and it is a real one.
The framing-vs-fact rate as a standing dataset, month by month, per outlet.
What the observatory actually monitored and when, gaps included — read before treating any silence in the corpus as meaning something.
A story chain's claims, each tracked through open / corroborated / contradicted / corrected / quietly_abandoned / resolved, with a receipt per move.
Per-newsroom storyboards for a chain — every piece a given outlet filed, and the desk's own READ of what each one was built to do.
Letters to the Desk — reader mail, excerpted and initialed, with the desk's replies.
One day's frozen stat snapshot.
Write tools file a submission into the desk's editorial review queue. Nothing submitted through MCP is ever published directly — every item goes through the same gates a human submission would, or is declined. They require a reader key. Issuance is currently manual, by request to the desk's operator — there is no self-serve signup flow yet, and this page will say so plainly if that changes.
Send a letter to the desk.
Report a suspected error in a published piece.
Tip the desk that a story moved.
Bulk pulls: skip the loop
An agent that wants the whole record rather than one piece at a time should fetch
/corpus.json once instead of looping list_audits
calls to page through it. Same license, same data, far fewer round trips.
The rate limit
30 requests per minute, per IP. This is a public, unauthenticated endpoint serving the same edge that answers every human visitor's page load, and a misconfigured or looping agent doesn't know it's being rude — the limit exists so a runaway connector degrades itself instead of the site. AI-crawler traffic already outpaces human arrivals here on plenty of days; the desk would rather not add "MCP client stuck in a retry loop" to that pile. Over the limit, the server answers with HTTP 429 and a JSON-RPC error pointing back at this page and at /corpus.json.
License
Everything the MCP server returns is the same open-data surface as the rest of the site — CC BY 4.0. Reuse it, attribute it, no different terms for a machine than for a browser.
