Parse-DMARC MCP Server について
Parse DMARCは、DMARC集計レポートを監視するチーム向けのセルフホスト型ダッシュボードです。レポートを取得してSQLiteに保存し、コンプライアンスを表示するほか、MCP経由の照会にも対応します。
主な機能
- 01IMAPとMaildirからのレポート取得
- 02gzip、zip、XMLの解析
- 03SQLiteへのレポート保存
- 04コンプライアンス表示とレポート詳細
- 05PrometheusメトリクスとGrafanaダッシュボード
- 06DMARCレコードの生成
活用シーン
- 01送信元とSPF・DKIMの結果確認
- 02集計レポートによるドメイン準拠状況の追跡
- 03AIアシスタントからのレポート照会
MCP 対応
MCPサーバーは、統計情報やレポート解析を含む9種類のツールを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 のバイナリは 1 つ、SQLite を使用し、Elasticsearch は不要です。
Parse DMARC は、ホスト型 DMARC 監視サービス DMARCguard を提供するチームが開発・保守しています。両者はコードを共有しておらず、このリポジトリ全体は Apache-2.0 ライセンスのままです。

できること
DMARC レコードに rua= アドレスを設定すると、Google、Microsoft、Yahoo などのメール受信サーバーから集計レポートが届きます。gzip または zip 形式の XML 添付ファイルで、通常は 1 日に 1 回送信されます。レポートには、自社ドメインを名乗ってメールを送信したすべての IP アドレスと、SPF および DKIM の認証結果が記載されています(RFC 7489 section 7.2。その内容は RFC 9990 に引き継がれています)。これを手作業で読む人はいません。Parse DMARC が次の処理を行います。
- IMAP 経由で任意のメールボックスからレポートを取得します。メールサーバーが同じホスト上にある場合は、ローカルの Maildir からも取得できます(
MAILDIR_PATH。詳しくは設定を参照)。Exchange または Outlook がmessage/rfc822添付ファイルとして転送したレポートも展開します。 - gzip、zip、未圧縮の XML を解析します。レポートごとの展開サイズ上限は 16 MB です。
- すべてのデータを 1 つの SQLite ファイルに保存します。データベースサーバーも JVM も不要です。
- 合格率、メッセージ量、送信元上位を表示し、個々のレポートを生データのレコードまで確認できます。
- フォームから
_dmarcTXT レコードを生成します。 - 28 個の Prometheus メトリクスを公開し、Grafana ダッシュボードを提供します。
- MCP サーバーを提供するため、AI アシスタントがレポートを問い合わせることができます。
- ダークモードに対応しています。最小構成のコンテナーイメージに、静的バイナリを 1 つ収録しています。
読み取り対象は集計(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 section 5.1)。rua=は Parse DMARC が読み取るメールボックスです。最初のレポートが届く前に、メールボックスを作成し、メールを受信できる状態にしておく必要があります。dig +short TXT _dmarc.example.comでレコードを確認します。レポートは通常、24~48 時間以内に届き始めます。
Cloudflare、Route 53 をはじめ、どの DNS ホストでも同じ 3 つの項目を指定します。名前は _dmarc、タイプは TXT、値は上記のとおりです。SPF と DKIM は事前に設定する必要はありません。レポートを使って、それらがどのように機能しているかを確認できます。
どこにでもデプロイ
プラットフォームにワンクリックでデプロイするか、すでに実行しているセルフホスト型 PaaS 用のテンプレートを使います。どの方法でも、Configuration の IMAP 設定が必要です。
Platform as a Service(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 | 未設定 |
| IMAP の代わりに使用する Maildir | 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 は imap.gmail.com のポート 993 で、アプリパスワードを使用します。Microsoft 365 は outlook.office365.com のポート 993 です。それ以外は、ドキュメントに別の記載がない限り、ポート 993 と TLS を使用します。
独自 CA で署名された証明書を使う IMAP サーバーでは、x509: certificate signed by unknown authority エラーが発生します。CA バンドルをマウントし、IMAP_TLS_CA_FILE にそのパスを指定してください。検証は有効のままです。IMAP_TLS_SKIP_VERIFY=true でも接続できますが、その場合セッションを傍受される可能性があるため、最後の手段としてのみ使用してください。IMAP_STARTTLS=true にすると、平文(通常はポート 143)で接続してから TLS に切り替えます。この設定は 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 はデフォルトで有効です。取得サイクル、IMAP 接続、解析と保存のエラー、全体およびドメインごとのコンプライアンス率、SPF と DKIM の結果数、HTTP レイテンシを対象とする28個のメトリクスがあります。grafana/dashboard.json は、それらをすぐに利用できるダッシュボードです。全リスト、Prometheus Operator の ServiceMonitor、アラートルール、Prometheus と Grafana を含む compose スタックは、docs/METRICS.mdにあります。
parse-dmarc --mcp を使うと、Model Context Protocol 経由で AI アシスタントから同じデータを利用できます。get_statistics から parse_dmarc_report までの9個のツールを、stdio またはオプションの OAuth2 を使用した HTTP 経由で利用できます。セットアップ方法とツール一覧はdocs/MCP.mdにあります。
ダッシュボードの背後にある HTTP API は、4つの 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 のどちらを選ぶべきですか?
同じ開発元による 2 つの製品ですが、コードベースは別々です。Parse DMARC はこのリポジトリのすべてで、エンタープライズ向けディレクトリも、ロック解除が必要な機能もありません。DMARCguard はホスト型のプロプライエタリサービスで、レポートを読み取り、変更すべき内容をお知らせします。
| Parse DMARC | DMARCguard | |
|---|---|---|
| 実行するのは誰か | ご自身:バイナリまたはコンテナー、メールボックス、ボリューム | 当社 |
| 読み取るもの | DMARC 集計レポート | DMARC 集計レポート、TLS-RPT レポート、Pro では失敗レポート、および 9 つのプロトコル(DMARC、SPF、DKIM、BIMI、MTA-STS、TLS-RPT、ARC、DANE、ARF)の DNS チェック(Free では 7 つ) |
| 送信元 | IP アドレス | 名前付き送信元 170 種。IP アドレスではなく Mailchimp や SendGrid などで識別し、それぞれの問題を修正する DNS 変更も提示します |
| アラート | ご自身で作成する Prometheus ルール | Free ではメール、Pro では Slack、Teams、Discord、ウェブフック |
| 保持期間 | ディスクの容量次第 | Free では 30 日、Pro では 1 年 |
| アクセス制御 | なし。プロキシの背後で運用してください | アカウントと 2FA。Pro では SAML SSO |
| サポート | GitHub の Issue | メール |
| 価格 | $0、Apache-2.0 | 2 ドメインまで無料、クレジットカード不要。Pro は 2 ドメイン込みで月額 $29 |
データをご自身のディスクに保存し、監視するメールボックスが 1 つあればよい場合は、Parse DMARC を実行してください。レポートの読み取りを任せたい場合や、夜の作業時間で対応できないほど多くのドメインがある場合は、DMARCguard をご利用ください。
Parse DMARC を最初に作ったのは 2025 年後半です。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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。