rss-mcp
# RSS MCP
An MCP server that provides RSS feed tools for Claude Desktop. Fetches and parses RSS feeds, returning structured article data.
## Requirements
- Python 3.13+
- [uv](https://docs.astral.sh/uv/) - Install with:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
## Installation
```bash
git clone https://github.com/YOUR_USERNAME/rss-mcp.git
cd rss-mcp
uv sync
```
## Claude Desktop Configuration
Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
```json
{
"mcpServers": {
"rss-mcp": {
"command": "uv",
"args": ["run", "--directory", "/path/to/rss-mcp", "python", "main.py"]
}
}
}
```
Replace `/path/to/rss-mcp` with the actual path to your cloned repository.
## Configuration
Edit `feeds.json` to customize feeds and filtering:
```json
{
"feeds": {
"tech": {
"url": "https://hnrss.org/newest",
"description": "Tech news from Hacker News",
"limit": 20
},
"news": {
"url": "https://www.wyff4.com/topstories-rss",
"description": "Local and national news"
}
},
"blocklist": ["crypto", "nft", "sponsored"]
}
```
- **feeds**: Named feeds that become tools (e.g., `get_tech_feed`, `get_news_feed`)
- `url`: RSS feed URL (required)
- `description`: Tool description shown in Claude (optional)
- `limit`: Max entries to return (optional)
- **blocklist**: Topics to filter out - passed to Claude for semantic filtering (e.g., "animals" filters out dog/cat/wildlife stories)
**Note:** Restart Claude Desktop after editing `feeds.json` for changes to take effect.
## Available Tools
- **fetch_rss(url, limit)** - Fetch any RSS feed by URL
- **get_{name}_feed** - One tool per configured feed in `feeds.json`
## Development
```bash
# Run the server directly
uv run python main.py
# Debug with MCP inspector
uv run mcp dev main.py
# Lint
uv run ruff check .
# Type check
uv run ty check
```
## License
MIT
TDQS
Scored across 6 tools
There is overlap between tech feeds (get_tech_feed, get_arstechnica_feed) and science feeds (get_science_feed, get_physics_feed), which could cause misselection. fetch_rss is distinct as a generic fetcher, but the specific feeds have blurred boundaries.
Most tools use a get_<descriptor>_feed pattern, but fetch_rss deviates with a different verb and no '_feed' suffix. This is a minor inconsistency in an otherwise predictable naming scheme.
Six tools is well-scoped for an RSS server. The generic fetch_rss plus specific curated feeds provides a balanced set without unnecessary bloat.
fetch_rss can retrieve any RSS feed, providing full coverage. The specific feed tools are convenience wrappers, so there are no obvious gaps in the server's functionality.