Skip to main content
Glama
mailbox-mcp

mailbox-mcp

list_webhook_deliveries

Read-onlyIdempotent

Read the latest 50 delivery records and exact JSON payloads for a single webhook endpoint to verify what was sent and debug delivery receipt. Requires the webhook endpoint UUID.

Instructions

Read the latest 50 deliveries and their exact JSON payloads (identifiers, sender line, dates, matched terms; never page text) for one webhook. HTTP 2xx delivered means receipt, not external-agent processing. No signing secrets or receiver response body. Requires webhook.manage. Uses the same bounded control plane and tenant/agent/Live-Sandbox authorization as /api/v1/webhooks/endpoints. Reuse the exact idempotency_key and input after an uncertain mutation. Webhook docs: https://mailbox.bot/docs/webhooks.

Input Schema

NameRequiredDescriptionDefault
endpoint_idYesWebhook endpoint id (UUID) from list_webhook_endpoints.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv1.0.4
    • changedOutput schema / properties / result / properties / deliveries / items / properties / event_type / enum
      Previous value: -[
      -  "inbound.received",
      -  "inbound.action.requested",
      -  "inbound.action.completed",
      -  "inbound.pages_ready",
      -  "inbound.keywords_matched",
      -  "webhook.test"
      -]New value: +[
      +  "inbound.received",
      +  "inbound.action.requested",
      +  "inbound.action.completed",
      +  "inbound.pages_ready",
      +  "inbound.keywords_matched",
      +  "mail.pending_approval",
      +  "mail.submitted",
      +  "mail.ready",
      +  "mail.mailed",
      +  "mail.delivered",
      +  "mail.failed",
      +  "mail.cancelled",
      +  "batch.submitted",
      +  "batch.completed",
      +  "batch.partially_completed",
      +  "batch.failed",
      +  "batch.cancelled",
      +  "webhook.test"
      +]
    • changedOutput schema / properties / result / properties / deliveries / items / properties / payload / properties / api_url / pattern
      Previous value: -"^https:\\/\\/mailbox\\.bot\\/api\\/v1\\/inbound-items\\/[a-f0-9-]{36}$"New value: +"^https:\\/\\/mailbox\\.bot\\/api\\/v1\\/(inbound-items|mail|batch-mail)\\/[a-f0-9-]{36}$"
    • addedOutput schema / properties / result / properties / deliveries / items / properties / payload / properties / batch
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "agent_id": {
      +      "anyOf": [
      +        {
      +          "format": "uuid",
      +          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "completed_at": {
      +      "anyOf": [
      +        {
      +          "format": "date-time",
      +          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "created_at": {
      +      "format": "date-time",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +      "type": "string"
      +    },
      +    "error_message": {
      +      "anyOf": [
      +        {
      +          "maxLength": 500,
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "id": {
      +      "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$",
      +      "type": "string"
      +    },
      +    "job_name": {
      +      "maxLength": 200,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "mail_type": {
      +      "maxLength": 40,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "mailing_class": {
      +      "maxLength": 40,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "pieces": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "failed": {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "mailed": {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "total": {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "total",
      +        "mailed",
      +        "failed"
      +      ],
      +      "type": "object"
      +    },
      +    "refunded_cents": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "status": {
      +      "maxLength": 40,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "total_cents": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "agent_id",
      +    "job_name",
      +    "status",
      +    "mail_type",
      +    "mailing_class",
      +    "pieces",
      +    "total_cents",
      +    "refunded_cents",
      +    "created_at",
      +    "completed_at",
      +    "error_message"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / result / properties / deliveries / items / properties / payload / properties / event_type / enum
      Previous value: -[
      -  "inbound.received",
      -  "inbound.action.requested",
      -  "inbound.action.completed",
      -  "inbound.pages_ready",
      -  "inbound.keywords_matched",
      -  "webhook.test"
      -]New value: +[
      +  "inbound.received",
      +  "inbound.action.requested",
      +  "inbound.action.completed",
      +  "inbound.pages_ready",
      +  "inbound.keywords_matched",
      +  "mail.pending_approval",
      +  "mail.submitted",
      +  "mail.ready",
      +  "mail.mailed",
      +  "mail.delivered",
      +  "mail.failed",
      +  "mail.cancelled",
      +  "batch.submitted",
      +  "batch.completed",
      +  "batch.partially_completed",
      +  "batch.failed",
      +  "batch.cancelled",
      +  "webhook.test"
      +]
    • addedOutput schema / properties / result / properties / deliveries / items / properties / payload / properties / mail
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "agent_id": {
      +      "anyOf": [
      +        {
      +          "format": "uuid",
      +          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "carrier": {
      +      "anyOf": [
      +        {
      +          "maxLength": 40,
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "cost_cents": {
      +      "anyOf": [
      +        {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "created_at": {
      +      "format": "date-time",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +      "type": "string"
      +    },
      +    "delivered_at": {
      +      "anyOf": [
      +        {
      +          "format": "date-time",
      +          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "error_message": {
      +      "anyOf": [
      +        {
      +          "maxLength": 500,
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "id": {
      +      "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$",
      +      "type": "string"
      +    },
      +    "mail_class": {
      +      "maxLength": 40,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "mailed_at": {
      +      "anyOf": [
      +        {
      +          "format": "date-time",
      +          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "metadata": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "recipient": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "city": {
      +          "anyOf": [
      +            {
      +              "maxLength": 200,
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "company": {
      +          "anyOf": [
      +            {
      +              "maxLength": 200,
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "name": {
      +          "anyOf": [
      +            {
      +              "maxLength": 200,
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "state": {
      +          "anyOf": [
      +            {
      +              "maxLength": 200,
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "zip": {
      +          "anyOf": [
      +            {
      +              "maxLength": 200,
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        }
      +      },
      +      "required": [
      +        "name",
      +        "company",
      +        "city",
      +        "state",
      +        "zip"
      +      ],
      +      "type": "object"
      +    },
      +    "status": {
      +      "maxLength": 40,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "tracking_number": {
      +      "anyOf": [
      +        {
      +          "maxLength": 100,
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "agent_id",
      +    "status",
      +    "mail_class",
      +    "recipient",
      +    "carrier",
      +    "tracking_number",
      +    "cost_cents",
      +    "created_at",
      +    "mailed_at",
      +    "delivered_at",
      +    "error_message",
      +    "metadata"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / result / properties / deliveries / items / properties / payload / required
      Previous value: -[
      -  "schema_version",
      -  "event_id",
      -  "event_type",
      -  "created_at",
      -  "environment",
      -  "sample",
      -  "item",
      -  "keywords"
      -]New value: +[
      +  "schema_version",
      +  "event_id",
      +  "event_type",
      +  "created_at",
      +  "environment",
      +  "sample"
      +]
  2. Addedv1.0.3

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description still adds real substance: a hard 50-item bound with no paging, the tenant/agent/Live-Sandbox authorization model, the permission required, and the important caveat that HTTP 2xx means receipt rather than external-agent processing. Selection/redaction boundaries (no signing secrets, no receiver response body) are disclosed; only return ordering/pagination edge behavior is left implicit, which the output schema covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb, resource, and result shape, then caveats, then auth and docs link — a sensible order with near-zero waste. The idempotency_key sentence is irrelevant to a read-only listing and slightly dilutes focus.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers everything an agent needs to call this correctly: scope (one endpoint, latest 50 only), required permission and tenancy model, what data is and is not returned, and what a 2xx delivery does and does not imply. Return shape is also backed by an existing output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter at 100% schema coverage already documents endpoint_id as a UUID sourced from list_webhook_endpoints, so the schema does the work. The description reinforces 'for one webhook' but adds no format or edge cases (e.g., unknown or deleted endpoint) beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read the latest 50 deliveries and their exact JSON payloads ... for one webhook') and enumerates what the payload contains versus what it never contains (page text, secrets, receiver response body). This is clearly distinguishable from list_webhook_endpoints (endpoints) and replay_webhook_delivery (re-send).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the scope ('for one webhook', 'latest 50', no paging) and by the webhook.manage auth requirement, but no sibling is named and there is no explicit when/when-not against list_webhook_endpoints, replay_webhook_delivery, or test_webhook_endpoint. The idempotency-reuse sentence reads as inherited boilerplate on a read-only tool and adds no routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.