Parse-DMARC MCP Server

平台与服务

by meysam81

轻量级 DMARC parser,可自动抓取邮件报告,并在一体化应用中可视化展示合规状态。

轻量处理 DMARC 邮件报告,自动抓取并在一体化界面可视化合规状态,帮团队更快发现邮件认证异常。

什么是 Parse-DMARC MCP Server

轻量级 DMARC parser,可自动抓取邮件报告,并在一体化应用中可视化展示合规状态。

README

Parse DMARC

License GitHub release GitHub Stars GitHub Issues Go Report Card Made with Go Made with Vue.js Docker Hub Docker Pulls Docker Image Size (tag)

Monitor who's sending email on behalf of your domain. Catch spoofing. Stop phishing.

Parse DMARC

Deploy Your Own Instance

Deploy Parse DMARC to your favorite cloud provider with one click:

Platform as a Service (PaaS)

ProviderDeployNotes
RailwayDeploy on RailwayRecommended for beginners
RenderDeploy to RenderFree tier available
KoyebDeploy to KoyebGlobal edge deployment. Manually mount /data as volume.
ZeaburDeploy on ZeaburAsia-Pacific optimized
NorthflankDeploy to NorthflankDeveloper-focused

Self-Hosted

ProviderDeployNotes
CapRoverDeploy to CapRoverSelf-hosted PaaS
CoolifyDeploy to CoolifyOpen-source Heroku alternative
DokployDeploy to DokploySelf-hosted deployment platform
DockerDockerRun anywhere

Infrastructure

ProviderDeployNotes
DigitalOcean DropletDeploy to DigitalOceanVM with Packer image

Note: All deployments require IMAP credentials. See Configuration for details on setting up Gmail, Outlook, or other email providers.

Why Do I Need This?

DMARC (Domain-based Message Authentication, Reporting & Conformance) helps protect your domain from email spoofing and phishing. When you enable DMARC on your domain, email providers like Gmail, Outlook, and Yahoo send you aggregate reports showing:

  • Who's sending email claiming to be from your domain
  • Which emails passed or failed authentication (SPF/DKIM)
  • How many emails were sent, and from which IP addresses
  • Whether malicious actors are trying to impersonate your domain

The Problem: These reports arrive as compressed XML attachments in your inbox - nearly impossible to read or analyze manually.

The Solution: Parse DMARC automatically fetches these reports from your inbox, parses them, and displays everything in a beautiful dashboard. All in a single 14MB Docker image.

Features

  • 📧 Auto-fetches reports from any IMAP inbox (Gmail, Outlook, etc.)
  • 📊 Beautiful dashboard with real-time statistics
  • 🔍 See exactly who's sending email as your domain
  • 🔧 Built-in DNS record generator for easy DMARC setup
  • 📦 Single binary - no databases to install, no complex setup
  • 🚀 Tiny 14MB Docker image
  • 🔒 Secure TLS support
  • 🌙 Dark mode support

Installation

Homebrew (macOS/Linux)

bash
brew tap meysam81/tap
brew install parse-dmarc

Docker

bash
docker pull meysam81/parse-dmarc

Binary Downloads

Download pre-built binaries from the Releases page.

Quick Start

Step 1: Set Up DNS to Receive DMARC Reports

This is the most important step! Without this, you won't receive any reports to analyze.

Add a DMARC TXT record to your domain's DNS:

code
Name: _dmarc.yourdomain.com
Type: TXT
Value: v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com

