Cached at:
04/21/26, 01:25 PM
# Antenna — subscribe once, read by email or over MCP
Source: [https://antennafeed.com/](https://antennafeed.com/)
Local\-first · MIT licensed · agent\-ready
Antenna stores your feed subscriptions in one local SQLite index, then routes new posts to email and to AI agents over MCP from the same data\. No vendor cloud\. No proprietary lock\-in\. Your subscription graph lives in a file you control\.
v0\.1\.0 · Phase 0 \(personal, local\) · Python 3\.12\+ · macOS / Linux
## Your subscriptions live in a UI your agent can't query\.
### RSS\-to\-email went stale\.
The incumbents drift into ads, dated layouts, forced tracking, and opaque delivery rules\. You pay with your inbox\.
### Agents can't read your reading list\.
Your subscription graph is trapped behind someone else's web UI\. Your agent can't search it, cluster it, or summarize it on your behalf\.
### Your data isn't yours\.
Export is an afterthought\. Your attention graph ships to whichever vendor bought the last one\.
## One subscription graph\. Two first\-class outputs\.
### Email
Clean per\-post or digest HTML\. Sent via your own SMTP \(Amazon SES, Postmark, Gmail app password — your call\)\. No third party reads your subscriptions\.
- Per\-post*or*digest mode, toggleable per run
- Rule engine: include / exclude /alertfor immediate promotion
- Deduplication across polls by the feed's stable entry ID
- Conditional GET with ETag and Last\-Modified — feeds don't re\-ship content that hasn't changed
- Relative URLs rewritten to absolute; YouTube shortcodes recovered as email\-safe thumbnail links
- Dry\-run writes an HTML preview to an outbox for QA before anything leaves SMTP
### MCP \(agent protocol\)
Antenna speaks MCP over stdio\. Six tools the moment you flip the server on — any MCP client can call them\.
- list\_sourcessurfaces each feed'slast\_polled\_atandlast\_errorso agents can reason about feed health
- subscribevalidates the URL with an immediate fetch and returns the post count so the agent knows the feed is live
- search\_postsreturns FTS5\-highlighted snippets;get\_postreturns the full HTML plus plain\-text on demand
- recent\_posts·unsubscriberound out the surface
- Backed by the same SQLite index your email uses
> “Using the antenna tools, search for everything from the last 7 days tagged*robotics*that mentions*Gemini*, and summarize the three most interesting ones\.” — an agent prompt that just works, because your subscriptions are data you control
## Install the package, import OPML, start polling from your own SQLite\.
1. ### Install ``` python3 -m venv ~/antenna/.venv source ~/antenna/.venv/bin/activate pip install -e . ```
2. ### Migrate your feeds ``` antenna import-opml ~/Downloads/feedly.opml antenna -v fetch ``` Blogtrottr, Feedly, Inoreader — whichever reader you're leaving, export OPML and walk it over in one command\. First\-run entry cap keeps you from getting flooded by the backlog\.
3. ### Email yourself what's new ``` antenna send-email --mode per_post --dry-run # preview to outbox/ antenna send-email --mode per_post # real ```
4. ### Plug into your agent ``` // Claude Desktop MCP config fragment // Substitute /Users/YOU with your actual home directory. { "mcpServers": { "antenna": { "command": "/Users/YOU/antenna/.venv/bin/python", "args": ["-m", "antenna.cli", "serve-mcp"], "env": {"ANTENNA_CONFIG": "/Users/YOU/antenna/antenna.yaml"} }}} ```
5. ### Schedule it ``` launchctl load ~/Library/LaunchAgents/com.antenna.fetch.plist ``` Polls every 15 minutes\. Emails only truly\-new posts\. Logs to`~/antenna/logs/`\.
## Get the code
Phase 0 ships as a source tarball to early testers\. The full install guide, config reference, and smoke\-test script live in the repo README — mirrored below once you're on the list\. The[five\-step primer above](https://antennafeed.com/#how)is the same one the README opens with\.
- **Runtime:**Python 3\.12\+, no daemon, no service account
- **Storage:**a SQLite database \(WAL mode, so you back up`antenna\.db`together with any`antenna\.db\-wal`/`antenna\.db\-shm`sidecars\)
- **Email:**stdlib SMTP over TLS — works with SES, Postmark, Gmail app passwords
- **Schedule:**launchd template shipped; cron works too
- **Verify:**`bash scripts/smoke\_test\.sh`drives every CLI path plus a real MCP handshake
[Request access to the tarball](https://antennafeed.com/#waitlist)
## Built agent\-first, not agent\-last\.
Other readers bolt on an API and call it a day\. Antenna's entire data model exists to be queried by software — humans and agents both read from the same SQLite\.
### Single source of truth
Your inbox and your agent query the*same*table\. No sync lag, no divergent indexes, no "why didn't the agent see the post I just read?"
### FTS5 is the API
Every post hits a SQLite FTS5 virtual table on write\. Boolean, phrase, and prefix search come free — and`search\_posts`returns highlighted snippets out of the box\.
### Stable IDs, honest dedup
Deduplication is by the feed's stable entry ID, not by URL hashes that drift\. An agent searching twice gets the same row, not two\.
### MCP today\. HTTP next\.
Stdio MCP ships in v0\.1\. An HTTP surface lands when Phase 1 opens; same tools, hosted for you\.
## Honest roadmap
Today — Phase 0
### Personal, local, yours\.
- Ten CLI subcommands; six MCP tools over stdio
- Email \+ MCP are the only outputs
- Single user per install; no auth, no web UI
- MIT licensed; repo shared with early testers on request
Next — Phase 0\.5
### Sharper primitives\.
- Webhook output adapter
- Per\-feed rule UI \(no more YAML for rules\)
- Alert throttling
Later — Phase 1
### Hosted, multi\-user\.
- antennafeed\.com hosted service
- OAuth \+ shared OPML import
- HTTP MCP surface, same tools
## Request access\.
Phase 0 ships to a small list of early testers\. Phase 1 hosted opens in cohorts\. Drop your email and you'll get the install bundle plus setup notes for your current reader \(Blogtrottr, Feedly, Inoreader\)\.
We store your email, source IP, user\-agent, plus any`utm\_source`,`utm\_medium`,`utm\_campaign`, and referrer from your browser in DynamoDB, then send a single manual reply\. No drip sequence, no third\-party trackers\. See our[privacy notes](https://antennafeed.com/privacy.html)\.