# rss-digest

A short digest of the newest items from one or more RSS or Atom feeds.

Category: News and research. Allow `${inputs.feeds}`.

Updated 2026-10-17. HTML: https://asipipes.com/pipes-library/rss-digest

## CLI

```
pipes run examples/rss-digest.pipe.yaml
```

## MCP call

```json
{
  "name": "pipe__rss-digest",
  "arguments": {}
}
```

## Pipe file

`examples/rss-digest.pipe.yaml`

```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 }
```
