SafetyPage

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

MethodRouteReturns
GET/api/search?query=…SearchResponse
GET/api/doc/<ns>/<id>[/<version>]DocumentCard
GET/api/units/<ns>/<id>/<version>/<anchor>UnitText[]
POST/api/verifyQuoteCheck
POST/api/checkAnswerAudit

JSON Schemas for every model are in schemas/. The design is in docs/ARCHITECTURE.md.