mailbox-mcp
The mailbox-mcp server enables AI agents to send, receive, manage, and automate physical postal mail via the mailbox.bot service.
Outbound Mail
Send physical mail (PDF, DOCX, JPG, PNG, TXT, CSV) via USPS (first class, priority, certified, certified return receipt) with cost preview (
dry_run), cost caps, and optional human approvalList and retrieve sent mail jobs with status, cost, tracking, and fulfillment photos
Sandbox mode to rehearse the full outbound lifecycle at zero cost
Inbound Mail
Discover private email aliases for forwarding scans, PDFs, and notices
List and retrieve inbound mail items with OCR context, draft assistance, deadlines, and thread linkage
Package Management (Beta)
Get a real physical mailing address (approved beta accounts)
List, retrieve, and view photos of inbound packages with tracking events and parsed label data
Request physical facility actions: forward, shred, scan, hold, return to sender, dispose, open and scan, or record video
Retrieve OCR text, structured fields, and confidence scores from document scans
Add tags and notes to packages for categorization and context
Automation
Create standing rules to auto-trigger actions on incoming packages based on carrier, sender, weight, or tracking prefix
Pre-register expected shipments for auto-matching and optional auto-action on arrival
Postal Threads
Group inbound and outbound mail into workflow threads for lineage and timeline tracking
Standing Instructions (MAILBOX.md)
Fetch, propose edits to, and sync the agent's standing instructions
Push notes or clarification responses to existing action requests
Facility Communication
Send messages to the facility operator (optionally linked to a package or action)
List conversations and read full message threads
Webhooks & Billing
Configure HTTPS webhooks for real-time events (package received, status changes, action completed, etc.)
Retrieve itemized billing events and usage summaries for scans, forwards, and mail sends
Allows sending outbound mail, including packages and letters, via FedEx through the mailbox.bot API.
Allows sending outbound mail, including packages and letters, via UPS through the mailbox.bot API.
Allows sending outbound mail, including first-class letters and certified mail, via USPS through the mailbox.bot API.
mailbox.bot MCP server
Official Model Context Protocol (MCP) server manifest for mailbox.bot — a hosted postal mail API for AI agents. Send certified mail, letters, notices, postcards, and document packets; mailbox.bot prints, stamps, mails, photographs, tracks, and exposes proof/status back to agents. Turn scans, PDFs, photos, provider notices, and notes from an address you already use into inbound agentic context. Dedicated mailbox.bot-issued street addresses plus mailbox numbers are a separate managed-address reservation path for approved accounts.
Send letters and certified mail from your agent, read inbound document context, manage postal threads, configure webhooks, retrieve scoped source documents, and rehearse lifecycle events with sandbox keys on the same production endpoints.
Website: https://mailbox.bot
Install: https://mailbox.bot/mcp-install
Public tool catalog: https://mailbox.bot/api/mcp/tools-public
OpenAPI: https://mailbox.bot/openapi.json and https://mailbox.bot/openapi.yaml
Registry:
bot.mailbox/mailbox(DNS-verified onmailbox.bot)
What this repo is
This repository holds the public server.json manifest published to the official MCP Registry. The production server itself is hosted at https://mailbox.bot/api/mcp (streamable HTTP transport).
The repo also includes a small local stdio adapter (server.js) so registries such as Glama can start the server locally and inspect the live mailbox.bot tool definitions from https://mailbox.bot/api/mcp/tools-public. Production users should connect to the hosted endpoint.
If you're trying to use the server, go to mailbox.bot/mcp-install for client-specific setup (Claude Code, Claude Desktop, Cursor, etc.).
Related MCP server: sendook-mcp
Local registry check
npm startThis starts a stdio MCP adapter for introspection. Authenticated tool calls should use the hosted streamable HTTP MCP endpoint at https://mailbox.bot/api/mcp.
Verifying authenticity
The namespace bot.mailbox/* is reserved via DNS proof on the apex domain mailbox.bot. Only the domain owner can publish servers under this namespace to the MCP Registry. If you see another server claiming to be mailbox.bot under a different namespace, it is not official.
The canonical manifest lives in this repo and is mirrored to the registry — both should match exactly.
Capabilities
Outbound mail — send first-class letters, certified postal mail, and other USPS / FedEx / UPS classes from a PDF or a few common document formats.
Document review and retrieval — stored outbound submissions can expose
document_preview_urlfor human verification, andget_outbound_mail_documentretrieves original source bytes withdocument.readscope.Inbound context — use private forwarding aliases to turn scans, PDFs, photos, provider notices, and notes from addresses the operator already controls into OCR-backed context.
Managed address reservation — dedicated mailbox.bot-issued physical mailing and package addresses are available by reservation for approved accounts; approved issuance begins August 31, 2026.
Sandbox mode —
sk_agent_test_keys exercise the full lifecycle (fulfillment photos, tracking, dispatch) with zero charge.Cost controls —
dry_runcost preview,X-Max-Cost-Centscap, per-key daily piece limits, structured retryable errors.Webhooks — signed delivery events with full payload inspection via REST.
Support conversations and support attachments are REST/OpenAPI/dashboard features, not MCP tools.
Full tool list and schemas: see the public MCP tool catalog, the install guide, and the OpenAPI specs at mailbox.bot/openapi.json and mailbox.bot/openapi.yaml.
License
MIT — covers this manifest and any examples added to this repo. The mailbox.bot service itself is operated under the mailbox.bot terms.
Available Tools
29 toolsadd_noteA
Add an observation or context note to a package. Notes are visible to the facility operator and the renter. Use for recording decisions, observations, or agent reasoning.
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | Note text (e.g. "Appears to be the replacement GPU from RMA #4521"). | |
| metadata | No | Optional structured metadata attached to the note (e.g. { "rma_number": "4521", "vendor": "NVIDIA" }). | |
| package_id | Yes | UUID of the package to annotate. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Created package note record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, and description confirms a write operation. It adds visibility context (notes visible to operator and renter) beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences with no wasted words. First sentence states purpose, second adds context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown), the description adequately covers purpose, usage, and visibility. It provides enough context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to add parameter details. It briefly mentions 'note' and 'metadata' but mostly relies on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add an observation or context note') and the resource ('to a package'). It distinguishes from sibling tools like 'add_tag' by specifying it's a note, not a tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that notes are visible to facility operator and renter, and suggests use cases (recording decisions, observations, agent reasoning). It does not explicitly state when not to use but provides sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_tagAIdempotent
Add a tag/label to a package for categorization and filtering. Tags are free-form strings. Adding the same tag twice is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | Tag name (e.g. "hardware-order", "urgent", "return-needed"). Free-form, case-sensitive. | |
| package_id | Yes | UUID of the package to tag. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Created or existing package tag record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true, and the description reinforces this by stating that adding the same tag twice is a no-op. This adds behavioral context beyond the annotations. No other behavioral traits (e.g., authorization needs) are disclosed, but the key trait is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at three short sentences. Every sentence adds value: purpose, tag nature, and idempotency. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter set (2 params, fully described in schema), presence of output schema, and annotations, the description covers the essential behavior. It could optionally mention case-sensitivity explicitly, but the schema already notes it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already describes both parameters. The description adds that tags are free-form strings and that adding duplicates is a no-op, which provides minor additional context but does not significantly enhance the schema's meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (add a tag/label) and the resource (package), with a purpose (categorization and filtering). However, it does not distinguish from sibling tool 'add_note', which serves a similar function but for notes instead of tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for categorization and filtering but fails to provide explicit guidance on when to use this tool versus alternatives like 'add_note'. No exclusion conditions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advance_test_outbound_mailA
Advance a test_mode outbound mail record one lifecycle step and queue the matching webhook. submitted becomes ready with simulated pages/envelope photos; ready becomes mailed with tracking, carrier, dispatch method, and receipt photo; mailed becomes delivered.
| Name | Required | Description | Default |
|---|---|---|---|
| mail_id | Yes | UUID of the test_mode outbound mail record to advance. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Advanced sandbox outbound mail job and webhook status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide minimal safety hints (readOnlyHint=false, destructiveHint=false). The description adds significant value by detailing each state transition and what gets simulated or added (e.g., simulated pages, tracking info, receipt photo). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states the main purpose, second breaks down state transitions. No wasted words, appropriately front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the full lifecycle for a test mode mail record, covering all state transitions. An output schema exists, so return values need not be described. The tool is well specified for an AI agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter. The description repeats the schema description ('UUID of the test_mode outbound mail record to advance') almost verbatim, adding no new meaning beyond structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('advance') and clearly identifies the resource ('test_mode outbound mail record') and the action (moving one lifecycle step and queuing webhook). It distinguishes from siblings like create_test_outbound_mail and send_outbound_mail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for test mode records and enumerates transitions, but does not explicitly state when to use this tool versus alternatives or provide exclusions. Context from sibling names helps but is not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ruleA
Create a standing instruction that auto-triggers actions when incoming packages match conditions. Rules run on every new package and execute the specified action if all conditions match. Use requires_approval to add a human review step before execution.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable rule name (e.g. "Forward Amazon packages", "Shred junk mail"). | |
| conditions | Yes | Conditions that must ALL match for the rule to trigger. | |
| action_type | Yes | Action to auto-trigger when conditions match. | |
| action_params | Yes | Parameters for the action (e.g. forwarding address for "forward", scan_type for "scan"). | |
| requires_approval | No | If true, matched packages require human approval before the action executes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Created standing rule record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations leave room for description to cover side effects (e.g., action execution on matching). The description mentions requires_approval but does not detail consequences of actions like shredding or forwarding, which could be destructive. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with core purpose and a specific usage hint. No filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 params, nested objects, output schema), the description covers the basic flow and a key parameter hint. It lacks details on rule persistence or action schema dependencies, but the output schema likely fills gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions. The description adds useful context for requires_approval but does not significantly enhance meaning beyond the schema for other parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates standing instructions that auto-trigger actions based on package conditions. It distinguishes from sibling tools like request_action (manual) and add_note by focusing on automation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates usage for automating package handling with rules, and provides explicit guidance on using requires_approval for a human review step. However, it does not explicitly contrast with alternatives like request_action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_test_outbound_mailA
Create a sandbox outbound mail record without uploading a real document. The record is always test_mode=true, cost_cents=0, includes estimated_live_cost_cents and cost_breakdown, and queues a mail.submitted webhook. Use with a sandbox key to rehearse outbound workflows before sending real physical mail.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Whether to include color-print surcharge in the live estimate. | |
| metadata | No | Arbitrary metadata echoed in responses and webhooks. | |
| mail_class | No | Mail class to simulate. | first_class |
| page_count | No | Simulated page count used for pricing. | |
| agent_notes | No | Optional facility/operator notes for the simulated mailpiece. | |
| recipient_zip | No | Recipient ZIP code. Affects estimated live postage. | 94105 |
| recipient_city | No | Recipient city. | San Francisco |
| recipient_name | No | Recipient name for the simulated mailpiece. | Test Recipient |
| recipient_line1 | No | Recipient street line 1. | 123 Test Street |
| recipient_state | No | Recipient 2-letter state code. | CA |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Created sandbox outbound mail job and webhook status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: always test_mode=true, cost_cents=0, includes estimated_live_cost_cents and cost_breakdown, and queues a mail.submitted webhook. Annotations only indicate non-readonly, non-destructive, non-idempotent, so the description adds significant 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first clearly states purpose, second adds key behaviors and usage context. No redundant wording; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 10 optional parameters, nested objects, and output schema, the description covers core behavior (test-only, estimates, webhook) and usage context (sandbox rehearsal). It's sufficiently complete for the AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the overall effect of parameters (e.g., simulation for pricing, live estimates) beyond individual field descriptions. It does not detail each param but contextualizes them well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool creates a sandbox outbound mail record without uploading a real document. It distinguishes itself from sibling tools like send_outbound_mail (real mail) and advance_test_outbound_mail (state progression) by focusing on simulated creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using it with a sandbox key to rehearse workflows before real sending. While it doesn't explicitly list when not to use it or compare to all siblings, it provides clear context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_facility_messagesARead-onlyIdempotent
Read the message thread with a specific facility. Returns messages in reverse chronological order with sender role (member, facility, agent). Supports cursor-based pagination. Automatically marks facility messages as read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of messages to return (1-100). Defaults to 50. | |
| before | No | Cursor: only return messages sent before this ISO 8601 timestamp. Use the oldest message timestamp from the previous page. | |
| facility_id | Yes | UUID of the facility whose conversation to read. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Messages exchanged with a facility. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds non-obvious behaviors: cursor-based pagination and automatically marking facility messages as read, which is valuable beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with purpose, no redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations and output schema present, the description covers purpose, ordering, pagination, and side effects, making it complete for a read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. The description adds context about pagination and reverse chronological order, but the schema already covers limit, before, and facility_id adequately. Some added value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read the message thread with a specific facility', using a specific verb ('Read') and resource ('message thread'). It distinguishes from sibling tools like list_facility_conversations (which lists conversations) and send_facility_message (write).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (reading a facility's messages) but does not explicitly contrast with siblings. It provides clear context but lacks explicit when-not-to-use or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inbound_mailARead-onlyIdempotent
Get one forwarded inbound mail item with compact draft_context by default. Use this before drafting an outbound reply when you need sender context, reply contact candidates, deadline clues, source files, and thread linkage in one stable payload.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Optional expansions. Defaults to ["drafting"]. Add signed_urls only when the agent truly needs temporary file access. | |
| signed_urls | No | If true, return short-lived signed URLs for stored files. | |
| inbound_mail_id | Yes | UUID of the inbound mail item to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | One forwarded inbound mail item. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds value by noting the default include parameter and warning that signed_urls should only be added when temporary file access is truly needed, providing guidance beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, no wasted words. The first sentence gives the core purpose, and the second provides actionable usage context. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a retrieval tool with an output schema (not shown), the description adequately covers the workflow role, default behavior, and a specific caution. It does not explain return values, which is acceptable given the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are described. The description adds meaningful context by explaining the default behavior of 'include' and cautioning about 'signed_urls'. This provides additional semantics beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a single inbound mail item with a default compact draft_context, and specifies it should be used before drafting an outbound reply. It effectively distinguishes from listing tools like list_inbound_mail by emphasizing the need for sender context and thread linkage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool ('before drafting an outbound reply') and lists the context it provides. It does not explicitly state when not to use it or mention alternatives, but the given sibling context includes list_inbound_mail, which partially addresses this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mailboxARead-onlyIdempotent
Get your agent's real mailing address beta endpoint when the account has explicit beta access: street address + mailbox number for approved accounts. For generally available inbound context, use list_inbound_forwarding_addresses instead; that returns a private intake alias for scans, PDFs, photos, provider notices, and notes from addresses the operator already uses.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Mailbox address, facility, and status details. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the condition of requiring beta access, which provides useful context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines purpose and condition, second provides guidance on alternative. No wasted words, information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no inputs and an output schema exists (though not shown). The description explains the output (street address + mailbox number), access requirements, and when to use an alternative, which fully covers the tool's functionality and context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters and the description correctly notes the endpoint is parameterless. Schema coverage is 100% by default, so a baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the agent's real mailing address (street address + mailbox number) for accounts with explicit beta access. It distinguishes itself from the sibling tool list_inbound_forwarding_addresses, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool (beta access, approved accounts) and when not to (use list_inbound_forwarding_addresses for generally available inbound context), including the name of the alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mailbox_mdARead-onlyIdempotent
Get the renter's MAILBOX.md standing instructions for this agent. Returns the full instruction text, version number, content hash, and last update timestamp. Call this on startup and cache the version — you must pass it to send_outbound_mail and update_action for sync verification.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Current MAILBOX.md standing instructions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint true, idempotentHint true, destructiveHint false. The description adds behavioral context such as caching the version and its role in sync verification for other tools, which is valuable beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, each serving a distinct purpose: stating what the tool does and providing usage instructions. No superfluous text; highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown but indicated) and zero parameters, the description covers the key behavioral aspects: caching, sync verification necessity. Combined with annotations, it provides complete context for tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters are defined; schema coverage is 100%. The description adds no parameter info because none exist. Baseline 4 is appropriate as no additional meaning is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the renter's MAILBOX.md standing instructions, listing the specific return fields (full instruction text, version, content hash, last update timestamp). It is distinct from siblings like 'get_mailbox' by specifying the 'md' suffix and instructions context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to call this on startup and cache the version, and mandates passing it to send_outbound_mail and update_action for sync verification. This provides clear when-to-use and how-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_outbound_mailARead-onlyIdempotent
Get full details of an outbound mail job including recipient address, mail class, page count, cost breakdown, current status, fulfillment photos, and a time-limited signed URL to download the original PDF.
| Name | Required | Description | Default |
|---|---|---|---|
| mail_id | Yes | UUID of the outbound mail job to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Full outbound mail job details with signed document URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by revealing the inclusion of a time-limited signed URL and fulfillment photos, which are behavioral traits beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the key information without any redundancies. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (implicitly known), the description sufficiently lists the major return fields. However, it does not mention how to use the time-limited URL or any authentication requirements, but for a simple retrieval tool this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes mail_id as 'UUID of the outbound mail job to retrieve.' The description adds no extra semantics for the parameter, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves full details of an outbound mail job and enumerates specific fields (recipient address, mail class, page count, etc.), distinguishing it from sibling tools like list_outbound_mail (which likely returns summaries) and send_outbound_mail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after obtaining a mail_id but lacks explicit when-to-use or when-not-to-use guidance compared to siblings. No alternative tools are mentioned, leaving context implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_packageARead-onlyIdempotent
Get full package details including photos, tracking events, shipping label data (carrier, addresses, weight), forwarding status, storage location, and action history.
| Name | Required | Description | Default |
|---|---|---|---|
| package_id | Yes | UUID of the package to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Package details with photos, events, and extracted label data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds value by listing the specific data fields returned (e.g., photos, tracking events, shipping label data), providing context beyond the safety profile. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently lists all included details without waste. It is front-loaded with the core action 'Get full package details' and then enumerates specifics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter), comprehensive annotations, and presence of an output schema, the description adequately covers what the tool returns. No additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description does not add any parameter-specific information beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'full package details' while enumerating specific data categories (photos, tracking events, shipping label data, etc.). This distinguishes it from sibling tools like list_packages (which returns a list) and get_package_photos (which focuses on photos alone).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates use when full details of a specific package are needed, but it does not explicitly contrast with alternatives like list_packages or provide when-not-to-use guidance. The purpose is clear but lacks direct exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_package_photosARead-onlyIdempotent
Get photos for a package with OCR-extracted text and confidence scores. Filter by photo type to get only exterior shots, label closeups, barcode scans, or content scans.
| Name | Required | Description | Default |
|---|---|---|---|
| package_id | Yes | UUID of the package to get photos for. | |
| photo_type | No | Filter by photo type. "exterior" = package exterior, "label" = shipping label closeup, "barcode" = barcode scan, "content_scan" = opened package contents. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Package photo records with OCR metadata. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive behavior. The description adds that photos include OCR-extracted text and confidence scores, and that filtering is supported. This provides additional context beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The key action and differentiation are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the small number of parameters, annotations, and the presence of an output schema (though not shown), the description is complete. It covers what the tool does, what it returns, and how to filter. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining the photo_type enum values (e.g., 'exterior' = package exterior). This enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves photos for a package, including OCR-extracted text and confidence scores, and allows filtering by photo type. This is specific and distinguishes it from sibling tools like 'get_package'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when photos with OCR data are needed, but lacks explicit guidance on when to use this tool over alternatives among the many sibling tools. No 'when to use' or 'when not to use' instructions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postal_threadARead-onlyIdempotent
Get one physical-mail thread with optional timeline events. Use this to explain how a generated outbound mail piece relates back to prior inbound scans and review decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Optional expansions. Add events to include inbound/outbound timeline references. | |
| thread_id | Yes | UUID of the postal mail thread to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | One postal mail workflow thread. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, informing the agent of safe read behavior. The description adds the optional expansion of timeline events, which is valuable but not extensive. The behavioral burden is adequately covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the primary function, the second provides a use case. Every word is purposeful, no redundancy. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description does not need to explain return values. It covers the purpose, parameter functionality, and use case. The only minor gap is not mentioning that thread_id is a UUID, but the schema already provides format information. Overall, it is sufficiently complete for correct tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with detailed descriptions for both parameters. The tool description echoes the schema's mention of optional timeline events but adds no new semantic meaning. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a single physical-mail thread with optional timeline events, and specifies a distinct use case: explaining how outbound mail relates to prior inbound scans and decisions. This differentiates it from list_postal_threads and other sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a specific scenario to use the tool, which guides the agent. However, it does not explicitly mention when not to use it or compare it to alternatives like get_inbound_mail or get_outbound_mail. The use case is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scan_resultsARead-onlyIdempotent
Get document scan results including raw OCR text, structured data fields (addresses, dates, amounts), and confidence scores. Returns empty if scan is still processing.
| Name | Required | Description | Default |
|---|---|---|---|
| package_id | Yes | UUID of the package to get scan results for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Document scan records and OCR results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent. Description adds useful behavioral detail: returns empty while scan is processing, and lists the type of data returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with no unnecessary words. First sentence front-loads the key content types, second adds important edge-case behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers main output types and edge case. With output schema present, description is adequate. Minor gap: no mention of how to handle empty results (retry?), but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with complete schema description (100% coverage). Description does not add extra semantics for package_id, but schema is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool retrieves document scan results and lists specific content (OCR text, structured fields, confidence scores). Distinguishes from siblings like request_scan by describing retrieval behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage after scan request by noting it returns empty if still processing. Could be more explicit about when to use vs siblings, but context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageARead-onlyIdempotent
Get usage summary and billing events for a time period. Returns itemized events (scans, forwards, mail sends) with costs, plus period totals. Defaults to the current billing period if no dates are specified.
| Name | Required | Description | Default |
|---|---|---|---|
| period_end | No | End of the reporting period in ISO 8601 format. Defaults to now. | |
| period_start | No | Start of the reporting period in ISO 8601 format. Defaults to current billing period start. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Usage and billing event records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, idempotentHint, destructiveHint, covering safety. The description adds beyond these: it reveals the output structure (itemized events with costs) and the default billing period behavior, which are not in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The main action and return are front-loaded, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description need not explain return types. It covers the main aspects: what the tool returns, default behavior, and time period scope. Complete for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with format descriptions. The description adds meaning by stating the default behavior for unspecified dates ('Defaults to the current billing period'), which clarifies optionality and default values beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('usage summary and billing events'), and clearly states what is returned (itemized events with costs, period totals). The tool's purpose is distinct from siblings, as no other sibling deals with billing/usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining billing data over a time period but does not explicitly mention when to use it over alternatives or provide exclusions. The purpose is clear enough to guide selection, but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_facility_conversationsARead-onlyIdempotent
List your active facility conversations with unread message counts and last message preview. Each conversation corresponds to one facility where you have a mailbox.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of conversations to return (1-100). Defaults to 20. | |
| offset | No | Number of conversations to skip for pagination. Defaults to 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Facility conversations plus pagination. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent. Description adds that it returns unread counts and last message preview, providing extra behavioral context beyond safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wordiness, front-loaded with key action and resource. Second sentence adds necessary context about conversation meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description covers essential purpose and return content. No gaps in information needed for selection or invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage for both parameters (limit, offset). Description adds no additional meaning beyond standard pagination parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists active facility conversations with specific details (unread counts, last message preview), and defines what a conversation is. Distinguishes from siblings like list_inbound_mail which lists individual mail items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for overview of conversations; context with sibling tools suggests alternatives for individual messages, but no explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_inbound_forwarding_addressesARead-onlyIdempotent
List the renter’s private inbound forwarding aliases on forward.mailbox.bot. These are the unique intake email addresses an operator, assistant, provider, or external agent can forward scans, PDFs, photos, provider notices, notes, and other context-aware documents to so mailbox.bot can build OCR-backed inbound context. Forwarding/emailing attachments here initiates OCR/extraction; this tool discovers the address and does not upload files directly into OCR. The alias is member-scoped, so live and sandbox agent keys for the same member resolve to the same intake address.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Private inbound forwarding email aliases. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds that forwarding to the address triggers OCR/extraction, and explains member scoping (same address for live/sandbox). This provides context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each necessary: purpose, usage, clarification, scoping. Front-loaded with verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, helpful annotations, and an existing output schema, the description covers purpose, indirect effects, and scope fully. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; baseline is 4. The description adds no parameter info, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists 'private inbound forwarding aliases on forward.mailbox.bot', with a specific verb and resource. It distinguishes from sibling tools like list_inbound_mail by focusing on forwarding addresses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes the purpose of the addresses (intake for OCR) and clarifies that the tool only discovers the address, not uploads files. However, it doesn't explicitly contrast with alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_inbound_mailARead-onlyIdempotent
List forwarded inbound mail items captured from private forwarding aliases. Default output includes compact draft_context so an LLM or external agent can reason about OCR context, reply contact candidates, deadlines, and thread linkage before generating outbound mail.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of inbound items to return (1-100). | |
| offset | No | Number of inbound items to skip for pagination. | |
| status | No | Optional inbound status filter. | |
| include | No | Optional expansions. Defaults to ["drafting"]. Add ocr/lineage only when deeper provenance is needed. | |
| category | No | Optional category filter such as "Needs review" or "Loan / Mortgage". | |
| thread_id | No | Only return inbound items linked to this postal mail thread. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Forwarded inbound mail items plus pagination. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by specifying default output includes draft_context and that ocr/lineage should only be added when deeper provenance is needed, providing behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines the action, second explains the default output purpose. No wasted words, front-loaded content, and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 optional parameters and an output schema, the description covers purpose and default behavior. It lacks mention of ordering or pagination details, but overall is fairly complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds minimal extra meaning beyond the schema, such as clarifying that 'drafting' is included by default and advice on when to use ocr/lineage. This slightly exceeds baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists forwarded inbound mail items captured from private forwarding aliases, with additional context about default draft output. This distinguishes it from siblings like list_outbound_mail and get_inbound_mail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that default output includes compact draft_context for LLM reasoning, implying use for outbound generation preparation. It also advises when to add ocr/lineage expansions. However, it does not explicitly state when not to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_outbound_mailARead-onlyIdempotent
List outbound mail jobs with status tracking. Returns mail ID, recipient, mail class, status, cost, and timestamps. Filter by status to see pending, in-transit, or delivered mail.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of mail jobs to return (1-100). Defaults to 20. | |
| offset | No | Number of mail jobs to skip for pagination. Defaults to 0. | |
| status | No | Filter by mail status. "pending_approval" = awaiting human approval, "submitted" = queued for facility, "ready" = printed and ready to mail, "mailed" = in transit, "delivered" = confirmed delivery, "failed" = delivery failed, "cancelled" = cancelled before mailing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Outbound mail job summaries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds value by listing returned data fields and filter options, clarifying what the agent can expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and return fields, no fluff. Every sentence contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description adequately covers the return structure and filtering. Could explicitly mention pagination behavior, but schema parameters already cover limit/offset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds minimal value. It reinforces the status filter usage but does not provide details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool lists outbound mail jobs with status tracking and specifies the returned fields (mail ID, recipient, mail class, status, cost, timestamps), distinguishing it from send/get/advance sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions filtering by status but does not provide explicit when-to-use or when-not-to-use guidance compared to alternatives like get_outbound_mail for a single job.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_packagesARead-onlyIdempotent
List inbound mail or packages for approved real mailing address/package beta accounts with optional filters by status, carrier, and date. Returns tracking number, carrier, status, and received timestamp where available. For generally available inbound postal context, use list_inbound_mail with forwarded scans/PDFs/notes instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of packages to return (1-100). Defaults to 20. | |
| since | No | Only return packages received after this ISO 8601 date-time. | |
| offset | No | Number of packages to skip for pagination. Defaults to 0. | |
| status | No | Filter by package lifecycle status. "received" = just arrived, "stored" = in facility storage, "forwarded" = shipped to forwarding address. | |
| carrier | No | Filter by shipping carrier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Inbound package summaries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by specifying the return fields (tracking number, carrier, status, received timestamp) and the scope of data (inbound mail/packages for specific accounts), which is beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first covers action and filters, second covers return fields and alternative tool. No wasted words, front-loaded with key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and zero required parameters, the description is fairly complete. It covers purpose, filters, return fields, and alternative. Could mention pagination settings (limit/offset) but those are in schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description mentions optional filters by status, carrier, and date, but the schema already documents all parameters with descriptions. The description does not add significant new semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List inbound mail or packages for approved real mailing address/package beta accounts with optional filters', providing a specific verb and resource. It distinguishes from sibling tool list_inbound_mail by mentioning the account type and alternative for general context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use this tool ('for approved real mailing address/package beta accounts') and explicitly indicates when not to use it ('For generally available inbound postal context, use list_inbound_mail'), providing a direct alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_postal_threadsARead-onlyIdempotent
List physical-mail threads that group inbound mail context, human review, and outbound sends. Use this to understand which inbound items and outbound documents belong to the same business workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of threads to return (1-100). | |
| offset | No | Number of threads to skip for pagination. | |
| status | No | Optional thread status filter. | |
| include | No | Optional expansions. Add events to include inbound/outbound timeline references. | |
| category | No | Optional category filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Postal mail workflow threads plus pagination. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false) already cover safety. Description adds valuable behavioral context about grouping inbound/outbound items, no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first defines resource, second provides usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 optional parameters and output schema present, description provides sufficient high-level context. Lacks mention of pagination or result structure, but schema covers those.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. The tool description does not add extra parameter meaning beyond the schema; baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'list', resource 'physical-mail threads', and explains grouping of inbound mail, human review, and outbound sends. It distinguishes from siblings like list_inbound_mail and list_outbound_mail by focusing on thread grouping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises use for understanding business workflow grouping, implying context. Does not mention alternatives or when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_mailbox_md_editA
Propose changes to the renter's MAILBOX.md instructions with reasoning. The renter will see your suggestion in their dashboard and can accept, reject, or modify it. Use this when you observe patterns that could be codified into standing instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why this change is suggested (e.g. "Observed 5 Amazon packages this week, all forwarded manually — adding auto-forward rule"). | |
| suggested_content | Yes | Full proposed MAILBOX.md content (max 10,000 chars). Must include the complete document, not just the diff. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Created MAILBOX.md suggestion record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains that the renter will see the suggestion and can accept, reject, or modify it, which discloses the non-immediate, proposal-based behavior. This adds value beyond the annotations (readOnlyHint=false), which already indicate it's not read-only. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences. The first sentence front-loads the action and resource, and the second provides usage context. No unnecessary words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 required parameters fully described in the schema and an output schema (not shown but present), the description provides sufficient context about the proposal workflow and when to use it. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already provides detailed parameter descriptions. The tool description reinforces the purpose of the parameters (reasoning, suggested content) but does not add new semantic meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Propose changes to the renter's MAILBOX.md instructions with reasoning.' It identifies the specific resource (MAILBOX.md), action (propose), and distinguishes from sibling tools like create_rule and get_mailbox_md by focusing on proposals rather than direct edits or rule creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes an explicit usage guideline: 'Use this when you observe patterns that could be codified into standing instructions.' This gives clear context for when to invoke the tool, though it does not explicitly mention when not to use it or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_expectedA
Pre-register an expected inbound shipment so it is auto-matched when it arrives at the facility. Optionally specify an action to auto-execute on arrival (e.g. forward immediately, scan on receipt).
| Name | Required | Description | Default |
|---|---|---|---|
| carrier | No | Shipping carrier (e.g. "fedex", "ups", "usps"). | |
| auto_action | No | Action to auto-execute when the package arrives. | |
| description | No | Human-readable description of the shipment (e.g. "Replacement laptop from Dell"). | |
| expected_by | No | Expected arrival date in ISO 8601 format. Used for alerts if the package is late. | |
| tracking_number | No | Carrier tracking number for the expected shipment. | |
| auto_action_params | No | Parameters for the auto-action (e.g. forwarding address). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Created expected shipment record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-destructive write operation. The description adds behavioral context: auto-matching on arrival and auto-execution of actions, which are side effects not captured by annotations alone. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Purpose is front-loaded, and the optional auto-action is clearly separated with examples. Every sentence contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown but signaled), return value explanation is not needed. The description covers the tool's core function and an important optional feature. Parameter details are adequately handled by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3 applies. The description adds value by explaining the optional auto_action and giving examples, but the schema already describes all parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Pre-register' and resource 'expected inbound shipment', with a specific purpose 'auto-matched when it arrives'. It distinguishes from sibling tools like 'create_rule' or 'request_scan' by focusing on incoming package expectations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage when expecting an inbound shipment that should be auto-matched, and mentions optional auto-action. It does not explicitly state when not to use or provide alternatives, but the context from sibling names makes the use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_actionADestructive
Request a physical action on a package at the facility. Actions include forwarding to another address, shredding, scanning documents, holding for pickup, disposing, returning to sender, photographing, opening and scanning contents, or recording a video. Some actions (shred, dispose) are irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform. "forward" = ship to another address, "shred" = destroy (irreversible), "scan" = OCR document scan, "hold" = keep in storage, "dispose" = discard (irreversible), "return_to_sender" = send back, "photograph" = take photos, "open_and_scan" = open package and scan contents, "record_video" = video recording of package. | |
| priority | No | Processing priority. "urgent" = same-day processing, "high" = next business day, "normal" = standard queue, "low" = when convenient. | normal |
| package_id | Yes | UUID of the package to act on. | |
| parameters | No | Action-specific parameters. For "forward": { address, city, state, zip }. For "scan": { scan_type }. For "hold": { until_date }. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Created facility action request record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds value by specifying which actions (shred, dispose) are irreversible, and lists all actions, providing context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states the purpose and lists actions, second warns about irreversibility. No fluff, front-loaded, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 actions, nested parameters, output schema present), the description covers the main purpose and key constraints without needing to repeat schema details. It could mention action-specific parameter requirements briefly, but the schema handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage with detailed parameter descriptions. The description adds practical context by listing actions and noting irreversibility, but the schema already explains each enum and the parameters object. The description's added value is moderate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Request a physical action on a package at the facility' and lists all possible actions (forward, shred, scan, etc.), making the tool's purpose specific and distinct from read-only tools like 'list_packages' or 'get_package'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool covers a wide range of physical actions and mentions irreversible ones, but does not explicitly guide when to use this tool versus siblings like 'request_scan' or other action-specific tools. Usage is implied rather than explicitly compared.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_scanA
Request document scanning (OCR + structured data extraction) for a package. The facility will scan the document and extract text, addresses, dates, and other structured data. Results are available via get_scan_results after processing.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_type | No | Type of scan. "label" = shipping label only, "envelope" = exterior envelope, "document" = full document OCR, "content" = opened package contents. | document |
| package_id | Yes | UUID of the package to scan. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Created scan request record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only show readOnlyHint=false, so the description adds value by explaining that this is a request (non-instantaneous) and that results come later via another tool. It does not fully disclose potential side effects (e.g., whether the package is consumed or altered), but the async nature is well communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action, followed by clarifying detail. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema (not shown but context signal indicates true) and the description explains the overall workflow (request then retrieve). It lacks explicit error or edge-case handling, but for a simple async request tool, this level of detail is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for both parameters (package_id and scan_type enum). The tool description does not add new parameter-level meaning beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb-resource pair ('Request document scanning') and adds detail about OCR and structured data extraction, clearly distinguishing it from the sibling get_scan_results that retrieves the output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use this tool (to initiate scanning a package) and mentions the follow-up tool (get_scan_results), providing implicit usage guidance. However, it does not explicitly state when not to use it or list alternative approaches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_facility_messageA
Send a message to the facility operator managing your mailbox. Messages appear in the shared conversation visible to you, the renter, and the facility. Optionally link the message to a specific package or action request for context.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Message text (1-5000 characters). | |
| package_id | No | Optional: link this message to a specific package for context. | |
| facility_id | Yes | The facility to message. Get this from the get_mailbox response. | |
| action_request_id | No | Optional: link this message to an action request for context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Sent facility message identifiers and body. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds context beyond annotations: messages appear in a shared conversation visible to the renter and facility. Annotations already indicate non-destructive, non-read-only, open-world behavior. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. First sentence defines purpose, second adds optional context. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown) and comprehensive annotations plus schema, the description covers purpose, visibility, and optional linking. It lacks mention of character limits or error handling, but these are in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented in the schema. The description adds minimal extra meaning about linking messages to packages or action requests, but this is already stated in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a message to the facility operator, specifying the recipient and action. It distinguishes from sibling tools like get_facility_messages (retrieval) and list_facility_conversations (listing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for sending messages to the facility operator but does not explicitly compare to alternatives or state when not to use it. No exclusion criteria or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_outbound_mailA
Submit a document for printing and postal mailing by the facility. Supported formats: PDF, DOCX, JPG, PNG, TXT, CSV. The document is stored securely and printed by the facility operator. IMPORTANT: With a production key (sk_agent_), this immediately charges the member's card on file. Use dry_run=true to preview cost before committing, or requires_approval=true to defer until human approval. Sandbox keys (sk_agent_test_) skip billing entirely. Optionally attach the outbound mail to inbound context with inbound_capture_id and postal_mail_thread_id so lineage stays explicit.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Print in color. Adds a per-page color surcharge. | |
| duplex | No | Print double-sided to reduce page count and postage. | |
| dry_run | No | Validate inputs and return cost breakdown without creating a record or charging. Use to preview cost before committing. | |
| metadata | No | Arbitrary key-value pairs echoed in GET responses and webhooks. Recommended convention: { "workflow_id": "wf_123", "reason": "Customer cancellation", "correlation_id": "abc" }. | |
| mail_class | No | USPS mail class. "first_class" = 3-5 days, "priority" = 1-3 days, "certified" = with tracking and proof of mailing, "certified_return_receipt" = certified with signed delivery confirmation. | first_class |
| package_id | No | Link this mail to an inbound package (e.g. replying to received correspondence). | |
| page_count | No | Explicit page count for non-PDF documents when exact pagination is known. When supplied for DOCX, TXT, or CSV, it overrides local detection and makes pricing deterministic. | |
| return_zip | No | Return address ZIP code. Defaults to member profile if omitted. | |
| agent_notes | No | Instructions for the facility operator (e.g. "Time-sensitive — mail today"). | |
| return_city | No | Return address city. Defaults to member profile if omitted. | |
| return_name | No | Return address name. Defaults to the member's profile name if omitted. | |
| return_line1 | No | Return address line 1. Defaults to member profile if omitted. | |
| return_line2 | No | Return address line 2 (suite, unit, etc.). | |
| return_state | No | Return address state (2-letter code). Defaults to member profile if omitted. | |
| recipient_zip | Yes | 5 or 5+4 digit ZIP code (e.g. "90210" or "90210-1234"). | |
| max_cost_cents | No | Cost cap in cents. If the calculated cost exceeds this, the request is rejected with 422 before any charge. Prevents accidental expensive mailings. | |
| recipient_city | Yes | Recipient city. | |
| recipient_name | Yes | Full name of the mail recipient. | |
| document_base64 | Yes | Base64-encoded document file. Supported formats: PDF, DOCX, JPG, PNG, TXT, CSV. Max 10MB decoded. | |
| recipient_line1 | Yes | Street address line 1 of the recipient. | |
| recipient_line2 | No | Street address line 2 (apartment, suite, unit, etc.). | |
| recipient_state | Yes | 2-letter US state code (e.g. CA, NY, TX). | |
| document_filename | No | Original filename with extension (e.g. "letter.docx"). Required for reliable non-PDF format detection. | |
| recipient_country | No | ISO 3166-1 alpha-2 country code. Defaults to "US". | US |
| requires_approval | No | If true, the renter must approve in their dashboard before the mail is printed and sent. | |
| inbound_capture_id | No | Optional inbound mail item this outbound piece is replying to. Recommended when drafting from OCR/forwarded-mail context. | |
| mailbox_md_version | Yes | Your current MAILBOX.md version (from get_mailbox_md). Required for sync verification. | |
| postal_mail_thread_id | No | Optional physical-mail thread to attach this outbound mail to. Lets agents keep inbound and outbound activity in one durable workflow. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Submitted outbound mail job or dry-run cost preview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description thoroughly discloses behavioral traits: billing charges with production keys, no billing with sandbox keys, cost preview via dry_run, deferral via requires_approval, and optional linking to inbound mail. Annotations only indicate non-read-only and non-idempotent; the description adds critical detail about side effects and conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: purpose first, then key notes and optional parameters. It is somewhat long but dense with useful information. Could be slightly more concise, but it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 28 parameters (7 required) and an existing output schema, the description covers the essential workflow: submission, billing, dry run, approval, and thread linkage. It provides enough context for an agent to invoke the tool correctly, though missing minor details like max file size (present in schema) and explicit return value format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by grouping return address fields and explaining the intent of dry_run and requires_approval, but it does not systematically explain each parameter beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence clearly states the verb ('submit') and resource ('document for printing and postal mailing'). Supported formats are listed. The title 'Send Outbound Mail' further reinforces the purpose. No explicit sibling differentiation, but the purpose is unambiguous given the context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (submitting for mailing), important billing differentiation (production vs sandbox keys), and optional behaviors like dry_run and requires_approval. However, it does not explicitly state when not to use or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_actionAIdempotent
Push notes, structured data, or a clarification response to an existing action request. Use this to add agent reasoning, attach extracted data, or respond when the facility asks for clarification. Requires mailbox_md_version to prove your MAILBOX.md instructions are in sync.
| Name | Required | Description | Default |
|---|---|---|---|
| action_id | Yes | The action request ID to update. | |
| agent_data | No | Structured data to attach (e.g. OCR results, extracted fields, classification labels). | |
| agent_notes | No | Free-text notes from the agent (e.g. "Forwarding per standing rule #3"). | |
| decision_context | No | Link this decision to a specific MAILBOX.md instruction for auditability. | |
| mailbox_md_version | Yes | Your current MAILBOX.md version (from get_mailbox_md). Required for sync verification. | |
| respond_to_clarification | No | Response text when action status is needs_clarification. Providing this auto-resumes the action to in_progress. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Updated facility action request record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent and not destructive. Description adds valuable context: auto-resumes action when providing clarification response, requires sync verification. Does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with front-loaded purpose. Every word contributes: first sentence states function and three use cases, second adds critical requirement. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a mutation tool: covers purpose, detailed use cases, required parameter, and behavioral effects (auto-resume). Output schema exists, so return values need not be described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and parameter descriptions are clear. The tool description adds minimal extra meaning beyond the schema (only the sync verification requirement), meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'update' and resource 'action request', listing three distinct use cases (push notes, attach data, respond to clarification). Clearly distinguishes from siblings as no other tool updates an action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: to add reasoning, attach extracted data, or respond to clarification requests. Mentions requirement for mailbox_md_version. Does not explicitly exclude scenarios but covers primary use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_webhookAIdempotent
Configure webhook endpoint URL and event subscriptions for real-time notifications. Events include package.received, package.status_changed, action.completed, mail.status_changed, and more. The endpoint must use HTTPS and respond with 2xx within 10 seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | Set to false to pause webhook delivery without removing the URL. | |
| event_types | No | Array of event types to subscribe to (e.g. ["package.received", "mail.status_changed"]). Empty array disables all events. | |
| webhook_url | No | HTTPS URL to receive webhook POST requests. Must respond with 2xx within 10 seconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Webhook configuration status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false. The description adds the HTTPS requirement and 10-second response time constraint, but does not detail side effects like whether event subscriptions are replaced or appended, or authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, succinct and to the point. It front-loads the main action and then provides key constraints. Minor improvement could be omitting 'and more' in favor of referencing the schema for full event list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage and an output schema present, the description sufficiently covers the tool's purpose and a critical timing constraint. It does not explain return values, but the output schema likely does. No missing aspects given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The tool description repeats the HTTPS requirement mentioned in the schema, but adds no new parameter-level meaning beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'configure' and the resource 'webhook endpoint URL and event subscriptions', with a specific purpose of real-time notifications. It lists example event types, distinguishing it from sibling tools like create_rule or list_packages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for updating webhook settings but does not explicitly state when to use or not use this tool versus alternatives. No exclusion criteria or alternative tool names are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
29 tool updates
v1.0.0- First observed
add_note - First observed
add_tag - First observed
advance_test_outbound_mail - First observed
create_rule - First observed
create_test_outbound_mail - First observed
get_facility_messages - First observed
get_inbound_mail - First observed
get_mailbox - First observed
get_mailbox_md - First observed
get_outbound_mail - First observed
get_package - First observed
get_package_photos - First observed
get_postal_thread - First observed
get_scan_results - First observed
get_usage - First observed
list_facility_conversations - First observed
list_inbound_forwarding_addresses - First observed
list_inbound_mail - First observed
list_outbound_mail - First observed
list_packages - First observed
list_postal_threads - First observed
propose_mailbox_md_edit - First observed
register_expected - First observed
request_action - First observed
request_scan - First observed
send_facility_message - First observed
send_outbound_mail - First observed
update_action - First observed
update_webhook
TDQS
Each tool targets a distinct resource or action (packages, inbound mail, outbound mail, facilities, rules, etc.) with clear boundaries. Even related tools like add_note and update_action have clearly separated purposes (package notes vs action request notes). There is no overlapping functionality that would cause confusion.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., get_package, list_inbound_mail, send_outbound_mail, update_webhook). The naming style is uniform across all 29 tools, making the API predictable and easy to navigate for an agent.
At 29 tools, the count is above the typical well-scoped range (3-15) but fits the comprehensive domain of mail and package management. Each tool serves a necessary function without redundancy, and the scope justifies the number.
The tool set covers core workflows (create, read, list, request actions) but lacks explicit update and delete operations for several resources like rules, packages, and webhooks. Notable gaps include no update_rule, delete_rule, delete_package, or delete_webhook, which may cause dead ends when agents need to modify or remove resources.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Physical mail API for AI agents. Send letters, certified mail. Sandbox + live keys via MCP.
The first MCP server for physical mail: send postcards and letters, manage lists and campaigns.
Hosted email for AI agents: create inboxes, send, receive, and reply over MCP with scoped API keys
Shipmail MCP server for AI agent custom-domain email inboxes with REST API and webhooks.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server for semantic search and retrieval of indexed Slack messages stored in Qdrant using Cohere reranking via AWS Bedrock. It enables users to search through Slack history, retrieve full message threads, and access channel or user statistics through natural language.5-
- AlicenseAqualityDmaintenanceMCP server for Sendook - an AI email communication platform. Enables AI agents to send and receive emails, manage inboxes, threads, and webhooks programmatically.16MIT
- AlicenseAqualityAmaintenanceOfficial MCP server for Shipmail, enabling agents to manage domains, mailboxes, messages, threads, webhooks, and suppressions via natural language.1003051MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that lets AI agents create reviewable physical mail drafts, validate quotes, and pay for postage via MPP or x402 protocols.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/arbengine/mailbox-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server