Skip to content
Back to search
100
MCP live MCP 2026-07-28 streamable-http

dev.dnsdoctor/dns-doctor

dev.dnsdoctor/dns-doctor

Scan and fix email auth (SPF, DMARC, DKIM, MX, blacklists, expiry) + DNS checks. Validated fixes.

Uptime
100.0%
1 direct probes · 30d
Response
404ms
last probe
Tools
16
callable
Resources
1
readable
Prompts
0
available

Tools · 16

scan_domain

Force a fresh scan of a domain and return its full report: seven deterministic checks — SPF, DKIM, DMARC, MX, DNS hardening, domain/TLS expiry and blacklist listing — each with a status (pass/warn/fai…

get_report

Return the stored report for a domain, scanning once only if none exists yet — the cheap read, and the right default for a first look. Returns the same seven-check report as scan_domain (SPF, DKIM, DM…

build_dmarc_upgrade

Return a validated DMARC enforcement-upgrade record for a domain. The alignment gate (whether p=reject is safe) is derived server-side from a scan — a caller can never assert alignment. `record` is nu…

start_monitoring_signup

Return a sign-up link to give to the HUMAN who owns a domain, so they can start monitoring it themselves. Nothing is created and no email is sent by this call: the returned signup_url opens a page tha…

count_spf_lookups

Validate an SPF record and count what it costs. Returns `record_valid` (the record parses as RFC 7208 SPF), `findings` (per-term diagnostics), `has_pass_all` (a `+all` that authorizes the whole intern…

validate_dmarc_record

Validate a pasted DMARC record: parsed tags, level'd findings, and whether it is valid. No DNS lookup — pass the record string itself. `upgrade_record` previews a stronger policy and is capped at p=qu…

generate_dmarc_record

Build a DMARC record from scratch for a domain that has none, using a validating engine — never compose one yourself. `policy` is none|quarantine|reject; optional `rua_email` (aggregate-report destina…

check_dkim_selector

Check ONE specific DKIM selector on a domain — the exact selector the sending platform uses (e.g. `google`, `s1`), which a full scan's common-selector sweep may miss. Returns the verdict, its explanat…

parse_dmarc_report

Parse ONE DMARC aggregate (RUA) report into readable per-source aggregates: who sent mail as the domain, how much, and what share was SPF/DKIM aligned. Pass the file's bytes base64-encoded in `content…

check_record

Check whether a DNS change has landed: reads the record from the domain's OWN nameservers (cache-free) and from two public caching resolvers, and reports whether they agree. `kind` is one of spf|dmarc…

check_reverse_dns

Check one sending IP's forward-confirmed reverse DNS (FCrDNS): reads the IP's PTR record, then resolves that hostname back and reports whether it returns to the same IP. `verdict` is confirmed (the pa…

audit_spf_includes

Audit a domain's SPF supply chain: walks every include and redirect it delegates to, and reports who can transitively send as it. Returns the resolved tree, per-node lookup attribution, the total auth…

build_parked_domain_records

Build the three-record hardening pack that makes a NON-SENDING domain unusable for spoofing: a Null MX, a hard-fail SPF record, and a p=reject; np=reject DMARC record. For parked, redirect and brand-d…

check_propagation

Check whether a DNS change has propagated GLOBALLY: six vantage points (five owner-run probes on separate continents plus this server's own resolver) each read the same name through several resolvers,…

get_alerts

Read the monitoring alert log for the domains the caller's account monitors, newest first. Requires an API token. Each row carries id, domain, type, check, summary, a deterministic detail map, created…

get_readiness

Read the DMARC enforcement-readiness verdict for ONE domain the caller's account monitors, computed from its aggregate (RUA) report window. Requires an API token. Returns whether the domain is ready t…

Resources · 1

monitored-domains

The token's account's verified monitored domains with each domain's latest per-check statuses. Requires a bearer token.

dnsdoctor://domains

How to use

Add to your Claude Desktop / Cursor / Cline MCP config:

{
  "mcpServers": {
    "dev.dnsdoctor/dns-doctor": {
      "url": "https://dnsdoctor.dev/mcp",
      "transport": "streamable-http"
    }
  }
}