关于 anon.li
anon.li 是开源的隐私服务,提供邮件别名、端到端加密文件分享和加密表单。其 MCP 接口用于管理别名、收件人及加密文件投递的元数据。
主要功能
- 01创建并管理邮件别名
- 02设置别名收件人
- 03管理加密文件投递元数据
- 04浏览器端加密文件与表单内容
适用场景
- 01为不同服务使用独立邮件别名
- 02管理别名的邮件接收对象
- 03查看文件投递相关元数据
MCP 相关
anon.li 的 MCP 接口支持通过 OAuth 管理邮件别名、收件人和加密文件投递元数据。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://anon.li/api/mcpclaude mcp add --transport http anondotli-anon-li https://anon.li/api/mcp{"mcpServers":{"anondotli-anon-li":{"type":"http","url":"https://anon.li/api/mcp"}}}在 Cursor 中打开{"servers":{"anondotli-anon-li":{"type":"http","url":"https://anon.li/api/mcp"}}}在 VS Code 中打开{"mcpServers":{"anondotli-anon-li":{"type":"http","url":"https://anon.li/api/mcp"}}}{"mcpServers":{"anondotli-anon-li":{"serverUrl":"https://anon.li/api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
开源邮箱别名、端到端加密文件共享和加密表单。默认保护隐私。
👋 欢迎!如果你更喜欢观看演示,请查看我们的 YouTube 上的 2 分钟介绍视频。
为什么选择 anon.li?
我们创建 anon.li,是因为我们厌倦了将敏感文件和真实邮箱地址交给黑箱公司。
- 保护真实收件箱的邮箱别名——无需更换邮箱服务商。 继续使用 Gmail、Proton 或 Fastmail;我们只负责在中间拦截垃圾邮件。
- 采用 AES-256-GCM 加密的文件共享——我们无法读取你的文件,这是设计如此。 文件在进入网络前,就已由浏览器加密。解密密钥位于 URL 片段中,因此绝不会传输到我们的服务器。
- 加密表单——收集敏感回复,无需将明文存入数据库。 表单答案和附件会在提交者的浏览器中加密,供表单所有者或团队使用。
- 开源 Web 应用(AGPL v3)——实现方式可供验证。 你可以在此代码仓库中审查浏览器加密、访问控制、REST API、MCP 服务和应用数据模型。
产品
Alias - 匿名邮件转发
为每项服务创建独立别名。使用别名回复邮件,同时绝不暴露真实身份。邮件会经过我们的服务器进行转发,而不会存储在托管邮箱中。
- Free 套餐提供 10 个随机别名和 1 个自定义别名;Pro 套餐提供不限数量的随机别名和 100 个自定义别名
- 通过 SRS 匿名回复
- 可按收件人选择是否启用 PGP 加密
- 付费套餐支持自定义域名
- 在保险库中加密存储标签和备注
- 一键停用,立即阻止垃圾邮件
Drop - 端到端加密文件共享
安全地共享文件。所有内容都在浏览器中使用 AES-256-GCM 加密。
- 零知识架构
- 自动过期(1–30 天)
- 下载次数限制和密码保护
- 文件预览也计为下载,因为预览会暴露完整的加密文件字节
- 单次传输最高支持 250GB(Pro)
- 收件人无需创建账户即可下载
Form - 端到端加密数据收集
创建表单,让回复在答题者的浏览器中加密。应用仅存储密文和加密后的所有者密钥;经过授权的所有者解锁保险库后,会在本地解密回复。
- 支持文本、选项、评分、量表和文件上传字段
- 支持个人所有者密钥和共享团队密钥
- 在服务器端强制执行保留期限和提交次数限制
- 在浏览器中加密导出 CSV/ZIP
重要
此代码仓库包含 Next.js Web 应用和控制平面。用于接收并转发别名邮件的生产 SMTP/Haraka 投递管道属于独立服务,不包含在此处。你可以在本地运行和开发 Alias 管理功能,但要实现端到端邮件转发,需要自备兼容的邮件传输服务。
快速入门
anon.li 是一个由集成服务支撑的应用;如果缺少必需的基础设施,它会有意快速失败。本地开发需要 Bun >= 1.4.3、Node.js 24,以及下列服务的凭据。
| 服务 | 用途 | 必需 |
|---|---|---|
| PostgreSQL | 应用数据和加密元数据 | 是 |
| 私有 Cloudflare R2 兼容存储桶 | Drop/Form 密文 | 是 |
| Upstash Redis REST | 速率限制、锁和 Webhook 幂等性 | 是 |
| Resend | 身份验证和事务性邮件 | 是 |
| Cloudflare Turnstile | 机器人防护 | 是 |
| Stripe | 账单客户端和 Webhook | 是 |
| NOWPayments | 加密货币结账 | 否 |
| GitHub/Google OAuth | 可选登录提供商 | 否 |
| PostHog | 产品分析和错误报告 | 否 |
PostgreSQL、R2 的 S3 兼容替代服务,以及兼容 Upstash 的 Redis REST 端点,都可以通过 docker compose up -d(或 podman compose)在本地运行;关于对应的 .env 值、Turnstile 测试密钥、Stripe CLI Webhook 和当前限制,请参阅本地开发指南。
git clone https://github.com/anondotli/anon.li.git
cd anon.li
bun install # also generates the Prisma client
cp .env.example .env
# Fill every required value in .env, then apply the committed migrations
bun run db:migrate:deploy
# Start the development server
bun dev
打开 http://localhost:3000。空白的可选提供商变量会被规范化为禁用状态;必需变量会在启动时验证。请为 AUTH_SECRET、CRON_SECRET、IP_HASH_PEPPER、REPORT_ENCRYPTION_KEY 和 DKIM_ENCRYPTION_KEY 分别使用独立生成的值,具体说明见 .env.example。
更改 prisma/schema.prisma 时,请使用 bun run db:migrate --name concise_migration_name 创建迁移并提交。除临时数据库外,请避免运行 bun run db:push:它会跳过仅存在于迁移 SQL 中的对象(例如部分唯一索引 domains_domain_verified_key),并且不会留下迁移历史,因此无法再对该数据库运行 db:migrate:deploy。
创建拉取请求之前,请运行 CI 强制执行的相同检查:
bun run audit
bun run check # lint, type-check, dead-code check, tests, and production build
生产环境部署
生产数据库必须使用已提交的 Prisma 迁移进行更新。请勿在生产环境中使用 prisma db push;它会绕过经过审核的迁移历史。
bun install --frozen-lockfile
bun run build
bun run db:migrate:deploy
bun run start
在部署平台上设置 .env.example 中记录的所有必需变量;应用迁移前备份数据库,并在启动新版本应用之前,每次发布运行一次 bun run db:migrate:deploy。构建命令会自动重新生成 Prisma 客户端。所有公开服务源地址都必须使用 HTTPS;仅环回开发端点可以使用普通 HTTP。
Vercel 部署还需要 CRON_SECRET 和 Upstash Redis。生产环境的计划任务有意限定为兼容 Hobby 计划的每日/每周表达式;有关计划、发布检查和故障处理,请参阅 cron 运维手册。
客户端 IP 速率限制只信任一个边缘节点。系统会自动检测 Vercel。在 Cloudflare 后方的可自托管源站上,请设置 TRUSTED_PROXY_PROVIDER=cloudflare,并将直接访问源站的流量限制为仅来自 Cloudflare 网络;否则,转发标头可能被伪造。
Cloudflare R2 一次性设置
anon.li Drop 通过 S3 预签名 URL,在浏览器与 R2 之间直接上传和下载 Blob 数据,避免服务器中转造成的瓶颈。下载 URL 的有效期较短;分段上传 URL 与上传 ID、分段编号和确切的加密字节长度绑定,有效期最长为 7 天,以便完成超大文件传输。
- 创建一个 R2 存储桶,并保持私有。禁用其公开的
r2.devURL,且不要绑定公开的自定义域名。公开对象访问会绕过 Drop 的过期、撤销、收件人和下载次数限制检查。 - 创建具有该存储桶对象读写权限的 R2 API 凭证,然后在
.env中设置R2_ACCESS_KEY_ID、R2_SECRET_ACCESS_KEY、R2_BUCKET_NAME和账户的 S3 API 端点(R2_ENDPOINT=https://<account_id>.r2.cloudflarestorage.com)。 - 配置存储桶的 CORS 规则,允许来自你的应用源站的
GET、HEAD和PUT请求,并公开ETag响应标头。浏览器传输仍直接连接 R2;R2 不收取互联网出口流量费用。
Cloudflare 预签名 URL 支持 S3 API 域名,不支持自定义域名。请将私有存储桶访问视为安全要求,而不仅是部署偏好。
架构与信任边界
Browser (plaintext + keys)
├─ HTTPS → Next.js app (auth, policy, metadata, presigned capabilities)
└─ presigned HTTPS → private R2 bucket (ciphertext only)
Next.js app
├─ PostgreSQL (accounts, policy metadata, ciphertext metadata, wrapped keys)
└─ Redis REST (rate limits, locks, webhook idempotency)
External providers: Resend, Stripe, Turnstile, optional NOWPayments/PostHog/OAuth
Separate deployment: inbound/outbound alias mail transport
- Drop 和 Form 内容在浏览器中使用 Web Crypto 加密。共享链接密钥保留在 URL 片段中,浏览器不会在 HTTP 请求中发送这些片段。
- 应用服务器受信任,负责身份验证、授权、配额、过期、下载计数器和加密密钥分发。它绝不能接收普通的 Drop/Form 明文密钥。
- R2 必须保持私有。客户端只有通过应用策略检查后,才能获取短时有效、针对特定操作的预签名 URL。
- PostgreSQL 存储账户数据、策略元数据、密文元数据和封装密钥。Redis 对可用性和滥用敏感,因此 Redis 不可用时,安全关键限制会默认拒绝请求。
- 别名转发并非零知识:兼容的邮件传输服务在转发消息时必然会处理消息内容。有关生产环境的数据保留模式,请参阅安全文档。
技术栈
Next.js 16(App Router) · React 19 · PostgreSQL + Prisma · Better Auth(魔法链接、邮箱/密码、TOTP 双重身份验证) · Cloudflare R2 · Stripe · Upstash Redis · Resend · Tailwind CSS + shadcn/ui
链接
- 在线网站:anon.li
- 安全架构:anon.li/security
- API 文档:anon.li/docs/api
- 服务状态:status.anon.li
- 参与贡献:CONTRIBUTING.md
- 源代码:github.com/anondotli/anon.li
- 报告漏洞:[email protected]
法律与许可证
司法管辖区:列支敦士登 · 隐私政策 · 条款 · AUP · DMCA
GNU Affero 通用公共许可证 v3.0 - 版权所有 © 2026 anon.li。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。