akgoparaju/rss-mcp-server
If you are the rightful owner of rss-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The RSS MCP Server is a modular server designed to track, filter, and surface PNT/GNSS news from custom RSS feeds using a natural language interface via Claude Desktop.
update_rss_feeds
Fetch latest articles from all feeds
get_unread_articles
Get unread articles
mark_articles_read
Mark articles as read
search_articles
Search articles by keywords
๐ก RSS MCP Server
A modular Model Context Protocol (MCP) server for tracking, filtering, and surfacing PNT/GNSS news from custom RSS feeds with natural language interface via Claude Desktop.
โจ Features
- ๐ Native MCP Integration - Direct integration with Claude Desktop
- ๐ฐ RSS Feed Processing - Fetches and parses multiple RSS feeds
- ๐ท๏ธ Tag-based Filtering - Content filtering using configurable tags
- ๐ฌ Natural Language Interface - AI-powered RSS management
- ๐ State Management - Persistent read/unread article tracking
- ๐ Search Capabilities - Keyword and tag-based article search
- ๐ก๏ธ Error Handling - Graceful fallbacks and error recovery
๐ Quick Start
Prerequisites
- Python 3.10+
- Claude Desktop
- Virtual environment (recommended)
Installation
# Clone the repository
cd rss-mcp-server
# Create and activate virtual environment
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
pip install mcp feedparser pyyaml httpx
Configuration
- Create feeds.yaml (if not exists):
- url: https://insidegnss.com/feed/
tags: [C-band, TrustPoint, GPSIA, LEO, PNT]
- url: https://spacenews.com/feed/
tags: [LEO, spoofing, spectrum]
- url: https://www.gpsworld.com/feed/
tags: [GNSS, spoof, jamming, M-code]
- Configure Claude Desktop:
Add to ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS):
{
"mcpServers": {
"rss-mcp-server": {
"command": "/path/to/your/project/.venv/bin/python",
"args": ["/path/to/your/project/main.py"],
"cwd": "/path/to/your/project"
}
}
}
โ ๏ธ Replace paths with your actual project location
- Restart Claude Desktop completely (quit and reopen)
Testing
# Test server locally
python main.py
# Should output: "RSS MCP Server initialized successfully"
๐ค Usage
Once integrated with Claude Desktop, use natural language commands:
"Update my RSS feeds"
"Show me articles about GPS jamming"
"Search for LEO satellite articles"
"Mark the first 5 articles as read"
"Find articles about spoofing"
"Show me 10 recent unread articles"
๐ก MCP Tools
Tool | Description | Parameters |
---|---|---|
update_rss_feeds | Fetch latest articles from all feeds | None |
get_unread_articles | Get unread articles | limit (optional) |
mark_articles_read | Mark articles as read | article_ids (optional) |
search_articles | Search articles by keywords | query , tags (optional) |
๐ MCP Resources
Resource URI | Description |
---|---|
rss://feeds/unread | All unread articles (JSON) |
rss://feeds/all | All articles (JSON) |
๐ Project Structure
rss-mcp-server/
โโโ main.py # MCP server implementation
โโโ processor.py # RSS feed processing logic
โโโ state.py # State management for read/unread tracking
โโโ feeds.yaml # Feed configuration (direct list format)
โโโ state.json # Runtime state (auto-created)
โโโ requirements.txt # Python dependencies
โโโ README.md # This file
โโโ .venv/ # Virtual environment
โ๏ธ Configuration Details
feeds.yaml Format
โ Correct format (direct list):
- url: https://example.com/feed/
tags: [tag1, tag2, tag3]
- url: https://another.com/rss/
tags: [tag4, tag5]
โ Incorrect format (with wrapper):
feeds: # Don't use this wrapper
- url: https://example.com/feed/
Tags
Tags are used for:
- Content filtering during search
- Categorizing articles by topic
- Enhancing search relevance
Example tags for PNT/GNSS content:
GPS
,GNSS
,PNT
jamming
,spoofing
,interference
LEO
,MEO
,satellites
military
,defense
,civilian
M-code
,anti-jam
,resilient
๐ง Troubleshooting
Common Issues
Server not appearing in Claude Desktop:
- Verify
claude_desktop_config.json
syntax and paths - Ensure all paths are absolute
- Restart Claude Desktop completely
Import errors:
pip install mcp feedparser pyyaml httpx
feeds.yaml format errors:
- Use direct list format (start with
-
) - No
feeds:
wrapper needed - Ensure proper YAML syntax
File permission errors:
- Ensure write permissions for
state.json
- Check directory permissions
Debug Steps
- Test locally:
python main.py
- Check dependencies:
pip list | grep -E "(mcp|feedparser|pyyaml|httpx)"
- Validate config: Check Claude Desktop logs
- Verify feeds: Test feed URLs in browser
๐งช Development
Running Tests
# Test RSS feed processing
python -c "from processor import RSSProcessor; import asyncio; asyncio.run(RSSProcessor().initialize())"
# Test state management
python -c "from state import StateManager; sm = StateManager(); print('State manager working')"
Adding New Feeds
- Add feed URL to
feeds.yaml
- Configure appropriate tags
- Restart the MCP server
- Update feeds: "Update my RSS feeds"
Debugging
Enable debug output by modifying main.py
:
import sys
print("Debug info", file=sys.stderr)
๐ Performance
- Feed Updates: ~2-5 seconds for 3-5 feeds
- Article Search: <1 second for typical queries
- State Persistence: Automatic on read/unread changes
- Memory Usage: ~10-20MB typical operation
๐ค Contributing
- Fork the repository
- Create a feature branch
- Make changes with tests
- Submit a pull request
๐ License
MIT License - see LICENSE file for details
๐ Support
- Issues: Create GitHub issue with logs
- Questions: Tag @anil.goparaju
- Documentation: See Google Drive docs
๐ฏ Use Cases
Daily News Briefing:
"Update feeds and show me unread articles about GPS jamming and spoofing"
Research Assistance:
"Search for articles about LEO PNT systems published this week"
Competitive Intelligence:
"Find articles mentioning TrustPoint or military navigation systems"
Content Curation:
"Show me all unread articles, then mark the first 10 as read"
๐ Sample Output
When you search for "GPS jamming", you get structured results:
{
"count": 3,
"articles": [
{
"id": "251bc714...",
"title": "U.S. Army Taking a Layered Approach to PNT",
"link": "https://insidegnss.com/...",
"published": "2025-06-03T16:58:20",
"author": "Renee Knight",
"feed_tags": ["C-band", "TrustPoint", "GPSIA", "LEO", "PNT"],
"content": "...anti-jamming capabilities..."
}
]
}
Last Updated: June 5, 2025
Status: โ
Production Ready