LABSCO SUMMARY
The quality tier is what stops this becoming another unread pile.
Every article gets a tier and a numeric value score, and the minimum tier is a config setting — so the digest is filtered before you ever see it, rather than after. Two things to plan for: summarisation runs through OpenRouter, so ingestion has a real per-run cost (which the tool tracks), and the MCP service is a set of HTTP endpoints, so --stdio is the mode to use when a desktop client should spawn it.
What it is
A pipeline between RSS feeds and an Obsidian vault, with an MCP service on top. It imports subscriptions from OPML, fetches new articles, stores them in SQLite with vector embeddings in an Annoy index, sends them through OpenRouter for summaries and a quality assessment, and writes digest notes into your vault. The MCP service exposes that corpus so an assistant can search and read it.
What you get
- Subscriptions imported and exported as OPML, added individually from the command line, and muted or unmuted so a noisy feed is skipped during ingestion
- Article content stored in SQLite with embeddings in an Annoy vector index, so search finds meaning rather than exact words
- Quality assessment per article: an S/A/B/C/D tier and a 1-100 value score, with a configurable minimum tier so low-value content never reaches the digest
- Digest notes generated into your Obsidian vault, collapsing overlapping stories and organised by quality tier, with feed statistics included
- Natural-language semantic search with a tunable relevance threshold, results grouped by feed with excerpts
- An MCP service with endpoints for search, articles, subscriptions, digest and feed statistics —
GET /mcp/search,GET /mcp/articles,GET /mcp/articles/:id/content,GET /mcp/subscriptions,GET /mcp/digest,GET /mcp/feed-stats,POST /mcp/query - A backup system with automatic date stamping and a restore that shows the size and time difference and requires explicit confirmation
- Cost tracking for every AI API call
Requirements
OpenRouter API access — the key goes in the [openrouter] section of ~/.config/rssidian/config.toml or in RSSIDIAN_OPENROUTER_API_KEY. Python 3.9+, an OPML file of your subscriptions, and an Obsidian vault if you want the digest notes; the vault is optional. Install into a virtual environment with uv pip install -e . or plain pip, then run rssidian init to write the config. rssidian mcp --stdio is the mode Claude Desktop spawns directly; rssidian mcp --port 8080 runs it as a separate HTTP service instead. Ingestion defaults to the last 7 days and --lookback widens it. The published project is rssidian 1.2.
Setup effort
Build from source — git clone https://github.com/pedramamini/rssidian.git
USE CASES
01
Reading a week of feeds in one sitting
Ingest the lookback window and let the digest collapse overlapping stories and order what is left by quality tier.
02
Finding an article you half remember
Search semantically with a relevance threshold and get matches grouped by feed with excerpts, instead of scrolling a reader.
03
Asking an assistant about your own reading
Point the client at the stdio MCP mode so it can search articles, read full content and pull feed statistics from your corpus.
04
Cutting a feed that stopped being worth it
Check the per-feed article counts and quality ratings, then mute the feed so ingestion skips it without losing the archive.
BEFORE YOU INSTALL
What to know first
Requires
- Python 3.9+
- RSSIDIAN_OPENROUTER_API_KEY in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
This one is built from source rather than installed with a single command.
Server setup
TERMINAL
# Clone the repository
git clone https://github.com/pedramamini/rssidian.git
cd rssidian
# Create and activate virtual environment using uv
uv venv
source .venv/bin/activate
# Install dependencies
uv pip install hatch
uv pip install -e .
# Or if you prefer using regular pip
python -m venv .venv
source .venv/bin/activate
pip install hatch
pip install -e .MCP Clients
Claude Desktop — stdio
CLAUDE DESKTOP — STDIO · JSON
{
"globalShortcut": "Shift+Space",
"mcpServers": {
"rssidian": {
"command": "<YOUR_PATH_TO_PYTHON>",
"args": [
"-m",
"rssidian",
"mcp",
"--stdio"
]
}
}
}Put your OpenRouter key in ~/.config/rssidian/config.toml (rssidian init creates it) as api_key under [openrouter], or set the RSSIDIAN_OPENROUTER_API_KEY environment variable instead.