关于 Parse-DMARC MCP Server
Parse DMARC 是面向需监控 DMARC 汇总报告团队的自托管仪表板。它获取并解析报告、将数据存入 SQLite、展示合规情况,并提供 MCP 接口查询报告。
主要功能
- 01通过 IMAP 和 Maildir 接收报告
- 02解析 gzip、zip 和 XML
- 03使用 SQLite 存储报告
- 04合规仪表板与报告详情
- 05Prometheus 指标和 Grafana 仪表板
- 06生成 DMARC 记录
适用场景
- 01查看发信来源及 SPF、DKIM 结果
- 02根据汇总报告跟踪域名合规情况
- 03通过 AI 助手查询报告数据
MCP 相关
其 MCP 服务提供九种工具,供 AI 助手查询报告数据,包括统计信息和报告解析。支持 stdio 与 HTTP,并可选用 OAuth2。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm ghcr.io/meysam81/parse-dmarc:v1.4.7本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/meysam81/parse-dmarc:v1.4.7stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
解析 DMARC
在一个仪表板中查看 DMARC 汇总报告。一个 Go 二进制文件、SQLite,无需 Elasticsearch。
Parse DMARC 由 DMARCguard 团队构建并维护。DMARCguard 是一项托管式 DMARC 监控服务。两者不共享代码,本仓库始终采用 Apache-2.0 许可证。

