{
  "name": "GetCourier",
  "description": "Email inboxes for AI agents. GetCourier gives an agent a real email address in one HTTP call — no signup, no API key — and returns the verification code or magic link found in the incoming mail. Every message is delivered as untrusted data with SPF, DKIM and DMARC results. Inboxes are receive-only and expire after 72 hours on the free tier (3 inboxes an hour and 5 a day per IP). A hosted streamable-HTTP MCP server exposes the same 10 tools at https://getcourier.dev/mcp.",
  "url": "https://getcourier.dev",
  "version": "4.1.0",
  "protocolVersion": "0.3.0",
  "preferredTransport": "HTTP+JSON",
  "provider": {
    "organization": "GetCourier",
    "url": "https://getcourier.dev"
  },
  "documentationUrl": "https://getcourier.dev/llms-full.txt",
  "iconUrl": "https://getcourier.dev/favicon.svg",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false
  },
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "securitySchemes": {
    "readToken": {
      "type": "http",
      "scheme": "bearer",
      "description": "Inbox-scoped read_token returned once by POST /alias, or an account_key (cak_...) for paid calls. Sent as Authorization: Bearer <token>; never accepted in the query string."
    }
  },
  "security": [
    {
      "readToken": []
    }
  ],
  "supportsAuthenticatedExtendedCard": false,
  "skills": [
    {
      "id": "create_inbox",
      "name": "Create an email inbox",
      "description": "Provision an email inbox for an agent with no signup and no API key. Returns the address, a read_token shown once, the 72-hour expiry and an Ed25519 did:key identity. POST /alias accepts an empty body.",
      "tags": [
        "email",
        "inbox",
        "identity",
        "provisioning",
        "no-auth"
      ],
      "examples": [
        "curl -s -X POST https://getcourier.dev/alias"
      ]
    },
    {
      "id": "wait_for_code",
      "name": "Wait for a verification code",
      "description": "Long-poll the inbox until a message containing a verification code or a magic link arrives, up to 55 seconds, and return the extracted code or link. Returns {message: null, timeout: true} with HTTP 200 if nothing arrives in time.",
      "tags": [
        "email",
        "verification-code",
        "otp",
        "magic-link",
        "long-poll"
      ],
      "examples": [
        "curl -s \"https://getcourier.dev/v1/sandbox/inboxes/my-agent-k3xmqz/wait?timeout=30\" -H \"Authorization: Bearer <read_token>\""
      ]
    },
    {
      "id": "read_messages",
      "name": "Read inbox messages",
      "description": "List or fetch the messages in an inbox with codes and links already extracted. Listing supports after (only messages newer than a given id) and limit (1-100, default 20). Message text is truncated to 4000 characters in the agent view and an inbox holds at most 100 messages.",
      "tags": [
        "email",
        "read",
        "untrusted-content"
      ],
      "examples": [
        "GET https://getcourier.dev/v1/sandbox/inboxes/{alias}/messages?limit=5",
        "GET https://getcourier.dev/v1/sandbox/inboxes/{alias}/messages/{id}"
      ]
    },
    {
      "id": "verify_sender",
      "name": "Check sender authentication",
      "description": "Every message carries untrusted: true, the marker \"UNTRUSTED EXTERNAL EMAIL\", and an auth block with the SPF, DKIM and DMARC results plus a combined verdict, so an agent can decide whether to trust the sender before acting on a code.",
      "tags": [
        "email-authentication",
        "spf",
        "dkim",
        "dmarc",
        "prompt-injection-safety"
      ],
      "examples": [
        "{ \"auth\": { \"verdict\": \"pass\", \"spf\": \"pass\", \"dkim\": \"pass\", \"dmarc\": \"pass\" }, \"untrusted\": true }"
      ]
    },
    {
      "id": "delete_inbox",
      "name": "Delete an inbox",
      "description": "Delete an inbox so it stops accepting mail and its messages become unreadable. Use it when the signup it was created for is finished.",
      "tags": [
        "email",
        "inbox",
        "cleanup",
        "delete"
      ],
      "examples": [
        "DELETE https://getcourier.dev/v1/sandbox/inboxes/{alias}"
      ]
    }
  ],
  "extensions": {
    "mcp": {
      "transport": "streamable-http",
      "url": "https://getcourier.dev/mcp",
      "protocolVersion": "2025-06-18",
      "registryName": "dev.getcourier/getcourier",
      "registryVersion": "4.1.0",
      "tools": [
        "create_inbox",
        "wait_for_code",
        "list_messages",
        "get_message",
        "delete_inbox",
        "create_account",
        "get_balance",
        "create_deposit",
        "deposit_status",
        "pricing"
      ],
      "note": "Paid tools (create_account, get_balance, create_deposit, deposit_status) are live with USDC on Base and BTC on-chain; GET /v1/pricing is authoritative."
    },
    "llmsTxt": "https://getcourier.dev/llms.txt",
    "openapi": "https://getcourier.dev/openapi.json"
  }
}