Feed

A server for fetching and parsing RSS, Atom, and JSON feeds.

Documentation

feed-mcp

Go Coverage Go Report Card MCP Badge

Website: richardwooding.github.io/feed-mcp

Bring RSS feeds to Claude Desktop β€” Read news, blogs, and updates directly in your AI conversations.

What is feed-mcp?

feed-mcp is a Model Context Protocol (MCP) server that lets Claude Desktop read RSS, Atom, and JSON feeds. Think of it as a bridge that connects your favorite websites' RSS feeds to Claude, so you can ask questions about the latest articles, get summaries, and stay updatedβ€”all from within your Claude chat.

Why use it?

  • πŸ“° Stay informed β€” Read the latest news and blog posts without leaving Claude
  • 🎯 Get summaries β€” Ask Claude to summarize multiple articles across different feeds
  • πŸ” Deep dive β€” Research topics by querying specific feeds or articles
  • ⚑ Save time β€” No need to open multiple websites to stay current

Quick Start

Step 1: Add to Claude Desktop

Open your Claude Desktop configuration file and add feed-mcp with your favorite feeds:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "feed-mcp": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "ghcr.io/richardwooding/feed-mcp:latest",
        "run",
        "https://techcrunch.com/feed/",
        "https://www.theverge.com/rss/index.xml"
      ]
    }
  }
}

Step 2: Restart Claude Desktop

Restart Claude Desktop to load the new configuration.

Step 3: Start chatting!

Try asking Claude:

  • "What are the latest tech news headlines?"
  • "Summarize the top 5 articles from my feeds"
  • "Are there any articles about AI today?"

Popular Feed Collections

Technology News

{
  "mcpServers": {
    "tech-news": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "ghcr.io/richardwooding/feed-mcp:latest",
        "run",
        "https://techcrunch.com/feed/",
        "https://www.theverge.com/rss/index.xml",
        "https://www.wired.com/feed/rss",
        "https://feeds.arstechnica.com/arstechnica/index"
      ]
    }
  }
}

Security & Privacy

{
  "mcpServers": {
    "security-news": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "ghcr.io/richardwooding/feed-mcp:latest",
        "run",
        "https://krebsonsecurity.com/feed/",
        "https://www.schneier.com/blog/atom.xml",
        "https://www.bleepingcomputer.com/feed/"
      ]
    }
  }
}

Web Development

{
  "mcpServers": {
    "webdev-news": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "ghcr.io/richardwooding/feed-mcp:latest",
        "run",
        "https://css-tricks.com/feed/",
        "https://www.smashingmagazine.com/feed/",
        "https://hacks.mozilla.org/feed/"
      ]
    }
  }
}

Podcasts

{
  "mcpServers": {
    "podcasts": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "ghcr.io/richardwooding/feed-mcp:latest",
        "run",
        "https://feeds.npr.org/510282/podcast.xml",
        "https://feeds.npr.org/381444908/podcast.xml"
      ]
    }
  }
}

Try asking Claude:

  • "What are the latest podcast episodes?"
  • "Summarize the most recent episode from NPR Politics"
  • "Are there any episodes about climate change this week?"

Using Your RSS Reader Feeds

Already have feeds in Feedly, Inoreader, or another RSS reader? Export them as OPML and use with feed-mcp:

{
  "mcpServers": {
    "my-feeds": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "/path/to/your/feeds.opml:/feeds.opml:ro",
        "ghcr.io/richardwooding/feed-mcp:latest",
        "run", "--opml", "/feeds.opml"
      ]
    }
  }
}

How to export OPML:

  • Feedly: Settings β†’ OPML β†’ Export
  • Inoreader: Preferences β†’ Folders and Tags β†’ Export OPML
  • NewsBlur: Account β†’ Import/Export β†’ Export Stories
  • The Old Reader: Settings β†’ Import/Export β†’ Export

How Claude Reads Feeds

When you ask Claude about your feeds, here's what happens:

  1. Browse first β€” Claude gets a list of article titles and metadata
  2. Read selectively β€” Claude only fetches full content for articles you ask about
  3. Smart caching β€” Articles are cached to avoid re-fetching

This two-pass approach keeps responses fast and prevents overwhelming your conversation.

Example Usage

You: "What's new in tech today?"

Claude will:

  1. Browse your tech feed titles
  2. Summarize the latest headlines
  3. Ask if you want details on specific articles

You: "Tell me more about the first article"

Claude will:

  1. Fetch the full content of that article
  2. Provide a detailed summary or answer your questions

Features

  • 🌐 Multiple formats β€” RSS, Atom, and JSON feeds
  • πŸ“± Import from readers β€” OPML support for easy migration
  • πŸ’Ύ Smart caching β€” Efficient feed retrieval with automatic updates
  • ⚑ Fast & reliable β€” Built-in rate limiting and error handling
  • πŸ”’ Secure β€” URL validation and private IP blocking
  • 🐳 Easy deployment β€” Docker and Podman support

Advanced Features