功能介绍
当你的 DMARC 记录包含 rua= 地址时,Google、Microsoft 和 Yahoo 等邮件接收方会向你发送汇总报告:这些报告是 gzip 或 zip 格式的 XML 附件,通常每天发送一次,列出所有以你的域名发送邮件的 IP,以及 SPF 和 DKIM 是否通过(RFC 7489 第 7.2 节,由 RFC 9990 延续)。没人会手动阅读这些报告。Parse DMARC 可以:
- 通过 IMAP 从任何邮箱获取报告;如果邮件服务器位于同一主机,也可以从本地 Maildir 获取(
MAILDIR_PATH,参见配置)。也可以解包 Exchange 或 Outlook 以message/rfc822附件形式转发的报告。 - 解析 gzip、zip 和原始 XML,每份报告的解压上限为 16 MB。
- 将所有数据存储在一个 SQLite 文件中。无需数据库服务器,也无需 JVM。
- 显示通过率、邮件量和主要发送来源,并可查看任意报告中的原始记录。
- 通过表单生成你的
_dmarcTXT 记录。 - 提供 28 个 Prometheus 指标,并附带 Grafana 仪表板。
- 提供 MCP 服务,让 AI 助手能够查询你的报告。
- 支持深色模式。最小化容器映像中仅包含一个静态二进制文件。
它只读取汇总(RUA)报告,不支持失败报告(RUF)、TLS-RPT、告警、登录和多邮箱收件;详情请参阅路线图和贡献。
运行
使用 Docker,并为数据库指定一个具名卷:
docker run -d --name parse-dmarc -p 8080:8080 \
-e IMAP_HOST=imap.gmail.com \
-e IMAP_PORT=993 \
-e [email protected] \
-e IMAP_PASSWORD='your-app-password' \
-v parse-dmarc:/data \
dmarcguard/parse-dmarc
在 macOS 或 Linux 上使用 Homebrew:
brew install dmarcguardhq/tap/parse-dmarc
parse-dmarc --gen-config # writes a config.json template
parse-dmarc --config config.json
使用 Nix,从我们的 NUR 风格仓库安装:
nix profile install github:dmarcguardhq/nur#parse-dmarc # or: nix run github:dmarcguardhq/nur#parse-dmarc
也可以从发布页面下载发布归档 parse-dmarc_<os>_<arch>.tar.gz(Windows 上为 .zip)。
打开 http://localhost:8080。Gmail 需要使用应用专用密码,而不是账户密码。同一个镜像也发布在 Docker Hub 上,名称为 meysam81/parse-dmarc;两个名称对应相同的构建版本,v1 或 v1.6.0 等标签可固定到某个发布版本。
开始接收报告
只有当你的 DMARC 记录要求接收报告时,接收方才会发送报告。在 _dmarc.example.com 发布以下 TXT 记录,并替换为你自己的域名和邮箱:
v=DMARC1; p=none; rua=mailto:[email protected]
p=none会要求接收方照常投递邮件,只发送报告。等报告中每个合法发件人都通过验证后,再改为p=quarantine,然后改为p=reject(RFC 9989 第 5.1 节)。rua=是 Parse DMARC 读取报告的邮箱。首份报告到达前,该邮箱必须已创建并能正常接收邮件。- 使用
dig +short TXT _dmarc.example.com检查记录。报告通常会在 24 至 48 小时内开始送达。
Cloudflare、Route 53 以及其他 DNS 托管服务都使用相同的三个字段:名称 _dmarc、类型 TXT、值如上所示。无需预先设置 SPF 和 DKIM;报告会帮助你了解它们的运行情况。
随处部署
在平台上一键部署,或使用适用于你正在运行的可自托管 PaaS 的模板。每种方式都需要 Configuration 中的 IMAP 设置。
平台即服务(PaaS)
| 提供商 | 部署 | 备注 |
|---|---|---|
| Railway | 推荐给初学者 | |
| Render | 提供免费套餐 | |
| Koyeb | 全球边缘部署。需手动将 /data 挂载为卷。 | |
| Zeabur | 针对亚太地区优化 | |
| Northflank | 面向开发者 |
自托管 PaaS
| 提供商 | 部署 | 备注 |
|---|---|---|
| CapRover | 自托管 PaaS | |
| Coolify | 开源的 Heroku 替代方案 | |
| Dokploy | 自托管部署平台 | |
| Docker | 随处运行 |
基础设施
| 提供商 | 部署 | 备注 |
|---|---|---|
| DigitalOcean Droplet | 带有 Packer 镜像的 VM |
配置
此表中的每项设置都是环境变量或 config.json 中的键。程序会优先读取环境变量,文件中的设置会覆盖环境变量。下文的命令行标志使用环境变量,但不使用 config.json 中的键。
| 设置 | 环境变量 | 默认值 |
|---|---|---|
| IMAP 主机和端口 | IMAP_HOST, IMAP_PORT | 必填,993 |
| IMAP 用户名和密码 | IMAP_USERNAME, IMAP_PASSWORD | 必填 |
| 要读取的邮箱 | IMAP_MAILBOX | INBOX |
| 隐式 TLS | IMAP_USE_TLS | true |
| 在明文端口上使用 STARTTLS | IMAP_STARTTLS | false |
| 内部 CA 证书包,PEM 格式 | IMAP_TLS_CA_FILE | 未设置 |
| 跳过证书验证 | IMAP_TLS_SKIP_VERIFY | false |
| 将已获取的邮件标记为已读 | IMAP_MARK_AS_SEEN | true |
| 将已处理的邮件移至 | IMAP_PROCESSED_MAILBOX | 未设置 |
| 使用 Maildir 收件而非 IMAP | MAILDIR_PATH | 未设置 |
| Maildir 死信邮箱 | IMAP_DEADLETTER_BOX | DEADLETTER |
| 数据库文件 | DATABASE_PATH | ~/.parse-dmarc/db.sqlite,Docker 中为 /data/parse-dmarc.db |
| HTTP 监听地址 | SERVER_HOST, SERVER_PORT | 127.0.0.1、8080,Docker 中为 0.0.0.0 |
| 获取间隔(秒) | FETCH_INTERVAL | 300 |
| 日志级别 | LOG_LEVEL | info |
除非 SERVER_HOST 另有指定,否则仪表板仅监听回环地址。将 SERVER_HOST=0.0.0.0 设为可从其他主机访问;容器镜像已默认如此,因为 Docker 将端口转发到容器的网络接口,而非其回环地址。配置文件中的 server.host 会覆盖 SERVER_HOST,因此示例配置省略了此项。
服务提供商:Gmail 使用端口 993 上的 imap.gmail.com,并需使用应用专用密码。Microsoft 365 使用端口 993 上的 outlook.office365.com。其他服务均使用端口 993 和 TLS,除非其文档另有说明。
如果 IMAP 服务的证书由你自己的 CA 签发,则会出现 x509: certificate signed by unknown authority 错误。挂载 CA 证书包,并将 IMAP_TLS_CA_FILE 指向该文件;证书验证仍会启用。设置 IMAP_TLS_SKIP_VERIFY=true 也能连接,但这是最后的办法,因为此时会话可能遭到拦截。设置 IMAP_STARTTLS=true 会通过明文连接(通常使用端口 143),然后升级连接;此设置优先于 IMAP_USE_TLS。完全关闭 TLS 意味着使用明文 IMAP,大多数服务不会允许通过这种连接执行 LOGIN。
如果报告已由主机接收,将 MAILDIR_PATH 指向 Maildir(例如 /var/mail/dmarc/Maildir),便无需设置 IMAP 相关选项:每次获取都会读取 <MAILDIR_PATH>/new,并在解析每封邮件后将其移至 <MAILDIR_PATH>/cur。邮件会作为完整邮件读取,与 Postfix 或 Courier 投递的内容完全一致。如果无法从邮件中读取报告,或报告解析失败,邮件会被移至 <MAILDIR_PATH>/DEADLETTER(IMAP_DEADLETTER_BOX),以便操作人员查看解析器丢弃的内容。
| 标志 | 功能说明 |
|---|---|
--fetch-once | 抓取、解析、存储后退出。用于 cron。 |
--serve-only | 提供仪表板服务,但不进行抓取。 |
--fetch-interval 600 | 两次抓取周期之间的间隔秒数。 |
--metrics=false | 关闭 /metrics。 |
--gen-config | 写入 config.json 模板后退出。 |
--mcp、--mcp-http :8081 | 通过 stdio 或 HTTP 运行 MCP 服务,而非抓取器。请参阅 docs/MCP.md。 |
指标、Grafana 和 MCP
/metrics 默认启用:共 28 项指标,涵盖抓取周期、IMAP 连接、解析和存储错误、总体及按域名统计的合规率、SPF 和 DKIM 结果计数,以及 HTTP 延迟。grafana/dashboard.json 是可直接使用的仪表板。完整指标列表、Prometheus Operator ServiceMonitor、告警规则,以及包含 Prometheus 和 Grafana 的 compose 栈,请参阅 docs/METRICS.md。
parse-dmarc --mcp 通过 Model Context Protocol 向 AI 助手提供相同的数据:包含九个工具,从 get_statistics 到 parse_dmarc_report,支持通过 stdio 或 HTTP 访问,并可选启用 OAuth2。配置说明和工具列表请参阅 docs/MCP.md。
仪表板背后的 HTTP API 提供四个 GET 路由:/api/statistics、/api/reports、/api/reports/{id} 和 /api/top-sources。这些路由均未启用身份验证,因此请将端口置于反向代理或 VPN 之后。
如需在 https://example.com/dmarc/ 这样的路径下提供仪表板服务,请让代理在转发前去除路径前缀,例如 nginx 的 location /dmarc/ { proxy_pass http://127.0.0.1:8080/; }(完整示例)。仪表板会相对于页面路径加载资源和 API,因此无需单独设置。
Parse DMARC 还是 DMARCguard?
两款产品,同一家厂商,代码库彼此独立。Parse DMARC 就是本仓库的全部内容:没有企业目录,也没有任何需要解锁的功能。DMARCguard 是一项托管的专有服务,会替你读取报告,并告诉你需要更改什么。
| Parse DMARC | DMARCguard | |
|---|---|---|
| 由谁运行 | 你:一个二进制文件或容器、一个邮箱、一个卷 | 我们 |
| 读取内容 | DMARC 汇总报告 | DMARC 汇总报告、TLS-RPT 报告、Pro 版故障报告,以及 9 种协议的 DNS 检查:DMARC、SPF、DKIM、BIMI、MTA-STS、TLS-RPT、ARC、DANE、ARF(Free 版支持 7 种) |
| 发件来源 | IP 地址 | 170 个具名发件方;显示 Mailchimp 或 SendGrid,而不是 IP,并提供可修复问题的 DNS 更改 |
| 提醒 | 由你编写的 Prometheus 规则 | Free 版支持电子邮件;Pro 版支持 Slack、Teams、Discord 和 Webhook |
| 保留期限 | 由你的磁盘容量决定 | Free 版 30 天,Pro 版 1 年 |
| 访问控制 | 无;请置于代理之后 | 账户和 2FA;Pro 版支持 SAML SSO |
| 支持 | GitHub Issues | 电子邮件 |
| 价格 | $0,Apache-2.0 | 2 个域名免费,无需信用卡。Pro 版每月 $29,包含 2 个域名 |
如果你想把数据保存在自己的磁盘上,并监控一个邮箱,就运行 Parse DMARC。如果你希望有人替你读取报告,或者域名多到让你忙不过来,就使用 DMARCguard。
我在 2025 年末先构建了 Parse DMARC。DMARCguard 则源于大家接下来的需求:显示发件方名称而不是 IP,并在每次提醒中提供需要更改的确切记录。DMARCguard 的收入用于支持投入本仓库的时间,而本仓库将继续采用 Apache-2.0 许可证。
Meysam
路线图与贡献
大家最常提出的新增功能,按提及频率排序:TLS-RPT 报告(#154)和发件来源的 whois 信息(#143)。其他需求:提交 issue。CONTRIBUTING.md 介绍了工具链:just build、just dev,以及用于启动本地 Dovecot 并预置示例报告的 docker compose up。
许可证
本仓库中的所有内容均采用 Apache-2.0 许可证。没有 ee/ 目录,也没有任何需要密钥的功能。
如果 Parse DMARC 满足了你的需求,点个星标可以让更多人发现它。如果你希望有人帮你阅读报告,DMARCguard 是同一团队推出的托管产品。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。