{
  "$schema": "https://modelcontextprotocol.io/schemas/discovery/draft-01.json",
  "name": "inboxr",
  "display_name": "Inboxr — disposable email, SMS, and voice for AI agents",
  "description": "Provision real disposable email inboxes AND real SMS phone numbers AND drive real PSTN voice calls + IVR flows. Send and receive on every axis, extract OTPs and links, claim sender routes, build IVR phone trees from a plain-English description (Claude writes the JSON). Designed for signup-and-confirm flows, MFA reading, two-way SMS conversations, voicemail-with-transcript, and AI-driven phone trees. 22 tools: email (8), SMS (8), voice (6); same API key for all.",
  "version": "1",
  "homepage": "https://getinboxr.app",
  "documentation": "https://getinboxr.app/llms-full.txt#ai-agents",
  "install": {
    "transport": "stdio",
    "package": "@jassra25/inboxr-mcp",
    "runtime": "node",
    "command": "npx",
    "args": [
      "-y",
      "@jassra25/inboxr-mcp"
    ],
    "env": {
      "INBOXR_API_KEY": {
        "required": true,
        "description": "Bearer key from https://app.getinboxr.app/api-keys (starts with inb_live_)."
      },
      "INBOXR_API_URL": {
        "required": false,
        "default": "https://api.getinboxr.app",
        "description": "Override for self-hosted Inboxr instances."
      }
    },
    "sample_config": {
      "mcpServers": {
        "inboxr": {
          "command": "npx",
          "args": [
            "-y",
            "@jassra25/inboxr-mcp"
          ],
          "env": {
            "INBOXR_API_KEY": "inb_live_...",
            "INBOXR_API_URL": "https://api.getinboxr.app"
          }
        }
      }
    }
  },
  "rest": {
    "base_url": "https://api.getinboxr.app",
    "openapi": "https://getinboxr.app/openapi.json",
    "auth": "Bearer inb_live_...",
    "endpoint_count": 16
  },
  "tools": [
    {
      "name": "create_inbox",
      "description": "Provision a fresh disposable email address. Optionally accepts a label that becomes the local-part prefix.",
      "input_schema": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "description": "Lowercase letters, digits, dot/underscore/dash. Max 64."
          },
          "domain": {
            "type": "string",
            "description": "Defaults to getinboxr.app."
          }
        }
      }
    },
    {
      "name": "list_inboxes",
      "description": "List every inbox in the calling tenant.",
      "input_schema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "delete_inbox",
      "description": "Tear down an inbox. Removes the engine mailbox and clears cached message metadata. Irreversible.",
      "input_schema": {
        "type": "object",
        "required": [
          "inbox_id"
        ],
        "properties": {
          "inbox_id": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "wait_for_message",
      "description": "Block up to N seconds for the next inbound message in the given inbox. Ideal for verification-email flows.",
      "input_schema": {
        "type": "object",
        "required": [
          "inbox_id"
        ],
        "properties": {
          "inbox_id": {
            "type": "string"
          },
          "timeout_sec": {
            "type": "integer",
            "description": "1..30, default 30."
          },
          "after": {
            "type": "string",
            "description": "ISO timestamp; only return messages received after this."
          }
        }
      }
    },
    {
      "name": "get_messages",
      "description": "List recent inbound messages for an inbox.",
      "input_schema": {
        "type": "object",
        "required": [
          "inbox_id"
        ],
        "properties": {
          "inbox_id": {
            "type": "string"
          },
          "limit": {
            "type": "integer",
            "description": "1..200, default 50."
          }
        }
      }
    },
    {
      "name": "get_message",
      "description": "Fetch one full message: text, sanitized HTML, headers, attachments metadata.",
      "input_schema": {
        "type": "object",
        "required": [
          "message_uid",
          "domain"
        ],
        "properties": {
          "message_uid": {
            "type": "integer"
          },
          "domain": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "extract_otp",
      "description": "Extract a 4–8 digit one-time code from the latest message in an inbox.",
      "input_schema": {
        "type": "object",
        "required": [
          "inbox_id"
        ],
        "properties": {
          "inbox_id": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "extract_link",
      "description": "Extract the first URL matching an optional regex pattern from the latest message.",
      "input_schema": {
        "type": "object",
        "required": [
          "inbox_id"
        ],
        "properties": {
          "inbox_id": {
            "type": "string"
          },
          "pattern": {
            "type": "string",
            "description": "Optional regex; default matches any https URL."
          }
        }
      }
    },
    {
      "name": "sms_create_inbox",
      "description": "Claim a disposable SMS phone number from the shared pool. Returns { id, phoneNumber }. Requires non-zero credits.",
      "input_schema": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "description": "Optional label, e.g. \"otp-flow\". Max 64."
          }
        }
      }
    },
    {
      "name": "sms_list_inboxes",
      "description": "List every SMS inbox in the calling tenant.",
      "input_schema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "sms_delete_inbox",
      "description": "Tear down an SMS inbox and release its phone number back to the pool.",
      "input_schema": {
        "type": "object",
        "required": [
          "inbox_id"
        ],
        "properties": {
          "inbox_id": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "sms_send",
      "description": "Send an SMS from one of your inboxes. Costs 1 credit. Rate-limited to 5/sec/tenant and 60/min/phone.",
      "input_schema": {
        "type": "object",
        "required": [
          "inbox_id",
          "to_number",
          "body"
        ],
        "properties": {
          "inbox_id": {
            "type": "string",
            "description": "SMS inbox UUID"
          },
          "to_number": {
            "type": "string",
            "description": "E.164 destination, e.g. +14155550101"
          },
          "body": {
            "type": "string",
            "description": "Up to 1600 chars"
          }
        }
      }
    },
    {
      "name": "sms_claim_sender",
      "description": "Stake a 30-min routing claim: the next inbound SMS from sender_number routes to this inbox. Call BEFORE triggering the form that will text you.",
      "input_schema": {
        "type": "object",
        "required": [
          "inbox_id",
          "sender_number"
        ],
        "properties": {
          "inbox_id": {
            "type": "string"
          },
          "sender_number": {
            "type": "string",
            "description": "E.164 number you expect to receive from"
          },
          "ttl_seconds": {
            "type": "integer",
            "description": "60..3600, default 1800."
          }
        }
      }
    },
    {
      "name": "sms_wait_for_message",
      "description": "Long-poll up to N seconds for the next inbound SMS in this inbox. Returns the message + auto-detected OTP, or null on timeout.",
      "input_schema": {
        "type": "object",
        "required": [
          "inbox_id"
        ],
        "properties": {
          "inbox_id": {
            "type": "string"
          },
          "timeout_s": {
            "type": "integer",
            "description": "5..60, default 30."
          },
          "from": {
            "type": "string",
            "description": "Optional: only return messages from this E.164 number."
          }
        }
      }
    },
    {
      "name": "sms_get_messages",
      "description": "List recent SMS messages (inbound + outbound) for an inbox.",
      "input_schema": {
        "type": "object",
        "required": [
          "inbox_id"
        ],
        "properties": {
          "inbox_id": {
            "type": "string"
          },
          "limit": {
            "type": "integer",
            "description": "1..100, default 20."
          }
        }
      }
    },
    {
      "name": "sms_extract_otp",
      "description": "Convenience: pull a 4–8 digit numeric code from an SMS body string.",
      "input_schema": {
        "type": "object",
        "required": [
          "body"
        ],
        "properties": {
          "body": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "voice_list_flows",
      "description": "List the IVR flows for the tenant.",
      "input_schema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "voice_create_flow",
      "description": "Create an IVR flow from a raw JSON tree (start_node + nodes map). Power-user version of voice_create_flow_from_description.",
      "input_schema": {
        "type": "object",
        "required": [
          "name",
          "flowJson"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Display name for the flow."
          },
          "flowJson": {
            "type": "object",
            "description": "Full IVR JSON tree (start_node, nodes)."
          }
        }
      }
    },
    {
      "name": "voice_create_flow_from_description",
      "description": "Describe an IVR in plain English and Claude writes the JSON tree for you. The flow is saved + assigned to your tenant in one step.",
      "input_schema": {
        "type": "object",
        "required": [
          "name",
          "description"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Display name for the flow."
          },
          "description": {
            "type": "string",
            "description": "Plain-English: what the caller hears + each branch behavior."
          }
        }
      }
    },
    {
      "name": "voice_assign_flow",
      "description": "Attach a flow to an SMS inbox so inbound calls to that number run it. Set flowId to null to unassign.",
      "input_schema": {
        "type": "object",
        "required": [
          "inboxId"
        ],
        "properties": {
          "inboxId": {
            "type": "string",
            "format": "uuid"
          },
          "flowId": {
            "type": [
              "string",
              "null"
            ],
            "description": "Flow ID, or null to unassign."
          }
        }
      }
    },
    {
      "name": "voice_test_flow",
      "description": "Dry-run an IVR flow with simulated DTMF. Returns the path the call would take + any TTS prompts that would play. No real call is placed.",
      "input_schema": {
        "type": "object",
        "required": [
          "flowId"
        ],
        "properties": {
          "flowId": {
            "type": "string"
          },
          "simulatedDtmf": {
            "type": "string",
            "description": "Optional DTMF sequence, e.g. \"1#\" or \"2\"."
          }
        }
      }
    },
    {
      "name": "voice_list_traces",
      "description": "See how recent calls traversed a flow — node visits, DTMF presses, final outcome.",
      "input_schema": {
        "type": "object",
        "required": [
          "flowId"
        ],
        "properties": {
          "flowId": {
            "type": "string"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20
          }
        }
      }
    }
  ],
  "llms_txt": "https://getinboxr.app/llms.txt",
  "llms_full_txt": "https://getinboxr.app/llms-full.txt"
}