# ai.kaiv/email-check

> Email posture for any domain: can it receive mail, can it be spoofed? MX, SPF and DMARC.

- name: ai.kaiv/email-check
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 76/100 flags: no-repository
- quality: 100/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ai.kaiv%2Femail-check
- tools: https://api.protogrid.dev/v1/servers/ai.kaiv%2Femail-check/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "email-check": {
      "type": "http",
      "url": "https://api.kaiv.ai/api/bridge/mcp/email-check-b6ab5250"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 97
- freshness: 85
- provenance: 45
- drivers: +dns-namespace +reachable +uptime-93% ~updated-60d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 100/100 (strong)

### protocol: 100 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- pass `protocol.list_ttl`: tool list is cacheable (ttlMs 60000)

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 4 of 4 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 795 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 4, about 795 tokens to load them all
- tool set hash: 50efc6c9bc917e87e2ba857e26cf44d6
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.kaiv/email-check.svg)](https://protogrid.dev/servers/ai.kaiv/email-check)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://api.kaiv.ai/api/bridge/mcp/email-check-b6ab5250 (streamable-http, auth none, reachable true, uptime30d 0.9279279)

## Packages

_none_

## Tools (4)

- `check_email_domain`: 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.
- `get_dmarc_record`: DMARC record, policy, and whether it actually protects.

Returns the DMARC TXT record at _dmarc.<domain>, its policy (none / quarantine / reject), the percentage it applies to, and whether that policy protects against spoofing. Also flags the case of MULTIPLE DMARC records, which RFC 7489 requires receivers to treat as no policy at all — a domain in that state is unprotected however strict its records look. A policy of "none" is monitoring only and does not stop forged mail. Use when assessing whether mail claiming to be from a domain can be trusted.
- `get_mx_records`: Mail exchanger records for a domain.

Returns the MX hosts in priority order and whether any exist. A domain with no MX records cannot receive mail, so sending to it will bounce. Use when you only need deliverability and not spoofing posture; use check_email_domain for the full picture.
- `get_spf_record`: SPF record and how strict it is.

Returns the SPF TXT record, the qualifier on its `all` mechanism (fail / softfail / neutral / pass) and what that means in practice, plus whether more than one SPF record exists — which receivers treat as an error, leaving the domain unprotected. Use when diagnosing why mail from a domain is being rejected or marked.
