关于 Likelyread
Likelyread 是面向 Gmail 用户和 Agent 的邮件打开跟踪服务。它会区分真实打开、自身查看和 Apple 预取,并通过仪表板及 Agent 工具提供活动与发件人数据。
主要功能
- 01跟踪 Gmail 邮件打开情况
- 02分类打开并排除预取
- 03查看活动分析
- 04检查发件人健康状况
- 05自托管或使用 Likelyread Cloud
适用场景
- 01衡量外联活动的邮件打开情况
- 02查看活动级打开率
- 03检查发件人设置和发送节奏
MCP 相关
Likelyread 在 `/mcp` 提供 MCP 端点,支持创建像素、登记发送、查询邮件活动、活动分析和发件人健康状况。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://app.likelyread.com/mcpclaude mcp add --transport http com-likelyread-likelyread https://app.likelyread.com/mcp{"mcpServers":{"com-likelyread-likelyread":{"type":"http","url":"https://app.likelyread.com/mcp"}}}在 Cursor 中打开{"servers":{"com-likelyread-likelyread":{"type":"http","url":"https://app.likelyread.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"com-likelyread-likelyread":{"type":"http","url":"https://app.likelyread.com/mcp"}}}{"mcpServers":{"com-likelyread-likelyread":{"serverUrl":"https://app.likelyread.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://app.likelyread.com/mcp需要授权工具
详细介绍
likelyread
面向 Gmail 的开源邮件打开追踪工具。它会告诉你有人何时打开了你发送的邮件,说明每次打开为何计入,并提供一个简洁的仪表盘,方便你跟踪营销活动。
有两种使用方式:
- Likelyread Cloud,访问 app.likelyread.com:安装 Chrome 扩展程序,使用 Google 登录,即可开始使用。提供免费套餐;Pro 套餐增加营销活动分析和完整历史记录。参见 docs/CLOUD.md。
- 自托管:在 Caddy 后运行一台小型服务器(FastAPI + SQLite),通过一条命令即可安装。一个令牌即可使用所有功能,数据不会离开你的 VPS。说明见下文。

