Catalog / rss-normalize
rss-normalize
"What is in this feed, and what is new since I last asked?" You give a feed URL. You get the items in one JSON shape (title, link, id, date, short preview, content hash) and a list of items whose hash you have not seen before.
What question it answers
"What is in this feed, and what is new since I last asked?" You give a feed URL. You get the items in one JSON shape (title, link, id, date, short preview, content hash) and a list of items whose hash you have not seen before.
When to use it
- An agent monitors blogs, release feeds or news feeds and wants only new items.
- You want RSS and Atom in one shape without writing a parser.
When not to
- Not for full article text. You get titles, links, dates, hashes and a 180-character preview.
- Not for pages without a feed. It does not discover feeds.
- The parser is simple (regular expressions, not a full XML parser). Unusual feeds can parse badly. Some HTML entities (for example
’,—) are not decoded. - Only the first 100 items are read.
Example (MCP tool `rss_normalize_url`, or CLI)
npx tsx src/cli.ts https://www.nasa.gov/rss/dyn/breaking_news.rss
Trimmed output (shape from samples/nasa-breaking.json):
{
"tool": "rss-normalize",
"version": "0.1.0",
"url": "https://www.nasa.gov/rss/dyn/breaking_news.rss",
"format": "rss",
"title": "NASA",
"feedUpdated": "Sat, 31 Oct 2026 15:40:16 +0000",
"count": 10,
"truncated": false,
"newSinceLastFetch": 0,
"changed": false,
"items": [
{
"title": "NASA Releases MAX POWER Key Events for Media, Participants",
"link": "https://www.nasa.gov/news-release/nasa-releases-max-power-key-events-for-media-participants/",
"id": "https://www.nasa.gov/?post_type=press-release&p=1060823",
"published": "Fri, 30 Oct 2026 19:31:02 +0000",
"contentHash": "22fb5dc4...",
"summaryPreview": "America's newest aerospace expo and air show ..."
}
],
"newItems": [],
"newItemsTruncated": false,
"source": "public RSS/Atom",
"copyrightNote": "Feed text remains publisher copyright; ...",
"billing": { "sku": "rss_normalize", "plannedPriceUsd": 0.01, "x402Enabled": false }
}
format is rss or atom. On the first call for a URL there is no history, so every item counts as new. contentHash covers title, date and link, so an edited summary does not make an item "new".
A second tool, rss_parse_xml, parses XML you already have (up to 2,000,000 characters, no network).
Data source and licence
The public feed you name. The text belongs to the publisher. The tool returns only titles, links, dates, hashes and a capped preview, and every result carries a copyright note. Check the feed's terms before redistributing the content.
Freshness, state and limits
- Every call fetches the feed live (no result cache). Only the list of seen hashes is stored, in the OS temp folder of the machine running the tool, per tenant name.
- Up to 100 items per feed, up to 50 listed in
newItems. - 20 s timeout, 5 MB response cap.
Errors are not charged
Payment settles only on a successful answer. Any response with status 400 or higher (bad input, not found, upstream failure) is never settled.