mcpField
L
Likelyread

Likelyread

远程服务
likelyread.com通信协作04 天前更新

关于 Likelyread

Likelyread 是面向 Gmail 用户和 Agent 的邮件打开跟踪服务。它会区分真实打开、自身查看和 Apple 预取,并通过仪表板及 Agent 工具提供活动与发件人数据。

主要功能

  1. 01跟踪 Gmail 邮件打开情况
  2. 02分类打开并排除预取
  3. 03查看活动分析
  4. 04检查发件人健康状况
  5. 05自托管或使用 Likelyread Cloud

适用场景

  1. 01衡量外联活动的邮件打开情况
  2. 02查看活动级打开率
  3. 03检查发件人设置和发送节奏

MCP 相关

Likelyread 在 `/mcp` 提供 MCP 端点,支持创建像素、登记发送、查询邮件活动、活动分析和发件人健康状况。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://app.likelyread.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://app.likelyread.com/mcp需要授权

工具

详细介绍

likelyread

面向 Gmail 的开源邮件打开追踪工具。它会告诉你有人何时打开了你发送的邮件,说明每次打开为何计入,并提供一个简洁的仪表盘,方便你跟踪营销活动。

有两种使用方式:

  • Likelyread Cloud,访问 app.likelyread.com:安装 Chrome 扩展程序,使用 Google 登录,即可开始使用。提供免费套餐;Pro 套餐增加营销活动分析和完整历史记录。参见 docs/CLOUD.md。
  • 自托管:在 Caddy 后运行一台小型服务器(FastAPI + SQLite),通过一条命令即可安装。一个令牌即可使用所有功能,数据不会离开你的 VPS。说明见下文。

仪表盘概览

工作原理

  1. 在 Gmail 中开启追踪并点击 Send 时,扩展程序会在邮件中附加一个 1x1 的不可见图片(https://your-domain/p/<uuid>.gif),并将邮件注册到你的服务器。发送绝不会被阻止或延迟。
  2. 收件人的邮件客户端加载图片时,服务器会记录一次访问。
  3. 你查看访问记录时,系统会对其分类:
    • self:你自己的撰写预览,或你自己查看已发送邮件(扩展程序会通知服务器,同时也会在浏览器中拦截该请求);
    • prefetch:Apple Mail Privacy Protection 在投递时加载图片(来自 Apple 网络的裸 Mozilla/5.0 user 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 预取的打开记录和你自己的查看记录均不计入。

邮件详情

Gmail 撰写窗口中的 Campaign 选择器

发件人健康状况

对于你用于发送邮件的每个地址,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_healthSPF/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):

变量默认值用途
DOMAINCaddy 提供服务并为其获取证书的域名。服务器也会据此构建提供给 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_SECONDS20与发送时间相差不超过此秒数的访问会计为撰写预览。
SUPPRESS_WINDOW_SECONDS60在你打开自己已发送的邮件后,此时间窗口内的访问会计为你本人。
STORE_IPtrue设为 false 可停止存储 IP 地址。
IP_DAYS30超过此天数的访问只保留 IP 地址所属的网络(IPv4 为 203.0.113.0/24,IPv6 为 /48)。判定结果不会改变。设为 0 可保留完整地址。
RETENTION_DAYS0删除超过此天数的访问记录,以及截止时间之前发送的邮件(设为 0 则保留所有内容)。从未注册过的 ID 对应的访问记录始终会在 8 天后删除。
PIXEL_RATE_PER_MIN60每个 IP 每分钟记录的像素访问次数。
DASHBOARDtrue在 / 提供仪表板。

已知限制

“打开”指跟踪图片在收件人一侧加载。这是所有打开跟踪器的测量方式;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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。