DMARC Shark

MCP integration

DMARC Shark offers a Streamable HTTP Model Context Protocol (MCP) endpoint at https://dmarcshark.com/mcp (local development: http://localhost:3000/mcp). Point an MCP client that supports Streamable HTTP at that URL. No account or API key is needed. The server is stateless and serves JSON responses; you do not need to retain an MCP session ID. MCP discovery exposes exactly two domain-scoped tools, not a general DNS/network lookup tool.

Connect from a client

For an MCP client that accepts a server URL, select Streamable HTTP (not stdio or the legacy SSE transport) and enter:

https://dmarcshark.com/mcp

The client can discover the tools via tools/list and invoke them via tools/call. The client should obtain user approval before calling check_domain: it triggers public DNS queries and may replace a saved snapshot. get_saved_result does not query DNS. Your client may show the JSON-formatted text response, the structured result, or both. Both use the result schema.

check_domain

Fresh SPF, DMARC and MX check with optional DKIM selectors. Not read-only: rate limited and can replace a stored public snapshot. Input:

{"domain":"poshtui.com","selectors":["fm1"]}

domain is required; selectors is an optional array of up to two known single-label names. Input validation and normalization match the JSON API. Do not treat a selector without a key as evidence that a domain never signs DKIM. Successful tool output contains structuredContent with source: "fresh" and the complete result, plus content[0].text containing its JSON representation.

getsavedresult

Reads a previously stored result without DNS. Input:

{"domain":"poshtui.com"}

domain is required. Success returns structuredContent with source: "saved", saved: true, and the original check timestamp; content[0].text also contains the JSON result. If no unexpired result exists, the tool returns an error result rather than initiating a new check. Results expire after 90 days; new checks are never scheduled automatically.

Raw protocol example

Most users should use an MCP client. For troubleshooting, these JSON-RPC 2.0 requests work with the stateless endpoint. Use Content-Type: application/json and an Accept header containing application/json, text/event-stream:

curl -sS https://dmarcshark.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Then call one of the listed tools:

curl -sS https://dmarcshark.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"check_domain","arguments":{"domain":"poshtui.com"}}}'

To read instead, set name to get_saved_result and supply {"domain":"poshtui.com"} as arguments. A tool-level failure (invalid input, no saved result, or rate limit) is a JSON-RPC result with isError: true and an explanatory content[0].text; do not rely on HTTP status alone. In particular, a DNS failure can produce a successful tool result containing dns_status: "unknown", which is not a missing DNS policy.

MCP uses the same fresh-check and saved-read limits as the JSON API. A host or browser origin not on the server's allowlist may be rejected by the MCP transport. This service does not offer resources, prompts, DNS editing, email sending, or arbitrary network requests. Read the result guide before interpreting findings.