Overview
mailX exposes all email deliverability tools via MCP (Model Context Protocol) — the open standard for connecting AI agents to external tools. Any agent that speaks MCP can call mailX tools directly: check SPF, DKIM, DMARC, blacklists, test SMTP/IMAP, and generate DNS records.
https://themailx.com/mcpTransport: Streamable HTTP (JSON-RPC 2.0 over POST)
Protocol versions:
2025-11-25 (latest), 2025-06-18, 2025-03-26Authentication: None required
Supported by Claude (Desktop, Code, API), ChatGPT (Connectors), Cursor, VS Code, Windsurf, Zed, OpenAI Agents SDK, Anthropic API, and any framework that speaks MCP (LangChain, CrewAI, Vercel AI SDK, etc.).
Quick Start
The fastest way to test — paste this into any terminal:
# 1. Initialize the connection
curl -s -X POST https://themailx.com/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "initialize",
"id": 1,
"params": {
"protocolVersion": "2025-11-25",
"capabilities": {},
"clientInfo": {"name": "curl-test", "version": "1.0"}
}
}'
# 2. List available tools
curl -s -X POST https://themailx.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "id": 2}'
# 3. Call a tool
curl -s -X POST https://themailx.com/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 3,
"params": {
"name": "spf_check",
"arguments": {"domain_name": "google.com"}
}
}'
Protocol Details
Transport
mailX uses the Streamable HTTP transport defined in the MCP specification. All communication is via POST to a single endpoint. Each request is a JSON-RPC 2.0 message; each response is a JSON object with Content-Type: application/json.
Lifecycle
initialize— Client sends its capabilities and protocol version. Server responds with its capabilities, server info, and human-readable instructions.notifications/initialized— Client acknowledges initialization (no response expected).tools/list— Fetch the list of available tools with input schemas and annotations.tools/call— Call a tool with arguments. Server returns the result.prompts/list— Fetch the list of one-click prompts (see Prompts).prompts/get— Fetch a specific prompt rendered with arguments.resources/list— Fetch the list of resources the server exposes (see Resources).resources/read— Read a specific resource by URI.resources/templates/list— List parameterized resource templates (none currently — returns empty array).ping— Health check. Server returns an empty result.
Tool Annotations
Every tool in tools/list includes an annotations object that tells agents about the tool's behavior:
| Field | Value | Meaning |
|---|---|---|
| readOnlyHint | true | Every tool except smtp_check and imap_check: checks, lookups, finders, and the SPF/DMARC generators (which only compute a record for you to publish). |
| readOnlyHint | false | smtp_check and imap_check: they log in with credentials you submit, and smtp_check can send a test email. Agents should ask for user confirmation before invoking these. |
| destructiveHint | false | No tool modifies DNS records, mailbox settings, domain configuration, or external infrastructure. |
| idempotentHint | true | Repeating a call has no extra effect. Exception: smtp_check (false), which sends one test email per call when from_email and to_email are set. |
| openWorldHint | true | Tools that query live DNS, blacklist sources, SMTP servers or IMAP servers. |
| openWorldHint | false | spf_generate, dmarc_generate, smtp_finder and imap_finder: they only compute a record or read mailX's own provider catalog. |
smtp_check: If from_email and to_email are provided, the tool may attempt to send a test email. Only provide these fields if you are authorized to send from the account and intentionally want to test full sending capability.
ChatGPT endpoint
ChatGPT connects to https://themailx.com/mcp/chatgpt. It is the same server without smtp_check and imap_check, because those take mailbox credentials. Everything else on this page applies to both endpoints.
Error Handling
Tool errors (invalid arguments, failed checks) are returned inside the result object with "isError": true, not as JSON-RPC protocol errors. This follows the MCP spec recommendation so the agent can self-correct. Calling a tool that doesn't exist on the endpoint returns a JSON-RPC error with code -32602.
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [{"type": "text", "text": "{\"errors\": {\"domain_name\": [\"Required\"]}}"}],
"isError": true
}
}
Available Tools
SPF spf_check
Use this when the user asks whether a domain's SPF record is valid, which servers may send email for a domain, or why SPF fails. Returns the live SPF record, a pass/fail status and a fix suggestion.
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain_name | string | Yes | The domain to check SPF records for, e.g. example.com |
DKIM dkim_check
Use this when the user wants to verify DKIM for a domain. Pass the DKIM selector if known (for example google for Google Workspace, selector1 or selector2 for Microsoft 365). If the selector is unknown, omit it: mailX then tries common selectors and returns the ones it finds. Returns the published key and its status. A miss on common selectors does not prove DKIM is absent.
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain_name | string | Yes | The domain to check DKIM records for, e.g. example.com |
| dkim_selector | string | No | The DKIM selector, e.g. google (Google Workspace), selector1 or selector2 (Microsoft 365). Optional: omit it to try common selectors. |
DMARC dmarc_check
Use this when the user asks about DMARC, spoofing protection, or what happens to emails that fail authentication. Returns the live DMARC record, its policy and a fix suggestion.
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain_name | string | Yes | The domain to check DMARC records for, e.g. example.com |
BIMI bimi_check
Use this when the user asks about BIMI or showing a brand logo next to their emails in inboxes. Returns the live BIMI record, the logo URL it declares, and a fix suggestion.
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain_name | string | Yes | The domain to check BIMI records for, e.g. example.com |
DMARC Generator dmarc_generate
Use this when the user needs a DMARC record. Returns the record name, value and type ready to publish. mailX does not publish it.
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain_name | string | Yes | The domain to generate a DMARC record for, e.g. example.com |
| string | Yes | The email address to receive DMARC aggregate reports, e.g. dmarc@example.com | |
| dmarc_policy | string | Yes | The DMARC policy: none (monitor only), quarantine (mark as spam), or reject (block entirely) |
SPF Generator spf_generate
Use this when the user needs a new SPF record for their email provider. Returns a TXT record ready to publish, or explains what to set up instead when the provider does not need a root SPF include. mailX does not publish it.
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain_name | string | Yes | The domain to generate an SPF record for, e.g. example.com |
| provider | string | Yes | The mail provider identifier, e.g. google, mailgun, sendgrid, postmark, amazon-ses |
| hard_fail_boolean | boolean | Yes | If true, uses strict -all policy (reject unauthorized senders). If false, uses soft ~all (mark but deliver). |
SMTP Checker smtp_check
Use this only when the user explicitly asks to test an SMTP login for a mail account they control and provides its credentials. Connects to the SMTP server and reports whether connection, encryption and authentication succeed. If from_email and to_email are both given, it also sends one test email. Credentials are not stored.
| Parameter | Type | Required | Description |
|---|---|---|---|
| host | string | Yes | The SMTP server hostname, e.g. smtp.gmail.com |
| port | integer | Yes | The SMTP port number, e.g. 587 for TLS, 465 for SSL, 25 for unencrypted |
| username | string | Yes | The SMTP username for authentication |
| password | string | Yes | The SMTP password or app-specific password |
| encryption | string | Yes | The encryption protocol: ssl, tls, or none |
| from_email | string | No | Optional sender email address for sending a test email |
| to_email | string | No | Optional recipient email address for sending a test email |
IMAP Checker imap_check
Use this only when the user explicitly asks to test an IMAP login for a mailbox they control and provides its credentials. Connects to the IMAP server and reports whether connection, encryption and authentication succeed. Credentials are not stored.
| Parameter | Type | Required | Description |
|---|---|---|---|
| imap_host | string | Yes | The IMAP server hostname, e.g. imap.gmail.com |
| imap_port | integer | Yes | The IMAP port number, e.g. 993 for SSL, 143 for unencrypted |
| username | string | Yes | The IMAP username for authentication |
| password | string | Yes | The IMAP password or app-specific password |
| imap_encryption | string | Yes | The encryption protocol: ssl, tls, or none |
SMTP Finder smtp_finder
Use this when the user needs the outgoing mail (SMTP) server settings for an email provider or sending service, such as Gmail, Outlook, Microsoft 365, Zoho, Amazon SES or SendGrid. Returns the host, ports with encryption, what to use to log in, and the provider's setup guide. Never asks for the user's credentials.
| Parameter | Type | Required | Description |
|---|---|---|---|
| provider_name | string | Yes | The email provider name to look up, e.g. gmail, sendgrid, mailgun, outlook |
IMAP Finder imap_finder
Use this when the user needs the incoming mail (IMAP) server settings for an email provider, such as Gmail, Outlook, Yahoo, iCloud or Zoho. Returns the host, ports with encryption and the provider's setup guide. Never asks for the user's credentials.
| Parameter | Type | Required | Description |
|---|---|---|---|
| imap_provider_name | string | Yes | The email provider name to look up, e.g. gmail, outlook, yahoo |
Blacklist Checker blacklist_check
Use this when the user suspects their domain is blacklisted or blocked. Checks the domain against major DNS blocklists and returns the result for each list.
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain_name | string | Yes | The domain name or IP address to check against blacklists, e.g. example.com or 1.2.3.4 |
MX Lookup mx_lookup
Use this when the user wants to know which mail servers receive email for a domain. Returns the domain's live MX records with their priorities.
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain_name | string | Yes | The domain to look up MX records for, e.g. example.com |
TXT Lookup txt_lookup
Use this when the user wants to see a domain's TXT records, for example to find verification tokens or check what SPF or other policies are published. Returns all live TXT records.
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain_name | string | Yes | The domain to look up TXT records for, e.g. example.com |
CNAME Lookup cname_lookup
Use this when the user wants to know whether a hostname is an alias of another one, for example to verify DKIM or tracking CNAMEs. Returns the live CNAME target.
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain_name | string | Yes | The domain to look up CNAME records for, e.g. www.example.com |
PTR Lookup ptr_lookup
Use this when the user wants the reverse DNS (PTR) of an IP address, for example to check a sending server's reverse DNS. Returns the hostname the IP resolves to.
| Parameter | Type | Required | Description |
|---|---|---|---|
| ip_address | string | Yes | The IP address to look up, e.g. 8.8.8.8 or 142.250.80.46 |
DNS Lookup dns_lookup
Use this when the user wants every DNS record for a domain in one view (A, AAAA, CNAME, MX, NS, TXT, SOA). Returns the live records grouped by type.
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain_name | string | Yes | The domain to look up all DNS records for, e.g. example.com |
Prompts
mailX exposes two one-click prompts via prompts/list and prompts/get. In clients that support prompts (Claude Desktop, Claude Code, Cursor, Zed, MCP Inspector), they appear in the slash-command menu and let users run a full workflow without composing the agent message themselves.
| Prompt | Arguments | What it does |
|---|---|---|
audit-deliverability |
domain (required), dkim_selector (optional) |
Runs spf_check, dmarc_check, dkim_check, and blacklist_check in parallel, then reports a pass/fail summary with copy-pasteable DNS fixes for any gaps. |
setup-dns |
domain (required), provider (required, e.g. google, mailgun, sendgrid) |
Generates SPF + DMARC records for the given provider with copy-pasteable DNS values, plus DKIM enablement instructions specific to the provider. |
Example prompts/get call:
curl -s -X POST https://themailx.com/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "prompts/get",
"id": 1,
"params": {
"name": "audit-deliverability",
"arguments": {"domain": "example.com"}
}
}'
Resources
mailX exposes its Agent Skill as MCP resources over the mailx:// URI scheme. Clients that support resources (Claude Desktop, MCP Inspector, Zed) can attach them as conversation context.
| URI | MIME type | Content |
|---|---|---|
mailx://skills/email-deliverability |
text/markdown |
The full SKILL.md — workflows, tool table, key rules. Same content as /skills/email-deliverability/SKILL.md. |
mailx://skills/email-deliverability/diagnosis |
text/markdown |
Detailed reference for interpreting combined SPF/DKIM/DMARC/blacklist results and mapping failures to fixes per provider. |
Use resources/list to enumerate them and resources/read with a URI to fetch the content.
Session Config (Smithery / hosted clients)
For aggregators like Smithery that pass user preferences through to the upstream server, mailX reads three optional query parameters at connection time and uses them as defaults whenever the corresponding tool input is omitted from a call:
| Query param | Fills in | Used by |
|---|---|---|
default_dkim_selector | dkim_selector | dkim_check |
preferred_provider | provider | spf_generate, the setup-dns prompt |
dmarc_aggregate_email | email | dmarc_generate |
Example: a client that points at https://themailx.com/mcp?default_dkim_selector=google&preferred_provider=mailgun can then call dkim_check with just {"domain_name": "example.com"} and the server will fill in dkim_selector=google automatically. Defaults never override values explicitly passed in the call.
Claude (Desktop, Web, Code)
Claude Code (CLI & IDE extensions)
Add a .mcp.json file to your project root:
{
"mcpServers": {
"mailx": {
"type": "http",
"url": "https://themailx.com/mcp"
}
}
}
Or via CLI:
claude mcp add --transport http mailx https://themailx.com/mcp
Claude.ai (Web) & Claude Desktop
- Go to Customize (or Settings) → Connectors
- Click "+" → Add custom connector
- Paste this URL:
https://themailx.com/mcp - Click Add — no authentication needed
In a conversation, click "+" → Connectors → toggle mailX on.
Anthropic Messages API
See Anthropic API section below for programmatic usage.
ChatGPT
Custom Apps in ChatGPT (Web UI)
Available on all paid ChatGPT plans (Plus, Pro, Business, Enterprise, Education).
- Open Settings → Apps → Advanced settings, and enable Developer mode.
- Return to Apps and click Create.
- Fill in the form:
- Name:
mailX - Description: Email deliverability tools — check SPF/DKIM/DMARC/BIMI, scan blacklists, test SMTP/IMAP, and generate DNS records.
- Connector URL:
https://themailx.com/mcp - Authentication: No Authentication
- Name:
- Save. mailX tools become available in chat (toggle the connector on per conversation) and in Deep Research.
OpenAI Responses API
See OpenAI Agents SDK section below for programmatic usage.
Cursor
Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"mailx": {
"url": "https://themailx.com/mcp"
}
}
}
Restart Cursor. Tools are available in Agent mode (including Plan Mode).
VS Code (GitHub Copilot)
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"mailx": {
"type": "http",
"url": "https://themailx.com/mcp"
}
}
}
"servers" as the top-level key, not "mcpServers".
Or use MCP: Add Server from the Command Palette. Tools are available in Copilot Chat agent mode.
Windsurf
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"mailx": {
"serverUrl": "https://themailx.com/mcp"
}
}
}
serverUrl (not url) for HTTP servers.
Zed
Add to your Zed settings.json:
{
"context_servers": {
"mailx": {
"url": "https://themailx.com/mcp"
}
}
}
Tools are available in Zed's Agent Panel.
OpenAI Agents SDK / Responses API
Python SDK
Install with pip install openai-agents, then:
import asyncio
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp
async def main():
async with MCPServerStreamableHttp(
name="mailx",
params={"url": "https://themailx.com/mcp"},
) as mailx:
agent = Agent(
name="Email Expert",
instructions="Use mailx tools to diagnose email deliverability.",
mcp_servers=[mailx],
)
result = await Runner.run(agent, "Audit deliverability for mailwarm.net")
print(result.final_output)
asyncio.run(main())
Responses API (direct)
curl -X POST https://api.openai.com/v1/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"tools": [{
"type": "mcp",
"server_label": "mailx",
"server_url": "https://themailx.com/mcp",
"require_approval": "never"
}],
"input": "Check the SPF and DMARC records for mailwarm.net"
}'
Anthropic Messages API
Use MCP tools directly from the Claude API via the MCP Connector:
curl -X POST https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "content-type: application/json" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-client-2025-11-20" \
-d '{
"model": "claude-opus-4-7",
"max_tokens": 4096,
"mcp_servers": [{
"type": "url",
"url": "https://themailx.com/mcp",
"name": "mailx"
}],
"tools": [{
"type": "mcp_toolset",
"mcp_server_name": "mailx"
}],
"messages": [{
"role": "user",
"content": "Run a full deliverability audit on mailwarm.net"
}]
}'
anthropic-beta: mcp-client-2025-11-20 in your headers. Anthropic's MCP Connector currently supports tool calls only — the prompts and resources features described below work in Claude Desktop, Claude Code, Cursor, and Zed natively, but not through the Messages API connector.
Agent Skill
mailX also publishes an Agent Skill — a markdown file (SKILL.md) that teaches AI agents how and when to use the MCP tools effectively.
The skill covers: diagnostic workflows, error interpretation, fix recommendations, and best-practice audit sequences.
Install via Claude Code
/plugin marketplace add Mailwarm/mailx-skills
/plugin install email-deliverability@mailx-skills
Claude.ai (web)
First enable Code Execution and File Creation under Settings → Capabilities (skills require them). Then download email-deliverability.zip, go to Settings → Capabilities → Skills, click Upload, and select the file.
.md, a .zip, or a .skill file. We recommend the zip because it bundles references/diagnosis.md alongside SKILL.md — a bare SKILL.md installs too, but without the reference file.
Direct URL
The live SKILL.md is always available at:
https://themailx.com/skills/email-deliverability/SKILL.md
Point any agent that supports skills at this URL. It updates dynamically as tools are added or modified.
Discovery Endpoints
Agents and clients can auto-discover the MCP server and skill via these standard endpoints:
| URL | Purpose |
|---|---|
| /.well-known/mcp/server-card.json | SEP-2127 server card — scanned by Smithery and other MCP aggregators. Includes tools, prompts, resources, and the session-config schema. |
| /.well-known/mcp.json | MCP server metadata, transport, and tool list (lightweight summary). |
| /.well-known/agent-skills/index.json | Agent Skills Discovery RFC v0.2.0 index (name, type, URL, digest). |
| /.well-known/skills.json | Legacy skills index — kept for backwards compatibility. |
| /.well-known/api-catalog | RFC 9727 API catalog (application/linkset+json) linking the REST API and MCP endpoint. |
| /.claude-plugin/marketplace.json | Claude Code marketplace catalog. |
| /skills/email-deliverability/SKILL.md | Live rendered skill file. |
| /llms.txt | Plain-text summary for LLM discovery. |
| /docs/api | REST API documentation. |
| /docs/mcp | This page. |