Skip to main content
Glama
veithly

RSS MCP Server

by veithly

RSS MCP Server

NPM Version

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_feed to 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_INSTANCE environment 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 build

2. Run the Server

After a successful build, start the MCP server:

npm start

The 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.com

The 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.

  1. Direct Invocation: You can run the server directly from your terminal using npx:

    npx rss-mcp
  2. MCP 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.

  1. Clone and build the project as described in the "Installation" and "Usage" sections.

  2. Locate your MCP configuration file.

  3. Add the following server entry, making sure to use the absolute path to the compiled index.js file:

    {
      "name": "rss",
      "command": ["node", "/path/to/your/rss-mcp/dist/index.js"],
      "type": "stdio"
    }

    Important: Replace /path/to/your/rss-mcp/dist/index.js with 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:

    1. Standard URL: https://rsshub.app/bilibili/user/dynamic/208259

    2. rsshub:// 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: 1

    • Retrieve 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

📄 License

This project is licensed under the Apache-2.0 License.

Available Tools

1 tool
get_feedB

Get RSS feed from any URL, including RSSHub feeds.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the RSS feed. For RSSHub, you can use "rsshub://" protocol (e.g., "rsshub://bilibili/user/dynamic/208259").

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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. 1 tool updatev1.0.0
    • First observedget_feed

TDQS

B3.3/5.0
Disambiguation5/5

With only one tool, there is no possibility of ambiguity or overlap between tools, making disambiguation perfect by default.

Naming Consistency5/5

The single tool name 'get_feed' follows a clear verb_noun pattern, and with no other tools, consistency is inherently perfect.

Tool Count2/5

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.

Completeness2/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    6
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
    -
  • A
    license
    C
    quality
    C
    maintenance
    Enables AI models to fetch and aggregate news from RSS, Atom, JSON, and HTML feeds with fault-tolerant circuit breaker protection.
    4
    14
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to discover, fetch, and manage RSS feeds from 1500+ websites via RSSHub, with subscription groups and content filtering.
    3
    MIT

Latest Blog Posts

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