Skip to main content
Glama

Check Email Domain

check_email_domain
Read-onlyIdempotent

Full email posture for a domain: can it receive mail, and can it be spoofed?

Runs MX, SPF and DMARC lookups together and returns a plain-language verdict alongside the raw records: can_receive_mail, spoofable, and a list of specific findings. Use this as the default check before emailing an unfamiliar domain, when judging whether inbound mail claiming to be from a domain could be forged, or when auditing your own domains. Prefer this over the single-record tools unless you already know which record you need.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
domainYesDomain to check, e.g. "example.com". A full email address is accepted and the domain is taken from it.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
mxNo
spfNo
dmarcNo
domainYes
summaryYesPlain-language verdict.
findingsNoOne line per specific problem; empty when the domain is correctly configured.
spoofableYesTrue unless DMARC is present AND at an enforcing policy. Deliberately conservative: without enforcement a receiver has no instruction to reject forged mail, however good the SPF record is.
checked_atNo
can_receive_mailYesFalse when the domain publishes no MX records.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "can_receive_mail": {
      +      "description": "False when the domain publishes no MX records.",
      +      "type": "boolean"
      +    },
      +    "checked_at": {
      +      "format": "date-time",
      +      "type": "string"
      +    },
      +    "dmarc": {
      +      "properties": {
      +        "all_records": {
      +          "description": "Present only when more than one DMARC record exists.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "found": {
      +          "type": "boolean"
      +        },
      +        "meaning": {
      +          "type": "string"
      +        },
      +        "multiple_records": {
      +          "description": "RFC 7489 requires receivers to apply NO policy when more than one record exists.",
      +          "type": "boolean"
      +        },
      +        "percent": {
      +          "description": "The pct= tag; defaults to 100.",
      +          "type": "integer"
      +        },
      +        "policy": {
      +          "description": "\"ignored\" means duplicate records cancelled the policy out.",
      +          "enum": [
      +            "none",
      +            "quarantine",
      +            "reject",
      +            "ignored",
      +            "unspecified"
      +          ],
      +          "type": "string"
      +        },
      +        "protects": {
      +          "description": "False for p=none (monitoring only) and for duplicate records.",
      +          "type": "boolean"
      +        },
      +        "record": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "domain": {
      +      "type": "string"
      +    },
      +    "findings": {
      +      "description": "One line per specific problem; empty when the domain is correctly configured.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "mx": {
      +      "properties": {
      +        "found": {
      +          "description": "Whether any MX record exists.",
      +          "type": "boolean"
      +        },
      +        "hosts": {
      +          "description": "MX hosts, lowest priority first.",
      +          "items": {
      +            "properties": {
      +              "host": {
      +                "description": "Mail exchanger hostname.",
      +                "type": "string"
      +              },
      +              "priority": {
      +                "description": "Lower is preferred.",
      +                "type": "integer"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "spf": {
      +      "properties": {
      +        "found": {
      +          "type": "boolean"
      +        },
      +        "meaning": {
      +          "description": "What the qualifier means in practice.",
      +          "type": "string"
      +        },
      +        "multiple_records": {
      +          "description": "More than one SPF record: receivers treat this as permerror, so SPF effectively fails.",
      +          "type": "boolean"
      +        },
      +        "qualifier": {
      +          "description": "The qualifier on the `all` mechanism.",
      +          "enum": [
      +            "fail",
      +            "softfail",
      +            "neutral",
      +            "pass",
      +            "unspecified"
      +          ],
      +          "type": "string"
      +        },
      +        "record": {
      +          "description": "The raw SPF TXT record, or null when absent.",
      +          "type": "string"
      +        },
      +        "strict": {
      +          "description": "True only for `-all`, the one strict answer.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "spoofable": {
      +      "description": "True unless DMARC is present AND at an enforcing policy. Deliberately conservative: without enforcement a receiver has no instruction to reject forged mail, however good the SPF record is.",
      +      "type": "boolean"
      +    },
      +    "summary": {
      +      "description": "Plain-language verdict.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "domain",
      +    "can_receive_mail",
      +    "spoofable",
      +    "summary"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the read-only nature is covered. The description adds value by disclosing that the tool runs three lookups together, returns a verdict plus raw records, and produces specific fields (can_receive_mail, spoofable, findings). This enriches the agent's understanding beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly structured: a one-line outcome summary, a sentence on mechanics and output, and two sentences on usage context. Every sentence adds information; there is no filler or repetition of schema or annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only, output-schema-bearing tool, the description covers what it does, how it behaves, when to use it, and how it relates to sibling tools. The output schema handles return-value details, so nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema's parameter description already explains that a domain is required and that a full email address is accepted with the domain extracted. The tool description adds no additional parameter-specific meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific, outcome-focused statement: 'Full email posture for a domain: can it receive mail, and can it be spoofed?' It then names the exact operations (MX, SPF, DMARC lookups) and explicitly contrasts itself with the sibling single-record tools, so an agent can distinguish it immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance: 'Use this as the default check before emailing an unfamiliar domain, when judging whether inbound mail claiming to be from a domain could be forged, or when auditing your own domains.' It also states when not to use it: 'Prefer this over the single-record tools unless you already know which record you need.' This leaves no ambiguity about selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources