mcp-rss-aggregator
Provides an MCP interface for Hacker News with simplified rss commands.
Execute
latest,top,best,history, orcommentscommands.Optionally include a numeric parameter (e.g.,
--10) to limit results.
Allows fetching and reading content from RSS feeds, with support for organizing feeds by categories, importing OPML subscriptions, and filtering articles by source or category
Supports fetching articles from TechCrunch's RSS feed, allowing users to read tech news content directly in Claude
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-rss-aggregatorshow me the latest articles from my tech news feeds"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP RSS Aggregator
Features
Read articles from your favorite RSS feeds directly in Claude Desktop
Support for OPML files to import your existing feed subscriptions
Organize feeds by categories
Get the latest articles across all your feeds
Filter articles by feed source or category
Well-formatted article presentation with titles, snippets, and links
Feeds are read and formatted locally; no article content leaves your machine
Related MCP server: @kazuph/mcp-pocket
Demo
Click on any timestamp to jump to that section of the video
00:00 - Sample RSS Feed Demonstration: Using the default 'sample-feeds.opml' file included in the repository. This segment displays how Claude processes and presents news content from sources like TechCrunch, The Verge, and other technology publications through the MCP (Model Context Protocol).
01:05 - Configuration File Editing Process: Step-by-step walkthrough of accessing and modifying the claude_desktop_config.json file to change the OPML file path reference from the default sample to a customized 'my-feeds.opml' file.
01:15 - Application Restart Procedure: Illustrating the necessary step of closing and reopening the Claude Desktop application to properly load and apply the modified OPML file configuration changes.
01:25 - Custom RSS Feed Results: Demonstration of the results after implementing the custom OPML file. This section highlights the expanded and more diverse news sources now available through Claude Desktop, including Spanish-language content.
Requirements
Node.js 20 or higher
Claude Desktop
Internet connection to access RSS feeds
Installation
Installing via Smithery
Install the packaged bundle from the Smithery server page, or from the CLI:
npx -y @smithery/cli@latest mcp add imprvhub/mcp-rss-aggregator --client claudeInstalling Manually
Clone or download this repository:
git clone https://github.com/imprvhub/mcp-rss-aggregator
cd mcp-rss-aggregatorInstall dependencies:
npm installBuild the project:
npm run buildFeed Configuration
The RSS Aggregator supports both OPML and JSON formats for feed configuration.
Using OPML (Recommended)
OPML (Outline Processor Markup Language) is a standard format used by most RSS readers to export and import feed subscriptions.
A sample OPML file with popular feeds is included in the public/sample-feeds.opml file. You can:
Use this file as-is
Edit it to add your own feeds
Replace it with an export from your existing RSS reader
Most RSS readers allow you to export your subscriptions as an OPML file.
Using JSON
Alternatively, you can define your feeds in a JSON file with the following format:
[
{
"title": "Hacker News",
"url": "https://news.ycombinator.com/rss",
"htmlUrl": "https://news.ycombinator.com/",
"category": "Tech News"
},
{
"title": "TechCrunch",
"url": "https://techcrunch.com/feed/",
"htmlUrl": "https://techcrunch.com/",
"category": "Tech News"
}
]Running the MCP Server
There are two ways to run the MCP server:
Option 1: Running manually
Open a terminal or command prompt
Navigate to the project directory
Run the server directly:
node build/index.jsKeep this terminal window open while using Claude Desktop. The server will run until you close the terminal.
Option 2: Auto-starting with Claude Desktop (recommended for regular use)
The Claude Desktop can automatically start the MCP server when needed. To set this up:
Configuration
The Claude Desktop configuration file is located at:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Edit this file to add the RSS Aggregator MCP configuration. If the file doesn't exist, create it:
{
"mcpServers": {
"rssAggregator": {
"command": "node",
"args": ["ABSOLUTE_PATH_TO_DIRECTORY/mcp-rss-aggregator/build/index.js"],
"env": {
"RSS_FEEDS_PATH": "ABSOLUTE_PATH_TO_YOUR_FEEDS_FILE.opml"
}
}
}
}Important Notes:
Replace
ABSOLUTE_PATH_TO_DIRECTORYwith the complete absolute path where you installed the MCPmacOS/Linux example:
/Users/username/mcp-rss-aggregatorWindows example:
C:\\Users\\username\\mcp-rss-aggregator
Replace
ABSOLUTE_PATH_TO_YOUR_FEEDS_FILE.opmlwith the path to your OPML or JSON fileThe whole
envblock is optional. Without it, the bundled sample feed list is used.
Changed in 0.3.0: the feed list path is read from the
RSS_FEEDS_PATHenvironment variable. Earlier versions took a non-standardfeedsPathkey, which the server found by openingclaude_desktop_config.jsonitself — a file that also holds every other MCP server's API keys. This server no longer reads that file.
If you already have other MCPs configured, simply add the "rssAggregator" section inside the "mcpServers" object:
{
"mcpServers": {
"otherMcp1": {
"command": "...",
"args": ["..."]
},
"rssAggregator": {
"command": "node",
"args": [
"ABSOLUTE_PATH_TO_DIRECTORY/mcp-rss-aggregator/build/index.js"
],
"env": {
"RSS_FEEDS_PATH": "ABSOLUTE_PATH_TO_YOUR_FEEDS_FILE.opml"
}
}
}
}The MCP server will automatically start when Claude Desktop needs it, based on the configuration in your claude_desktop_config.json file.
Usage
Restart Claude Desktop after modifying the configuration
Ask Claude for your feeds in plain language; it will pick the right tool
The MCP server runs as a subprocess managed by Claude Desktop
Available Tools
Changed in 0.3.0: the single
rsstool that took command strings (rss latest --20,rss --hackernews) has been replaced by three tools with real parameters. Claude no longer has to guess a command syntax, and theset-feeds-pathcommand is gone — the feed list is configured withRSS_FEEDS_PATHrather than by a tool call that could read arbitrary files.
Tool | Description | Parameters |
| List configured feeds grouped by category, with the | none |
| Newest articles across all feeds, most recent first |
|
| Newest articles from one feed |
|
Example Usage
Here are various examples of how to use the RSS Aggregator with Claude:
Direct Tool Usage:
"Use rss_list to show my feeds"
"Use rss_latest with limit 20"
"Use rss_latest with category 'Tech News'"
"Use rss_feed with feed_id news-ycombinator-com and limit 10"Natural Language Queries:
You can also interact with the MCP using natural language. Claude will interpret these requests and use the appropriate commands:
"What are the latest news on Hacker News?"
"Show me the top tech articles today"
"Fetch the latest articles from my programming feeds"
"List all my RSS feeds"
Extended Usage Examples
Daily News Briefing
"Give me the 25 latest articles across all my feeds and summarise the themes."
Claude calls rss_latest with limit: 25, then summarises.
Category-Based Reading
"What's new in Science today?" "Anything interesting in my Programming feeds?"
Claude calls rss_latest with the matching category.
Source-Specific Updates
"What's on the front page of Hacker News?" "Show me the last 15 TechCrunch posts."
Claude calls rss_feed with the feed's feed_id (see rss_list).
Working with Claude
Because the articles come back as text in the conversation, you can follow up directly:
"Summarise these articles."
"Which of these are about AI?"
"Compare how these sources cover the same story."
Troubleshooting
"Server disconnected" error
If you see the error "MCP RSS Aggregator: Server disconnected" in Claude Desktop:
Verify the server is running:
Open a terminal and manually run
node build/index.jsfrom the project directoryIf the server starts successfully, use Claude while keeping this terminal open
Check your configuration:
Ensure the absolute path in
claude_desktop_config.jsonis correct for your systemDouble-check that you've used double backslashes (
\\) for Windows pathsVerify you're using the complete path from the root of your filesystem
Tools not appearing in Claude
If the RSS Aggregator tools don't appear in Claude:
Make sure you've restarted Claude Desktop after configuration
Check the Claude Desktop logs for any MCP communication errors
Ensure the MCP server process is running (run it manually to confirm)
Feeds not loading
If your feeds aren't loading properly:
Make sure your OPML/JSON file is correctly formatted
Check that
RSS_FEEDS_PATHpoints at an existing.opmlor.jsonfile. If the path does not exist the server logs a warning and falls back to the bundled sample listTry running the server manually with a known good feeds file
rss_listreports which feed list it loaded, andrss_latestnames any feed it could not read
Development
Run the test suite (no network required):
npm install
npm run build
npm testContributing
Contributions to improve the RSS Aggregator are welcome! Here are some ways you can contribute:
Add support for more feed formats
Improve feed parsing and error handling
Add more visualization options for articles
Improve categorization and filtering capabilities
License
This project is licensed under the Mozilla Public License 2.0 - see the LICENSE file for details.
Related Links
Available Tools
3 toolsrss_feedC
Get the newest articles from one specific RSS feed
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of articles to return (1-50, default: 10) | |
| feed_id | Yes | Feed id as reported by rss_list, e.g. "news-ycombinator-com" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It conveys only that this is a retrieval, but says nothing about read-only safety, ordering of 'newest', behavior for an unknown feed_id, or whether results are cached/bounded. For a tool with zero annotation coverage this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler and no redundancy. It is appropriately sized for a two-parameter read tool, though its brevity is partly the source of the gaps noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter tool with a fully documented schema and no output schema, the description is minimally adequate. It omits sibling differentiation (rss_latest overlap) and any note on ordering or failure behavior, but nothing structurally critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with limit (range, default) and feed_id (format example) fully documented in the schema. The description adds no parameter meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get the newest articles from one specific RSS feed'), which is clear on its own. However, it does nothing to differentiate from the sibling rss_latest, which by name appears to cover a very similar retrieval of recent articles, so an agent cannot reliably choose between them from this text alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no when-not-to-use, and no mention of rss_list or rss_latest as alternatives. The only implied context is that a feed_id must come from somewhere (schema hints at rss_list), leaving routing purely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rss_latestA
Get the newest articles across all configured RSS feeds, most recent first, optionally limited to one category
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of articles to return (1-50, default: 15) | |
| category | No | Optional category to filter by, e.g. "Tech News" or "Science". Use rss_list to see categories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Get' plus 'newest first' communicates a read-only, sorted retrieval, and the scope ('all configured feeds') is useful. However, it says nothing about pagination, how many feeds must be configured, or what happens when no feeds match a category.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the scope, ordering, and optional filter front-loaded and no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with full schema coverage and zero required params, the description is adequate: scope, ordering, and filtering are clear. With no output schema, a note on the returned article fields would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents limit (1-50, default 15) and category (with the rss_list pointer). The description adds only the notion of ordering and optionality, which the schema largely covers; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the newest articles across all configured RSS feeds') plus the ordering (most recent first). It distinguishes itself from rss_feed only implicitly via 'across all configured feeds'; it never names the sibling that returns a single feed's items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'optionally limited to one category' hints at a filtering use case, and the category param points at rss_list for discovering values, but there is no explicit when-to-use-this-vs-rss_feed guidance. Usage is implied by the aggregation scope rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rss_listA
List the configured RSS feeds, grouped by category, with the feed_id to use with rss_feed
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses output behavior (grouped by category, includes feed_id), which matters since there is no output schema, but says nothing about read-only nature, auth requirements, or whether the feed list can be empty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with zero waste, front-loading the action and the result, then ending with the actionable feed_id handoff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial parameterless list tool with no output schema, the description covers enough: what is returned, how it is grouped, and the key field (feed_id) for the next step. Minor gaps on empty-list/error behavior only.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to describe; baseline 4 applies. The description correctly adds no spurious parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (configured RSS feeds) and explicitly names the sibling used next (rss_feed) via the returned feed_id. An agent can distinguish this from rss_latest and rss_feed without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear implied context: call this to discover feeds and obtain the feed_id needed by rss_feed. It does not state when-not to use it or contrast with rss_latest, but the routing intent is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.3.0- Removed
rss - Added
rss_feed - Added
rss_latest - Added
rss_list
1 tool update
v1.0.0- First observed
rss
TDQS
Scored across 3 tools
Each tool has a clearly distinct scope: rss_list returns feed metadata, rss_latest aggregates articles across all feeds, and rss_feed targets one specific feed. The descriptions make the boundaries explicit, and the feed_id handoff between rss_list and rss_feed reinforces the separation.
All three tools share a consistent rss_ prefix, which is easy to predict. The suffix patterns vary slightly (verb 'list' vs adjective 'latest' vs noun 'feed'), so it's not a strict verb_noun scheme, but it remains readable and coherent.
Three tools is on the thin side but fits a focused read-only aggregator well, with each tool earning its place. It is slightly under-scoped given that feed configuration is implied but not directly exposed.
The read surface is solid: list feeds, aggregate latest, and drill into a single feed. However, there is no way to add, remove, or manage feeds, so lifecycle coverage is incomplete for an aggregator that references 'configured' feeds.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Zotero MCP server for Claude and ChatGPT: search, citations, safe writes, PDF passages and pages.
Share one project context across ChatGPT, Claude, Telegram and any MCP client.
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseBqualityFmaintenanceA Model Context Protocol (MCP) server for web research. Bring real-time info into Claude and easily research any topic.31,370 npm298MIT
- AlicenseAqualityDmaintenance🔗 Model Context Protocol (MCP) Server for retrieving saved articles from Pocket API and loading them into Claude233 npm9MIT
- FlicenseBqualityDmaintenanceA Model Context Protocol server that enables downloading and parsing Substack posts directly through the Claude desktop app, allowing users to access and summarize Substack content.123-
- AlicenseAqualityDmaintenanceModel Context Protocol server that enables Claude Desktop (or any MCP client) to fetch web content and process images appropriately.1529 npmMIT