domain-health
Domain health MCP server that audits a domain's email authentication, DNS, and registration status without any API key.
Full domain health report (
domain_report): one call returns registration/expiry, name servers, MX, SPF, DMARC, DKIM, MTA-STS, TLS-RPT, BIMI, CAA, DNSSEC, plus Gmail/Yahoo bulk-sender compliance and ranked findings (error/warning/info) with fixes.SPF evaluation (
check_spf): walks the whole include tree, counts DNS lookups against the limit of 10, finds void lookups and syntax issues, and with a sending IP returns the verdict a receiver would reach (pass, fail, softfail, neutral, permerror) plus the deciding mechanism.DKIM key checks (
check_dkim): inspects given selectors or 30 common provider selectors for key type, bit size, testing/revoked flags, and problems.DNS lookups (
dns_lookup): queries records by type (A, AAAA, MX, NS, TXT, CAA, and more) with TTLs from Cloudflare, optionally cross-checking Google's resolver to flag propagation differences, and reports DNSSEC validation.Registration & availability (
domain_lookup): checks up to 20 domains via each registry's RDAP server for registrar, creation/expiry dates, days left, status codes, DNSSEC, and name servers; subdomains map to their registrable domain.Operational traits: read-only and passive (never touches the target domain), HTTPS-only to public DNS/RDAP/PSL sources, 30-second DNS caching, compact JSON with output schemas, and no account or key required.
Uses Cloudflare's public DNS-over-HTTPS resolver as the primary data source for DNS lookups: resolves A, AAAA, MX, NS, TXT, CAA and other record types with TTLs, and reports whether DNSSEC validated the answers when checking a domain's mail and DNS health.
Queries Google's public DNS-over-HTTPS resolver as a second opinion for DNS records, comparing results against Cloudflare's to flag propagation differences between resolvers.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@domain-health Check why emails from my domain are going to spam and suggest fixes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Domain Health
Why is mail from this domain going to spam, and is the domain about to lapse? Domain Health checks a domain the way receiving mail servers and registries see it, and says what to fix:
SPF evaluated in full, as RFC 7208 defines it: the whole include tree, the count of DNS lookups against the limit of 10 (one more include silently breaks SPF for all your mail), void lookups, syntax, and for a sending IP the verdict a receiver would reach (pass, fail, softfail, neutral, permerror) with the mechanism that decided it.
DMARC found by walking up the DNS tree, so a subdomain shows the policy it inherits; DKIM keys with their type and size (a 1024-bit key still works, 2048 is recommended); MTA-STS, TLS-RPT, BIMI and CAA.
Gmail and Yahoo bulk-sender rules: whether SPF, DKIM and DMARC are in place. DKIM selectors cannot be listed from DNS, so a key not at common selectors is reported as not confirmed, never as missing.
Registration from the registry's own RDAP server: registrar, creation and expiry dates, days left, status codes, DNSSEC; availability of names you are thinking of registering.
domain_report answers most questions in one call, with findings ranked error, warning, info, each
with a fix. No account or key needed.
Built and maintained by Arhan Canli.
Install
Needs Node.js 20 or newer. No account or key.
Claude Code
claude mcp add domain-health -- npx -y domain-health-mcpClaude Desktop: download domain-health-mcp-<version>.mcpb from the latest release and open it. The bundle is signed; verify it with gh attestation verify <file> --repo arhancanli/domain-health-mcp.
Any other client (Windsurf, Zed, Cline, Continue and others), in its MCP config file:
{
"mcpServers": {
"domain-health": {
"command": "npx",
"args": [
"-y",
"domain-health-mcp"
]
}
}
}Docker
docker build -t domain-health-mcp https://github.com/arhancanli/domain-health-mcp.git && docker run -i --rm domain-health-mcpHosted (Streamable HTTP): node src/server.mjs --http serves stateless MCP at POST /mcp (port from PORT, default 3000).
Related MCP server: Domain Deliverability Checker MCP Server
Example
An agent calls domain_report with:
{
"domain": "google.com"
}and gets back (recorded from the live server on 2026-09-26):
{
"domain": "google.com",
"registration": {
"registrar": "MarkMonitor Inc.",
"created": "1997-09-15",
"expires": "2028-09-14",
"days_left": 718,
"dnssec": false
},
"nameservers": [
"ns4.google.com",
"ns1.google.com",
"ns2.google.com",
"ns3.google.com"
],
"mx": [
"10 smtp.google.com"
],
"spf": {
"record": "v=spf1 include:_spf.google.com ~all",
"lookups": 1,
"all": "~all"
},
"dmarc": {
"policy": "reject",
"reports": 1
},
"mta_sts": true,
"tls_rpt": true,
"caa": [
"pki.goog"
],
"bulk_sender_dns": "SPF and DMARC meet the requirements; DKIM not confirmed (no key at common selectors)",
"findings": [
{
"level": "info",
"issue": "No DKIM key at 12 common selectors. Senders that sign use their own selector.",
"fix": "Check with check_dkim and the selector from a sent message (DKIM-Signature s=)."
}
]
}Tools
Tool | What it does |
| Looks up DKIM keys at the given selectors (or 30 common provider selectors): key type, size in bits, testing and revoked flags, problems. Selectors cannot be listed from DNS; the selector is in a sent message's DKIM-Signature (s=). |
| Evaluates a domain's SPF in full: the include tree, DNS lookups against the limit of 10, void lookups, syntax, and with ip the result a receiver would reach (pass, fail, softfail, neutral, permerror) and the mechanism that decided it. |
| DNS records of a name by type (default A, AAAA, MX, NS, TXT, CAA) with TTLs, from Cloudflare's resolver; compare: true also asks Google's and flags differences (propagation). Says when DNSSEC validated the answer. |
| Registration of up to 20 domains from each registry's RDAP server: registered or likely available, registrar, created and expiry dates, days left, status codes, DNSSEC, name servers. Subdomains resolve to their registrable domain. |
| One-call health check of a domain: registration and expiry, name servers, MX, SPF (lookups, policy), DMARC, DKIM at common selectors, MTA-STS, TLS-RPT, BIMI, CAA, DNSSEC, and whether it meets Gmail and Yahoo bulk-sender DNS rules, with ranked findings and fixes. |
How it behaves
Read-only and passive: it asks public resolvers and registries, and never connects to the domain being checked (no mail server probes, no web requests to it).
Network: HTTPS only. DNS goes to Cloudflare's and Google's DNS-over-HTTPS resolvers; RDAP goes only to the registry servers IANA's bootstrap file names (the RDAP client's allowlist is built from that file); the Public Suffix List comes from publicsuffix.org. Nothing else is contacted, and nothing is logged except unexpected failures (to stderr, without your inputs).
DNS answers are cached for 30 seconds, since people check right after changing records.
Results are compact JSON with a matching output schema. Long record lists say how many were left out.
Benchmark
Measured 2026-09-26 with gpt-5.4-mini, 13 fixed tasks graded by fixed checks (bench/tasks.json, raw results in bench/results/).
Server | Correct | Input tokens | Output tokens | Tool calls | Median time |
This server | 13/13 | 29631 | 583 | 18 | 2.8 s |
mcp-dns, the most-used DNS lookup server | 3/13 | 13058 | 734 | 29 | 2.6 s |
Performance
Measured 2026-09-26 from Dubai, home connection against the live upstream, Node 24.19.0 (bench/perf.json, scripts/perf.mjs in the factory).
Call | First call | Repeat | Result size |
domain_report: google.com | 2246 ms | 0.8 ms | 740 chars |
domain_report: intel.com (DMARC p=none) | 2413 ms | 0.5 ms | 1,444 chars |
check_spf: gmail.com for one of Google's sending IPs | 309 ms | 0.3 ms | 532 chars |
check_spf: gmail.com for an outside IP | 301 ms | 0.3 ms | 521 chars |
check_spf: oracle.com, at the 10-lookup limit | 737 ms | 0.5 ms | 3,895 chars |
check_dkim: github.com, named selectors | 262 ms | 0.3 ms | 248 chars |
check_dkim: stripe.com, 30 common selectors | 781 ms | 1 ms | 716 chars |
dns_lookup: github.com from two resolvers | 1172 ms | 0.3 ms | 2,594 chars |
domain_lookup: 5 names (subdomain, co.uk, unregistered, no RDAP) | 2702 ms | 0.3 ms | 1,713 chars |
First call: a fresh server process, including the TLS connection and the upstream's own time. Repeat: the same call again, answered from the in-process cache, so it shows this server's own overhead.
Tool definitions the model reads on every turn (name, description, input schema): 2,503 characters, against 254 for mcp-dns, the most-used DNS lookup server. The full tool list, with the output schemas and annotations clients use to validate results, is 4,239 characters (253 for the alternative).
Data sources
DNS: Cloudflare and Google public DNS over HTTPS.
Registration: each registry's RDAP server, found through IANA's RDAP bootstrap.
Registrable domains: the Public Suffix List (ICANN section).
More MCP servers by Arhan Canli
Actions Check: Checks GitHub Actions workflows: outdated actions, old Node runtimes, retired runners, injection.
Config Check: Validates config files against their official schemas: tsconfig, compose, workflows, 1,400+ more.
Cron Check: Explains cron expressions, lists next run times in any time zone, converts between cron dialects.
Dockerfile Check: Checks Dockerfiles: build-breaking mistakes, base image tags that exist, digests, platforms, EOL.
End of Life: Is this version still supported? EOL dates, latest patch and upgrade target for 470+ products.
Internet Standards: RFC sections, status, obsoleted-by chains, errata and IANA registries for coding agents.
Kube Check: Checks Kubernetes manifests for your version: removed APIs, unknown fields, Pod Security, risks.
License Check: Open source license answers: SPDX ids, copyleft, and whether a dependency's license fits yours.
The whole collection, 12 more
License
MIT, Copyright (c) 2026 Arhan Canli.
Available Tools
5 toolscheck_dkimCheck DKIM keysARead-onlyIdempotent
Looks up DKIM keys at the given selectors (or 30 common provider selectors): key type, size in bits, testing and revoked flags, problems. Selectors cannot be listed from DNS; the selector is in a sent message's DKIM-Signature (s=).
Inputs: domain (required), selectors. Returns: found, domain
check_spfEvaluate SPFARead-onlyIdempotent
Evaluates a domain's SPF in full: the include tree, DNS lookups against the limit of 10, void lookups, syntax, and with ip the result a receiver would reach (pass, fail, softfail, neutral, permerror) and the mechanism that decided it.
Inputs: domain (required), ip, sender. Returns: domain, lookups
dns_lookupDNS recordsARead-onlyIdempotent
DNS records of a name by type (default A, AAAA, MX, NS, TXT, CAA) with TTLs, from Cloudflare's resolver; compare: true also asks Google's and flags differences (propagation). Says when DNSSEC validated the answer.
Inputs: name (required), types, compare. Returns: name, records
domain_lookupRegistration and availabilityARead-onlyIdempotent
Registration of up to 20 domains from each registry's RDAP server: registered or likely available, registrar, created and expiry dates, days left, status codes, DNSSEC, name servers. Subdomains resolve to their registrable domain.
Inputs: domains (required). Returns: results
domain_reportDomain and email health reportARead-onlyIdempotent
One-call health check of a domain: registration and expiry, name servers, MX, SPF (lookups, policy), DMARC, DKIM at common selectors, MTA-STS, TLS-RPT, BIMI, CAA, DNSSEC, and whether it meets Gmail and Yahoo bulk-sender DNS rules, with ranked findings and fixes.
Inputs: domain (required). Returns: domain, findings
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool targets a distinct aspect of domain health: DKIM keys, SPF evaluation, DNS records, registration data, and a comprehensive aggregate report. The only potential overlap is domain_report including the checks of the other tools, but it is clearly positioned as a summary endpoint, not a replacement.
Tool names follow a consistent lowercase_snake_case pattern with clear verb prefixes: check_ for protocol-specific validations, lookup for record/registration queries, and report for the aggregate. The naming scheme is predictable and unambiguous.
Five tools is a tight, well-scoped set for a domain-health server. Each tool addresses a distinct need without redundancy, and the count is well within the ideal range.
The tool set covers the major pillars of domain health: DNS, registration, SPF, DKIM, and an all-in-one report that includes DMARC, MTA-STS, BIMI, and bulk-sender compliance. The report tool fills gaps that individual checks might leave, so no critical missing operations exist.
Maintenance
Related MCP Connectors
Check a domain's email DNS, whether Gmail and Outlook accept its mail, and its registration.
One-call domain audit: MX receiving, SPF/DMARC/DKIM spoofing protection, disposable-address risk.
Use when email lands in spam: audits SPF, DKIM, DMARC, MX and returns the DNS records to fix it.
SPF, DKIM, DMARC, MTA-STS and domain-expiry checks for any domain, with SPF lookup counts.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables DNS and email security analysis through passive and active scanning capabilities. Provides comprehensive domain security checks including SPF, DMARC, DNSSEC validation, MX record analysis, and SMTP connectivity testing.MIT
- AlicenseAqualityBmaintenanceEnables auditing any domain's email deliverability and DNS health, including SPF, DKIM, DMARC, MX, mail provider, DNS blacklist status, catch-all, domain age, and a deliverability score.1290 npm1MIT
- AlicenseNot gradedqualityCmaintenanceAudits email deliverability configuration for a domain, checking SPF, DKIM, DMARC, and MX records, returning a score and recommendations.MIT
- AlicenseNot gradedqualityCmaintenanceEnables users to audit a domain's email-authentication DNS configuration—covering SPF, DKIM, DMARC, MX, BIMI, MTA-STS, and TLS-RPT—and receive issues, recommendations, a 0–100 score, and A–F grade.MIT