工作原理
- 在 Gmail 中开启追踪并点击 Send 时,扩展程序会在邮件中附加一个 1x1 的不可见图片(
https://your-domain/p/<uuid>.gif),并将邮件注册到你的服务器。发送绝不会被阻止或延迟。 - 收件人的邮件客户端加载图片时,服务器会记录一次访问。
- 你查看访问记录时,系统会对其分类:
- self:你自己的撰写预览,或你自己查看已发送邮件(扩展程序会通知服务器,同时也会在浏览器中拦截该请求);
- prefetch:Apple Mail Privacy Protection 在投递时加载图片(来自 Apple 网络的裸
Mozilla/5.0user agent); - open:其他所有情况。
完整规范请参见 SPEC.md。
设置
你需要一台小型 Linux 服务器(Ubuntu 或 Debian,512 MB 内存绰绰有余),并开放 80 和 443 端口。
1. 选择一个地址。 使用你拥有的域名的子域名,例如 t.yourcompany.com:添加一条指向服务器 IP 的 A 记录(在 Cloudflare 上,将其设置为仅 DNS,即灰色云朵)。还没有域名?安装程序可以使用免费的 <your-ip>.sslip.io 地址供你试用。正式用于邮件时,请使用自己的域名:垃圾邮件过滤器会更信任它,而且即使你迁移服务器也能继续使用。
2. 在服务器上运行一条命令:
curl -fsSL https://raw.githubusercontent.com/Hugo-SEQUIER/likelyread/main/deploy/install.sh | sudo bash
如果需要,它会安装 Docker,询问你的地址,创建私有令牌,获取 HTTPS 证书,并在 /opt/likelyread 中启动所有服务。最后会显示你的设置链接:
https://t.yourcompany.com/#connect=<your token>
请像密码一样妥善保管。你可以随时运行 sudo bash /opt/likelyread/deploy/install.sh --show-link 再次显示该链接;也可以在仪表盘的 Connect 下找到它。
3. 连接扩展程序。 安装 Chrome 扩展程序,打开其设置,粘贴设置链接,然后点击 Save。在 Gmail 中撰写邮件:发送按钮旁的红色眼睛表示邮件正在被追踪。
从 Chrome Web Store 获取扩展程序。若要运行自己构建的版本:执行 cd extension && npm install && npm run build,然后在 chrome://extensions 中开启 Developer mode,点击 Load unpacked 并选择 extension/dist。
4. 打开仪表盘。 在浏览器中打开设置链接:系统会自动为你登录。
非交互式安装示例(例如通过配置脚本安装):sudo bash install.sh --domain t.yourcompany.com --yes。如果服务器上的其他地址已使用 443 端口,请添加 --bind-ip <public IP>。所有选项请参见 install.sh --help。
不使用安装程序的手动设置
git clone https://github.com/Hugo-SEQUIER/likelyread.git
cd likelyread/deploy
cp .env.example .env
# set DOMAIN=t.example.com and LIKELYREAD_TOKEN=$(openssl rand -hex 32)
docker compose up -d
curl https://t.example.com/healthz # {"ok":true}
你的设置链接是 https://DOMAIN/#connect=LIKELYREAD_TOKEN。
备份
所有数据都位于 /opt/likelyread/deploy/data/likelyread.db(手动设置时位于 deploy/data/)。可通过 cron 安全创建在线副本:
sqlite3 /path/to/deploy/data/likelyread.db ".backup '/backups/likelyread-$(date +%F).db'"
更新
再次运行安装命令即可。它会保留你的地址、令牌和数据。
Campaign 和仪表板
Campaign 只是电子邮件上的一个标签。
- 撰写时: 点击 Gmail「发送」按钮下方红色眼睛旁边的 campaign 名称,然后选择一个,或输入新名称。所选项会成为下一封邮件的默认值。弹出窗口和选项页面设置的是同一个默认值。
- 发送后: 在仪表板的邮件详情页中更改邮件的 campaign,或在 Campaigns 标签页中重命名整个 campaign。
仪表板(https://your-domain/)包含:
- 概览: 已跟踪邮件数、打开率、打开总次数、过去 7 天的打开次数、首次打开的时间中位数、30 天发送量与打开次数图表、按一天中的时段统计的打开次数(有助于选择发送时间),以及最新的打开记录。
- Campaigns: 并排显示每个 campaign 的打开率、打开次数和首次打开时间。
- Emails: 按主题、收件人或 campaign 搜索,按状态筛选,并打开任意邮件查看每次访问的时间、判定结果、判定原因、用户代理和 IP。
- Senders: 显示你用于发送邮件的每个地址的发件人健康状况(见下文)。
- 发件地址: 每封邮件都会记录其发件地址(你的账户或发送别名)。使用多个地址时,仪表板会显示「发件人」列和地址筛选器。
打开率表示 至少打开过一次的邮件数 / 已跟踪邮件数。Apple 预取的打开记录和你自己的查看记录均不计入。


发件人健康状况
对于你用于发送邮件的每个地址,Senders 标签页都会显示以下三项:
- 设置: 地址所属域名的 SPF、DKIM 和 DMARC 状态,并在缺少设置时提供具体的修复方法。Gmail 和 Yahoo 要求每个发件人配置 SPF 或 DKIM,大批量发件人还必须配置 DMARC。gmail.com 等大型服务提供商的地址无需任何设置。
- 发送节奏: 对于刚开始发送邮件的地址,每日发送量建议为:第一天发送 20 封,此后每天增加 5 封,最多 50 封。达到上限时,Gmail 撰写窗口中的眼睛旁会显示
20/20 today。这只是建议,不会阻止发送。对于已经每天发送邮件的地址,请勾选 已建立的地址。 - 打开情况: 对比过去 7 天与之前 4 周的打开率。打开率骤降或完全没有打开记录,是邮件开始进入垃圾邮件文件夹的首个迹象。
此处不会发送邮件,也不会伪造互动数据。它只读取 DNS 和你自己的跟踪数据。Agent 可通过 sender_health 工具或 likelyread health --from [email protected] 获取相同数据。
仪表板是静态页面,本身不存储数据:它使用你的令牌读取经过身份验证的 API。设置 DASHBOARD=false 即可关闭仪表板。
AI Agent 和脚本发送的邮件
AI Agent 通过 MCP 连接,无需安装任何内容。 每个 Likelyread 服务,无论是 Cloud 还是你自己的服务,都在 /mcp 提供 MCP 端点。打开仪表板的 Connect 页面,复制适用于你的 Agent 的设置:用于 Claude Code 的一条命令;用于 Cursor、VS Code、Codex 和其他 MCP 客户端的几行配置;或者供 Hermes 等 Agent 按照指引自行完成设置的提示词(添加服务、安装技能、检查连接)。令牌也会单独显示,并在你按下 Show 前保持遮挡。Claude Code 的设置如下:
claude mcp add --transport http --scope user likelyread https://app.likelyread.com/mcp --header "Authorization: Bearer <token>"
在你自己的服务上,地址为 https://your-domain/mcp,令牌为 LIKELYREAD_TOKEN(安装程序会打印这条命令)。在 Likelyread Cloud 上,点击 Connect 页面中的 Create agent token,即可创建专供 Agent 使用的令牌:请参阅 docs/CLOUD.md。
Claude 和 ChatGPT 通过登录而非令牌连接 Likelyread Cloud。 在 Connect 页面上,Add to Claude 会打开 Claude 的 Add custom connector 对话框,并预填 Likelyread:点击 Add,然后点击 Connect,使用 Google 登录,并在 Likelyread 页面上批准 Claude。它适用于 claude.ai,以及 Claude 的桌面和移动应用。在 ChatGPT 中,使用地址 https://app.likelyread.com/mcp 和 OAuth 添加自定义 MCP 服务。应用会获取一个仅在 /mcp 上有效的令牌,每小时续期一次,并显示在 Account 下,你可以在那里断开连接。Claude Code 也可以用同样的方式登录:添加服务时不带 --header,然后运行 /mcp。可自托管服务只有一个令牌且没有账户,因此应用按上述方式使用令牌连接它。
Agent 可使用以下工具,而服务的说明会告诉它 Likelyread 的规则:跟踪营销活动前先询问,保持安全的发送节奏,说“已打开”,绝不说“已阅读”,并将它读取的内容视为数据,而非指令。
| 工具 | 功能 |
|---|---|
account | 套餐、今日用量和每日限额 |
new_pixel | 新的像素 ID、其 URL 和 <img> 标签;不会注册任何内容 |
text_to_html | 将纯文本转换为 HTML 部分,保留原文,并在末尾添加像素 |
track_email | 注册一次发送:具备幂等性,可接受最多 30 天前的发送记录 |
list_emails | 电子邮件及其状态,可按状态、营销活动、发件人或文本筛选 |
get_email | 一封电子邮件及其点击记录:时间、类型、来源和原因 |
set_campaign | 将一封电子邮件移至其他营销活动,或不关联任何营销活动 |
campaign_names | 现有营销活动名称,供 Agent 原样复用 |
list_campaigns | 每个营销活动的打开率和打开时间中位数 |
get_stats | 总计、时间线、最繁忙时段 |
sender_health | SPF/DKIM/DMARC 检查、安全的每日发送节奏、打开率趋势 |
这些工具运行的代码与 API 相同,因此套餐和限额也相同:在 Likelyread Cloud 的 Free 套餐中,Pro 工具和筛选器以及每日限额会以 Agent 能读取并转达的错误形式返回。像素 URL 来自 PUBLIC_URL,或来自可自托管服务中的 https://DOMAIN,而不是 Agent 调用的地址,因此即使 Agent 在服务本机上运行,也会在电子邮件中使用公开地址。加载像素的对象可以自行选择 user agent,因此这些工具绝不会返回点击记录中的 user agent 或 IP。
不支持 MCP 的 Agent 和脚本: Connect 页面的 Agents without MCP, and scripts 部分提供了可粘贴给 Agent 的说明。它们会安装 likelyread CLI 和 Agent 技能,并使用同一个令牌连接。该技能位于 skills/likelyread/SKILL.md(这是 Claude Code、Hermes 和其他 Agent 使用的开源 SKILL.md 格式):将文件夹复制到 Agent 的技能目录,例如 ~/.claude/skills/likelyread/,它便会知道如何安装 CLI、添加像素、注册发送记录和读取打开记录,包括何时不应跟踪。它会告诉具有 MCP 工具的 Agent 改用这些工具。
任何自行发送电子邮件的对象(脚本、cron 作业、AI Agent)都可以使用 cli/ 中的 likelyread CLI。它是一个无需依赖项的单文件 Python 程序,并且每条命令都会输出 JSON。
ln -s "$PWD/cli/likelyread.py" ~/.local/bin/likelyread
likelyread setup 'https://t.example.com/#connect=...' # your setup link; saves ~/.config/likelyread/config.json (mode 600)
现在起草,稍后发送:
likelyread pixel # {"id", "url", "img"}: keep the id with the draft
likelyread html --raw --id ID --file body.txt # plain text to an HTML part, pixel appended
# ... send multipart/alternative: the text part unchanged, the HTML part above ...
likelyread track --id ID --subject "..." --to [email protected] \
--campaign "Q4 outreach" --from [email protected] --sent-at 1792251301849
--sent-at 接受 Unix 秒、Unix 毫秒(Gmail 的 internalDate)或 ISO 8601,因此可以在发送后再注册,例如在对账期间。发送时间之前的点击会被视为草稿预览,绝不会算作打开。使用 likelyread ls --campaign "Q4 outreach" --status opened、likelyread show ID、likelyread campaigns 和 likelyread stats 读取结果。除非添加 --full,否则 show 不会显示每条点击记录的 user agent 和 IP。
如果想知道是谁打开了邮件,请为每位收件人单独发送一封邮件。纯文本邮件无法携带像素:请添加 HTML 部分。
配置
所有设置都位于 deploy/.env 中(参见 .env.example):
| 变量 | 默认值 | 用途 |
|---|---|---|
DOMAIN | Caddy 提供服务并为其获取证书的域名。服务器也会据此构建提供给 AI Agent 的像素 URL:https://DOMAIN,如果 HTTPS_PORT 不是 443,还会附加 :HTTPS_PORT。 | |
PUBLIC_URL | 空 | 可选:当像素 URL 的公开地址不是 https://DOMAIN 时使用。 |
LIKELYREAD_TOKEN | 必填 | API、仪表板和扩展程序的 Bearer 令牌。没有该令牌,服务器将拒绝启动。 |
ALLOWED_ORIGINS | 空 | 可选:扩展程序的 CORS 来源(chrome-extension://<id>)。扩展程序运行无需此项。 |
GRACE_SECONDS | 20 | 与发送时间相差不超过此秒数的访问会计为撰写预览。 |
SUPPRESS_WINDOW_SECONDS | 60 | 在你打开自己已发送的邮件后,此时间窗口内的访问会计为你本人。 |
STORE_IP | true | 设为 false 可停止存储 IP 地址。 |
IP_DAYS | 30 | 超过此天数的访问只保留 IP 地址所属的网络(IPv4 为 203.0.113.0/24,IPv6 为 /48)。判定结果不会改变。设为 0 可保留完整地址。 |
RETENTION_DAYS | 0 | 删除超过此天数的访问记录,以及截止时间之前发送的邮件(设为 0 则保留所有内容)。从未注册过的 ID 对应的访问记录始终会在 8 天后删除。 |
PIXEL_RATE_PER_MIN | 60 | 每个 IP 每分钟记录的像素访问次数。 |
DASHBOARD | true | 在 / 提供仪表板。 |
已知限制
“打开”指跟踪图片在收件人一侧加载。这是所有打开跟踪器的测量方式;Likelyread 会排除你自己的查看和 Apple 的预加载,但无法证明有人读完了每个字。
| 限制 | 影响 |
|---|---|
| Gmail 图片代理 | Gmail 收件人的打开记录会显示 Google 的 IP 和用户代理,因此无法确定位置。代理会缓存图片,所以重复打开可能不会被记录。 |
| Apple Mail 隐私保护 | Apple 会在邮件送达时加载图片,因此看起来像是有人打开了邮件。系统会根据 Apple 网络发出的简短用户代理将其标记为 prefetch。同一用户代理若来自其他网络,则表示这是未启用隐私保护的 Apple Mail,属于真实打开。 |
| 默认屏蔽图片 | 某些 Outlook 和企业环境会屏蔽图片,因此可能漏掉真实打开记录。 |
| 每封邮件一个像素 | 有多个收件人时,无法判断是谁打开了邮件。 |
| 转发 | 邮件转发对象的打开记录也会计为打开。 |
| Gmail DOM 更改 | 可能导致注入失效。所有 Gmail 选择器都位于 extension/src/gmail-selectors.ts 中;即使发生故障也不会造成问题:邮件会以未跟踪状态发送。 |
| 自行查看 | 扩展程序会阻止你自己的浏览器直接加载像素;当你在 Gmail 中打开自己发送的邮件时,扩展程序会通知服务器,因此接下来的 60 s 会计为本人访问。收到的邮件不会被屏蔽,因此收件人在同一浏览器中打开你的邮件仍会计为打开。 |
| 邮件送达率 | 新域名加上隐藏图片可能会提高垃圾邮件评分。请使用 HTTPS 和有一定历史记录的域名。 |
隐私与法律
所有数据都保留在你的 VPS 上。完整 IP 地址会保留 30 天(IP_DAYS),之后会缩短为所属网络。使用 STORE_IP=false 和 RETENTION_DAYS 可以减少保留的数据。
跟踪像素受欧盟《电子隐私指令》和 GDPR 约束。在法国,CNIL 关于电子邮件跟踪像素的建议(于 2026 年 3 月 12 日通过,并于 2026 年 4 月 14 日发布)指出,分析或优化营销活动而测量邮件打开情况,需要事先征得收件人同意。此规定也适用于 B2B 邮件。豁免范围很窄:身份验证安全,以及对收件人主动请求接收的邮件进行送达率跟踪。你有责任妥善使用此工具,并在需要时取得同意。
开发
# server
cd server
python -m venv .venv && . .venv/bin/activate
pip install -r requirements-dev.txt
pytest -q
LIKELYREAD_TOKEN=devtoken0123456789 DB_PATH=./dev.db PUBLIC_URL=http://localhost:8000 uvicorn app:create_app --factory --reload
# an agent on this machine: claude mcp add --transport http likelyread http://localhost:8000/mcp --header "Authorization: Bearer devtoken0123456789"
# demo data for the dashboard (never on your real database)
python scripts/seed_demo.py ./demo.db
# extension
cd extension
npm install
npm test # unit tests + compose tests against a fake Gmail DOM
npm run typecheck
npm run build # outputs dist/
# end to end: real Chromium with the built extension, a fake Gmail on
# mail.google.com and a real server (send, campaign, sender, server down, bad token)
CHROME_PATH=/path/to/chrome PYTHON=../server/.venv/bin/python npm run e2e
# the built extension as Chrome lists it (name and version), with the e2e package:
# tests/extension-listing.e2e.ts and e2e.config.ts at the repository root
cd .. && npm install && npx e2e run tests/extension-listing.e2e.ts
# Likelyread Cloud's Connect and Account pages and an app's OAuth sign-in, against a local
# cloud with fake Google (needs server/.venv): e2e.cloud.config.ts and tests/cloud/
npx e2e run --config e2e.cloud.config.ts tests/cloud/connect-apps.e2e.ts
# agent CLI
cd cli
python -m pytest -q tests
路线图
- v0.3:在 Gmail 的已发送邮件列表和会话视图中显示状态徽章;为每封邮件提供“停止跟踪”选项。
- v0.4:首次打开时发送通知(ntfy、Telegram、webhook),需主动选择加入。
- v0.5:跟踪链接点击。
- 后续:从 Gmail 网页版获取每位收件人的像素;支持 Firefox。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。