Show HN: Antenna – 内置 MCP 服务器的 RSS 阅读器
摘要
Antenna 是一款本地优先的 RSS 阅读器,使用 SQLite 存储订阅源,并通过邮件摘要和面向 AI 代理的 MCP 服务器提供内容,完全基于 MIT 许可证开源。
暂无内容
查看缓存全文
缓存时间: 2026/04/21 13:25
# Antenna — 一次订阅,邮件或 MCP 随时阅读
来源:https://antennafeed.com/
本地优先 · MIT 许可证 · 为代理而生
Antenna 把订阅的 RSS 存进本地 SQLite 索引,新文章既推送到邮箱,也通过 MCP 协议喂给 AI 代理,全部基于同一份数据。没有厂商云,没有黑箱锁定,你的订阅图谱就是一个你完全掌控的文件。
v0.1.0 · 第 0 阶段(个人、本地)· Python 3.12+ · macOS / Linux
## 你的订阅被困在代理查不到的 UI 里
### RSS 转邮件已变味
老牌服务逐渐塞进广告、老旧排版、强制追踪、不透明投递规则,代价是你的收件箱。
### 代理读不到你的阅读列表
订阅图谱被锁在别人的网页后台里,代理无法搜索、聚类、替你总结。
### 数据并不属于你
导出只是摆设,你的注意力图谱随厂商易主而转手。
## 一份订阅图谱,两种原生输出
### 邮件
干净的一篇或摘要式 HTML,走你自己的 SMTP(Amazon SES、Postmark、Gmail 应用密码随你挑)。没有第三方窥探订阅列表。
- 单篇 *或* 摘要模式,每次运行可切换
- 规则引擎:包含 / 排除 / 立即提醒
- 按 feed 稳定 ID 去重,轮询不再重复
- 条件 GET 带 ETag 与 Last-Modified,没更新就不拉新内容
- 相对 URL 改绝对;YouTube 短码还原成邮件安全缩略图
- dry-run 先写 HTML 预览到 outbox,确认无误再走 SMTP
### MCP(代理协议)
Antenna 通过 stdio 讲 MCP,服务器一启动就暴露 6 个工具,任何 MCP 客户端都能调用。
- `list_sources` 给出每个源的 `last_polled_at` 与 `last_error`,代理可判断源是否健康
- `subscribe` 立即抓取验证 URL 并返回文章数,代理可知源是否存活
- `search_posts` 返回 FTS5 高亮片段;`get_post` 按需给出完整 HTML 与纯文本
- `recent_posts` · `unsubscribe` 补齐操作面
- 全部基于同一份 SQLite 索引,与邮件端共享
> “用 antenna 工具搜过去 7 天带 *robotics* 标签且提到 *Gemini* 的文章,把最有趣的三篇摘要给我。”——一条代理提示,直接跑通,因为订阅就是你能查的数据。
## 装包、导 OPML、用自己的 SQLite 开始轮询
1. ### 安装
```bash
python3 -m venv ~/antenna/.venv
source ~/antenna/.venv/bin/activate
pip install -e .
```
2. ### 迁移订阅
```bash
antenna import-opml ~/Downloads/feedly.opml
antenna -v fetch
```
Blogtrottr、Feedly、Inoreader——无论你现在用哪家,导出 OPML 一行命令迁完。首次抓取会限制条目数,防止被历史文章淹没。
3. ### 把新文章邮给自己
```bash
antenna send-email --mode per_post --dry-run # 仅预览到 outbox/
antenna send-email --mode per_post # 真发
```
4. ### 接入代理
```json
// Claude Desktop MCP 配置片段
// 把 /Users/YOU 换成真实家目录
{
"mcpServers": {
"antenna": {
"command": "/Users/YOU/antenna/.venv/bin/python",
"args": ["-m", "antenna.cli", "serve-mcp"],
"env": {"ANTENNA_CONFIG": "/Users/YOU/antenna/antenna.yaml"}
}
}
}
```
5. ### 定时运行
```bash
launchctl load ~/Library/LaunchAgents/com.antenna.fetch.plist
```
每 15 分钟轮询一次,只发真正新的文章。日志写在 `~/antenna/logs/`。
## 获取代码
第 0 阶段以源码包形式向早期测试者开放。完整安装指南、配置参考、冒烟脚本都在仓库 README——登记后会镜像到下方。上面五步快速上手(https://antennafeed.com/#how)就是 README 开篇同款。
- **运行环境:** Python 3.12+,无守护进程,无需服务账户
- **存储:** SQLite 数据库(WAL 模式,备份时把 `antenna.db` 连同 `antenna.db-wal`/`antenna.db-shm` 一起拷走即可)
- **邮件:** 标准库 SMTP over TLS,支持 SES、Postmark、Gmail 应用密码
- **调度:** 已带 launchd 模板;cron 亦可
- **验证:** `bash scripts/smoke_test.sh` 会跑通所有 CLI 路径并做一次真实 MCP 握手
[申请获取源码包](https://antennafeed.com/#waitlist)
## 原生为代理设计,而非事后打补丁
别的阅读器加个 API 就完事;Antenna 的整个数据模型就是为了被软件查询——人类和代理读的是同一份 SQLite。
### 单一真实来源
收件箱和代理查*同一张表*。无同步延迟,无分叉索引,不会出现“代理怎么没看到我刚读的文章?”
### FTS5 就是 API
每篇文章写入即进 SQLite FTS5 虚拟表,布尔、短语、前缀搜索白送,`search_posts` 直接返回高亮片段。
### 稳定 ID,诚实去重
按 feed 提供的稳定 entry ID 去重,而非漂移的 URL 哈希。代理重复搜索拿到的是同一行,不会重复。
### 今天 MCP,明天 HTTP
v0.1 先上 stdio MCP;第 1 阶段开放托管,届时提供 HTTP 接口,工具集不变。
## 公开路线图
今天 —— 第 0 阶段
### 个人、本地、完全属于你
- 10 个 CLI 子命令;6 个 MCP 工具走 stdio
- 仅支持邮件 + MCP 两种输出
- 单用户安装,无认证,无网页 UI
- MIT 许可证;仓库按申请向早期测试者开放
下一步 —— 第 0.5 阶段
### 更锋利的原语
- Webhook 输出适配器
- 按源规则 UI(告别 YAML 手写规则)
- 提醒节流
稍后 —— 第 1 阶段
### 托管、多用户
- antennafeed.com 托管服务
- OAuth + 共享 OPML 导入
- HTTP MCP 接口,工具不变
## 申请加入
第 0 阶段向少量早期测试者开放。第 1 阶段托管服务将分批开放。留下邮箱即可收到安装包与对应阅读器(Blogtrottr、Feedly、Inoreader)的迁移笔记。
我们仅在 DynamoDB 存储你的邮箱、来源 IP、User-Agent 以及浏览器带来的 `utm_source`、`utm_medium`、`utm_campaign` 和 referrer,然后手动回复一次。无后续邮件序列,无第三方追踪。详见[隐私说明](https://antennafeed.com/privacy.html)。
相似文章
Show HN: Inkwell – 电子墨水屏设备的RSS阅读器
Inkwell 是一个自托管的 RSS/Atom 阅读器,它将文章以静态 HTML 形式呈现,针对 Kindle 等电子墨水屏设备的内置浏览器进行优化,并通过后台预处理实现快速加载。
自托管MCP用于AI引用追踪——无需后端,无需注册,自带密钥
一个自托管、开源的MCP服务器,用于AI引用追踪,完全运行在用户机器上,支持离线工具和直接API调用,无需后端或遥测。
构建了一个用于多渠道内容发布的MCP服务器——设计上具有幂等性,并在进行任何API调用前对Reddit进行预检
一个新的多渠道内容发布MCP服务器确保了幂等操作,并包含Reddit预检,使得跨8个平台的可靠智能体驱动发布成为可能。
现代 feed 阅读器(2024)
作者分析了 RSS 源因抓取和干扰而衰退的问题,认为现代 Feed 阅读器必须整合替代的聚合方式才能保持相关性。
现在AI代理需要RSS的功能
长期用于播客的RSS订阅源,正变得对AI代理至关重要——它们需要确定性的、结构化的内容访问,且不受算法干预或速率限制。