展示HN:Antenna – 内置MCP服务器的RSS阅读器
Show HN: Antenna – RSS reader with a built-in MCP server

原始链接: https://antennafeed.com/

## 天线:本地优先的RSS订阅阅读器 天线是一个新的、MIT许可的RSS订阅阅读器,专为个人使用和与AI代理集成而设计。与现有解决方案不同,它将您的订阅存储在本地SQLite数据库中,让*您*掌控数据——无需云厂商锁定。 天线通过您自己的SMTP将新文章直接发送到您的电子邮件(可自定义为每篇文章或摘要),并通过MCP协议为AI代理提供对相同数据的访问。主要功能包括强大的订阅源轮询,具有去重、URL重写功能,以及利用SQLite的FTS5的强大搜索功能。 目前处于第0阶段(个人、本地使用,适用于macOS/Linux上的Python 3.12+),天线为代理提供了六种工具来管理订阅源:列出源、订阅、搜索文章、检索文章、访问最近的文章和取消订阅。未来的阶段计划添加Webhook输出、规则的用户界面以及托管的多用户服务。 首先从现有的阅读器(如Feedly)导出您的OPML文件,并将其导入到天线中。它从一开始就以代理为中心,优先考虑软件的数据可访问性,确保人类和AI消费的单一数据源。

Hacker News新 | 过去 | 评论 | 提问 | 展示 | 工作 | 提交登录展示 HN: Antenna – 内置 MCP 服务器的 RSS 阅读器 (antennafeed.com)6 分,由 toddllm 37 分钟前发布 | 隐藏 | 过去 | 收藏 | 2 条评论帮助 Pay08 11 分钟前 | 下一个 [–] 为什么?这个有什么用例?回复turbocon 18 分钟前 | 上一个 [–] 非常有趣的时机,我今天刚让我的 Nanoclaw 实例重新整理 FreshRSS 实例中的订阅源。不过我必须说它做得完美,我只需要提供一个 API 密钥,所以我不明白这里有什么好处?抱歉我知道这通常是 HN 的想法,但我的意思是我想知道是否有我遗漏的卖点。回复 考虑申请 YC 2026 年夏季批次!申请截止至 5 月 4 日 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系方式 搜索:
相关文章

原文

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 / alert for 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_sources surfaces each feed's last_polled_at and last_error so agents can reason about feed health
  • subscribe validates the URL with an immediate fetch and returns the post count so the agent knows the feed is live
  • search_posts returns FTS5-highlighted snippets; get_post returns the full HTML plus plain-text on demand
  • recent_posts · unsubscribe round 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 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

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.

联系我们 contact @ memedata.com