Language models invent citations. Everyone knows it, and the bibliographies keep shipping anyway. CiteStamp is the live, typed citation graph your agent queries before it emits a reference — human-signed claims and machine-inferred coverage kept strictly apart, so your agent always knows which kind of evidence it is holding.
Want to look at it yourself first? The same graph is a map you can walk in a browser, no key and no account.
This page describes only what is live. Both the REST ask endpoints and the hosted MCP server answer anonymously — no key at all — at 10 requests a minute per IP. Your agent can ground a citation this minute, keyless. A key is optional and only raises the rate. Free keys (60 requests a minute) are issued by hand, over email: write to info@citestamp.com and a human sends you one, normally within a day — for development and heavier traffic. A Pro token ($35/year, self-serve at /account) lifts every surface, including MCP, to 600 requests a minute. Self-serve signup for free keys does not exist yet; when it does, it will be announced here — we do not describe features before they are live.
The graph speaks Model Context Protocol over Streamable HTTP. Point your agent at:
https://mcp.citestamp.com/mcp
No key needed to start — point an agent at it and go. To raise your rate limit, send a key as a bearer token (Authorization: Bearer YOUR_KEY).
Five tools, each taking an identifier (DOI in any common form), an optional asserted_only flag, and an optional limit / offset window:
| tool | answers |
|---|---|
| edges_about | every claim where the paper appears, either side |
| what_supports | claims that something supports this paper |
| what_refutes | claims that something refutes this paper |
| what_cites | papers whose reference lists include this one |
| references_of | what this paper itself cites |
Every result carries a tier (asserted = human-signed, inferred = machine-derived), an attribution, and provenance. Set asserted_only=true when only name-on-the-record claims should count.
A well-cited paper has thousands of edges, not a handful. Every response carries a page object — limit, offset, returned, has_more, and inferred_total where that number is exact — so a page is never mistaken for the whole answer. Default limit is 100 and the maximum is 1000; page by repeating the call with offset raised while has_more is true. Advance by the limit you asked for, not by the number of rows you got back: duplicate edges are removed after the window is taken, so a page can legitimately return fewer rows than it consumed. inferred_total is omitted rather than estimated whenever an exact count is not available.
curl -s https://api.citestamp.com/api/v1/ask/edges_about -H "Content-Type: application/json" -d JSON_BODY
where JSON_BODY is: {"id": "10.1007/s12225-019-9804-7"}
The rate ladder, in numbers: anonymous 10 requests a minute per IP; free key 60 a minute; Pro token ($35/year) 600 a minute. Production traffic beyond that is priced case-by-case while the service is small — email info@citestamp.com.
One honest caveat, because agents deserve honest data: the machine-inferred tier is millions of edges deep; the human-signed tier is young and small — today it is entirely the founder signing claims about his own publications, disclosed as such on each claim page. The tier label on every result means your agent always knows which it is holding.
Machine-readable description at /.well-known/citestamp.json; a plain-text brief for LLM crawlers at /llms.txt and /llms-full.txt.