mcpField
P
Parse-DMARC MCP Server

Parse-DMARC MCP Server

本地服务
github.com安全223今天更新

关于 Parse-DMARC MCP Server

Parse DMARC 是面向需监控 DMARC 汇总报告团队的自托管仪表板。它获取并解析报告、将数据存入 SQLite、展示合规情况,并提供 MCP 接口查询报告。

主要功能

  1. 01通过 IMAP 和 Maildir 接收报告
  2. 02解析 gzip、zip 和 XML
  3. 03使用 SQLite 存储报告
  4. 04合规仪表板与报告详情
  5. 05Prometheus 指标和 Grafana 仪表板
  6. 06生成 DMARC 记录

适用场景

  1. 01查看发信来源及 SPF、DKIM 结果
  2. 02根据汇总报告跟踪域名合规情况
  3. 03通过 AI 助手查询报告数据

MCP 相关

其 MCP 服务提供九种工具,供 AI 助手查询报告数据,包括统计信息和报告解析。支持 stdio 与 HTTP,并可选用 OAuth2。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"meysam81-parse-dmarc": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/meysam81/parse-dmarc:v1.4.7"
]
}
}
}
启动命令docker run -i --rm ghcr.io/meysam81/parse-dmarc:v1.4.7

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/meysam81/parse-dmarc:v1.4.7

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

解析 DMARC

CI Release License Stars Docker pulls old Docker pulls new Image size

在一个仪表板中查看 DMARC 汇总报告。一个 Go 二进制文件、SQLite,无需 Elasticsearch。

Parse DMARC 由 DMARCguard 团队构建并维护。DMARCguard 是一项托管式 DMARC 监控服务。两者不共享代码,本仓库始终采用 Apache-2.0 许可证。

Parse DMARC 仪表板,显示通过率、邮件量和主要发送来源

功能介绍

当你的 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。
  • 显示通过率、邮件量和主要发送来源,并可查看任意报告中的原始记录。
  • 通过表单生成你的 _dmarc TXT 记录。
  • 提供 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在 Railway 上部署推荐给初学者
Render部署到 Render提供免费套餐
Koyeb部署到 Koyeb全球边缘部署。需手动将 /data 挂载为卷。
Zeabur在 Zeabur 上部署针对亚太地区优化
Northflank部署到 Northflank面向开发者
自托管 PaaS
提供商部署备注
CapRover部署到 CapRover自托管 PaaS
Coolify部署到 Coolify开源的 Heroku 替代方案
Dokploy部署到 Dokploy自托管部署平台
DockerDocker随处运行
基础设施
提供商部署备注
DigitalOcean Droplet部署到 DigitalOcean带有 Packer 镜像的 VM

配置

此表中的每项设置都是环境变量或 config.json 中的键。程序会优先读取环境变量,文件中的设置会覆盖环境变量。下文的命令行标志使用环境变量,但不使用 config.json 中的键。

设置环境变量默认值
IMAP 主机和端口IMAP_HOST, IMAP_PORT必填,993
IMAP 用户名和密码IMAP_USERNAME, IMAP_PASSWORD必填
要读取的邮箱IMAP_MAILBOXINBOX
隐式 TLSIMAP_USE_TLStrue
在明文端口上使用 STARTTLSIMAP_STARTTLSfalse
内部 CA 证书包,PEM 格式IMAP_TLS_CA_FILE未设置
跳过证书验证IMAP_TLS_SKIP_VERIFYfalse
将已获取的邮件标记为已读IMAP_MARK_AS_SEENtrue
将已处理的邮件移至IMAP_PROCESSED_MAILBOX未设置
使用 Maildir 收件而非 IMAPMAILDIR_PATH未设置
Maildir 死信邮箱IMAP_DEADLETTER_BOXDEADLETTER
数据库文件DATABASE_PATH~/.parse-dmarc/db.sqlite,Docker 中为 /data/parse-dmarc.db
HTTP 监听地址SERVER_HOST, SERVER_PORT127.0.0.1、8080,Docker 中为 0.0.0.0
获取间隔(秒)FETCH_INTERVAL300
日志级别LOG_LEVELinfo

除非 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 DMARCDMARCguard
由谁运行你:一个二进制文件或容器、一个邮箱、一个卷我们
读取内容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.02 个域名免费,无需信用卡。Pro 版每月 $29,包含 2 个域名

如果你想把数据保存在自己的磁盘上,并监控一个邮箱,就运行 Parse DMARC。如果你希望有人替你读取报告,或者域名多到让你忙不过来,就使用 DMARCguard。

我在 2025 年末先构建了 Parse DMARC。DMARCguard 则源于大家接下来的需求:显示发件方名称而不是 IP,并在每次提醒中提供需要更改的确切记录。DMARCguard 的收入用于支持投入本仓库的时间,而本仓库将继续采用 Apache-2.0 许可证。

Meysam

免费开始使用,支持 2 个域名,无需信用卡

路线图与贡献

大家最常提出的新增功能,按提及频率排序:TLS-RPT 报告(#154)和发件来源的 whois 信息(#143)。其他需求:提交 issue。CONTRIBUTING.md 介绍了工具链:just build、just dev,以及用于启动本地 Dovecot 并预置示例报告的 docker compose up。

许可证

本仓库中的所有内容均采用 Apache-2.0 许可证。没有 ee/ 目录,也没有任何需要密钥的功能。


如果 Parse DMARC 满足了你的需求,点个星标可以让更多人发现它。如果你希望有人帮你阅读报告,DMARCguard 是同一团队推出的托管产品。

评论

支持 Markdown

第一次接触 MCP?

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

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