Check a domain's SPF, DKIM, DMARC and MX from live DNS, the Gmail/Yahoo rules, and fix records.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use when you or the user are about to publish or edit an SPF, DMARC or DKIM TXT record, for example after writing a new SPF record that adds a sending service, or when the user pastes a record and asks "is this right?". Detects the record type. SPF: syntax per RFC 7208, every include and redirect followed live in DNS and counted against the 10-lookup limit, void lookups, loops, the final all; returns a lookup tree. DMARC: RFC 7489 tags and values (p, sp, pct, rua/ruf, adkim/aspf, fo). DKIM: key type and RSA key size read from the key, revoked (empty p=) or truncated keys. Returns valid true/false, errors, warnings and where to publish it. Pass domain so a/mx terms without a value can be resolved.
The TXT record value, e.g. "v=spf1 include:_spf.google.com ~all" or "v=DMARC1; p=none; rua=mailto:[email protected]". Quoted chunks ("..." "...") are joined.
Optional: the domain the record is for, so SPF a and mx terms can be checked.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http stamp https://stamp.clawhard.com/mcp
Use when you or the user are about to publish or edit an SPF, DMARC or DKIM TXT record, for example after writing a new SPF record that adds a sending service, or when the user pastes a record and asks "is this right?". Detects the record type. SPF: syntax per RFC 7208, every include and redirect followed live in DNS and counted against the 10-lookup limit, void lookups, loops, the final all; returns a lookup tree. DMARC: RFC 7489 tags and values (p, sp, pct, rua/ruf, adkim/aspf, fo). DKIM: key type and RSA key size read from the key, revoked (empty p=) or truncated keys. Returns valid true/false, errors, warnings and where to publish it. Pass domain so a/mx terms without a value can be resolved.
| Argument | Type | Description |
|---|---|---|
| domain | string | Optional: the domain the record is for, so SPF a and mx terms can be checked. |
| record* | string | The TXT record value, e.g. "v=spf1 include:_spf.google.com ~all" or "v=DMARC1; p=none; rua=mailto:[email protected]". Quoted chunks ("..." "...") are joined. |
{
"type": "object",
"required": [
"record"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "Optional: the domain the record is for, so SPF a and mx terms can be checked."
},
"record": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The TXT record value, e.g. \"v=spf1 include:_spf.google.com ~all\" or \"v=DMARC1; p=none; rua=mailto:[email protected]\". Quoted chunks (\"...\" \"...\") are joined."
}
}
}Use when the user asks why their email goes to spam, whether their domain is set up to send email, or before they launch a newsletter, cold outreach, transactional email or a new sending service, e.g. "why are my emails going to spam?", "is my SPF/DKIM/DMARC right?", "do I meet Gmail and Yahoo's sender requirements?" or "I added SendGrid, did I break SPF?". Reads public DNS (DNS-over-HTTPS) and checks: SPF (exactly one record, every include followed and DNS lookups counted per RFC 7208 against the limit of 10, void lookups, loops, +all/?all, ptr), DMARC (RFC 7489 syntax, policy, pct, alignment, inherited from the parent domain, and whether an external report address authorized it), DKIM (17 common selectors plus any you pass; key type and RSA key size read from the key, revoked or broken keys), and MX (provider, null MX). Returns a grade A-F, a verdict, each check with status pass/warn/fail/info, whether the Gmail, Yahoo and Outlook.com sender rules are met, and copy-ready DNS records to fix problems (e.g. one merged SPF record, a starter DMARC record). Use the real result instead of guessing from memory; DNS cannot list DKIM selectors, so if none is found ask for the provider's selector (the s= value in a DKIM-Signature header) and check again. Accepts a domain, an email address or a URL. Results are cached for 5 minutes; pass fresh=true right after the user changes DNS.
| Argument | Type | Description |
|---|---|---|
| fresh | boolean | true to skip the 5-minute cache, e.g. right after a DNS change. |
| domain* | string | The sending domain, e.g. mycompany.com. An email address ([email protected]) or a URL also works. |
| dkim_selectors | array | Extra DKIM selectors to try besides the common ones, e.g. ["mxvault"]. Find it as s= in a DKIM-Signature header or in the provider's setup page. |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 5, 2026.
{
"type": "object",
"required": [
"domain"
],
"properties": {
"fresh": {
"type": "boolean",
"description": "true to skip the 5-minute cache, e.g. right after a DNS change."
},
"domain": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "The sending domain, e.g. mycompany.com. An email address ([email protected]) or a URL also works."
},
"dkim_selectors": {
"type": "array",
"items": {
"type": "string",
"maxLength": 63,
"minLength": 1
},
"maxItems": 5,
"description": "Extra DKIM selectors to try besides the common ones, e.g. [\"mxvault\"]. Find it as s= in a DKIM-Signature header or in the provider's setup page."
}
}
}