mcp

Read your own DMARC aggregate and forensic reports: sources, alignment, alerts, CSV export.

Should I use this

Quality & Safety

A
Description quality
91%
Schema completeness
81%
Naming quality
98%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'get_forensic_reports_statistics' name length outside 3-30 rangein get_forensic_reports_statistics

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,735Tokens (tool definitions)
~618 BTypical response size
Moderate attention impact (1.36% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "@dmarc-examiner/mcp"
      ]
    }
  }
}

Runnable packages

npm@dmarc-examiner/mcp1.1.0stdio

Remote endpoints

https://mcp.dmarc-examiner.com/mcpstreamable-http

What it can do

Tool inventory

Tools (21)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_domains(page, per_page)

List all monitored domains in your organization

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "type": "number"
    },
    "per_page": {
      "type": "number"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_domain(domain_id)

Get details of a specific domain

Input Schema

{
  "type": "object",
  "properties": {
    "domain_id": {
      "type": "string",
      "description": "Domain UUID"
    }
  },
  "required": [
    "domain_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢check_dmarc(domain)

Inspect the public DMARC record at _dmarc.<domain>. The domain does not need to belong to your organization. Returns parsed policy and rua/ruf addresses.

Input Schema

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain to inspect — does not need to belong to your organization."
    }
  },
  "required": [
    "domain"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_domain(name)

Add a new domain to the organization. Response includes the reporting_email and dmarc_record values to publish in DNS. May return 402 if the plan domain limit has been reached.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Domain name to monitor (e.g. \"example.com\"). Stored lowercased."
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢verify_domain(domain_id)

Re-check a domain's DNS to confirm the DMARC record contains the organization's reporting email. Updates status to verified on success.

Input Schema

{
  "type": "object",
  "properties": {
    "domain_id": {
      "type": "string",
      "description": "Domain UUID"
    }
  },
  "required": [
    "domain_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴delete_domain(domain_id)

Remove a domain from monitoring. Soft-deletes; historical reports remain accessible.

Input Schema

{
  "type": "object",
  "properties": {
    "domain_id": {
      "type": "string",
      "description": "Domain UUID"
    }
  },
  "required": [
    "domain_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_reports(page, per_page, domain, date_from, date_to)

List DMARC reports for your organization

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "type": "number"
    },
    "per_page": {
      "type": "number"
    },
    "domain": {
      "type": "string"
    },
    "date_from": {
      "type": "string"
    },
    "date_to": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_report(report_id)

Get details of a specific DMARC report

Input Schema

{
  "type": "object",
  "properties": {
    "report_id": {
      "type": "string"
    }
  },
  "required": [
    "report_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_report_statistics(report_id)

Get statistics for a specific DMARC report

Input Schema

{
  "type": "object",
  "properties": {
    "report_id": {
      "type": "string"
    }
  },
  "required": [
    "report_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪export_report_csv(report_id)

Export a DMARC report as CSV

Input Schema

{
  "type": "object",
  "properties": {
    "report_id": {
      "type": "string"
    }
  },
  "required": [
    "report_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_alerts(page, per_page, status)

List alerts for your organization

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "type": "number"
    },
    "per_page": {
      "type": "number"
    },
    "status": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪dismiss_alert(alert_id)

Dismiss a specific alert

Input Schema

{
  "type": "object",
  "properties": {
    "alert_id": {
      "type": "string"
    }
  },
  "required": [
    "alert_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_forensic_reports(domain_id, date_from, date_to, page, per_page)

List DMARC RUF (forensic) reports with optional filtering and pagination. Returns 403 if the plan does not include forensic reports (Pro plan and above).

Input Schema

{
  "type": "object",
  "properties": {
    "domain_id": {
      "type": "string",
      "description": "Filter by domain UUID"
    },
    "date_from": {
      "type": "string",
      "description": "Inclusive lower bound on arrival_date (ISO 8601 / \"YYYY-MM-DD HH:MM:SS\")"
    },
    "date_to": {
      "type": "string",
      "description": "Inclusive upper bound on arrival_date"
    },
    "page": {
      "type": "number"
    },
    "per_page": {
      "type": "number"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_forensic_report(report_id)

Get the full detail of a forensic (RUF) report by UUID, including the raw failed message envelope.

Input Schema

{
  "type": "object",
  "properties": {
    "report_id": {
      "type": "string",
      "description": "Forensic report UUID"
    }
  },
  "required": [
    "report_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_forensic_reports_statistics

Aggregated forensic-report counters grouped by auth failure type, delivery result, source IP (with geolocation) and reported domain.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_forensic_reports_summary

Summary of forensic activity in the last 7 days — useful for daily digest views.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_webhooks

List webhook endpoints configured for the organization. Returns 403 if the plan does not include advanced alerting (Pro and above).

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_webhook(url, name)

Create a new webhook endpoint. URL must start with https://. Returns 422 if the organization has reached its webhook limit.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "HTTPS URL events will be POSTed to"
    },
    "name": {
      "type": "string",
      "description": "Human-readable label"
    }
  },
  "required": [
    "url",
    "name"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡update_webhook(webhook_id, url, name, is_active)

Update a webhook. Any combination of url, name and is_active may be provided; URL must remain HTTPS.

Input Schema

{
  "type": "object",
  "properties": {
    "webhook_id": {
      "type": "string",
      "description": "Webhook UUID"
    },
    "url": {
      "type": "string",
      "description": "New HTTPS URL"
    },
    "name": {
      "type": "string",
      "description": "New label"
    },
    "is_active": {
      "type": "boolean",
      "description": "Enable/disable delivery without losing config"
    }
  },
  "required": [
    "webhook_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴delete_webhook(webhook_id)

Delete a webhook endpoint permanently.

Input Schema

{
  "type": "object",
  "properties": {
    "webhook_id": {
      "type": "string",
      "description": "Webhook UUID"
    }
  },
  "required": [
    "webhook_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡test_webhook(webhook_id)

Send a synchronous webhook.test event to verify connectivity. Returns the delivery status. Test events do NOT update last_triggered_at, last_status or failure_count.

Input Schema

{
  "type": "object",
  "properties": {
    "webhook_id": {
      "type": "string",
      "description": "Webhook UUID"
    }
  },
  "required": [
    "webhook_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded21 tools
verifiedversion not recorded21 tools
verifiedversion not recorded21 tools