Pipe library / rss-digest
rss-digest
A short digest of the newest items from one or more RSS or Atom feeds.
News and research
${inputs.feeds}
CLI
pipes run examples/rss-digest.pipe.yaml
MCP call
{
"name": "pipe__rss-digest",
"arguments": {}
}
Pipe file
examples/rss-digest.pipe.yaml
pipes: 0
name: rss-digest
version: 0.1.0
description: A short digest of the newest items from one or more RSS or Atom feeds.
permissions:
network: ["${inputs.feeds}"]
inputs:
type: object
properties:
feeds:
type: array
description: HTTPS RSS or Atom feed URLs. Each host is allowed for this run, up to 8 hosts.
items: { type: string, format: uri }
minItems: 1
maxItems: 5
default:
- https://blog.rust-lang.org/feed.xml
- https://hnrss.org/frontpage
per_feed:
type: integer
description: How many items to keep from each feed.
minimum: 1
maximum: 20
default: 5
required: [feeds]
outputs:
type: object
properties:
text: { type: string }
count: { type: integer }
required: [text, count]
output:
text: "${steps.format.text}"
count: "${steps.format.count}"
steps:
- id: fetch
block: fetch_http
for_each: "${inputs.feeds}"
with:
url: "${item}"
max_bytes: 400000
retry: { max: 1, backoff_ms: 400 }
timeout_ms: 15000
- id: entries
block: parse_rss
in: "${steps.fetch}"
- id: unique
block: dedupe
in: "${steps.entries}"
with: { key: [link], keep: first }
- id: ordered
block: sort
in: "${steps.unique}"
with:
by: [{ field: published, desc: true }]
- id: capped
block: limit
in: "${steps.ordered}"
with:
n: "${inputs.per_feed}"
group: feed
- id: format
block: format
in: "${steps.capped}"
with:
header: "Digest:\n"
item_template: "- ${item.title} ${item.link}"
separator: "\n"
- id: print
block: emit_stdout
in: "${steps.format.text}"
with: { format: text }