For members
Zotpaper API and MCP
Our news and AI research, in your own code, or in Claude, ChatGPT and Cursor.
Every Zotpaper membership comes with an API key. Use it to ask your AI assistant what is on the front page, what changed since this morning, or the best reported score on a benchmark and which paper claims it; or to build Zotpaper into your own tools. Stories come with the sources they were written from and the verification desk's check of their claims; papers come with their claims, results, released code and the threads of research they belong to.
Get a key
Make a key on your account page (members only; become one). It is shown once: keep it somewhere safe, and name it for where it will live, so you can revoke it on its own later. You can have up to five.
Use it in your AI tools (MCP)
The Zotpaper MCP server is at https://zot.news/mcp.
Claude.ai, ChatGPT and other apps that sign in
Add a custom connector with the address https://zot.news/mcp. The app sends you to Zotpaper to sign in and approve it; no key needed. In Claude: Settings, Connectors, Add custom connector. In ChatGPT: Settings, Apps and connectors, then create a connector (developer mode). You can disconnect an app from your account page at any time.
For tools where you paste settings, use a key as a bearer token:
Claude Code
claude mcp add --transport http zotpaper https://zot.news/mcp \
--header "Authorization: Bearer zp_YOUR_KEY"Cursor, Windsurf and other clients (mcp.json or the client's MCP settings)
{
"mcpServers": {
"zotpaper": {
"url": "https://zot.news/mcp",
"headers": { "Authorization": "Bearer zp_YOUR_KEY" }
}
}
}Claude Desktop (claude_desktop_config.json, through mcp-remote)
{
"mcpServers": {
"zotpaper": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://zot.news/mcp",
"--header", "Authorization: Bearer zp_YOUR_KEY"]
}
}
}The tools:
front_page: What matters nowlatest: Catch up since a timesearch: Find stories and paperslist_stories, get_story: News, and one story in fulllist_papers, get_paper: Research, and one paper's recordbenchmark, list_benchmarks: Results across every paper we have readresearch_thread, list_threads: A line of research over timecorrections, markets_brief, list_sections, list_topics: The rest
Try asking: “What's leading Zotpaper right now?”, “What's new in AI agents research this week?”, “Who holds the best reported score on SWE-bench Verified?”
Use the API
The base URL is https://zot.news/api/public/v1. Send your key in the Authorization header on every request. Responses are JSON; times are ISO 8601 in UTC; text is markdown.
curl https://zot.news/api/public/v1/front \
-H "Authorization: Bearer zp_YOUR_KEY"The full description is at openapi.json (OpenAPI 3.1), for generating a client or giving to an agent.
| Endpoint | What it returns |
|---|---|
GET /front | The front page now: lead, top stories, breaking, picks, sections, and why each is there. |
GET /latest?since= | Everything published since a time, news and research. |
GET /search?q=&type= | Search news and research. type is news or research. |
GET /stories?section=&since= | News, newest first. Paged. |
GET /stories/{slug} | A story in full: text, sources, checked claims, corrections, timeline, credits. |
GET /sections | The news sections. |
GET /corrections?since= | Published corrections and the stories they correct. |
GET /markets/brief?edition= | The latest markets brief: us, asx or week. |
GET /papers?topic=&since= | AI papers we have written up, newest first. Paged. |
GET /papers/{id} | A paper's record, by slug or arXiv id: claims, results, concepts, code, threads. |
GET /topics | The research topics. |
GET /benchmarks | Benchmarks with results from two or more papers. |
GET /benchmarks/{name}?metric= | Every reported result on a benchmark, with records marked. |
GET /threads | Active research threads. |
GET /threads/{slug} | A line of research over time and its papers. |
GET /me | Your key, your limits and today's use. |
Lists come 50 at most at a time (limit), newest first. When there is more, the response has a nextCursor: pass it back as cursor for the next page. News reaches back 90 days; research has no limit.
Limits
60 calls a minute and 2,000 a day, per member across all their keys (the day starts at 00:00 UTC). MCP tool calls count; connecting and listing tools do not. Every API response says where you are:
X-RateLimit-Limit: 2000
X-RateLimit-Remaining: 1873
X-RateLimit-Reset: 1792454400Past a limit you get a 429 with Retry-After in seconds. If you need more, tell us what you are building.
Errors
Every error has the same shape, with a code to act on and a message to show:
{ "error": { "code": "rate_limited", "message": "...", "docs": "https://zot.news/developers#errors" } }missing_key,invalid_key(401): no key, or one that was revoked.not_a_member(403): the key's account has no active membership. Keys come back to life if you rejoin.rate_limited(429): see Limits.bad_request(400),not_found(404): the message says what.unavailable(503),server_error(500): ours. Retry with backoff.
Using what you get
Our stories are our own writing, built from other outlets' reporting, and every one lists those sources. When you show or quote Zotpaper, link the story's url. Benchmark numbers are as each paper reports them; we have not reproduced them. Full terms: API and MCP terms.
Versions
This is v1. Within v1 we only add: new fields, endpoints and tools. Anything that would break your code goes in a v2, announced here first, with v1 kept running alongside it.