Skip to main content
Glama
arbengine

mailbox-mcp

request_inbound_action

Idempotent

Propose a scan, forward or discard through POST /v1/inbound-items/:id/actions. Agent keys only; the proposal always waits for the owner's approval (awaiting_member_approval: true) and never charges credits or moves mail by itself.

Instructions

Propose a scan, forward or discard through POST /v1/inbound-items/:id/actions. Agent keys only; the proposal always waits for the owner's approval (awaiting_member_approval: true) and never charges credits or moves mail by itself. Send the item's current version as action.expected_version, the item's current quote as action.expected_quote (get_inbound_item quotes.scan, or quote_inbound_forward for the chosen class; required for scan and forward, refused with the fresh quote otherwise), a stable idempotency_key for retries, and for forward a complete US destination and mail_class (first_class requires untracked_acknowledged: true; packages cannot be forwarded yet). Forward destinations and discard proposals are checked against the agent's inbound_policy server-side. One open action per item. Key scope: inbound.item.action (agent.inbox.propose also works). Member keys read their own live items; agent keys read items bound or assigned to them, in their key's environment. Proposals are agent-only and always wait for the owner: they never charge credits, buy postage, open, forward or discard anything by themselves. Forward destinations and discard proposals are checked against the agent's structured inbound policy. Image URLs are never issued to agents. Stop on denial; never switch keys or mail APIs to bypass it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
actionYesThe proposal: type scan, forward or discard, with expected_version (the item's current version). scan and forward also take expected_quote {cost_cents, billable, max_cents} from get_inbound_item quotes or quote_inbound_forward. forward adds a US destination on the renter's Form 1583 and mail_class (default priority; first_class needs untracked_acknowledged: true). discard needs confirmed: true.
item_idYesInbound item id (UUID) from a list or search result.
idempotency_keyYesCaller-generated replay key (8–200 visible ASCII characters) for this one intent. The same key with the same input replays the stored result; the same key with different input is refused.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.0.3

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnly=false, destructive=false, idempotent=true) by disclosing that the proposal always waits for owner approval (awaiting_member_approval: true), never charges credits or moves mail, is limited to one open action per item, is checked server-side against inbound_policy, and returns no image URLs to agents. The idempotency_key retry semantics add concrete behavioral context.

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

Conciseness3/5

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

Front-loaded and dense with useful information, but it repeats itself: the 'never charges credits / never moves mail' point appears twice and the 'forward destinations and discard proposals checked against inbound_policy' sentence appears verbatim twice. These duplicate sentences cost it conciseness.

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?

An output schema exists, so return values need not be described, and the description covers the remaining burden for a mutation tool: key scope, approval gating, policy checks, idempotency, and per-action requirements. Nothing needed for correct invocation is missing.

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?

Schema description coverage is already 100%, so the baseline is 3, but the description adds real meaning: where expected_quote comes from, that expected_version must be the current version, and why idempotency_key exists for replays. It stops short of detailing the nested action variants fully, which the schema handles.

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 (propose) plus the resource (scan/forward/discard on an inbound item) and even names the endpoint POST /v1/inbound-items/:id/actions. An agent can immediately tell this apart from get_inbound_item or quote_inbound_forward, which are referenced as supporting reads rather than competitors.

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

Usage Guidelines5/5

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

Explicit about prerequisites and conditions: agent keys only, expected_version from the item's current version, expected_quote sourced from get_inbound_item quotes.scan or quote_inbound_forward (required for scan/forward, refused otherwise), first_class requiring untracked_acknowledged: true, and packages not forwardable yet. It also names the stop condition (stop on denial, never switch keys).

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