RSS MCP Server
The RSS MCP Server fetches and parses RSS/Atom feeds, with specialized support for RSSHub feeds, delivering structured JSON output.
Fetch RSS/Atom Feeds: Retrieve and parse standard feeds from any URL
RSSHub Support: Access feeds using standard URLs or the simplified
rsshub://protocolCustomizable Item Count: Specify how many feed items to retrieve (default: 1, 0 for all items)
Multi-instance Polling: Automatically select available RSSHub instances for improved reliability
Priority Instance: Configure a preferred RSSHub instance via environment variable
Error Handling: Retry requests with alternative instances if one fails
Content Cleaning: Extract plain text descriptions from feed content using Cheerio
Structured Output: Convert feed data into standardized JSON format for easy integration
Utilizes Axios for making HTTP requests to fetch RSS feeds from various sources, enhancing the reliability of data retrieval
Provides the ability to fetch user dynamics and content from Bilibili through RSSHub, allowing access to structured user activity data
Uses Cheerio to clean and parse HTML content from RSS feeds, extracting plain text descriptions for better readability
Supports configuration through environment variables loaded from .env files, allowing customization of priority RSSHub instances
Enables fetching and parsing of any standard RSS/Atom feed, converting the content into a structured JSON format with cleaned text descriptions
Click on "Install 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., "@RSS MCP Serverget_feed rsshub://bilibili/user/dynamic/208259 count 5"
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.
RSS MCP Server
This is a Model Context Protocol (MCP) server built with TypeScript. It provides a versatile tool to fetch and parse any standard RSS/Atom feed, and also includes special support for RSSHub feeds. With this server, language models or other MCP clients can easily retrieve structured content from various web sources.
The server comes with a built-in list of public RSSHub instances and supports a polling mechanism to automatically select an available instance, significantly improving the success rate and stability of data retrieval.
✨ Features
Universal Feed Parsing: Fetch and parse any standard RSS/Atom feed from a given URL.
Enhanced RSSHub Support: Provides a tool named
get_feedto fetch any RSSHub-supported feed via MCP, with multi-instance support.Customizable Item Count: Specify the number of feed items to retrieve, with support for fetching all items.
Multi-instance Support: Includes a list of public RSSHub instances and automatically polls to find an available service.
Smart URL Parsing: Supports standard RSSHub URLs and a simplified
rsshub://protocol format.Priority Instance Configuration: Allows setting a preferred RSSHub instance via the
PRIORITY_RSSHUB_INSTANCEenvironment variable.Robust Error Handling: If a request to one instance fails, it automatically tries the next one until it succeeds or all instances have failed.
Content Cleaning: Uses Cheerio to clean the feed content and extract plain text descriptions.
Standardized Output: Converts the fetched RSS feed into a structured JSON format.
Related MCP server: RSS Feed MCP Server
📦 Installation
First, clone the project repository, then install the required dependencies.
git clone https://github.com/veithly/rss-mcp.git
cd rss-mcp
npm install🚀 Usage
1. Build the Project
Before running, you need to compile the TypeScript code into JavaScript:
npm run build2. Run the Server
After a successful build, start the MCP server:
npm startThe server will then communicate with the parent process (e.g., Cursor) via Stdio.
3. Configure a Priority Instance (Optional)
You can create a .env file to specify a priority RSSHub instance. This is very useful for users who have a private, stable instance.
Create a .env file in the project root directory and add the following content:
PRIORITY_RSSHUB_INSTANCE=https://my-rsshub.example.comThe server will automatically load this configuration on startup and place it at the top of the polling list.
🔧 MCP Server Configuration
To use this server with an MCP client like Cursor, you need to add it to your configuration file.
Method 1: Using npx (Recommended)
This package is published on npm, so you can use npx to run the server without a local installation. This is the easiest method.
Direct Invocation: You can run the server directly from your terminal using
npx:npx rss-mcpMCP Client Configuration: To integrate with an MCP client like Cursor, add the following to your configuration file (e.g.,
~/.cursor/mcp_settings.json):{ "name": "rss", "command": ["npx", "rss-mcp"], "type": "stdio" }
Method 2: Local Installation
If you have cloned the repository locally, you can run it directly with node.
Clone and build the project as described in the "Installation" and "Usage" sections.
Locate your MCP configuration file.
Add the following server entry, making sure to use the absolute path to the compiled
index.jsfile:{ "name": "rss", "command": ["node", "/path/to/your/rss-mcp/dist/index.js"], "type": "stdio" }Important: Replace
/path/to/your/rss-mcp/dist/index.jswith the correct absolute path on your system.
After adding the configuration, restart your MCP client (e.g., Cursor) for the changes to take effect. The rss server will then be available, and you can call the get_feed tool.
🛠️ Tool Definition
get_feed
Fetches and parses an RSS feed from a given URL. It supports both standard RSS/Atom feeds and RSSHub feeds.
Input Parameters
url(string, required): The URL of the RSS feed to fetch. Two formats are supported:Standard URL:
https://rsshub.app/bilibili/user/dynamic/208259rsshub://protocol:rsshub://bilibili/user/dynamic/208259(the server will automatically match an available instance)
count(number, optional): The number of RSS feed items to retrieve.Default:
1Retrieve all:
0
Output
Returns a JSON string containing the feed information, with the following structure:
{
"title": "bilibili User Dynamics",
"link": "https://space.bilibili.com/208259",
"description": "bilibili User Dynamics",
"items": [
{
"title": "[Dynamic Title]",
"description": "Plain text content of the dynamic...",
"link": "https://t.bilibili.com/1234567890",
"guid": "https://t.bilibili.com/1234567890",
"pubDate": "2024-05-20T12:30:00.000Z",
"author": "Author Name",
"category": ["Category1", "Category2"]
}
]
}📜 Main Dependencies
@modelcontextprotocol/sdk: For building the MCP server.
axios: For making HTTP requests.
rss-parser: For parsing RSS/Atom feeds.
cheerio: For parsing and manipulating HTML content.
date-fns-tz: For handling time-zone-related date formatting.
dotenv: For loading environment variables from a
.envfile.
📄 License
This project is licensed under the Apache-2.0 License.
Available Tools
1 toolget_feedB
Get RSS feed from any URL, including RSSHub feeds.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the RSS feed. For RSSHub, you can use "rsshub://" protocol (e.g., "rsshub://bilibili/user/dynamic/208259"). |
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 of behavioral disclosure. It states what the tool does (fetch RSS feeds) but doesn't describe key behaviors like error handling (e.g., invalid URLs, network failures), rate limits, authentication needs, or output format. For a tool with no annotations, this leaves significant gaps in understanding how it operates.
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?
The description is a single, efficient sentence: 'Get RSS feed from any URL, including RSSHub feeds.' It is front-loaded with the core purpose and includes essential context without unnecessary words. Every part of the sentence earns its place, making it highly concise and well-structured.
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?
Given the tool's complexity (fetching external feeds), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., feed data format, error responses) or behavioral aspects like performance or limitations. For a tool with no structured data beyond the input schema, more context is needed to be fully helpful.
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 input schema has 100% description coverage, with the 'url' parameter well-documented in the schema itself (including RSSHub protocol examples). The description adds minimal value beyond the schema by reiterating support for RSSHub feeds but doesn't provide additional syntax, format details, or constraints. Baseline 3 is appropriate since the schema does the heavy lifting.
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?
The description clearly states the tool's purpose: 'Get RSS feed from any URL, including RSSHub feeds.' It specifies the verb ('Get') and resource ('RSS feed'), and mentions support for RSSHub feeds, which adds specificity. However, since there are no sibling tools, it doesn't need to distinguish from alternatives, so it doesn't reach the highest score.
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 description implies usage by mentioning 'any URL' and 'including RSSHub feeds,' which suggests it's versatile for fetching RSS feeds broadly. However, it lacks explicit guidance on when to use this tool versus alternatives (e.g., other feed parsers or APIs), and there are no exclusions or prerequisites stated. With no sibling tools, this is adequate but not comprehensive.
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. Dates show when Glama detected each change.
1 tool update
v1.0.0- First observed
get_feed
TDQS
With only one tool, there is no possibility of ambiguity or overlap between tools, making disambiguation perfect by default.
The single tool name 'get_feed' follows a clear verb_noun pattern, and with no other tools, consistency is inherently perfect.
One tool is too few for a typical RSS server, which would benefit from operations like list_feeds, add_feed, or refresh_feeds, making the scope feel incomplete.
The tool only allows fetching a feed from a URL, lacking essential RSS functionalities such as managing subscriptions, updating feeds, or parsing feed content, resulting in significant gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Track and browse RSS feeds with ease. Fetch the latest entries from any feed URL and extract full…
Your curated sources (RSS, YouTube, podcasts, Google News) as context for any AI agent. 26 tools.
Search a curated RSS feed directory and fetch latest articles. EN/JA. Sign in to use favorites.
RSS, Atom and JSON feeds for agents: find a site's feed, read items as JSON, keyless news search.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with RSS readers that support the FreshRSS API through natural language. Allows users to manage and query their RSS feeds and articles via LLM conversations.6MIT
- FlicenseNot gradedqualityCmaintenanceEnables Claude to fetch, parse, and manage RSS/Atom feeds through the Model Context Protocol. It supports feed registration and retrieval, allowing users to access article summaries and full content from multiple sources via natural language.1-
- AlicenseCqualityCmaintenanceEnables AI models to fetch and aggregate news from RSS, Atom, JSON, and HTML feeds with fault-tolerant circuit breaker protection.4146MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to discover, fetch, and manage RSS feeds from 1500+ websites via RSSHub, with subscription groups and content filtering.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/veithly/rss-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server