Connect your agent
An MCP server with four read-only tools. No key, no account.
Add the server
- Claude Code
claude mcp add --transport http safetypage https://safetypage-api.noahairmet.com/mcp- Claude.ai, ChatGPT and other clients: add a connector with this URL
https://safetypage-api.noahairmet.com/mcp
The tools
search(query, collection?, org?, kind?, date_from?, date_to?, doc?, mode?, sort?, limit?)
Ranked pages and paragraphs. Words are ANDed; "a phrase", prefix*, a NEAR/5 b and -exclude work. Every hit is a citation.
fetch(id)
A document id returns its record and outline. A cite string returns the page or paragraph: the full text if the licence allows, otherwise its opening words and a link that opens the source at that page.
verify_quote(quote, cite?, doc?)
Whether the words are at the cited place. Five verdicts: exact and normalized pass; elsewhere, near_miss and not_found fail, with where the words really are or what the page says instead.
check_answer(text)
Audits a draft answer: every citation in it, the quotations attached to each, and how each one checked out.
What a citation looks like
arxiv:2305.15324/v2/p6 document / version / place https://safetypage.noahairmet.com/d/arxiv/2305.15324/v2/p6 the same thing, as a link …/v2/p6?q=not%20the%20only%20tool with the quoted words highlighted
A citation always names a version, because pages move when a paper is revised. p6 is a PDF page; b12 is a paragraph of a document that has no pages.
The same functions over HTTP
| Method | Route | Returns |
|---|---|---|
| GET | /api/search?query=… | SearchResponse |
| GET | /api/doc/<ns>/<id>[/<version>] | DocumentCard |
| GET | /api/units/<ns>/<id>/<version>/<anchor> | UnitText[] |
| POST | /api/verify | QuoteCheck |
| POST | /api/check | AnswerAudit |
JSON Schemas for every model are in schemas/. The design is in docs/ARCHITECTURE.md.