For power users, feed-mcp includes:

  • Dynamic feed management β€” Add/remove feeds at runtime
  • MCP Resources β€” Advanced filtering and real-time subscriptions
  • Intelligent prompts β€” Analyze trends, monitor keywords, generate reports
  • Circuit breakers β€” Automatic handling of failing feeds
  • Custom configuration β€” Rate limiting, retries, connection pooling

See docs/ADVANCED.md for details.

Alternative Installation Methods

MCP Bundle (Claude Desktop, one-click)

Every release attaches MCP Bundles (.mcpb) β€” one per platform. Download the bundle matching your OS and architecture (e.g. feed-mcp_<version>_darwin_arm64.mcpb) and open it with Claude Desktop to install β€” no Docker or Go toolchain required. The bundle's settings screen lets you set feed URLs, the per-feed request timeout, and the cache expiration. Feeds are optional at install time: runtime feed management is enabled, so you can also add feeds later with the add_feed tool.

Homebrew

brew install richardwooding/tap/feed-mcp

Then configure Claude Desktop:

{
  "mcpServers": {
    "feed-mcp": {
      "command": "feed-mcp",
      "args": ["run", "https://techcrunch.com/feed/"]
    }
  }
}

Go Install

If you have Go installed:

go install github.com/richardwooding/feed-mcp@latest
feed-mcp run https://techcrunch.com/feed/

Then configure Claude Desktop:

{
  "mcpServers": {
    "feed-mcp": {
      "command": "feed-mcp",
      "args": ["run", "https://techcrunch.com/feed/"]
    }
  }
}

Podman

Prefer Podman over Docker? Just replace docker with podman:

{
  "mcpServers": {
    "feed-mcp": {
      "command": "podman",
      "args": [
        "run", "-i", "--rm",
        "ghcr.io/richardwooding/feed-mcp:latest",
        "run",
        "https://techcrunch.com/feed/"
      ]
    }
  }
}

Transport Options

feed-mcp supports multiple transport protocols for different deployment scenarios:

TransportDescriptionUse Case
stdioStandard input/output (default)Claude Desktop, local CLI
streamable-httpHTTP server with Streamable HTTP protocolWeb deployments, remote access
http-with-sseDeprecated, maps to streamable-httpBackwards compatibility only

stdio (Default)

Standard input/output transport for local usage. This is the default and what Claude Desktop uses:

feed-mcp run https://techcrunch.com/feed/

Streamable HTTP

HTTP-based transport for web deployments and remote access:

# Start HTTP server on default port 8080
feed-mcp run --transport=streamable-http https://techcrunch.com/feed/

# Custom port
feed-mcp run --transport=streamable-http --http-port=3000 https://techcrunch.com/feed/

# Stateless mode (for load-balanced deployments)
feed-mcp run --transport=streamable-http --http-stateless https://techcrunch.com/feed/

Docker with HTTP transport:

docker run -p 8080:8080 ghcr.io/richardwooding/feed-mcp:latest \
  run --transport=streamable-http https://techcrunch.com/feed/

HTTP transport options:

FlagDefaultDescription
--http-port8080Port for HTTP server (also reads PORT env var)
--http-statelessfalseRun in stateless mode (no session tracking)
--http-session-timeout30mTimeout for idle HTTP sessions

Troubleshooting

"Claude hit the maximum length for this conversation"

If you see this error:

  • You're fetching too many large articles at once
  • Try asking Claude to browse titles first, then read specific articles
  • The server automatically limits content to prevent this

Feed not updating

Feeds are cached for 10 minutes by default. If you need fresh data:

  • Wait a few minutes and try again
  • Restart Claude Desktop to clear the cache

Private/localhost feeds

By default, localhost and private IP feeds are blocked for security. To enable:

{
  "mcpServers": {
    "feed-mcp": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "ghcr.io/richardwooding/feed-mcp:latest",
        "run", "--allow-private-ips",
        "http://localhost:8080/feed.xml"
      ]
    }
  }
}

Documentation

  • ADVANCED.md β€” Dynamic feed management, MCP Resources, intelligent prompts
  • ARCHITECTURE.md β€” Technical details, architecture, development guide
  • CLAUDE.md β€” Instructions for Claude Code when working with this codebase

Releasing

Pushing a vX.Y.Z tag triggers the release workflow, which uses GoReleaser to:

  • build binaries for linux/darwin/windows (amd64 + arm64),
  • pack each binary into an MCP Bundle (.mcpb) and attach all six to the release,
  • build and push a multi-arch OCI image to GHCR with ko,
  • publish a Homebrew cask to richardwooding/homebrew-tap.

The Homebrew step needs a HOMEBREW_TAP_GITHUB_TOKEN repo secret with write access to the tap.

MCP Bundles

tools/mcpb is a small, dependency-free (Go stdlib) packer that zips the server binary and a generated manifest.json into a .mcpb. GoReleaser invokes it per build target, but you can build a bundle for your current platform locally (no Node required):

go build -o feed-mcp .
go run ./tools/mcpb pack -version dev   # writes dist/feed-mcp_dev_<os>_<arch>.mcpb

A full local dry run of the release pipeline (skips publishing):

goreleaser release --snapshot --clean

Contributing

Contributions are welcome! See the architecture docs for technical details and development guidelines.

License

MIT License β€” See LICENSE for details.