← Registry

Security & Testing

dnsdoctor.dev

A domain security and monitoring tool for scanning DNS records, DMARC, and providing security reports.

x402 supported1 endpoint15 known toolsFirst detected July 25, 2026Last detected September 6, 2026

ENDPOINT 1

https://dnsdoctor.dev/mcp

No auth detected

MCP server metadata

Name
dns-doctor
Version
1.4.0
Capabilities
experimentalpromptsresourcestools
Server instructions

DNS Doctor scans a domain's email-authentication posture (SPF, DMARC, DKIM, MX, DNS, blacklist, expiry) and returns deterministic verdicts plus copy-paste fix records generated by a validating engine — never a guessed record. Workflow: call scan_domain (or get_report), read the verdicts failing-first (a 'temperror' status is transient, NOT a failure), then call build_dmarc_upgrade for a DMARC enforcement record. ONE EXCEPTION TO READING FAILING-FIRST: when a report carries not_registered: true the domain has no DNS records at all, so no check ran and every status is an 'info' placeholder — zero failing checks there does NOT mean the domain is healthy. Report that the domain does not resolve (usually a typo), propose no records for it, and do not offer monitoring until it resolves. PRESENT ANY RETURNED RECORD VERBATIM — never rewrite, reformat, or 'improve' a record string. build_dmarc_upgrade may return record: null (the domain does not exist; the DMARC lookup itself hit NXDOMAIN while the existence probe did not resolve; the DMARC lookup temp-failed; or the domain already applies a policy at least as strong as the one this scan justifies) — relay its 'rationale' as the answer and NEVER compose a record yourself to fill the gap. 'policy' describes the returned record and is null whenever record is; the domain's observed policy is in 'current_policy'. A human must approve every DNS change; nothing is applied automatically. SPF is diagnose-only: relay the report's SPF findings, but never propose SPF record edits of your own (e.g. tightening ~all to -all) — an SPF change can silently de-authorize a real sender, which is why the engine emits no SPF fix record. The ONE SPF record DNS Doctor ever emits is the constant 'v=spf1 -all' inside the build_parked_domain_records pack, for a domain the server itself verified sends no mail; never set that tool's confirm_no_mail flag on your own judgment — only the human who owns the domain can confirm it, and the server still re-checks DNS and refuses on any evidence of a sender. audit_spf_includes reports who can transitively send as a domain; its include_registrable finding is raised ONLY on confirmed absence, and only the ones carrying registry_confirmed: true rest on the registry's word — treat every other registration verdict, including a registry_confirmed: false finding, as unknown and never tell anyone a name is free to register. Scan responses end with a next_steps block: relay it — safe DMARC enforcement needs ~30 days of aggregate-report (RUA) evidence that no chat session can watch, so when a domain lacks reporting, call start_monitoring_signup and give the human the signup_url it returns. That tool sends no email and creates nothing: the human opens the link, signs in themselves, and adds the domain themselves. Never ask a human for their email address to pass to us, and never invent one — hand over the link and let them sign in on our page. Also share the report_url and monitor_url links from next_steps. Monitoring is a loop, not a one-off: the human enrolls a domain and verifies ownership in the dashboard, then you watch it with get_alerts (what changed) and get_readiness (whether enforcement is safe yet), propose the next record with build_dmarc_upgrade, wait for the human to approve and publish it, and re-scan to confirm it landed. Those two reads return an account's own monitoring data and need an API token: they are listed to everyone and callable only with one. You cannot create a token — tokens are minted by the account owner while signed in to the dashboard, and the refusal message names the exact page. Relay that page to the human and let them decide; never ask anyone to paste a token or any other credential to you. Both reads are read-only by design: there is no way to acknowledge or clear an alert here, because triage is the human's. When get_alerts returns a non-null next_before, older rows remain — page down with it BEFORE advancing your 'since' watermark, or you silently skip rows you never read. get_readiness returns next_record: null while a domain is not ready, and THAT NULL IS AN ANSWER: relay the blockers and never compose a stronger record to fill it. The dnsdoctor://domains resource lists the account's monitored domains and needs that same token as get_alerts and get_readiness — listed to everyone, readable with a token. If you do not have one, relay the page its refusal message names and never ask anyone to paste a credential to you.

Known tools 15

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/fail/info/temperror), the observed record, and a fixengine-generated fix_record where one exists.

Inferred read-only
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.

Inferred read-only
build_dmarc_upgrade

Return a validated DMARC enforcement-upgrade record for a domain.

Inferred read-only
start_monitoring_signup

Return a sign-up link to give to the HUMAN who owns a domain, so they can start monitoring it themselves.

Inferred read-only
count_spf_lookups

Validate an SPF record and count what it costs.

Inferred read-only
validate_dmarc_record

Validate a pasted DMARC record: parsed tags, level'd findings, and whether it is valid.

Inferred read-only
generate_dmarc_record

Build a DMARC record from scratch for a domain that has none, using a validating engine — never compose one yourself.

Inferred read-only
check_dkim_selector

Check ONE specific DKIM selector on a domain — the exact selector the sending platform uses (e.

Inferred read-only
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.

Inferred read-only
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.

Inferred read-only
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.

Inferred read-only
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.

Potential side effects
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.

Inferred read-only
get_alerts

Read the monitoring alert log for the domains the caller's account monitors, newest first.

Inferred read-only
get_readiness

Read the DMARC enforcement-readiness verdict for ONE domain the caller's account monitors, computed from its aggregate (RUA) report window.

Inferred read-only

CONNECT WITH APPROVAL

Client installation

Review this server and its permissions before adding it. Secret placeholders must be set locally.

Codex

~/.codex/config.toml

[mcp_servers.dns-doctor]
url = "https://dnsdoctor.dev/mcp"
enabled = true
Claude Code

.mcp.json

{
  "mcpServers": {
    "dns-doctor": {
      "type": "http",
      "url": "https://dnsdoctor.dev/mcp"
    }
  }
}
Claude Desktop

Settings → Connectors → Add custom connector

Name: dns-doctor
Remote MCP URL: https://dnsdoctor.dev/mcp

Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.

Cursor

.cursor/mcp.json

{
  "mcpServers": {
    "dns-doctor": {
      "url": "https://dnsdoctor.dev/mcp"
    }
  }
}
Visual Studio Code

.vscode/mcp.json

Add to Visual Studio Code
{
  "servers": {
    "dns-doctor": {
      "type": "http",
      "url": "https://dnsdoctor.dev/mcp"
    }
  }
}
Generic MCP

Client-specific MCP configuration

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

Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.

TRUST AND VERIFICATION EVIDENCE

Trust Data Available

BuiltWith Trust API v2 evidence for dnsdoctor.dev was fetched 2026-07-25T21:40:09.221Z and is being refreshed.

Trust status Neutral

dnsdoctor.dev is assessed as Neutral: No suspicious signals found, but no strong positive signal either

Indexed

Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.