Developers
You can use Truncated's stories in your own apps, feeds and AI tools. There are three ways in: RSS feeds, a JSON API and an MCP server. Free and anonymous: no key or sign-in. Published stories only, 20 per page, in real time. Please read the terms of use before you build on it.
RSS
The main feed has the latest stories: https://truncated.ai/feed.xml
Every category and topic has its own feed: add /feed.xml to the address of its page, for example https://truncated.ai/category/models-research/feed.xml. Find a topic on the Topics page. Pages for companies, products and people have no feed of their own.
The category feeds:
- Models & Research
- AI Agents
- AI Development
- Infrastructure & Hardware
- Image, Video & Audio
- Robotics & Autonomous Systems
- Business & Industry
- Policy & Regulation
- Safety & Security
- Benchmarks & Evaluation
- Open Source & Community
- AI in Society
Each feed has up to 50 recent stories. An item has:
title- The headline.
link- The original article at its publisher.
description- The two summary sentences, and the editors' note when there is one.
content:encoded- The same as HTML, as the site shows it: the summary, the editors' note with its links, and a link to the publisher.
category- The story's category.
guid- A stable ID for the story.
pubDate- The story's date.
The main feed can also carry one sponsored item, labelled as such.
API
Three read-only JSON endpoints, with snake_case keys. Lists return 20 stories a page: ask for the next one with page=2, and use page, pages and total in the answer to see where you are. A page past the end returns the last page. Category IDs: models-research, ai-agents, ai-development, infrastructure-hardware, media-vision-audio, robotics-autonomy, business-industry, policy-regulation, safety-security, benchmarks-evaluation, open-source-community, ai-society.
GET /api/feed
The latest stories.
category(optional)- Category ID, as list_categories returns it.
page(optional)- Page number, 1 to 100000, 20 stories per page (default 1). A page past the end returns the last page.
curl "https://truncated.ai/api/feed?category=models-research&page=1"The answer:
stories- Up to 20 stories.
total- Stories matching the request.
page- The page returned.
pages- Number of pages.
filters- The filters applied, after unknown IDs were dropped.
scope- window: the recent stories.
notices- Why a filter was dropped, if one was.
archive_matches- Whether older stories in the archive match too.
content_version- A number that changes whenever published stories change.
site_total- Published stories site-wide.
revenue- The sponsored post shown with the feed (sponsor, labelled, or null) and the sponsor disclosures of editors' notes (disclosures, by story ID).
GET /api/search
Search all published stories, newest first.
q(required)- Search text, 1 to 200 characters.
page(optional)- Page number, 1 to 100000, 20 stories per page (default 1). A page past the end returns the last page.
curl "https://truncated.ai/api/search?q=agents&page=1"The answer:
stories- Up to 20 matching stories, newest first.
total- Matching stories.
page- The page returned.
pages- Number of pages.
GET /api/story/{id}
One published story by ID.
id(required)- Story ID: the id of a listed story.
id=$(curl -s "https://truncated.ai/api/feed" | jq -r '.stories[0].id')
curl "https://truncated.ai/api/story/$id"The answer:
story- The story.
latest- The 5 newest other stories.
disclosure- The sponsor disclosure of its editors' note (label, href, sponsor_names), or null.
share_url- Its short share link.
Story fields
Every story in an answer has these fields:
id- Story ID.
headline- The headline.
summary- Two summary sentences written by Truncated.
canonical_url- The original article's identity URL at its publisher.
primary_url- The current link to the original article.
published_at- The publisher's date, when known, else null.
discovered_at- When Truncated found the story.
first_published_at- When Truncated first published the story.
rss_guid- The story's guid in the RSS feeds.
rss_date- The story's date in the RSS feeds.
publisher_id- Publisher ID.
publisher_name- Publisher name.
publisher_host- Publisher host name.
og_description- The publisher's own description of the article, or null.
image- The story image Truncated serves under /media/ (id, kind, owner, width, height, alt), or null.
favicon- The publisher's icon, the same shape as image, or null.
classification- Its filing (category_id, topic_ids, entity_ids, content_type_id, taxonomy_version, method), or null.
legacy_category- Only on stories from before the current categories: the old category name.
note- The editors' note (text, created_at, updated_at), or null.
coverage- Other outlets' reports of the same story (url, publisher_id, publisher_name, headline, position, same_publisher_allowed).
MCP
AI tools that speak the Model Context Protocol can connect to https://truncated.ai/mcp (Streamable HTTP, stateless, JSON responses; POST JSON-RPC). No key or sign-in.
Tools
latest_stories
The newest published Truncated stories from the rolling recent window, newest first, 20 per page. Optionally only one category (IDs from list_categories). Each story has a headline, two summary sentences, its publisher, the original article URL and a Truncated permalink.
category(optional)- Category ID, as list_categories returns it.
page(optional)- Page number, 1 to 100000, 20 stories per page (default 1). A page past the end returns the last page.
search_stories
Search all published Truncated stories by text, newest first, 20 per page.
q(required)- Search text, 1 to 200 characters.
page(optional)- Page number, 1 to 100000, 20 stories per page (default 1). A page past the end returns the last page.
get_story
One published Truncated story by its ID (the `id` of a listed story).
id(required)- Story ID: the id of a listed story.
list_categories
The categories every Truncated story is filed under, with their IDs for latest_stories.
Tool results list stories in a short form, with page, pages, total and an attribution field that holds the terms of use. A story in a result has:
id- Story ID, for get_story.
headline- The headline.
summary- Two summary sentences written by Truncated.
publisher- Publisher name and host.
canonical_url- The original article.
permalink- The story's page on Truncated.
discovered_at- When Truncated found the story.
published_at- The publisher's date, when known, else null.
category- Category ID and label, or null.
coverage_count- How many other outlets reported the same story.
Claude Desktop
Add Truncated as a custom connector: in Claude, open Connectors (under Customize, or Settings in older versions), choose Add custom connector and enter:
Name: Truncated
Remote MCP server URL: https://truncated.ai/mcp
Authentication: No sign in Claude Desktop's claude_desktop_config.json only starts servers on your computer, so a remote server like this one goes in Connectors.
Cursor
Add this to ~/.cursor/mcp.json for all projects, or to .cursor/mcp.json in one project:
{
"mcpServers": {
"truncated": {
"url": "https://truncated.ai/mcp"
}
}
}Other MCP clients that support Streamable HTTP can use the same URL.
Limits
Rate limits: MCP: 30 requests a minute per client address; requests from Anthropic's published Claude connector addresses get 300 a minute per address. REST: 60 requests a minute per client address. Over the limit the request fails with HTTP 429; retry after a minute. Reads are cached and refreshed when stories change; when busy, a read fails with HTTP 503 and Retry-After.
- API: 60 requests a minute from each client address (IPv6 addresses count by /64). Over that, you get HTTP 429 with a short text message. Wait a minute, then try again.
- MCP: 30 requests a minute per client address; requests from Anthropic's published Claude connector addresses get 300 a minute per address. Every request counts, including
initializeandtools/list. Over that, you get HTTP 429 withRetry-After: 60and a JSON-RPC error. - HTTP 503 with
Retry-Aftermeans we are busy. Wait that many seconds (usually 10) and try again. Over MCP, a busy read comes back as a tool error that says when to retry, and HTTP 503 withoutRetry-Aftermeans the MCP server is unavailable; try again later.
Terms of use
Using the data means accepting these terms. It is the same text that /llms.txt and every MCP result carry:
Data supplied by the Truncated API (truncated.ai). Free to use, including commercially, with attribution: show 'Data: Truncated (truncated.ai)' with a link, and link each story to its original publisher. Headlines, article text and images belong to their publishers; Truncated supplies summaries, categories and links. Do not resell the feed itself as a data product. Provided as is, without warranty; access may be rate-limited or changed.
Help
Questions or problems: email support@truncated.ai. This is a free service, so we can't promise an answer or a fix, and there is no service level.
For AI tools, /llms.txt sums up Truncated, this API and the MCP server in Markdown.