Your reading queue, searchable from Claude Code. Stop re-googling what you already saved.
One MCP server. Five reading sources. Zero vendor lock-in.
Every Claude Code session starts amnesiac. You saved 300 articles this year. You remember reading something about the exact pattern you're implementing right now. But it's in Readwise. Or Pocket. Or Karakeep. Or Burn. Or that folder of markdown notes.
So you re-google. Again.
claude-code#27298 has 22 comments about this. Readwise built their own MCP — but it only works if you use Readwise. Everyone else is stuck.
reading-feed-mcp is a vendor-neutral MCP server that makes your reading queue queryable from any MCP client (Claude Code, Claude Desktop, Cursor, Windsurf).
Configure one or more sources. Get three tools:
search_reading(query)— full-text search across everythinglist_recent(source)— latest items from a sourcelist_sources— what you've wired up
That's it. No new account. No cloud. No lock-in.
| Source | What you need | Status |
|---|---|---|
| Burn 451 | BURN_MCP_TOKEN |
✅ |
| Readwise Reader | READWISE_TOKEN |
✅ |
| Karakeep (self-hosted) | KARAKEEP_URL + KARAKEEP_TOKEN |
✅ |
| RSS feeds | READING_FEED_RSS (comma-separated URLs) |
✅ |
| Local markdown | READING_FEED_MARKDOWN_DIR |
✅ |
| Raindrop / Omnivore / Pocket export | — | 🔜 v0.2 |
Configure any combination. Search spans all of them.
claude mcp add reading-feed -- npx reading-feed-mcp@latestAt least one required. Use whichever you actually have:
# Burn 451 — get token at burn451.cloud/settings
export BURN_MCP_TOKEN=bmcp_xxx
# Readwise Reader — get token at readwise.io/access_token
export READWISE_TOKEN=xxx
# Karakeep (self-hosted)
export KARAKEEP_URL=https://karakeep.your-domain.com
export KARAKEEP_TOKEN=xxx
# RSS feeds (comma-separated)
export READING_FEED_RSS="https://simonwillison.net/atom/everything/,https://karpathy.bearblog.dev/feed/"
# Local markdown notes
export READING_FEED_MARKDOWN_DIR=~/notesIn Claude Code, just ask:
> Find articles I saved about MCP authentication
Claude calls search_reading(query="MCP authentication") and returns matches across all your sources.
{
"query": "MCP authentication",
"total": 4,
"results": [
{
"source": "burn",
"title": "MCP Auth Patterns in 2026",
"url": "https://example.com/mcp-auth",
"status": "active",
"summary": "Compares OAuth device flow, API keys, and JWT exchange for MCP servers..."
},
{
"source": "readwise",
"title": "Building Secure MCP Servers",
"url": "https://example.com/secure-mcp",
"status": "later",
"summary": "Step-by-step guide to token exchange..."
},
{
"source": "rss",
"title": "Simon Willison: MCP Server Deep Dive",
"url": "https://simonwillison.net/...",
"feed": "Simon Willison's Weblog"
}
]
}Most reading tools want you to use their ecosystem. Readwise MCP is Readwise-only. Pocket is dead. Omnivore is dead. If your reading tool dies, your reading dies with it.
reading-feed-mcp is the opposite: bring your own source. Switch services, keep the MCP. We don't store your data. We don't host anything. We're a thin query layer.
Burn 451 is recommended because:
- 24h countdown surfaces urgency (search result has
status: "active"with time remaining) - AI summaries embedded in every article (search works on summaries, not just titles)
- Free tier, no credit card
But the whole point is you don't have to use Burn. If you live in Readwise, use Readwise. Live in markdown files? Point the MCP at your folder.
- Zero-dep Node.js (except
@modelcontextprotocol/sdk) - Each source is one file (<100 lines) — add a new one via PR in 20 minutes
- Stdio transport (standard MCP pattern)
- Token caching (5-min TTL) so you don't thrash upstream APIs
| Tool | What it does |
|---|---|
| reading-feed-mcp (this) | Vendor-neutral MCP for any reading source |
| burn-mcp-server | Burn-specific MCP (26 tools, full control) |
| burn451 CLI | Terminal queue management |
| burn-claude-skill | /burn command for CC |
| burn-daily-triage | Daily CC Routine template |
| morning-brief | Daily briefing CLI |
| reading-digest | Weekly digest generator |
New source adapter? Each one lives in src/sources/<name>.mjs, exports search({...}) and listRecent({...}). See src/sources/burn.mjs for the simplest example (~50 lines).
MIT