{
 "slug": "mailtrap",
 "name": "Mailtrap",
 "url": "https://mailtrap.io",
 "domain": "mailtrap.io",
 "category": "email-infrastructure",
 "category_name": "Email infrastructure",
 "tested_at": "2026-10-06",
 "run": "20261006T083126Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261002T052254Z",
   "date": "2026-10-02",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261006T083126Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "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": "0/10",
 "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": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "f3d0adeeb256",
  "kb_version": "2+overlay-9e43028a2c",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 2,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Google reCAPTCHA (invisible, escalating to v2 checkbox)",
  "visible": true,
  "type": "network",
  "human": "",
  "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": "llms.txt (mailtrap.io and docs.mailtrap.io), .md pages, Accept: text/markdown negotiation, OpenAPI 3.1.0 specs on GitHub"
  },
  "signup": {
   "status": "human",
   "via": "",
   "note": "Visible reCAPTCHA v2 checkbox appeared after our agent's browser submitted the sign-up form; this requires a real person to solve."
  },
  "verify": {
   "status": "",
   "note": "No account; no confirmation mail",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "API tokens are made in the web app after sign-up (docs: 'we require a human to: Sign up ... Create an API Token'); no OAuth/device flow/agent registration",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "No token: GET /api/accounts -> 401 Incorrect API token",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "No token",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [
    "credit card in web Billing (vendor unknown, behind login)"
   ],
   "rail_ids": [
    "card"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "No 402/x402/MPP/UCP; not in mpp.dev or x402 Bazaar; monthly plans are card-only via the web UI; free tier on all products, no card",
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "No plan started; docs: cancel in web Billing UI only, no API/MCP",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account to delete; docs: deletion only in web Account settings, no API operation",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [
   {
    "id": "card",
    "name": "Card checkout",
    "kind": "checkout",
    "first_party": false,
    "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": true,
  "sdk": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": true
 },
 "surface_notes": {
  "api": "REST, 136 operations across 10 OpenAPI specs",
  "openapi": "3.1.0, github.com/mailtrap/mailtrap-openapi",
  "mcp": "official stdio, 125 tools, the 25 Nov 2025 MCP spec",
  "cli": "official Go CLI, ~87 commands"
 },
 "can_do": [
  "Read all docs as Markdown (llms.txt, .md URLs, Accept: text/markdown)",
  "Install and list the official MCP server's 125 tools without an account"
 ],
 "cannot_do": [
  {
   "what": "Create an account",
   "why": "Sign-up form escalates to a visible reCAPTCHA checkbox; no sign-up API"
  },
  {
   "what": "Get an API token",
   "why": "Only in the web app after sign-up"
  },
  {
   "what": "Any core capability (send, sandbox, templates, campaigns, stats, logs)",
   "why": "Every call needs an API token"
  },
  {
   "what": "Buy or cancel a plan headless",
   "why": "Card in web Billing only; no billing API"
  }
 ],
 "blockers": [
  "Visible reCAPTCHA v2 checkbox on the sign-up form",
  "API tokens only created in the web app"
 ],
 "tips_for_owner": [
  "Let verified agents sign up without CAPTCHA",
  "Offer a headless credential path",
  "Update MCP server to the 28 Jul 2026 spec",
  "Add plan cancel and account delete APIs",
  "Return problem+json errors, one shape"
 ],
 "tips_for_agents": [
  "Ask a human for the account and an API token first; Mailtrap's own AI onboarding doc requires it",
  "With a token, use npx -y mcp-mailtrap (125 tools) or the official CLI",
  "Test with the sandbox API (sandbox.api.mailtrap.io) before real sends",
  "Fetch docs with .md or Accept: text/markdown"
 ],
 "selfhost": {
  "install": {
   "status": "skipped",
   "minutes": 0,
   "note": "no docker in the drive sandbox (Mailtrap Local, open source, exists)"
  }
 },
 "summary": "Mailtrap has strong agent surfaces on paper: llms.txt and Markdown docs, OpenAPI 3.1.0 (136 operations), an official CLI and a stdio MCP server with 125 tools. But sign-up is a web form that showed our agent's browser a visible reCAPTCHA checkbox, and tokens are only made in the web app, so an agent cannot get in on its own and no core capability could be driven.",
 "wall": "reCAPTCHA checkbox on the sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Mailtrap is an email-sending and testing service with good machine-readable docs (Markdown, API specs) and an installable toolkit, but an AI agent cannot sign up by itself. The sign-up form put up a visible 'I'm not a robot' checkbox that only a person can solve, so the agent never got an account or an API key and could not try sending mail, testing in the sandbox, or anything else that needs one.",
  "can_do": [
   "Read all of Mailtrap's documentation automatically, including a version made for AI tools",
   "Download and start the official toolset that lists 125 available actions, without needing an account first"
  ],
  "cannot_do": [
   {
    "what": "Create a Mailtrap account",
    "why": "The sign-up form shows a visible robot checkbox only a human can solve"
   },
   {
    "what": "Get an API key",
    "why": "Keys are only created inside the web app after signing up"
   },
   {
    "what": "Send a test or real email, check logs, or build a template",
    "why": "Every one of these needs an API key, which needs an account"
   },
   {
    "what": "Pay for or cancel a paid plan on its own",
    "why": "Only a credit card entered on the website works; there is no automatic way to pay"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Email Sending",
   "capability": "Send a transactional email via API/SMTP",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/send",
    "mcp": "send email",
    "cli": null,
    "ui": "Email API/SMTP > Sending Domains > test send"
   },
   "check": "GET /api/accounts/{id}/message or Email Logs shows the message with recipient and status",
   "source": "https://mailtrap.io/email-sending/; https://docs.mailtrap.io/developers/email-sending/transactional/send-transactional-email.md"
  },
  {
   "id": "cap-02",
   "group": "Email Sending",
   "capability": "Send bulk/promotional email via a separate bulk stream",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/send (bulk stream)",
    "mcp": null,
    "cli": null,
    "ui": "Email API/SMTP > Bulk Stream"
   },
   "check": "Email Logs filtered by bulk stream shows the sent message",
   "source": "https://docs.mailtrap.io/email-api-smtp/setup/bulk-stream.md"
  },
  {
   "id": "cap-04",
   "group": "Email Testing (Sandbox)",
   "capability": "Capture a test email in a sandbox inbox instead of delivering it",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "SMTP or POST /api/send to sandbox",
    "mcp": "send email (test inbox)",
    "cli": null,
    "ui": "Email Sandbox inbox view"
   },
   "check": "GET /api/accounts/{id}/inboxes/{id}/messages shows the captured message",
   "source": "https://mailtrap.io/email-sandbox/; https://docs.mailtrap.io/email-sandbox/overview.md"
  },
  {
   "id": "cap-05",
   "group": "Email Testing (Sandbox)",
   "capability": "Inspect a captured test email (HTML, text, headers, raw source)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/accounts/{id}/inboxes/{id}/messages/{id}/html|txt|raw|headers",
    "mcp": null,
    "cli": null,
    "ui": "Sandbox inbox > message view"
   },
   "check": "API response returns the rendered HTML/text body matching the sent content",
   "source": "https://docs.mailtrap.io/email-sandbox/testing/email-template.md"
  },
  {
   "id": "cap-06",
   "group": "Email Testing (Sandbox)",
   "capability": "Check a test email's spam score and HTML client-support analysis",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /messages/{id}/analyze or /spam_report",
    "mcp": null,
    "cli": null,
    "ui": "Sandbox message > Spam Analysis / HTML Check tab"
   },
   "check": "GET message spam score endpoint returns a numeric score and report",
   "source": "https://docs.mailtrap.io/email-sandbox/testing/spam-blacklist-reports.md; https://docs.mailtrap.io/email-sandbox/testing/email-html.md"
  },
  {
   "id": "cap-11",
   "group": "Email Marketing",
   "capability": "Create and send an email campaign to a contact list",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /api/campaigns, POST /campaigns/{id}/start",
    "mcp": null,
    "cli": null,
    "ui": "Email Marketing > Campaigns > New"
   },
   "check": "GET /campaigns/{id} shows status 'sent'/'sending' and recipient count",
   "source": "https://docs.mailtrap.io/developers/email-marketing/email-campaigns.md; https://mailtrap.io/pricing/?tab=email-marketing"
  },
  {
   "id": "cap-14",
   "group": "Email Marketing",
   "capability": "View campaign performance stats (opens, clicks, bounces)",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GET /campaigns/{id}/stats",
    "mcp": "track sending statistics",
    "cli": null,
    "ui": "Campaign > Stats tab"
   },
   "check": "GET campaign stats endpoint returns non-null open/click/bounce counts after sending",
   "source": "https://docs.mailtrap.io/developers/email-marketing/campaign-stats.md"
  },
  {
   "id": "cap-21",
   "group": "Templates",
   "capability": "Create and edit a reusable email template (drag-and-drop or HTML/Handlebars)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/accounts/{id}/email_templates",
    "mcp": "manage email templates",
    "cli": null,
    "ui": "Email Templates editor"
   },
   "check": "GET /email_templates/{id} returns the saved HTML/variables",
   "source": "https://mailtrap.io/email-sending/; https://docs.mailtrap.io/email-api-smtp/email-templates.md"
  },
  {
   "id": "cap-26",
   "group": "Analytics",
   "capability": "View sending stats dashboard (delivery/open/click/bounce rates)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/accounts/{id}/stats",
    "mcp": "pull delivery stats",
    "cli": null,
    "ui": "Email API/SMTP > Stats"
   },
   "check": "GET sending stats endpoint returns non-null counters after emails are sent",
   "source": "https://docs.mailtrap.io/email-api-smtp/analytics/dashboard.md; https://docs.mailtrap.io/developers/email-sending/stats.md"
  },
  {
   "id": "cap-27",
   "group": "Analytics",
   "capability": "Search and filter email logs, inspect an individual sent message",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/accounts/{id}/messages, GET /messages/{id}",
    "mcp": "view email delivery logs with filtering",
    "cli": null,
    "ui": "Email Logs"
   },
   "check": "GET /messages/{id} returns status/events for the sent message",
   "source": "https://docs.mailtrap.io/email-api-smtp/analytics/logs.md; https://docs.mailtrap.io/developers/email-sending/email-logs.md"
  },
  {
   "id": "cap-03",
   "group": "Email Sending",
   "capability": "Batch-send multiple emails in one call",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/batch",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Response lists per-message IDs; Email Logs shows each message delivered",
   "source": "https://docs.mailtrap.io/developers/email-sending/transactional/batch-send-emails.md"
  },
  {
   "id": "cap-07",
   "group": "Email Testing (Sandbox)",
   "capability": "Forward a captured test email to a real recipient",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /messages/{id}/forward",
    "mcp": null,
    "cli": null,
    "ui": "Sandbox message > Forward"
   },
   "check": "Recipient inbox receives the forwarded email",
   "source": "https://docs.mailtrap.io/email-sandbox/management/manual-email-forwarding.md"
  },
  {
   "id": "cap-08",
   "group": "Email Testing (Sandbox)",
   "capability": "Preview a captured email across real device/client renderers",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Sandbox message > Device Previews"
   },
   "check": "Device Previews panel shows rendered screenshots for Gmail/Outlook/Apple Mail etc.",
   "source": "https://docs.mailtrap.io/email-sandbox/testing/device-previews.md"
  },
  {
   "id": "cap-10",
   "group": "Email Testing (Sandbox)",
   "capability": "Organize test emails into sandboxes and projects",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/accounts/{id}/inboxes, POST /api/accounts/{id}/projects",
    "mcp": null,
    "cli": null,
    "ui": "Email Sandbox > Projects/Sandboxes"
   },
   "check": "GET /api/accounts/{id}/projects lists the created project containing the new sandbox",
   "source": "https://docs.mailtrap.io/developers/email-sandbox/projects.md; https://docs.mailtrap.io/developers/email-sandbox/sandboxes.md"
  },
  {
   "id": "cap-12",
   "group": "Email Marketing",
   "capability": "Schedule a campaign for future send, or cancel/terminate it",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /campaigns/{id}/schedule, POST /campaigns/{id}/cancel, POST /campaigns/{id}/terminate",
    "mcp": null,
    "cli": null,
    "ui": "Campaign editor > Schedule"
   },
   "check": "GET /campaigns/{id} shows status 'scheduled' with the chosen send time, or 'cancelled'",
   "source": "https://docs.mailtrap.io/email-marketing/campaigns/scheduling.md"
  },
  {
   "id": "cap-13",
   "group": "Email Marketing",
   "capability": "Build an automated email sequence triggered by contact events",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Email Marketing > Automations"
   },
   "check": "Automation run log shows a contact entering the flow and receiving the triggered email",
   "source": "https://docs.mailtrap.io/email-marketing/automations.md"
  },
  {
   "id": "cap-15",
   "group": "Contacts",
   "capability": "Add, edit, and remove a contact",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST/PATCH/DELETE /api/accounts/{id}/contacts",
    "mcp": null,
    "cli": null,
    "ui": "Email Marketing > Contacts"
   },
   "check": "GET /contacts/{id} reflects the created/updated fields, or returns 404 after delete",
   "source": "https://docs.mailtrap.io/developers/email-marketing/contacts/contacts.md"
  },
  {
   "id": "cap-16",
   "group": "Contacts",
   "capability": "Organize contacts into lists and dynamic segments",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /contact-lists, segments (UI)",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Lists / Segments"
   },
   "check": "GET /contact-lists/{id} shows the contact as a member",
   "source": "https://docs.mailtrap.io/developers/email-marketing/contacts/contact-lists.md; https://docs.mailtrap.io/email-marketing/contacts/segments.md"
  },
  {
   "id": "cap-17",
   "group": "Contacts",
   "capability": "Define custom contact fields for personalization",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /api/accounts/{id}/contacts/fields",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Custom Fields"
   },
   "check": "GET /contacts/fields lists the new field; contact record stores its value",
   "source": "https://docs.mailtrap.io/developers/email-marketing/contacts/contact-fields.md"
  },
  {
   "id": "cap-18",
   "group": "Contacts",
   "capability": "Bulk import contacts via CSV/API",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /contacts/imports",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Import"
   },
   "check": "GET /contacts/imports/{id} shows status 'finished' with imported row count",
   "source": "https://docs.mailtrap.io/developers/email-marketing/contacts/bulk-import.md"
  },
  {
   "id": "cap-19",
   "group": "Contacts",
   "capability": "Export contact data",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /contacts/exports, GET /contacts/exports/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Export"
   },
   "check": "GET export status returns a downloadable file URL with the contact records",
   "source": "https://docs.mailtrap.io/developers/email-marketing/contacts/export-contacts.md"
  },
  {
   "id": "cap-22",
   "group": "Templates",
   "capability": "Reference a saved template when sending an email or campaign",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/send with template_uuid",
    "mcp": null,
    "cli": null,
    "ui": "Compose email > Select template"
   },
   "check": "Email Logs / sandbox message shows rendered content matching the referenced template with variables substituted",
   "source": "https://docs.mailtrap.io/email-api-smtp/email-templates/integration.md"
  },
  {
   "id": "cap-23",
   "group": "Deliverability / Domains",
   "capability": "Add and verify a sending domain (SPF/DKIM/DMARC)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/accounts/{id}/domains",
    "mcp": "configure sending domains",
    "cli": null,
    "ui": "Email API/SMTP > Sending Domains"
   },
   "check": "GET /domains/{id} shows dns_verified: true after DNS records are added",
   "source": "https://docs.mailtrap.io/email-api-smtp/setup/sending-domain.md; https://docs.mailtrap.io/developers/email-sending/domains.md"
  },
  {
   "id": "cap-24",
   "group": "Deliverability",
   "capability": "Manage suppression list (bounced/unsubscribed addresses)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST/DELETE /api/accounts/{id}/suppressions",
    "mcp": null,
    "cli": null,
    "ui": "Suppressions"
   },
   "check": "GET /suppressions lists the address; sending to it is blocked",
   "source": "https://docs.mailtrap.io/email-api-smtp/deliverability/suppressions-list.md"
  },
  {
   "id": "cap-25",
   "group": "Deliverability",
   "capability": "Opt a recipient out of open/click tracking",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET/POST/DELETE /api/accounts/{id}/tracking-opt-outs",
    "mcp": null,
    "cli": null,
    "ui": "Tracking settings"
   },
   "check": "GET /tracking-opt-outs lists the recipient; subsequent email to them has tracking disabled",
   "source": "https://docs.mailtrap.io/developers/email-sending/tracking-opt-outs.md"
  },
  {
   "id": "cap-28",
   "group": "Analytics",
   "capability": "Tag emails with categories and compare performance by category",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "category field on send; GET stats by category",
    "mcp": null,
    "cli": null,
    "ui": "Email Categories"
   },
   "check": "GET /stats/categories shows the custom category with its own metrics",
   "source": "https://docs.mailtrap.io/email-api-smtp/analytics/categories.md"
  },
  {
   "id": "cap-29",
   "group": "Analytics",
   "capability": "Register a webhook to receive real-time delivery/engagement events",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/accounts/{id}/webhooks",
    "mcp": null,
    "cli": null,
    "ui": "Email API/SMTP > Webhooks"
   },
   "check": "Endpoint receives a signed POST when a tracked event (open/click/bounce) occurs",
   "source": "https://docs.mailtrap.io/email-api-smtp/advanced/webhooks.md; https://docs.mailtrap.io/developers/email-sending/webhooks.md"
  },
  {
   "id": "cap-30",
   "group": "Inbound Email",
   "capability": "Create a dedicated inbound address/inbox to receive incoming email",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /api/accounts/{id}/inboxes (inbound)",
    "mcp": null,
    "cli": null,
    "ui": "Inbound"
   },
   "check": "GET /inboxes/{id} returns the inbound email address; sending mail to it creates a message",
   "source": "https://docs.mailtrap.io/inbound-email/overview.md; https://docs.mailtrap.io/developers/inbound/inboxes.md"
  },
  {
   "id": "cap-31",
   "group": "Inbound Email",
   "capability": "Read, reply to, forward, and organize received messages into threads/folders",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET/POST /messages, /messages/{id}/reply, /threads, /folders",
    "mcp": null,
    "cli": null,
    "ui": "Inbound inbox view"
   },
   "check": "GET /messages/{id} shows the received content; reply endpoint results in an outgoing message in the thread",
   "source": "https://docs.mailtrap.io/developers/inbound/messages.md; https://docs.mailtrap.io/developers/inbound/threads.md"
  },
  {
   "id": "cap-09",
   "group": "Email Testing (Sandbox)",
   "capability": "Simulate an SMTP bounce response to test client error handling",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Sandbox > Bounce Emulator"
   },
   "check": "SMTP client sending through the bounce-emulator sandbox receives the configured error code",
   "source": "https://docs.mailtrap.io/email-sandbox/testing/bounce-rate.md"
  },
  {
   "id": "cap-20",
   "group": "Contacts",
   "capability": "Record a custom contact event for tracking/segmentation",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "POST /contacts/{id}/events",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Contact's event history (API or UI) lists the submitted event",
   "source": "https://docs.mailtrap.io/developers/email-marketing/contacts/contact-events.md"
  },
  {
   "id": "cap-32",
   "group": "Account Management",
   "capability": "Invite and manage team members and their role permissions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Account Settings > Users"
   },
   "check": "Users list shows the invited member with the assigned role",
   "source": "https://docs.mailtrap.io/account-and-organization/management/users.md"
  },
  {
   "id": "cap-33",
   "group": "Account Management",
   "capability": "Create and manage API tokens with scoped permissions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "Account Settings UI only (no public token-mgmt endpoint)",
    "mcp": null,
    "cli": null,
    "ui": "Settings > API Tokens"
   },
   "check": "New token appears in API Tokens list and authenticates a request; revoked token returns 401",
   "source": "https://docs.mailtrap.io/email-api-smtp/setup/api-tokens.md"
  },
  {
   "id": "cap-34",
   "group": "Account Management",
   "capability": "Create and manage sub-accounts under one organization",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Organization & Sub-Accounts"
   },
   "check": "Organization dashboard lists the new sub-account with isolated data",
   "source": "https://docs.mailtrap.io/account-and-organization/management/organization-and-sub-accounts.md"
  },
  {
   "id": "cap-35",
   "group": "Account Management",
   "capability": "Configure SAML SSO for the organization",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Account Settings > SSO"
   },
   "check": "SSO login flow redirects to the configured IdP and provisions the user",
   "source": "https://docs.mailtrap.io/account-and-organization/management/sso.md"
  },
  {
   "id": "cap-36",
   "group": "Account Management",
   "capability": "Enable two-factor authentication on a user account",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "My Profile > Security"
   },
   "check": "Login subsequently requires a 2FA code",
   "source": "https://docs.mailtrap.io/account-and-organization/privacy-and-security/2fa.md"
  },
  {
   "id": "cap-37",
   "group": "Account Management",
   "capability": "View user audit log of account actions",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Security > Audit Logs"
   },
   "check": "Audit log lists a recent action (e.g. domain created) with actor and timestamp",
   "source": "https://docs.mailtrap.io/account-and-organization/privacy-and-security/activity-log.md"
  }
 ],
 "attempts": [
  {
   "t": "01:14",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "robots.txt / Content-Usage",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "robots.txt 200: 'User-agent: *' group with 'Content-Signal: ai-train=yes, search=yes, ai-input=yes' (Cloudflare Content Signals syntax, parses: yes/no values); no aipref Content-Usage line; Disallow only /wp-admin/, /trackback/, /feed/, /xmlrpc.php",
   "notes": ""
  },
  {
   "t": "01:14",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "llms.txt",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://mailtrap.io/llms.txt 200 text/plain (7098 B); https://docs.mailtrap.io/llms.txt 200 text/markdown (55794 B, GitBook)",
   "notes": ""
  },
  {
   "t": "01:14",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "markdown docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "docs.mailtrap.io page with Accept: text/markdown -> 200 content-type text/markdown, vary includes Accept; .md URLs documented ('appending .md to page URLs'); mailtrap.io/pricing/ with Accept: text/markdown also returns text/markdown + vary accept",
   "notes": ""
  },
  {
   "t": "01:14",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "well-known cards",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "404 text/html for /.well-known/ai-catalog.json, agent-card.json, agent.json, mcp/server-card.json, oauth-protected-resource, oauth-authorization-server, ucp, /auth.md, /SKILL.md on mailtrap.io",
   "notes": ""
  },
  {
   "t": "01:14",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "MCP server",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Docs page for-ai-agents/tools/mcp-server.md: official MCP server is a Node stdio package 'mcp-mailtrap' (github.com/mailtrap/mailtrap-mcp); no remote endpoint documented. mcp.mailtrap.io returns a WordPress HTML page; POST server/discover to mcp.mailtrap.io/mcp and mailtrap.io/mcp -> 404 text/html",
   "notes": "stdio server_discover to be tested after credentials"
  },
  {
   "t": "01:14",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "OpenAPI",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "docs.mailtrap.io/developers/openapi-specs.md points to github.com/mailtrap/mailtrap-openapi",
   "notes": ""
  },
  {
   "t": "01:14",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "CLI",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "docs page for-ai-agents/tools/mailtrap-cli-app.md: official Go CLI github.com/mailtrap/mailtrap-cli, ~87 commands, 'mailtrap configure --api-token'",
   "notes": ""
  },
  {
   "t": "04:45",
   "cap": "signup",
   "capability": "sign up",
   "task": "Create a free account headless",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No documented sign-up API; https://mailtrap.io/register/signup is a Rails form (authenticity_token, user[fingerprint]) with reCAPTCHA (recaptcha.net api.js render=6LdJ3YQU...), cannot be posted headless without a reCAPTCHA token",
   "notes": "Moved to browser"
  },
  {
   "t": "04:45",
   "cap": "signup",
   "capability": "sign up",
   "task": "Create a free account in the browser",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "pw: filled email/password/confirmation on /register/signup, clicked Sign Up -> POST /register returned the form again with a visible reCAPTCHA v2 'I'm not a robot' checkbox (screenshot browser/shots/002.png); no confirmation mail arrived (inbox read: 'No mail for the agent's inbox').",
   "notes": "Invisible reCAPTCHA score escalated to a visible checkbox puzzle; we do not solve CAPTCHAs."
  },
  {
   "t": "06:24",
   "cap": "docs",
   "capability": "docs",
   "task": "Find API, MCP, CLI docs headless",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "docs.mailtrap.io/llms.txt (text/markdown), .md pages, Accept: text/markdown negotiation; OpenAPI 3.1.0 specs in github.com/mailtrap/mailtrap-openapi (10 files, 136 operations); MCP and CLI docs pages",
   "notes": "",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "06:24",
   "cap": "verify",
   "capability": "verify email",
   "task": "Confirm the account email",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account created (sign-up stopped at reCAPTCHA checkbox); inbox the agent's inbox received no mail",
   "notes": ""
  },
  {
   "t": "06:24",
   "cap": "credentials",
   "capability": "API token",
   "task": "Create an API token",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "docs for-ai-agents/ai-onboarding.md: 'we require a human to: Sign up for a free Mailtrap account; Create an API Token'. Tokens are made in the web app (Settings > API Tokens) or via POST /api/accounts/{id}/api_tokens which itself needs a token. No account -> no token. No OAuth/device flow/agent registration: /.well-known/oauth-authorization-server and oauth-protected-resource 404",
   "notes": ""
  },
  {
   "t": "06:24",
   "cap": "first_call",
   "capability": "first API call",
   "task": "Call GET /api/accounts",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "GET https://mailtrap.io/api/accounts -> 401 application/json {\"error\":\"Incorrect API token\"}; POST send.api.mailtrap.io/api/send -> 401 {\"success\":false,\"errors\":[\"Unauthorized\"]}. Official MCP (mcp-mailtrap 0.9.0, stdio) runs locally: tools/list 125 tools, but a call with no valid token -> isError 'Failed to list sandboxes: Incorrect API token'",
   "notes": "Errors are plain JSON, not application/problem+json; two different shapes between hosts",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "06:24",
   "cap": "first_action",
   "capability": "first action",
   "task": "Send a sandbox test email",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No API token (no account)",
   "notes": ""
  },
  {
   "t": "06:24",
   "cap": "pay",
   "capability": "pay",
   "task": "Probe agent payment rails",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "No 402 anywhere: unauthenticated API calls -> 401 JSON; x402./mpp./agents.mailtrap.io do not resolve; /.well-known/ucp 404; no x402/x-payment-info in the OpenAPI specs; mailtrap not found in mpp.dev/api/services or CDP x402 Bazaar. Docs billing/setup.md: 'For monthly plans, we support only credit card payments', card entered in web Billing > Payment method. Free tier on every product, 'no credit card required'. MCP has only get-billing-usage (read), no upgrade tool",
   "notes": "Grade P1-ish: paid plans need a card in the web UI; not attempted (no account, no card)"
  },
  {
   "t": "06:24",
   "cap": "cancel",
   "capability": "cancel",
   "task": "Find how to cancel a plan",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No plan started. Docs billing/faqs.md: cancel in web UI (Billing > 'Want to cancel your subscription? Please, click here', select reason, Change Plan). No cancel API in the OpenAPI or MCP tools",
   "notes": ""
  },
  {
   "t": "06:24",
   "cap": "delete",
   "capability": "delete account",
   "task": "Delete the account",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No account was created. Docs my-profile.md: user/account deletion in web Account settings; the account-management OpenAPI has no delete-account/user operation",
   "notes": ""
  },
  {
   "t": "06:24",
   "cap": "cap-01",
   "capability": "Send a transactional email via API/SMTP",
   "task": "Send a transactional email via API/SMTP via API/MCP",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented route exists (OpenAPI spec / MCP tool) but every call needs an API token; no account could be created (reCAPTCHA checkbox at sign-up). Unauthenticated -> 401 Incorrect API token",
   "notes": "Free tier covers it per docs pricing plans.md; not plan-gated"
  },
  {
   "t": "06:24",
   "cap": "cap-02",
   "capability": "Send bulk email via bulk stream",
   "task": "Send bulk email via bulk stream via API/MCP",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented route exists (OpenAPI spec / MCP tool) but every call needs an API token; no account could be created (reCAPTCHA checkbox at sign-up). Unauthenticated -> 401 Incorrect API token",
   "notes": "Free tier covers it per docs pricing plans.md; not plan-gated"
  },
  {
   "t": "06:24",
   "cap": "cap-04",
   "capability": "Capture a test email in a sandbox",
   "task": "Capture a test email in a sandbox via API/MCP",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented route exists (OpenAPI spec / MCP tool) but every call needs an API token; no account could be created (reCAPTCHA checkbox at sign-up). Unauthenticated -> 401 Incorrect API token",
   "notes": "Free tier covers it per docs pricing plans.md; not plan-gated"
  },
  {
   "t": "06:24",
   "cap": "cap-05",
   "capability": "Inspect a captured test email",
   "task": "Inspect a captured test email via API/MCP",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented route exists (OpenAPI spec / MCP tool) but every call needs an API token; no account could be created (reCAPTCHA checkbox at sign-up). Unauthenticated -> 401 Incorrect API token",
   "notes": "Free tier covers it per docs pricing plans.md; not plan-gated"
  },
  {
   "t": "06:24",
   "cap": "cap-06",
   "capability": "Spam score / HTML analysis",
   "task": "Spam score / HTML analysis via API/MCP",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented route exists (OpenAPI spec / MCP tool) but every call needs an API token; no account could be created (reCAPTCHA checkbox at sign-up). Unauthenticated -> 401 Incorrect API token",
   "notes": "Free tier covers it per docs pricing plans.md; not plan-gated"
  },
  {
   "t": "06:24",
   "cap": "cap-11",
   "capability": "Create and send a campaign",
   "task": "Create and send a campaign via API/MCP",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented route exists (OpenAPI spec / MCP tool) but every call needs an API token; no account could be created (reCAPTCHA checkbox at sign-up). Unauthenticated -> 401 Incorrect API token",
   "notes": "Free tier covers it per docs pricing plans.md; not plan-gated"
  },
  {
   "t": "06:24",
   "cap": "cap-14",
   "capability": "Campaign stats",
   "task": "Campaign stats via API/MCP",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented route exists (OpenAPI spec / MCP tool) but every call needs an API token; no account could be created (reCAPTCHA checkbox at sign-up). Unauthenticated -> 401 Incorrect API token",
   "notes": "Free tier covers it per docs pricing plans.md; not plan-gated"
  },
  {
   "t": "06:24",
   "cap": "cap-21",
   "capability": "Create and edit a template",
   "task": "Create and edit a template via API/MCP",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented route exists (OpenAPI spec / MCP tool) but every call needs an API token; no account could be created (reCAPTCHA checkbox at sign-up). Unauthenticated -> 401 Incorrect API token",
   "notes": "Free tier covers it per docs pricing plans.md; not plan-gated"
  },
  {
   "t": "06:24",
   "cap": "cap-26",
   "capability": "Sending stats",
   "task": "Sending stats via API/MCP",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented route exists (OpenAPI spec / MCP tool) but every call needs an API token; no account could be created (reCAPTCHA checkbox at sign-up). Unauthenticated -> 401 Incorrect API token",
   "notes": "Free tier covers it per docs pricing plans.md; not plan-gated"
  },
  {
   "t": "06:24",
   "cap": "cap-27",
   "capability": "Email logs",
   "task": "Email logs via API/MCP",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Documented route exists (OpenAPI spec / MCP tool) but every call needs an API token; no account could be created (reCAPTCHA checkbox at sign-up). Unauthenticated -> 401 Incorrect API token",
   "notes": "Free tier covers it per docs pricing plans.md; not plan-gated"
  }
 ],
 "stale": false,
 "icon": "/logos/mailtrap.png",
 "monitored": false,
 "verdict": "Needs a person to get in: L1 · Needs a person. Mailtrap publishes llms.txt and Markdown docs, an OpenAPI spec, an official CLI and a stdio MCP server listing tools. Our agent stopped at sign-up: the form showed a visible reCAPTCHA checkbox a person has to solve. With no account, our agent never reached verification, and tokens are only made in the web app after sign-up. With no token, the API call our agent tried came back as an incorrect-token error, so no work got done. Paying and cancelling stayed out of reach too: plans run through the web Billing UI, and account deletion is a web-only setting, not an API or MCP operation.",
 "page": "https://agentdrives.com/tools/mailtrap?via=api"
}