What this means:

  • p=none - Monitor only (don't block emails yet)
  • rua=mailto:dmarc@yourdomain.com - Send aggregate reports to this email address

Important: Replace dmarc@yourdomain.com with an actual email inbox you control. This is where Gmail, Outlook, Yahoo, etc. will send your DMARC reports.

DNS Examples:

  • Cloudflare: DNS > Add record > Type: TXT, Name: _dmarc, Content: v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com
  • Google Domains: DNS > Custom records > TXT, Name: _dmarc, Data: v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com
  • AWS Route53: Create record > Type: TXT, Name: _dmarc.yourdomain.com, Value: "v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com"

Reports typically start arriving within 24-48 hours.

Step 2: Run Parse DMARC with Docker

Run the container:

bash
docker run -d \
  --name parse-dmarc \
  -p 8080:8080 \
  -e IMAP_HOST=imap.gmail.com \
  -e IMAP_PORT=993 \
  -e IMAP_USERNAME=your-email@gmail.com \
  -e IMAP_PASSWORD=your-app-password \
  -v parse-dmarc:/data \
  meysam81/parse-dmarc

For Gmail users: You'll need an App Password, not your regular Gmail password.

Access the dashboard: Open http://localhost:8080 in your browser.

What You'll See

Once DMARC reports start arriving and Parse DMARC processes them, your dashboard will show:

  • Total messages analyzed across all reports
  • DMARC compliance rate (SPF/DKIM pass rates)
  • Top sending sources (IP addresses and organizations sending as your domain)
  • Authentication results (which emails passed/failed SPF and DKIM)
  • Policy actions (how receiving servers handled your email)

This helps you:

  • Verify your legitimate email services are properly configured
  • Detect unauthorized use of your domain
  • Gradually move from monitoring (p=none) to enforcement (p=quarantine or p=reject)

Configuration Options

IMAP Settings for Common Providers

Gmail:

json
{
  "host": "imap.gmail.com",
  "port": 993,
  "username": "your-email@gmail.com",
  "password": "your-app-password",
  "use_tls": true
}

Requires App Password

Outlook/Office 365:

json
{
  "host": "outlook.office365.com",
  "port": 993,
  "username": "your-email@outlook.com",
  "password": "your-password",
  "use_tls": true
}

Generic IMAP: Most providers use port 993 with TLS. Check your provider's documentation.

Command Line Options

bash
# Fetch once and exit (useful for cron jobs)
docker exec parse-dmarc ./parse-dmarc -fetch-once

# Serve dashboard only (no fetching)
docker exec parse-dmarc ./parse-dmarc -serve-only

# Custom fetch interval (in seconds, default 300)
docker exec parse-dmarc ./parse-dmarc -fetch-interval=600

Frequently Asked Questions

Q: I'm not receiving any reports. What's wrong?

A: Check these things in order:

  1. Did you add the _dmarc TXT record to your DNS? (Use a DNS checker like dig _dmarc.yourdomain.com TXT)
  2. Wait 24-48 hours - reports aren't instant
  3. Is your domain sending/receiving email? No email = no reports
  4. Check your IMAP credentials are correct in config.json

Q: Do I need SPF and DKIM set up first?

A: No! DMARC reports will show you whether SPF and DKIM are passing or failing, which helps you configure them correctly.

Q: What should my DMARC policy be?

A: Start with p=none (monitoring only). After reviewing reports and fixing any issues, gradually move to p=quarantine and then p=reject.

Q: How much email traffic do I need?

A: Any amount works. Even small domains with a few emails per day will receive useful reports.

Q: Can I use a Gmail account to receive reports?

A: Yes! Create a dedicated Gmail like dmarc@yourdomain.com, forward it to your personal Gmail if needed, and use Gmail's IMAP settings.

Advanced

Building from Source

bash
git clone https://github.com/meysam81/parse-dmarc.git
cd parse-dmarc
just install-deps
just build
./bin/parse-dmarc -config=config.json

Docker Compose

See compose.yml for Docker Compose configuration.

API Endpoints

  • GET /api/statistics - Dashboard statistics
  • GET /api/reports - List of reports (paginated)
  • GET /api/reports/:id - Detailed report view
  • GET /api/top-sources - Top sending source IPs
  • GET /metrics - Prometheus metrics endpoint

Prometheus Metrics & Grafana Integration

Parse DMARC includes production-ready Prometheus metrics for monitoring and alerting. Metrics are enabled by default and exposed at /metrics.

Available Metrics

Build Information

MetricTypeDescription
parse_dmarc_build_infoGaugeBuild information (version, commit, build_date)

Report Processing

MetricTypeDescription
parse_dmarc_reports_fetched_totalCounterTotal DMARC report emails fetched from IMAP
parse_dmarc_reports_parsed_totalCounterTotal DMARC reports successfully parsed
parse_dmarc_reports_stored_totalCounterTotal DMARC reports stored in database
parse_dmarc_reports_parse_errors_totalCounterTotal parse errors
parse_dmarc_reports_store_errors_totalCounterTotal storage errors
parse_dmarc_reports_attachments_totalCounterTotal attachments processed
parse_dmarc_reports_fetch_duration_secondsHistogramDuration of fetch operations
parse_dmarc_reports_last_fetch_timestamp_secondsGaugeUnix timestamp of last successful fetch
parse_dmarc_reports_fetch_cycles_totalCounterTotal fetch cycles executed
parse_dmarc_reports_fetch_errors_totalCounterTotal fetch cycle errors

IMAP Connection

MetricTypeLabelsDescription
parse_dmarc_imap_connections_totalCounterstatusIMAP connection attempts (success/error)
parse_dmarc_imap_connection_duration_secondsHistogramIMAP connection establishment duration

DMARC Statistics

MetricTypeDescription
parse_dmarc_dmarc_reports_totalGaugeTotal reports in database
parse_dmarc_dmarc_messages_totalGaugeTotal messages across all reports
parse_dmarc_dmarc_compliant_messages_totalGaugeTotal DMARC-compliant messages
parse_dmarc_dmarc_compliance_rateGaugeOverall compliance rate (0-100)
parse_dmarc_dmarc_unique_source_ipsGaugeNumber of unique source IPs
parse_dmarc_dmarc_unique_domainsGaugeNumber of unique domains

Per-Domain/Org Metrics

MetricTypeLabelsDescription
parse_dmarc_dmarc_messages_by_domainGaugedomainMessages per domain
parse_dmarc_dmarc_compliance_rate_by_domainGaugedomainCompliance rate per domain
parse_dmarc_dmarc_reports_by_orgGaugeorg_nameReports per organization
parse_dmarc_dmarc_messages_by_dispositionGaugedispositionMessages by disposition type

Authentication Results

MetricTypeLabelsDescription
parse_dmarc_dmarc_spf_resultsGaugeresultSPF authentication result counts
parse_dmarc_dmarc_dkim_resultsGaugeresultDKIM authentication result counts

HTTP Server

MetricTypeLabelsDescription
parse_dmarc_http_requests_totalCountermethod, path, statusTotal HTTP requests
parse_dmarc_http_request_duration_secondsHistogrammethod, pathHTTP request duration
parse_dmarc_http_requests_in_flightGaugeCurrent in-flight requests

Go Runtime (Built-in)

Standard Go runtime metrics are also exposed:

  • go_goroutines - Number of goroutines
  • go_memstats_* - Memory statistics
  • go_gc_* - Garbage collection metrics
  • process_* - Process metrics (CPU, memory, file descriptors)

Disabling Metrics

To disable the metrics endpoint:

bash
# Command line
./parse-dmarc --metrics=false

# Environment variable
export PARSE_DMARC_METRICS=false

# Docker
docker run -e PARSE_DMARC_METRICS=false meysam81/parse-dmarc

Prometheus Configuration

Add Parse DMARC to your prometheus.yml:

yaml
scrape_configs:
  - job_name: "parse-dmarc"
    static_configs:
      - targets: ["parse-dmarc:8080"]
    scrape_interval: 30s
    metrics_path: /metrics

For Kubernetes with ServiceMonitor (Prometheus Operator):

yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: parse-dmarc
  labels:
    app: parse-dmarc
spec:
  selector:
    matchLabels:
      app: parse-dmarc
  endpoints:
    - port: http
      path: /metrics
      interval: 30s

Grafana Dashboard

A production-ready Grafana dashboard is included in grafana/dashboard.json.

Import Manually

  1. In Grafana, go to Dashboards > Import
  2. Upload grafana/dashboard.json or paste its contents
  3. Select your Prometheus datasource
  4. Click Import

Provision Automatically (Recommended for Production)

bash
# Copy dashboard to Grafana dashboards directory
cp grafana/dashboard.json /var/lib/grafana/dashboards/parse-dmarc/

# Copy provisioning config
cp grafana/provisioning.yaml /etc/grafana/provisioning/dashboards/parse-dmarc.yaml

# Restart Grafana or wait for it to pick up changes
systemctl restart grafana-server

Dashboard Variables

VariablePurpose
datasourcePrometheus datasource to query
jobFilter by Prometheus job label
instanceFilter by instance(s)
domainFilter by monitored domain(s)

Dashboard Sections

SectionWhat It Shows
Overview - Golden SignalsCompliance rate, total messages, reports count, time since last fetch
DMARC Authentication ResultsSPF/DKIM pass rates, disposition breakdown, per-domain compliance
Report Sources & OrganizationsTop reporting organizations (Google, Microsoft, etc.), messages by domain
IMAP & Fetch OperationsConnection health, fetch cycle monitoring, latency heatmaps
Error TrackingParse errors, storage errors, fetch failures
HTTP ServerRequest rates, latency percentiles, error rates
Go RuntimeGoroutines, memory usage, GC stats, CPU usage

Example Grafana Panels

Compliance Rate Gauge:

promql
parse_dmarc_dmarc_compliance_rate

Messages Over Time:

promql
rate(parse_dmarc_dmarc_messages_total[5m])

Compliance Rate by Domain:

promql
parse_dmarc_dmarc_compliance_rate_by_domain

SPF/DKIM Pass Rate:

promql
# SPF Pass Rate
parse_dmarc_dmarc_spf_results{result="pass"} / ignoring(result) sum(parse_dmarc_dmarc_spf_results) * 100

# DKIM Pass Rate
parse_dmarc_dmarc_dkim_results{result="pass"} / ignoring(result) sum(parse_dmarc_dmarc_dkim_results) * 100

Fetch Success Rate:

promql
1 - (rate(parse_dmarc_reports_fetch_errors_total[1h]) / rate(parse_dmarc_reports_fetch_cycles_total[1h]))

IMAP Connection Health:

promql
rate(parse_dmarc_imap_connections_total{status="success"}[5m]) /
(rate(parse_dmarc_imap_connections_total{status="success"}[5m]) + rate(parse_dmarc_imap_connections_total{status="error"}[5m]))

HTTP Request Latency (p95):

promql
histogram_quantile(0.95, rate(parse_dmarc_http_request_duration_seconds_bucket[5m]))

Reports by Organization:

promql
topk(10, parse_dmarc_dmarc_reports_by_org)

Alerting Rules

Example Prometheus alerting rules:

yaml
groups:
  - name: parse-dmarc
    rules:
      - alert: DMARCComplianceLow
        expr: parse_dmarc_dmarc_compliance_rate < 90
        for: 1h
        labels:
          severity: warning
        annotations:
          summary: "DMARC compliance rate is below 90%"
          description: "Current compliance rate: {{ $value }}%"

      - alert: DMARCFetchFailures
        expr: rate(parse_dmarc_reports_fetch_errors_total[15m]) > 0
        for: 30m
        labels:
          severity: critical
        annotations:
          summary: "Parse DMARC fetch failures detected"
          description: "IMAP fetch operations are failing"

      - alert: IMAPConnectionErrors
        expr: rate(parse_dmarc_imap_connections_total{status="error"}[5m]) > 0
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "IMAP connection errors detected"
          description: "Check IMAP credentials and server connectivity"

      - alert: NoRecentFetch
        expr: time() - parse_dmarc_reports_last_fetch_timestamp_seconds > 600
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "No recent DMARC report fetch"
          description: "Last fetch was {{ humanizeDuration $value }} ago"

Docker Compose with Prometheus & Grafana

Complete monitoring stack:

yaml
version: "3.8"

services:
  parse-dmarc:
    image: meysam81/parse-dmarc
    ports:
      - "8080:8080"
    volumes:
      - ./config.json:/app/config.json
      - ./data:/data

  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - grafana-data:/var/lib/grafana

volumes:
  grafana-data:

With prometheus.yml:

yaml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: "parse-dmarc"
    static_configs:
      - targets: ["parse-dmarc:8080"]

Access:

Why Parse DMARC vs ParseDMARC?

This project is inspired by ParseDMARC but built for simplicity:

  • Single 14MB binary vs Python + Elasticsearch + Kibana stack
  • Built-in dashboard vs external visualization tools
  • SQLite vs Elasticsearch (no JVM required)
  • Zero dependencies vs complex setup

Contributing

Issues and pull requests are welcome! Please check the issues page.

License

Apache-2.0 - see LICENSE for details.


Found this useful? Star the repo!

常见问题

Parse-DMARC MCP Server 是什么?

轻量级 DMARC parser,可自动抓取邮件报告,并在一体化应用中可视化展示合规状态。

相关 Skills

MCP构建

by anthropics

Universal
热门

聚焦高质量 MCP Server 开发,覆盖协议研究、工具设计、错误处理与传输选型,适合用 FastMCP 或 MCP SDK 对接外部 API、封装服务能力。

想让 LLM 稳定调用外部 API,就用 MCP构建:从 Python 到 Node 都有成熟指引,帮你更快做出高质量 MCP 服务器。

平台与服务
未扫描109.6k

Slack动图

by anthropics

Universal
热门

面向Slack的动图制作Skill,内置emoji/消息GIF的尺寸、帧率和色彩约束、校验与优化流程,适合把创意或上传图片快速做成可直接发送的Slack动画。

帮你快速做出适配 Slack 的动图,内置约束规则和校验工具,少踩上传与播放坑,做表情包和演示都更省心。

平台与服务
未扫描109.6k

接口设计评审

by alirezarezvani

Universal
热门

审查 REST API 设计是否符合行业规范,自动检查命名、HTTP 方法、状态码与文档覆盖,识别破坏性变更并给出设计评分,适合评审接口方案和版本迭代前把关。

做API和架构方案时,它能帮你提前揪出接口设计问题并对齐最佳实践,评审视角系统,团队协作更省心。

平台与服务
未扫描9.0k

相关 MCP Server

Slack 消息

编辑精选

by Anthropic

热门

Slack 是让 AI 助手直接读写你的 Slack 频道和消息的 MCP 服务器。

这个服务器解决了团队协作中需要 AI 实时获取 Slack 信息的痛点,特别适合开发团队让 Claude 帮忙汇总频道讨论或发送通知。不过,它目前只是参考实现,文档有限,不建议在生产环境直接使用——更适合开发者学习 MCP 如何集成第三方服务。

平台与服务
82.9k

by netdata

热门

io.github.netdata/mcp-server 是让 AI 助手实时监控服务器指标和日志的 MCP 服务器。

这个工具解决了运维人员需要手动检查系统状态的痛点,最适合 DevOps 团队让 Claude 自动分析性能数据。不过,它依赖 NetData 的现有部署,如果你没用过这个监控平台,得先花时间配置。

平台与服务
78.3k

by d4vinci

热门

Scrapling MCP Server 是专为现代网页设计的智能爬虫工具,支持绕过 Cloudflare 等反爬机制。

这个工具解决了爬取动态网页和反爬网站时的头疼问题,特别适合需要批量采集电商价格或新闻数据的开发者。不过,它依赖外部浏览器引擎,资源消耗较大,不适合轻量级任务。

平台与服务
34.5k

评论