mcp-feed-reader-crunchtools
# mcp-feed-reader-crunchtools
Secure MCP server for RSS/Atom feed reading with SQLite backend.
<!-- mcp-name: io.github.crunchtools/feed-reader -->
## Installation
### uvx (recommended)
```bash
uvx mcp-feed-reader-crunchtools
```
### pip
```bash
pip install mcp-feed-reader-crunchtools
```
### Container
```bash
podman run -v feedreader-data:/data quay.io/crunchtools/mcp-feed-reader
```
## Configuration
| Variable | Default | Description |
|----------|---------|-------------|
| `FEED_READER_DB` | `~/.local/share/mcp-feed-reader/feeds.db` | SQLite database path |
## Tools (17)
### Feed Management
- `add_feed_tool` — Add an RSS/Atom feed by URL
- `list_feeds_tool` — List all feeds with unread counts
- `get_feed_tool` — Get feed details
- `delete_feed_tool` — Remove a feed
- `refresh_feeds_tool` — Crawl feed sources for new content (slow, prefer systemd timer)
### Entry Management
- `list_entries_tool` — List entries (filterable, paginated)
- `read_entry_tool` — Read full entry content (auto-marks read)
- `mark_read_tool` — Mark entries as read
- `mark_unread_tool` — Mark entry as unread
- `search_entries_tool` — Full-text search (FTS5)
### Category Management
- `list_categories_tool` — List categories with counts
- `create_category_tool` — Create category
- `rename_category_tool` — Rename category
- `delete_category_tool` — Delete category
### Import/Export
- `import_opml_tool` — Import from OPML file
- `export_opml_tool` — Export as OPML
- `get_stats_tool` — Dashboard stats
## Background Fetching
```bash
# Fetch all feeds via CLI
mcp-feed-reader-crunchtools --fetch
```
## License
AGPL-3.0-or-later
TDQS
Scored across 17 tools
Each tool targets a distinct resource and action: feed CRUD, entry listing/reading/searching, read-state toggles, category management, stats, and OPML import/export. The only minor overlap is read_entry_tool auto-marking entries as read, but its primary purpose (content retrieval) is clearly distinct from mark_read_tool's explicit state change. No two tools are confusable.
All 17 tools use consistent snake_case with a uniform verb_noun_tool pattern (e.g., add_feed_tool, delete_category_tool, list_entries_tool). The redundant '_tool' suffix is applied uniformly, so there is no mixing of conventions. The pattern is entirely predictable.
17 tools is slightly above the typical 3-15 sweet spot, but each tool serves a clear purpose in a full-featured feed reader: feed management, entry handling, category CRUD, stats, and OPML support. The set feels well-scoped rather than bloated.
The surface covers most feed-reader workflows: add/delete/list/get feeds, refresh, entry listing/reading/searching, read-state toggles, category CRUD, stats, and OPML import/export. The notable gap is an update_feed operation (e.g., changing URL, title, or category assignment); workarounds exist (delete and re-add) but lose state. This is a minor gap rather than a critical failure.