{
 "slug": "mailgun",
 "name": "Mailgun",
 "url": "https://mailgun.com",
 "domain": "mailgun.com",
 "category": "email-infrastructure",
 "category_name": "Email infrastructure",
 "tested_at": "2026-10-11",
 "run": "20261011T164403Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T232018Z",
   "date": "2026-10-01",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261006T083106Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261011T164403Z",
   "date": "2026-10-11",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 3,
    "signed": true,
    "inbox": [
     "matfy.com"
    ],
    "robots": "obey"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 3,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": null,
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": [
   {
    "standard": "MCP",
    "state": "behind",
    "behind": 1,
    "value": "2025-11-25"
   },
   {
    "standard": "MCP discovery",
    "state": "behind",
    "behind": null,
    "value": "legacy"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "reported",
 "driver": {
  "version": 3,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "076cd4c65a1a",
  "kb_version": "3+overlay-1353601952",
  "identity": "e8a92f24a9a8"
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 3,
  "signed": true,
  "inbox": [
   "matfy.com"
  ],
  "robots": "obey"
 },
 "same_level_drives": 3,
 "drives": 3,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Google reCAPTCHA (invisible)",
  "visible": false,
  "type": "network",
  "human": null,
  "how": "Check the Web Bot Auth signature on the sign-up request and skip reCAPTCHA (or lower the score threshold) for signed agents; or offer a documented sign-up API with email verification.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "form"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "through",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "documentation.mailgun.com/llms.txt (179 lines) links .md pages; OpenAPI 3.1.0 for the Send API, plus Validate and Inspect specs; official MCP server documented."
  },
  "signup": {
   "status": "blocked",
   "note": "Free sign-up (no card, 100 messages/day) in the browser: POST /create/new_account answered 400 and the page said \"Could not validate reCaptcha response\". Invisible reCAPTCHA, no visible challenge; no API or CLI sign-up documented."
  },
  "verify": {
   "status": "",
   "note": "Not reached: sign-up rejected.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Not reached: no account. Keys are made in the dashboard (app.mailgun.com/settings/api_security) or the documented keys API, which needs an account.",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "Not reached: no account. Also, robots.txt on api.mailgun.net and api.eu.mailgun.net is \"User-agent: * / Disallow: /\", so our agent may not call any API URL.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Not reached: no account.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [
    "Stripe Elements card form on the sign-up page"
   ],
   "rail_ids": [
    "stripe-elements"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "no 402 challenge, no x402/MPP/Stripe Projects listing, no /.well-known/ucp; card form (Stripe Elements) on the sign-up page for the Foundation 50k trial ($35/mo after 30 days). That form is behind the same reCAPTCHA that rejected our agent, so a person has to do it. We paid nothing. No billing API found in llms.txt.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "grade": "n/a",
   "note": "The sign-up page says \"Cancel anytime.\"; no billing or cancel API found in the docs index.",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "Not reached: no account was created, nothing to delete.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-11",
  "source": "probe",
  "options": [
   {
    "id": "stripe-elements",
    "name": "Stripe card form",
    "kind": "checkout",
    "first_party": true,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": true
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": false,
  "sdk": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST on api.mailgun.net / api.eu.mailgun.net; robots.txt disallows all paths",
  "openapi": "OAS 3.1.0 (per the docs index)",
  "mcp": "official, local stdio, 74 tools, the 25 Nov 2025 MCP spec",
  "llms_txt": "documentation.mailgun.com/llms.txt, links .md pages"
 },
 "can_do": [
  "Read the docs as Markdown through llms.txt and the .md page URLs",
  "Install and list the 74 tools of the official MCP server (needs a key to call them)"
 ],
 "cannot_do": [
  {
   "what": "Sign up for the free plan",
   "why": "Invisible reCAPTCHA rejected the sign-up: \"Could not validate reCaptcha response\""
  },
  {
   "what": "Call the API",
   "why": "No account; and robots.txt on api.mailgun.net disallows every path"
  },
  {
   "what": "Pay for a plan on its own",
   "why": "Only a card form on the sign-up page, behind the same reCAPTCHA; no agent payment rail"
  }
 ],
 "blockers": [
  "Invisible reCAPTCHA rejects the sign-up form for an automated browser",
  "robots.txt on the API hosts disallows every path"
 ],
 "tips_for_owner": [
  "Let verified agents through sign-up",
  "Allow agents in the API host robots.txt",
  "Offer a documented headless sign-up path",
  "Accept an agent payment rail",
  "Serve Markdown on Accept: text/markdown"
 ],
 "tips_for_agents": [
  "Read the docs from documentation.mailgun.com/llms.txt; every page has a .md URL",
  "The official MCP server is local stdio (npx @mailgun/mcp-server), 74 tools, protocol 2025-11-25, needs MAILGUN_API_KEY",
  "Untick \"Add a credit card\" on the sign-up form for the free plan (100 messages/day); it is ticked by default",
  "The API hosts' robots.txt disallows everything: an agent that obeys robots.txt cannot call the API"
 ],
 "selfhost": null,
 "summary": "An agent cannot get into Mailgun: the free sign-up form was rejected by an invisible reCAPTCHA (\"Could not validate reCaptcha response\") and there is no API sign-up. Even with an account, robots.txt on api.mailgun.net disallows every path for all user agents. The docs are agent-friendly (llms.txt, .md pages, OpenAPI 3.1.0) and there is an official local MCP server with 74 tools on the 25 Nov 2025 spec.",
 "wall": "Invisible reCAPTCHA rejects the sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Mailgun is an email-sending API. Our agent could read the documentation and list the tools of Mailgun's local MCP server, but could not create an account at all: an invisible bot check rejected the free sign-up form, and the company's own API addresses tell automated visitors to stay away.",
  "can_do": [
   "Read all of Mailgun's documentation as plain text",
   "Install Mailgun's official toolset and see what it offers (without being able to use it)"
  ],
  "cannot_do": [
   {
    "what": "Create a free account",
    "why": "An invisible bot check rejected the sign-up form"
   },
   {
    "what": "Call Mailgun's API at all",
    "why": "No account, and Mailgun's own rules tell automated visitors not to use the API"
   },
   {
    "what": "Pay for a paid plan",
    "why": "Payment needs a credit-card form behind the same bot check"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Send",
   "capability": "Send a transactional or bulk email via API",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v3/{domain}/messages",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Send"
   },
   "check": "GET /v3/{domain}/events?message-id={id} shows an 'accepted' or 'delivered' event",
   "source": "https://www.mailgun.com/products/send/; https://documentation.mailgun.com/docs/mailgun/get-started"
  },
  {
   "id": "cap-02",
   "group": "Send",
   "capability": "Send email via SMTP relay",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Domain Settings > SMTP credentials"
   },
   "check": "SMTP submission returns 250 OK and message appears in event log",
   "source": "https://www.mailgun.com/products/send/"
  },
  {
   "id": "cap-03",
   "group": "Send",
   "capability": "Batch-send up to 1000 personalized emails in one call",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v3/{domain}/messages (recipient-variables)",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Event log shows one accepted event per recipient variable entry",
   "source": "https://www.mailgun.com/products/send/"
  },
  {
   "id": "cap-04",
   "group": "Receive",
   "capability": "Receive and parse inbound email via routes",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /v3/routes",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Receiving > Routes"
   },
   "check": "GET /v3/routes shows created route; inbound webhook/store payload fires on matching mail",
   "source": "https://www.mailgun.com/products/send/#automate-email-processing-with-inbound-routes; https://documentation.mailgun.com/docs/mailgun/get-started"
  },
  {
   "id": "cap-05",
   "group": "Validate",
   "capability": "Validate a single email address in real time",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /v4/address/validate",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Validate"
   },
   "check": "API response returns result/risk fields for the submitted address",
   "source": "https://www.mailgun.com/products/validate/"
  },
  {
   "id": "cap-06",
   "group": "Validate",
   "capability": "Bulk-validate an uploaded list of email addresses",
   "weight": "core",
   "plan": "foundation",
   "surfaces": {
    "api": "POST /v4/address/validate/bulk",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Validate > Bulk upload"
   },
   "check": "GET /v4/address/validate/bulk/{id} shows status 'uploaded'/'completed' with per-address results",
   "source": "https://www.mailgun.com/products/validate/"
  },
  {
   "id": "cap-07",
   "group": "Validate",
   "capability": "Preview aggregate list health without full validation",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Validate > List preview"
   },
   "check": "Preview result shows aggregate risk breakdown for uploaded list",
   "source": "https://www.mailgun.com/products/validate/"
  },
  {
   "id": "cap-08",
   "group": "Inspect",
   "capability": "Preview an email across 100+ clients and devices before sending",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "REST API (Inspect)",
    "mcp": null,
    "cli": null,
    "ui": "Inspect app > Email preview"
   },
   "check": "Preview job result lists per-client/device render screenshots",
   "source": "https://www.mailgun.com/products/inspect/"
  },
  {
   "id": "cap-09",
   "group": "Inspect",
   "capability": "Run accessibility (ADA/EAA) compliance checks on an email",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "REST API (Inspect)",
    "mcp": null,
    "cli": null,
    "ui": "Inspect app > Accessibility check"
   },
   "check": "Check result lists flagged accessibility issues (45+ rule set) with pass/fail",
   "source": "https://www.mailgun.com/products/inspect/; https://www.mailgun.com/features/code-analysis/"
  },
  {
   "id": "cap-10",
   "group": "Inspect",
   "capability": "Check HTML/CSS code compatibility across email clients",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "REST API (Inspect)",
    "mcp": null,
    "cli": null,
    "ui": "Inspect app > Code analysis"
   },
   "check": "Analysis result lists unsupported CSS/HTML per client",
   "source": "https://www.mailgun.com/features/code-analysis/"
  },
  {
   "id": "cap-11",
   "group": "Templates",
   "capability": "Create and manage reusable email templates",
   "weight": "secondary",
   "plan": "foundation",
   "surfaces": {
    "api": "POST/GET/PUT/DELETE /v3/{domain}/templates",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Sending > Templates"
   },
   "check": "GET /v3/{domain}/templates/{name} returns the created template with its active version",
   "source": "https://www.mailgun.com/pricing/ (Foundation: Email template builder and API)"
  },
  {
   "id": "cap-12",
   "group": "Lists",
   "capability": "Manage mailing lists and members",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST/GET/PUT/DELETE /v3/lists and /v3/lists/{address}/members",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Sending > Mailing Lists"
   },
   "check": "GET /v3/lists/{address}/members shows added member",
   "source": "https://www.mailgun.com/pricing/ (Mailing Lists feature row)"
  },
  {
   "id": "cap-13",
   "group": "Tracking",
   "capability": "Track opens, clicks, and unsubscribes",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v3/{domain}/events",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Sending > Logs/Analytics"
   },
   "check": "GET /v3/{domain}/events?event=opened returns open event for the sent message",
   "source": "https://www.mailgun.com/products/send/#email-data-with-depth"
  },
  {
   "id": "cap-14",
   "group": "Tracking",
   "capability": "View email event logs and delivery status",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v3/{domain}/events",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Sending > Logs"
   },
   "check": "GET /v3/{domain}/events returns delivered/failed status with timestamp and error code",
   "source": "https://www.mailgun.com/products/send/#email-data-with-depth; https://documentation.mailgun.com/docs/mailgun/get-started"
  },
  {
   "id": "cap-15",
   "group": "Tracking",
   "capability": "View email analytics dashboards (open/click/bounce rates)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v3/{domain}/stats/total",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Analytics"
   },
   "check": "GET /v3/{domain}/stats/total returns time-series metrics matching dashboard",
   "source": "https://www.mailgun.com/products/send/#email-data-with-depth"
  },
  {
   "id": "cap-16",
   "group": "Deliverability",
   "capability": "Receive event webhooks for sending activity",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST/GET /v3/domains/{domain}/webhooks",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Sending > Webhooks"
   },
   "check": "GET /v3/domains/{domain}/webhooks shows configured URL; test event posts to it",
   "source": "https://www.mailgun.com/pricing/ (Webhooks feature row); https://www.mailgun.com/products/send/"
  },
  {
   "id": "cap-17",
   "group": "Deliverability",
   "capability": "Manage suppressions (bounces, complaints, unsubscribes)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST/DELETE /v3/{domain}/bounces, /complaints, /unsubscribes",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Sending > Suppressions"
   },
   "check": "GET /v3/{domain}/bounces lists added address; DELETE removes it from suppression list",
   "source": "https://documentation.mailgun.com/docs/mailgun/get-started (Suppression Management)"
  },
  {
   "id": "cap-18",
   "group": "Deliverability",
   "capability": "Classify and view bounce reasons",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v3/{domain}/events?event=failed",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Sending > Logs"
   },
   "check": "Event payload includes bounce classification (e.g. severity, reason code)",
   "source": "https://www.mailgun.com/pricing/ (Bounce Classification feature row)"
  },
  {
   "id": "cap-19",
   "group": "Deliverability",
   "capability": "Set up send time optimization for campaigns",
   "weight": "secondary",
   "plan": "scale",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Sending > Send Time Optimization"
   },
   "check": "Message sent with STO enabled is delayed to recipient-specific optimal send window per event log timestamps",
   "source": "https://www.mailgun.com/products/send/#automate-email-processing-with-inbound-routes; https://www.mailgun.com/pricing/ (Send Time Optimization row)"
  },
  {
   "id": "cap-20",
   "group": "Deliverability",
   "capability": "Schedule and receive automated analytics reports",
   "weight": "secondary",
   "plan": "scale",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Analytics > Scheduled reports"
   },
   "check": "Scheduled report configuration persists and a report is delivered on schedule",
   "source": "https://www.mailgun.com/pricing/ (Schedule and send analytics reports, Scale plan)"
  },
  {
   "id": "cap-21",
   "group": "Domains",
   "capability": "Add and configure custom sending domains",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST/GET/PUT/DELETE /v3/domains",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Sending > Domains"
   },
   "check": "GET /v3/domains/{name} returns domain with DNS/state info after creation",
   "source": "https://documentation.mailgun.com/docs/mailgun/get-started (Domain Management); https://www.mailgun.com/pricing/"
  },
  {
   "id": "cap-22",
   "group": "Domains",
   "capability": "Authenticate domain sending with DKIM/SPF/DMARC",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v3/domains/{name} (dns records)",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Domain Settings > DNS records"
   },
   "check": "Domain verification status returns 'active' after DNS records are confirmed",
   "source": "https://documentation.mailgun.com/docs/mailgun/get-started (DKIM and SPF, DMARC)"
  },
  {
   "id": "cap-23",
   "group": "Domains",
   "capability": "Create and manage API keys",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /v3/keys",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Settings > API Security"
   },
   "check": "GET /v3/keys lists newly created key id",
   "source": "https://www.mailgun.com/pricing/ (API keys count per plan)"
  },
  {
   "id": "cap-24",
   "group": "Deliverability",
   "capability": "Manage dedicated IP pools",
   "weight": "secondary",
   "plan": "scale",
   "surfaces": {
    "api": "GET/POST /v3/ip_pools",
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Sending > IPs"
   },
   "check": "GET /v3/ip_pools shows pool with assigned IPs; domain shows pool assignment",
   "source": "https://www.mailgun.com/pricing/ (Dedicated IP pools, Scale plan)"
  },
  {
   "id": "cap-25",
   "group": "Access",
   "capability": "Configure SAML single sign-on",
   "weight": "peripheral",
   "plan": "scale",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Settings > SSO"
   },
   "check": "SSO configuration saved and login via SAML identity provider succeeds",
   "source": "https://www.mailgun.com/pricing/ (SAML SSO, Scale plan)"
  },
  {
   "id": "cap-26",
   "group": "Access",
   "capability": "Invite and manage teammate accounts/permissions",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Settings > Team members"
   },
   "check": "Invited teammate appears in team member list with assigned role",
   "source": "https://www.mailgun.com/products/inspect/ (Unlimited user seats)"
  },
  {
   "id": "cap-27",
   "group": "Support",
   "capability": "Contact live phone/chat support",
   "weight": "peripheral",
   "plan": "scale",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Control Panel > Support"
   },
   "check": "Support chat/phone channel is reachable from account (manual confirmation, no API)",
   "source": "https://www.mailgun.com/pricing/ (Live phone & chat support, Scale plan)"
  }
 ],
 "attempts": [
  {
   "t": "01:02",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "docs",
   "task": "llms.txt",
   "result": "done",
   "evidence": "https://documentation.mailgun.com/llms.txt 200 text/plain, 179 lines, H1 \"Mailgun Documentation\", links to .md pages; www.mailgun.com/llms.txt 404"
  },
  {
   "t": "01:02",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "docs",
   "task": "OpenAPI",
   "result": "done",
   "evidence": "llms.txt lists \"Mailgun API defined by OpenAPI Specification (OAS) 3.1.0\" (docs/mailgun/api-reference/send/mailgun.md), plus Validate and Inspect OAS pages"
  },
  {
   "t": "01:02",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "docs",
   "task": "markdown",
   "result": "partial",
   "evidence": ".md URLs serve markdown (docs/mailgun/mcp.md 200); Accept: text/markdown on /docs/mailgun/quickstart returned text/html, vary: Accept-Encoding only"
  },
  {
   "t": "01:02",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "mcp",
   "task": "MCP server",
   "result": "done",
   "evidence": "docs/mailgun/mcp.md: official local stdio server @mailgun/mcp-server (npm), \"Mailgun does not currently offer a hosted version\"; needs MAILGUN_API_KEY. No HTTP endpoint to probe server/discover"
  },
  {
   "t": "01:02",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "cards",
   "task": "AI catalog / A2A card / aipref",
   "result": "failed",
   "evidence": "www.mailgun.com/.well-known/ai-catalog.json 404, /.well-known/agent-card.json 404; robots.txt (www) \"User-agent: * Disallow:\" + Crawl-delay: 10, no Content-Usage/Content-signal; no Content-Usage header"
  },
  {
   "t": "01:02",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "robots",
   "task": "API host robots.txt",
   "result": "blocked",
   "evidence": "/v3/domains, /.well-known/oauth-protected-resource",
   "notes": "robots.txt disallows the whole REST API host for every agent"
  },
  {
   "t": "01:02",
   "cap": "pay",
   "capability": "pay probes",
   "task": "402/registries/checkout",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pay_probe.json: no 402 challenges (api.mailgun.com, x402./mpp./agents. no such host), no mpp/stripe-projects/bazaar listings, no /.well-known/ucp; checkout stripe-elements on signup page; free plan present. pay_tx.json: refused, no 402 asking USDC"
  },
  {
   "t": "04:09",
   "cap": "signup",
   "capability": "sign up",
   "task": "Free sign-up (no card) at signup.mailgun.com/new/signup with the agent's inbox",
   "route": "browser",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "First submit: form reset to its default (card box re-checked), no message, no mail within 30 s",
   "notes": "silent"
  },
  {
   "t": "04:09",
   "cap": "signup",
   "capability": "sign up",
   "task": "Second submit of the same form (card unchecked, free plan: \"Free accounts without a credit card are limited to 100 messages per day.\")",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "POST https://signup.mailgun.com/create/new_account -> 400; page shows \"Could not validate reCaptcha response https://www.mailgun.com/contact/support/\". reCAPTCHA (key 6Ld7p-..., api2/reload+clr, invisible: no widget shown, visible_challenge false) rejected our agent's browser. No retry with changed behaviour. No documented API/CLI sign-up.",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "no"
   }
  },
  {
   "t": "04:09",
   "cap": "verify",
   "capability": "verify",
   "task": "verify",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not reached: sign-up rejected by invisible reCAPTCHA"
  },
  {
   "t": "04:09",
   "cap": "credentials",
   "capability": "credentials",
   "task": "credentials",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not reached: no account. Docs: API keys are made in the dashboard (app.mailgun.com/settings/api_security) and via /v1/keys (RBAC keys); also api.mailgun.net robots.txt \"Disallow: /\" refuses every API call for our agent"
  },
  {
   "t": "04:09",
   "cap": "first_call",
   "capability": "The first call",
   "task": "The first call",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not reached: no account."
  },
  {
   "t": "04:09",
   "cap": "first_action",
   "capability": "The first action",
   "task": "The first action",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not reached: no account"
  },
  {
   "t": "04:09",
   "cap": "delete",
   "capability": "delete",
   "task": "delete",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not reached: no account was created, nothing to delete"
  },
  {
   "t": "04:09",
   "cap": "credentials",
   "capability": "scoped API key headless",
   "key": "create",
   "task": "create a scoped key via documented API",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Docs rbac-mgmt.md documents role-based keys and domain sending keys; no account (reCAPTCHA wall) and the API host robots.txt disallows all paths for our agent"
  },
  {
   "t": "04:09",
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "cancel",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "not tested: no plan or trial was started. Sign-up page: \"Free 30-Day Trial ... After 30 days, only $35.00/mo. Cancel anytime.\" (Foundation 50k trial needs a card); no billing/cancel API in llms.txt"
  },
  {
   "t": "04:58",
   "cap": "discovery",
   "capability": "mcp",
   "task": "server/discover + initialize on official @mailgun/mcp-server 2.1.3 (stdio, run locally, no key)",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "server/discover -> JSON-RPC -32601 \"Method not found\" (legacy); initialize offering 2026-07-28 -> protocolVersion \"2025-11-25\", serverInfo mailgun 2.1.3, capabilities.tools.listChanged; tools/list -> 74 tools (post-v3-domain-messages, get-v4-domains, webhooks, ip_pools, ...). Calls not made: no API key, and the tools call api.mailgun.net which robots.txt disallows for our agent."
  }
 ],
 "stale": false,
 "icon": "/logos/mailgun.png",
 "monitored": false,
 "verdict": "Needs a person before anything else: sign-up stops at an invisible reCAPTCHA, L1 · Needs a person. Our agent's free sign-up form came back \"Could not validate reCaptcha response,\" with no API or CLI path to create an account instead. Nothing past that point was reachable: no key, no call, no work done. Our agent also found robots.txt on api.mailgun.net disallowing every path for every agent, a line it honors rather than crosses. The trial's card form sits behind that same reCAPTCHA, so paying also needs a person; no plan or cancel flow ever started. Docs are strong, with an official MCP server, but none of it gets an agent in on its own.",
 "page": "https://agentdrives.com/tools/mailgun?via=api"
}