Sendmux Email Inbox API + Sending
OfficialYou can use this MCP server to read, organize, and send email through Sendmux's Mailbox and Sending APIs.
Inspect mailbox connection/profile, granted mailboxes, session limits/capabilities, identities, folders, threads, and message metadata.
Search, count, list, batch-get, and read message bodies/content; wait briefly for new mail; resume mailbox sync via change cursors.
Update messages with flags/keywords, batch move/update, and delete messages soft or permanently.
Work with mailbox attachments: get metadata/download links, read text or resource links, and upload via presigned URL or tiny inline base64.
Send mailbox messages with recipients, subject, text/HTML, headers, and inline or uploaded attachments.
Send single or batch outbound emails with CC/BCC/Reply-To, custom headers, delivery groups, and attachment IDs; also inspect Sending credentials and temporary attachment uploads.
This server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
Email Inbox API + Sending by Sendmux
Email inbox API, inbound mail, and outbound sending MCP and A2A servers for AI agents, with inbound email, clean JSON parsing, webhooks, and multi-provider routing through Sendmux.
This package is the Sendmux MCP. Keep it separate from any documentation-search MCP used by docs tooling.
Documentation
Sendmux docs: sendmux.ai/docs
Management API reference: sendmux.ai/docs/api/introduction
Mailbox API reference: sendmux.ai/docs/mailbox-api/introduction
Sending API reference: sendmux.ai/docs/sending-api/introduction
Source repository: qubrics/qubrics-sdk
Related MCP server: sendook-mcp
Requirements
Python 3.10 or newer.
A send-capable
smx_mbx_*key or owner-approved Sending-resourcesmx_agent_*token for Sending tools.A mailbox-scoped
smx_mbx_*key or scopedsmx_agent_*token for Mailbox tools.A root
smx_root_*key for Management tools.
2.0.0 upgrade
Version 2.0.0 removes local file_path and roots inputs from MCP attachment
tools. Before upgrading a self-managed package or server, retain the prior
known-working package environment, dependency state, and MCP client and tool
configuration. Update attachment callers to use the
attachment workflow for agents, then verify
tool discovery and each attachment workflow your agents use.
To roll back a self-managed installation, restore the retained package environment, dependency state, and MCP client and tool configuration together. Verify tool discovery and the relevant attachment workflow before resuming agents. A package rollback doesn't reverse uploads or sends that have already completed.
For clients that use Sendmux's hosted endpoint, changing a local pip
environment doesn't change the deployed server version. A hosted deployment
rollback is a separate operator release action and must be verified against the
hosted endpoint.
Installation
pip install sendmux-mcpUsage
Run a single local server with the per-surface commands.
QUBRICS_API_KEY=smx_mbx_... sendmux-mcp-mailbox
QUBRICS_API_KEY=smx_root_... sendmux-mcp-management
QUBRICS_API_KEY=smx_mbx_... sendmux-mcp-sendingRun a combined local server with sendmux-mcp.
QUBRICS_MCP_SURFACES=mailbox,sending \
QUBRICS_MAILBOX_API_KEY=smx_mbx_... \
QUBRICS_SENDING_API_KEY=smx_mbx_... \
sendmux-mcpRun all three local surfaces when you have both key types.
QUBRICS_MCP_SURFACES=mailbox,management,sending \
QUBRICS_MAILBOX_API_KEY=smx_mbx_... \
QUBRICS_MANAGEMENT_API_KEY=smx_root_... \
QUBRICS_SENDING_API_KEY=smx_mbx_... \
sendmux-mcpThe generic sendmux-mcp command also accepts --surface or --surfaces. The wrapper commands select exactly one surface.
Transports
stdio is the default transport for local agent clients.
QUBRICS_API_KEY=smx_mbx_... sendmux-mcp-mailbox --transport stdiohttp and streamable-http expose the MCP endpoint over HTTP. HTTP mode defaults to 127.0.0.1:8765/mcp and requires a separate MCP bearer token unless you explicitly opt out.
QUBRICS_API_KEY=smx_mbx_... \
QUBRICS_MCP_HTTP_BEARER_TOKEN=local-mcp-token \
sendmux-mcp-mailbox --transport http --host 127.0.0.1 --port 8765 --path /mcp/health returns a small JSON health response for the selected surfaces.
Hosted Endpoint
The public hosted MCP endpoint is https://mcp.sendmux.ai/mcp.
For hosted clients, use HTTP transport with OAuth. Do not add manual Authorization headers, API keys, custom OAuth endpoints, or custom scopes unless your client explicitly requires them.
Hosted OAuth clients that omit requested scopes during registration or authorization are supported; the server advertises the hosted scope set through discovery and bearer challenges.
The packaged sendmux-mcp-hosted command runs the hosted server runtime. Local and private deployments should use the local commands above unless you are operating a compatible OAuth-backed hosted environment.
Hosted A2A Endpoint
The same hosted runtime exposes deterministic A2A 1.0 over HTTP+JSON at https://a2a.sendmux.ai/a2a/v1. Discover it from https://a2a.sendmux.ai/.well-known/agent-card.json; OAuth resource metadata is at https://a2a.sendmux.ai/.well-known/oauth-protected-resource.
Send exactly one JSON DataPart to the A2A message:send operation. Its data selects a curated Sendmux operation and supplies that operation's inputs:
{
"operationId": "managementListDomains",
"pathParameters": {},
"query": { "limit": 10 },
"headers": {},
"body": null,
"mailboxId": null
}operationId uses the same curated operation IDs as the hosted MCP service. OAuth grants are audience-bound to the A2A resource and retain their Sendmux surface and permission limits. The service returns one JSON DataPart containing the upstream status, safe response headers, and JSON body (or bodyBase64 for non-JSON responses).
The A2A endpoint is immediate and stateless: streaming, push notifications, persistent tasks, and task cancellation are not advertised or routed.
Configuration
Setting | Environment | Default |
Tool surfaces |
| required for |
API key fallback |
| accepted for compatible single-key setups |
Mailbox API key |
| required when mailbox is selected unless a compatible fallback is provided |
Management API key |
| required when management is selected unless a compatible fallback is provided |
Sending API key |
| required when sending is selected unless the fallback key is a send-capable |
App API base URL |
|
|
Sending API base URL |
|
|
Transport |
|
|
HTTP host |
|
|
HTTP port |
|
|
HTTP path |
|
|
HTTP bearer token |
| required for HTTP unless opt-out is enabled |
Allow unauthenticated HTTP |
|
|
Allowed browser origins |
| no browser origins |
Snapshot directory override |
| packaged snapshots |
App snapshot override |
| packaged app snapshot |
Sending snapshot override |
| packaged sending snapshot |
Request timeout |
|
|
Retry attempts |
|
|
Retry time budget, in seconds |
| unset |
Retries honour Retry-After and X-RateLimit-Reset without applying the local backoff ceiling, and stop for retryable: false. Set the optional retry budget with RetryConfig(max_elapsed_seconds=30), the environment variable above, or --retry-max-elapsed-seconds 30. A retry that would exceed the remaining budget returns the original error; in-flight requests keep their normal HTTP timeouts.
Packaged OpenAPI snapshots are the default so released tool names, schemas, and descriptions stay stable. Path, directory, and URL overrides are available for development, canary, and debugging runs.
Tool Surfaces
Mailbox: tools for granted mailboxes, profile/session discovery, messages, attachments, bounded message waits, threads, folders, search, counts, and mailbox sends. Requires an
smx_mbx_*key or scopedsmx_agent_*token. Agent tokens remain limited by server-side scopes; pre-claim self-registered agent tokens do not includeemail.send.Management: tools for domains, mailboxes, logs, metrics, spend summary, and webhooks. Requires an
smx_root_*key.Sending: tools for attachment upload refs, single sends, and batch sends. Requires an
smx_mbx_*key or owner-approved Sending-resourcesmx_agent_*token.
The server rejects keys with the wrong prefix before starting.
Package Contract For Maintainers
The source checkout includes sendmux_mcp/mcp-contract.json, generated from the actual server factory's public tool discovery. Use its tools.by_surface entries and tools.count instead of maintaining a separate catalogue. Each entry retains the tool's description, input/output schemas, and annotations. The contract also separates hosted resource, local transports, API origins, certified protocol revisions, and the runtime versions used during generation.
After installing a build that contains the contract, read it without credentials or network requests:
from sendmux_mcp.contract import load_contract
contract = load_contract()
print(contract["package"])The result identifies the installed distribution and version. load_contract() raises ValueError for stale source/version evidence, a mismatched pinned FastMCP runtime, or unsupported certified revisions. The recorded transitive MCP version is provenance, not a narrower dependency constraint. Reading the artifact does not certify a newly resolved dependency version or prove a deployed service matches this build.
uploads distinguishes the locally enforced inline and Mailbox byte caps from Sending's returned max_size_bytes authority. The Sending presign request schema does not impose a numeric maximum; use the upload intent response, not a historical source constant. URL expiry and physical attachment retention are not equivalent, and this artifact does not certify storage cleanup.
From the repository root, pnpm generate:mcp refreshes native editable metadata and writes deterministic contract bytes. With that environment prepared, pnpm exec .tmp/python-venv/bin/python -m sendmux_mcp.contract --check checks freshness without rewriting. pnpm build:mcp verifies tests, wheel/sdist inclusion, installed consumption, and frozen conformance checks. Checkout changes are not available through pip install until their release is published.
Attachment Workflow For Agents
Use qubrics_mailbox_wait_for_message when a user asks an agent to wait for new mail. The tool is bounded; if it returns matched=false, call it again rather than holding an MCP tool call open indefinitely.
When a message has attachments:
Call
qubrics_mailbox_read_attachmentwithmessage_idandattachment_idwhen you need the attachment contents.For small text-like attachments, read the returned
text.For binary or oversized attachments, use the returned
resource_link/download_urlpromptly outside model context.Use
qubrics_mailbox_get_attachmentonly when metadata is enough or you need to refresh the link.
Use qubrics_mailbox_upload_attachment for outbound attachments over MCP. It accepts exactly one input mode:
presign_upload_url=truefor hosted MCP or shell-capable agents; upload the file to the returned URL with exact headers and no API key, then send with the returnedblob_id.content_base64only for tiny agent-authored files, capped at32 KiBdecoded. If it is too large, switch to a presigned upload, CLI--attach, or SDK file helpers.
Presigned uploads use the mailbox attachment cap, currently 7,500,000 bytes per attachment, and pin the exact declared byte length and content type.
For mailbox sends, qubrics_mailbox_send_message accepts either tiny inline base64 attachment objects (content, filename, content_type) or uploaded attachment references (blob_id, filename, content_type).
For Sending API sends, use qubrics_sending_upload_attachment only for tiny inline content, or call qubrics_sending_create_attachment_upload and PUT bytes outside model context. Then pass {"attachment_id": "att_..."} in qubrics_sending_send_email.attachments[].
Console Scripts
sendmux-mcpsendmux-mcp-mailboxsendmux-mcp-managementsendmux-mcp-sendingsendmux-mcp-hosted
Support
Open an issue in qubrics/qubrics-sdk with the package name, version, command, transport, and request ID from any API error.
Licence
MIT. See the licence file.
Available Tools
104 toolsmailbox_batch_delete_messagesBatch Delete MessagesADestructiveInspect
Use this only when the user explicitly asks to delete messages and supplies or confirms the message IDs. Deletion is a mailbox mutation.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Message IDs to delete, maximum 100. | |
| permanent | No | When true, permanently deletes instead of moving to Trash. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| if_in_state | No | Optional message state token for stale-write protection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's 'Deletion is a mailbox mutation' mostly restates the structured data. It does add the useful safety context that explicit user request and ID confirmation are required, but it does not describe effects like permanence or recovery beyond what the parameter schema already offers.
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 filler, with the most important usage constraint front-loaded. 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?
For a destructive batch operation, the description plus annotations and fully documented parameters give an agent enough to select and invoke the tool correctly. The output schema exists, so return-value details are covered elsewhere. A small extra note about default trash vs permanent behavior would be nice, but the schema already specifies 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%, and the description adds no parameter-level detail. Per the rubric baseline, the schema carries the semantic weight, so a 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 conveys that the tool deletes messages, and ties it to user-supplied or confirmed message IDs. It does not explicitly contrast with sibling batch tools, but 'deletion' is specific enough to distinguish it from batch_get or batch_update.
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 opening 'Use this only when the user explicitly asks to delete messages and supplies or confirms the message IDs' provides an explicit precondition and a clear exclusion signal. It does not name alternatives, but the 'only when' phrasing effectively constrains when the tool should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_batch_get_messagesBatch Get MessagesARead-onlyIdempotentInspect
Use this when the user supplies several message IDs or a prior search returns multiple candidates. It avoids repeated single-message calls.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Message IDs to fetch, maximum 100. | |
| part | No | Body part to return when body_mode is not `none`. | |
| body_mode | No | Body shape to include for each message. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| include_html | No | When true, include HTML content when available. | |
| strip_quotes | No | When true, remove quoted reply text. | |
| include_links | No | When true, include links extracted from the body. | |
| max_body_chars | No | Maximum body characters per message before truncation. | |
| include_headers | No | Header detail to include in each message. | |
| strip_signature | No | When true, remove detected email signatures. | |
| include_attachments | No | Attachment detail to include. Contents are not returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld behavior, so the safety profile needs no restating. The description adds only the efficiency rationale and says nothing about per-message failure handling, truncation defaults, or partial results across a batch, which is where the real behavioral risk lies for a 100-item batch.
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 filler, with the usage trigger front-loaded ahead of the rationale. It is arguably over-lean for an 11-parameter tool, but nothing in the text is redundant.
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 output schema and full parameter descriptions carry most of the weight, and annotations cover safety. What is missing is batch-specific context an agent would want: the 100-ID cap, behavior when some IDs are invalid, and whether results are ordered or partial — none of which appear in the description.
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 every one of the 11 parameters including enums like body_mode, part, and include_attachments is already documented in the schema. The description adds no interpretation of how ids, mailbox_id, or body_mode interact, so baseline 3 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 implies a batch retrieval of messages keyed by IDs ('several message IDs', 'multiple candidates') and distinguishes itself from single-message fetching via 'avoids repeated single-message calls'. It never states the verb+resource outright ('fetch messages by ID'), relying on the tool name to close that gap, so it is clear but not fully self-contained.
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 gives concrete triggering conditions: the user supplies several IDs, or a prior search yields multiple candidates, and implicitly the single-message call is the alternative for one message. It does not state an exclusion case or the batch-size limit context, so guidance is strong but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_batch_update_messagesBatch Update MessagesAIdempotentInspect
Use this to mark, flag, move to a folder, or set keywords/labels on multiple messages after the user has confirmed the desired change. Do not use it for read-only tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Message IDs to update, maximum 100. | |
| seen | No | Set or clear the seen flag. | |
| flagged | No | Set or clear the flagged marker. | |
| keywords | No | Map of message keyword names to booleans. `true` sets the keyword; `false` clears it. Keyword names are normalised to lowercase. Lifecycle keywords such as `$draft` are read-only. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| if_in_state | No | Optional message state token for stale-write protection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the description's job is to add context beyond those. It adds a meaningful workflow constraint (invoke only post user-confirmation) and reinforces the mutating nature of the call, consistent with the annotations. No contradiction exists, and the added context is genuinely useful for an agent deciding whether to act autonomously.
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 zero filler: the operations list is front-loaded, the user-confirmation gate follows immediately, and the read-only exclusion closes it out. Every sentence carries load-bearing guidance for invocation.
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 and annotations covering idempotency and destructiveness, the description need not explain return values or safety profiles. It covers purpose, when-to-use, and exclusions adequately. The residual gap is the unsupported 'move to a folder' claim and no guidance that ids is semantically required despite the empty required array, leaving minor ambiguity for the 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 description coverage is 100%, so the schema already documents all six parameters, including rich detail on keywords (normalization to lowercase, read-only lifecycle keywords) and if_in_state (stale-write protection). The description adds only loose alignment ('set keywords/labels' maps to the keywords param) and no syntax or format details beyond the schema. Baseline 3 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 names a specific resource (multiple messages) and concrete operations (mark, flag, set keywords/labels), which distinguishes it from sibling update-adjacent tools like mailbox_batch_delete_messages and mailbox_batch_get_messages. However, the claimed 'move to a folder' capability has no corresponding parameter in the input schema, which slightly muddies the purpose for an agent planning its call.
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 gives an explicit when-to-use condition ('after the user has confirmed the desired change') and a clear when-not-to-use exclusion ('Do not use it for read-only tasks'). It stops short of naming the specific read-only siblings (e.g., mailbox_batch_get_messages, mailbox_get_message) as alternatives, which would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_control_draft_scheduleChange Draft ScheduleAIdempotentInspect
Reschedule or cancel a saved draft send only when the user asks. Requires mailbox.read and email.send. Pass the current expected_revision and expected_schedule_version; scheduled_for=null cancels. Cancellation fails once sending has begun.
| Name | Required | Description | Default |
|---|---|---|---|
| draftId | Yes | Stable draft ID. | |
| If-Match | No | Current draft ETag; both revision and schedule version remain required. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| scheduled_for | Yes | New future time within 30 days, or null to cancel and make the draft editable. Cancellation fails once sending has begun. | |
| expected_revision | Yes | Exact saved content revision. | |
| expected_schedule_version | Yes | Current schedule version; stale requests return conflict. Repeating the last identical request returns its current result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety and idempotency, and the description adds value beyond them: required scopes (mailbox.read, email.send), mandatory optimistic concurrency via expected_revision and expected_schedule_version, and the state-dependent failure 'Cancellation fails once sending has begun'. Those are precisely the operational facts an agent cannot infer from readOnlyHint=false / idempotentHint=true.
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 short sentences, zero filler, with the core action and the 'only when the user asks' constraint front-loaded before auth and concurrency details. Every clause carries information an agent needs.
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 state-mutating scheduling tool with an output schema, the definition covers auth, concurrency, cancel semantics, and the failure boundary. Minor gaps remain: behavior on revision/version conflict is left entirely to the schema, and mailbox_id targeting is not mentioned in the description.
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, but the description adds the reason the two expected_* fields must be passed (they are concurrency guards the caller must supply) and the meaning of scheduled_for=null as cancellation. That is genuine semantic value beyond the field-level 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 names a specific verb pair and resource: 'Reschedule or cancel a saved draft send'. That is unambiguous and clearly a distinct operation from update_draft or send_draft. It stops short of naming a sibling tool for contrast, so it isn't quite a 5.
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?
There is a real gating condition ('only when the user asks') plus an in-tool disambiguation (scheduled_for=null cancels, otherwise reschedules). However there is no guidance on when to use this versus update_draft or delete_draft, nor any statement of exclusions beyond the sending-started case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_count_messagesCount MessagesARead-onlyIdempotentInspect
Use this to count messages matching mailbox filters without listing every result. Follow with mailbox_list_messages only when examples are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search query across message fields. | |
| cc | No | Filter by CC recipient email address or display name. | |
| to | No | Filter by To recipient email address or display name. | |
| bcc | No | Filter by BCC recipient email address or display name. | |
| body | No | Filter by message body text. | |
| from | No | Filter by sender email address or display name. | |
| after | No | Filter to messages after this ISO 8601 timestamp. | |
| before | No | Filter to messages before this ISO 8601 timestamp. | |
| keyword | No | Require this message keyword, such as `$seen`. | |
| subject | No | Filter by subject text. | |
| folder_id | No | Filter to messages in this folder ID. | |
| is_unread | No | When true, only return unread messages. | |
| thread_id | No | Filter to messages in this thread ID. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| header_name | No | Header name to match with `header_value`. | |
| not_keyword | No | Exclude messages with this keyword. | |
| header_value | No | Header value to match with `header_name`. | |
| has_attachment | No | When true, only return messages with attachments. | |
| max_size_bytes | No | Maximum message size in bytes. | |
| min_size_bytes | No | Minimum message size in bytes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety and idempotency. The description adds the behavioral trait that it does not list results (only counts), which is useful beyond the annotations. It also hints at a workflow sequence. 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 with zero redundancy. The primary purpose is front-loaded, and the usage alternative is stated succinctly. 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 has 20 optional parameters and an output schema exists (though not shown), the description sufficiently explains when to use it and what it accomplishes. It does not explain the return format, but the output schema likely covers that. The description is adequate for an agent to decide when to invoke this 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?
The schema description coverage is 100%, so the baseline is 3. The description does not elaborate on any parameters; it only refers to 'mailbox filters' generically. Since the schema already documents all 20 parameters, the description adds no additional semantic value here.
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 function: 'count messages matching mailbox filters without listing every result.' It specifies the verb (count) and resource (messages), and explicitly differentiates itself from mailbox_list_messages, which is a sibling. This makes 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 provides explicit usage guidance: use this tool to count messages, and follow with mailbox_list_messages only when examples are needed. This directly addresses when to use this tool versus an alternative, leaving no ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_create_calendarCreate CalendarAInspect
Create a private calendar only when the user asks. Requires calendar.write. This does not send invitations or email reminders.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Private calendar name. | |
| time_zone | Yes | Time zone for local event times. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| Idempotency-Key | No | Stable key for this exact create in this mailbox. Saved responses replay for 24 hours. Uncertain creates still require read-only reconciliation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-destructive write (readOnlyHint=false, destructiveHint=false, openWorldHint=true), and the description adds two pieces of context the annotations cannot convey: the required scope "calendar.write" and the side-effect boundary that no invitations or email reminders are sent. The idempotency behavior is covered by the annotation and the Idempotency-Key schema field, so the remaining gap is minor.
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 short sentences, front-loaded with the action and the usage gate before the auth and side-effect notes. No redundant wording, though the separate "does not send invitations or email reminders" sentence is slightly tangential for a calendar-creation tool.
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 covering safety and idempotency, a 100%-covered input schema, and an output schema that removes the need to describe return values, the description supplies exactly the missing pieces: the required permission and the absence of notification side effects. Nothing an agent needs to call this correctly is absent.
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%, with name, time_zone, mailbox_id, and Idempotency-Key all documented in the schema itself. The description adds only the adjective "private" for the name parameter and nothing about time_zone format or mailbox_id targeting, so the baseline 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?
States a specific verb and resource ("Create a private calendar") and scopes it as private, which is meaningful against calendar listing/getting siblings. It does not explicitly differentiate itself from mailbox_create_calendar_event, which is the closest sibling, so an agent must infer the calendar-vs-event distinction from names 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 phrase "only when the user asks" gives a clear gating condition for invoking the tool, but there is no mention of alternatives (e.g., use create_calendar_event to add events, list_calendars to check existing ones) and no explicit when-not guidance beyond the user-request constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_create_calendar_eventCreate Calendar EventAInspect
Save an event without invitations or email reminders. Requires calendar.write. Retain the required UID before dispatch; after an uncertain result reconcile by UID lookup and never repeat the create after an empty immediate lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Stable caller-held identity, retained before this request. An uncertain create must be reconciled by UID lookup; never repeat it after an empty immediate lookup. | |
| start | Yes | Local start date and time without an offset, interpreted in time_zone. | |
| title | Yes | Event title. | |
| duration | Yes | Event duration expressed as days, hours, minutes or seconds. | |
| time_zone | Yes | Time zone for local event times. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| calendar_id | Yes | Calendar ID in the selected mailbox. | |
| description | No | Plain text event details. Set null to clear. | |
| Idempotency-Key | No | Stable key for this exact create in this mailbox. Saved responses replay for 24 hours. Uncertain creates still require read-only reconciliation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only say readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description adds genuinely useful behavior: no invitations or email reminders are sent, the credential needs calendar.write, and the UID must be retained for reconciliation after an uncertain result. It does not explain how a duplicate UID is treated (conflict vs. overwrite), which is the remaining gap for a non-idempotent write.
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 short sentences with the capability, permission requirement, and retry rule front-loaded; nothing is filler. The second clause is telegraphic ("Retain the required UID before dispatch") but still parseable.
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?
Nine parameters with full schema coverage and an output schema means return values need no explanation; the description covers the two things structure cannot: notification side effects and safe retry after an ambiguous failure. Only the duplicate-UID/conflict outcome is left unstated for a 6-required-param write 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% and the UID reconciliation/never-repeat guidance is already written verbatim into the uid and Idempotency-Key parameter descriptions. The description therefore restates rather than adds meaning; 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?
"Save an event without invitations or email reminders" states a specific verb (save/create) and resource (calendar event) plus an important scope qualifier: no attendee invitations or mail notifications. It does not explicitly name the sibling create/update calendar-event tools or say how it differs from them, so it stops short of a 5.
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?
Usage is implied by the qualifier (use this when you want an event with no invitations/reminders) and a prerequisite is disclosed ("Requires calendar.write"). There is no explicit when-not guidance or named alternative such as mailbox_update_calendar_event or the qubrics_ variant, which matters given several near-identical calendar siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_create_draftCreate Saved DraftAInspect
Save a message for review without sending it. Requires mailbox.read and mailbox.drafts.write. Use source.action for reply, reply_all, forward or adopt; explicit content overrides prepared defaults. Adoption requires Idempotency-Key; reuse it when retrying the same create request.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Visible copied recipients. | |
| to | No | Primary recipients; at most 50 total across To, Cc and Bcc. | |
| bcc | No | Hidden copied recipients. | |
| from | No | Authorised sender; defaults to this inbox. | |
| source | No | Source for this draft. Adoption requires Idempotency-Key. Explicit content fields override prepared defaults. | |
| subject | No | Subject; may be empty. | |
| reply_to | No | Authorised reply addresses; defaults to this inbox. | |
| html_body | No | HTML body, preserved when saved. | |
| text_body | No | Plain-text body. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| attachments | No | Attachments and inline images. | |
| custom_headers | No | Custom X-* headers. Writes reject X-SES-TENANT, X-SES-CONFIGURATION-SET and X-SES-MESSAGE-TAGS case-insensitively. On updates, omit this field to preserve saved headers, or pass {} to clear them. | |
| Idempotency-Key | No | Reuse this key when retrying the same create request. | |
| reply_to_message_id | No | Message in this inbox to reply to; thread headers are snapshotted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds real context beyond the annotations: the required mailbox.read and mailbox.drafts.write scopes, the fact that adoption needs an Idempotency-Key, and that the key should be reused on retries. That is meaningful operational disclosure for a write tool whose annotations only say readOnly=false, destructive=false and idempotent=false. It does not explain blast radius beyond 'saved, not sent', but the annotations plus scope disclosure cover most of the gap.
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 tight sentences, front-loaded with the outcome ('save without sending') before the prerequisites and the source.action mechanics. No filler, though the scope and idempotency clauses are somewhat compressed into the middle and could read more cleanly as separate statements.
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 14 parameters, nested recipient/attachment objects and an output schema, this tool is complex, and the description covers the pieces an agent cannot get from structured fields: auth scopes, the adoption idempotency contract, and content-override precedence. Limits, formats and return shape are handled by the schema and output schema, so nothing critical is missing.
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 already 100%, so the baseline is 3, but the description adds genuine semantics: explicit content fields override the defaults prepared from source.action, and the Idempotency-Key must be reused when retrying the same create. That precedence rule is not derivable from the schema alone, so it earns an increment.
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 opens with a specific verb+resource pair ('Save a message') and immediately scopes it ('for review without sending it'), which cleanly separates this tool from mailbox_send_draft, mailbox_send_message and mailbox_update_draft. An agent can pick this tool over the send path without opening any schema.
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 gives conditional guidance for the source.action values (reply/reply_all/forward/adopt) and the idempotency-retry case, which implies when the tool is appropriate. However, it never states when to use this tool versus mailbox_update_draft or mailbox_send_draft, nor any when-not conditions, so the routing guidance is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_delete_calendarDelete an empty calendarADestructiveIdempotentInspect
Requires calendar.write. Fetch the calendar and pass its ETag in If-Match. A calendar containing events returns 409 conflict.
| Name | Required | Description | Default |
|---|---|---|---|
| If-Match | Yes | ETag from the most recent calendar GET. Wildcards are rejected. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| calendar_id | Yes | Calendar ID in the selected mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructive/idempotent annotations, it discloses the required calendar.write scope and the explicit 409 outcome when the calendar is non-empty, which is genuine behavioral context an agent needs before calling. It still doesn't say whether the deletion is permanent or recoverable, keeping it from a 5.
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 terse sentences with the permission requirement front-loaded, then the precondition, then the failure mode. No filler, and each sentence carries actionable 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?
The output schema covers return values and annotations cover destructiveness, so the essentials are present. However, for a destructive mutation the description omits reversibility and any recovery guidance, and gives no routing for non-empty calendars.
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 schema already documents calendar_id, mailbox_id, and If-Match. The description only reiterates the ETag workflow, adding no format, sourcing, or scoping detail beyond what the field descriptions provide. Baseline 3 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 name and title establish 'delete a calendar', and the description narrows the scope to an empty calendar with a concrete constraint (409 if events exist). It does not explicitly say 'deletes the calendar' in the description body or distinguish itself from mailbox_delete_calendar_event, so it falls short of a 5.
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 gives a required workflow (GET the calendar first, pass its ETag) and a failure condition, which implies when the call is valid. It never states the alternative path for a calendar that contains events (e.g., delete its events first via mailbox_delete_calendar_event), leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_delete_calendar_eventDelete Calendar EventADestructiveIdempotentInspect
Delete an event only when the user asks. Requires calendar.write and the reviewed If-Match value. This does not send cancellation emails; reload after a conflict.
| Name | Required | Description | Default |
|---|---|---|---|
| If-Match | Yes | ETag from the most recent event GET. Wildcards are rejected. | |
| event_id | Yes | Event ID in the selected mailbox. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint and idempotentHint annotations, the description discloses the required calendar.write scope, the required reviewed If-Match precondition, that there are no cancellation emails, and that the caller should reload after a conflict. This is meaningful operational context. It stops short of describing the response body or what happens on a 412 beyond 'reload'.
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 short sentences, front-loaded with the confirmation requirement, then the prerequisites, then the side effects and error recovery. Every sentence carries a distinct constraint, with no repetition of the schema or annotations.
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?
An output schema exists and annotations cover destructiveness and idempotency, so the description only needs the operational prerequisites, operational caveats, and recovery path, which it supplies. It omits what happens to recurring-event instances and to attendee state, which would be relevant for a delete on an open-world calendar.
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 earns an extra point by calling the If-Match value 'reviewed', which signals that the ETag must come from a fresh read; it also ties conflicts to a reload, adding semantics to the precondition 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?
States a specific verb and resource: 'Delete an event'. The scope is limited to calendar events, distinguishing it implicitly from mailbox_delete_calendar and the update/create event siblings. It does not explicitly differentiate itself from the near-duplicate qubrics_mailbox_delete_calendar_event, so it falls short of a 5.
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?
'Delete an event only when the user asks' gives an explicit usage condition and implies a when-not: never delete proactively. It does not name alternatives such as updating the event or using a batch tool, so the guidance is clear but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_delete_draftDelete Saved DraftADestructiveInspect
Delete a saved draft only when the user asks. Requires mailbox.read and mailbox.drafts.write. Deletion finishes in the background; a send already in progress cannot be deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| draftId | Yes | Stable draft ID. | |
| If-Match | No | Delete only if this is still the current draft. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructive=true and idempotentHint=false, so the description is not carrying the safety burden. It adds real value beyond them: required scopes (mailbox.read, mailbox.drafts.write), asynchronous background completion, and the edge case that an in-flight send blocks deletion.
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 short sentences with zero filler; the action, precondition, permission requirement, and behavioral caveat are front-loaded in that order.
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, return values need no explanation, and the description covers permissions, async completion, and the send-in-progress constraint. It omits whether deletion is reversible or what error surfaces on a precondition failure, but nothing critical for correct invocation is missing.
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 draftId, If-Match, and mailbox_id are already documented in the schema. The description's note about in-progress sends is loosely related to the conditional-delete parameter but doesn't clarify its semantics or when to supply it.
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 gives a specific verb and resource ('Delete a saved draft'), which is unambiguous. It does not distinguish this from siblings like mailbox_send_draft or mailbox_update_draft, so an agent must infer the boundary from the name 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 phrase 'only when the user asks' establishes an explicit precondition and implicitly cautions against proactive deletion. It doesn't name alternative actions (send, update, discard schedule), but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_attachmentGet Attachment MetadataARead-onlyIdempotentInspect
Use this after finding a message attachment. It returns metadata plus a fresh short-lived download_url for that exact attachment; fetch the URL promptly, and call this tool again if it expires.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID when the credential can access more than one mailbox. | |
| message_id | Yes | Message ID containing the attachment. | |
| attachment_id | Yes | Attachment ID from message metadata. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior, so the description clears the lower bar and still adds real context: the returned download_url is short-lived and must be fetched promptly, and expiration is handled by re-calling rather than by retrying the URL. That is exactly the operational detail an agent cannot get from the hint flags.
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, zero filler, with the prerequisite stated first and the expiration caveat second. Every clause carries actionable 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?
For a three-parameter read tool with an output schema and full annotation coverage, this tells an agent what it gets back and how to handle URL expiry, which is the main failure mode. Only the choice between this tool and the read/text siblings is left unaddressed.
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 schema already documents all three parameters, and the description adds only the idea that message_id plus attachment_id pin down 'that exact attachment'. It says nothing about when mailbox_id is required, but with full schema documentation a 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 states a specific verb and resource ('returns metadata plus a fresh short-lived download_url for that exact attachment'), which implicitly separates it from content-fetching siblings like mailbox_read_attachment or mailbox_get_attachment_text. It never names those siblings, so the differentiation is inferable rather than explicit.
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 gives a sequencing prerequisite ('use this after finding a message attachment') and a re-invocation rule ('call this tool again if it expires'), which is useful. However, it never states when to prefer this over mailbox_read_attachment or mailbox_get_attachment_text, leaving that routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_attachment_textRead Attachment TextARead-onlyIdempotentInspect
Read or poll a previously requested attachment extraction. Requires mailbox.read. This does not start conversion; cache expiry or source removal returns not_found. Check status and outcome before using text.
| Name | Required | Description | Default |
|---|---|---|---|
| max_bytes | No | Maximum UTF-8 text bytes returned. Default 262144; maximum 1048576. Applies to cached results too. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| message_id | Yes | Message ID in the selected mailbox. | |
| If-None-Match | No | Return 304 when the authorised response is unchanged. | |
| attachment_id | Yes | Attachment ID from that message. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive and openWorld, so the bar is lower, yet the description still adds real value: the mailbox.read privilege requirement, the not_found outcome from cache expiry or source deletion, and the instruction to inspect status/outcome before consuming text. It stops short of describing polling cadence or what a partially-converted state looks like.
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 tightly packed sentences with the workflow constraint front-loaded and zero filler. 'Check status and outcome before using text' is slightly compressed and could be clearer about which outcome values matter, but no sentence is wasted.
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?
An output schema exists, so return values need not be explained, and the description covers the prerequisite, the auth requirement, and the main failure mode. Given a five-parameter cached-read tool, that is nearly complete, with only the polling/retry expectation left implicit.
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%: mailbox_id, message_id, attachment_id, max_bytes and If-None-Match are all documented in the schema, including the default and cap on max_bytes. The description adds no parameter-level meaning beyond that, so the baseline of 3 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?
States a specific verb and resource ('Read or poll a previously requested attachment extraction') and explicitly rules out the conversion-starting behaviour, which separates it from request_attachment_text. It does not disambiguate against the near-identically named siblings mailbox_get_attachment and mailbox_read_attachment, which remain ambiguous from the description 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 phrase 'previously requested' plus 'Check status and outcome before using text' tells the agent this is a follow-up step in a two-call workflow, not a first call. However, it never names mailbox_request_attachment_text as the prerequisite tool, so the agent must infer the alternative rather than being routed to it explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_calendarGet CalendarARead-onlyIdempotentInspect
Read one calendar in the selected mailbox. Requires calendar.read.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| calendar_id | Yes | Calendar ID in the selected mailbox. | |
| If-None-Match | No | ETag from a previous resource GET; a matching version returns 304. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered and the description only needs to add beyond it. It contributes the OAuth scope requirement ("calendar.read"), which is genuine context not present in annotations. It does not cover behavior such as error handling on an unknown calendar_id or cross-mailbox access limits.
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 short sentences with the operation stated first and the permission requirement second; no filler and nothing buried.
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 single-resource GET with an output schema and full annotation coverage, the description plus schema give an agent enough to call it correctly, including the required scope. The remaining gap is minor: no note on failure behavior for a wrong or inaccessible calendar_id.
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%, including mailbox_id's scoping rule and If-None-Match's 304 semantics, so the baseline is 3. The description's phrase "in the selected mailbox" loosely reinforces the mailbox_id/calendar_id relationship but adds no syntax or format detail 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?
"Read one calendar in the selected mailbox" gives a specific verb (read) and resource (one calendar), and the singular "one" implicitly separates it from the list_calendars sibling. It stops short of naming a sibling or stating a distinguishing condition explicitly, so it is clear but not fully differentiated.
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?
"Requires calendar.read" is the only guidance, which is an authorization prerequisite rather than a when-to-use rule. Nothing says whether the caller must first call mailbox_list_calendars to obtain a valid calendar_id, and no alternative (e.g. list_calendars) is named for the bulk case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_calendar_eventGet Calendar EventARead-onlyIdempotentInspect
Read one event before editing or deleting it. Requires calendar.read. Retain its current concurrency token for the next conditional change.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Event ID in the selected mailbox. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | ETag from a previous resource GET; a matching version returns 304. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive behavior, so the safety profile is covered. The description adds real value beyond them by naming the required scope (calendar.read) and by warning that the returned concurrency token must be retained for a subsequent conditional change, which is non-obvious operational 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?
Three short sentences, front-loaded with the action and its precondition, then the auth requirement, then the follow-up advice. Nothing is redundant or padded.
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?
Returns are covered by the output schema and all three parameters are documented in the schema, so the description only needs to supply usage, auth, and concurrency context, which it does. A note on what happens when the credential spans multiple mailboxes (selecting via mailbox_id) would round it out, but the schema already covers 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?
Schema coverage is 100%, so the baseline is 3, but the description goes further by framing the returned ETag as a 'concurrency token' tied to conditional changes, giving the If-None-Match parameter practical meaning beyond its schema text. It does not explain mailbox_id resolution, but the schema handles that.
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 gives a specific verb and resource ('Read one event'), which clearly separates it from the list siblings such as mailbox_list_calendar_events and the sibling get_calendar_event variants by scoping to a single event. It stops short of naming an alternative tool outright, so it is clear but not fully differentiated in-text.
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 states a concrete when-to-use condition: read before editing or deleting. That implicitly routes the agent to mailbox_update_calendar_event and mailbox_delete_calendar_event without naming them, and there is no explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_calendar_event_changesGet Calendar Event ChangesARead-onlyIdempotentInspect
Read bounded event changes from a retained state. Requires calendar.read. When sync_required is true, perform a full event resync; these coalesced changes are not a complete activity history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum changed IDs across the response, up to 100. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| since_state | No | Event state from the previous changes response. Omit to establish a full-refresh baseline. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the safety bar is lower; the description still adds substantive context: the calendar.read permission requirement, the meaning of sync_required, and the caveat that coalesced changes are not a complete activity history. That last point is a real behavioral caveat an agent could otherwise misuse.
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 short sentences, front-loaded with the core action and followed by the permission requirement and the sync caveat. Every sentence contributes, though the first sentence is compressed to the point of mild ambiguity about what a 'retained state' is.
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, return values need not be explained, and the description still covers the key output flag (sync_required) and the credential scope implication. It is close to complete for a three-optional-parameter read tool, missing only explicit sibling routing.
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 three parameters are documented with formats and constraints; the description adds no syntax or defaulting detail beyond that. Baseline 3 applies since the schema carries the parameter burden.
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?
States a specific verb and resource ('Read bounded event changes') plus the source of truth ('from a retained state'), which is precise and tells an agent this is an incremental sync operation. It does not differentiate itself from siblings like mailbox_list_calendar_events or mailbox_get_calendar_event, so an agent must infer the distinction.
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?
Provides actionable guidance for the sync_required=true case (perform a full resync) and implicitly defines the incremental flow via since_state. However, it never states when to choose this tool over mailbox_list_calendar_events or mailbox_get_calendar_event, and no explicit prerequisites or exclusions beyond the read scope are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_changesGet Mailbox ChangesARead-onlyIdempotentInspect
Use this to resume mailbox sync from a prior state cursor. Do not use it for ad hoc message search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum change records to return (default 50, max 500). | |
| types | No | Comma-separated list: messages, folders, threads, submissions, identities, quotas. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| since_state | No | Legacy message state cursor to resume from. | |
| quotas_since_state | No | Quota state cursor to resume from. | |
| folders_since_state | No | Folder state cursor to resume from. | |
| threads_since_state | No | Thread state cursor to resume from. | |
| messages_since_state | No | Message state cursor to resume from. | |
| identities_since_state | No | Identity state cursor to resume from. | |
| submissions_since_state | No | Submission state cursor to resume from. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description only needs to add context beyond that. It adds the cursor-based sync mechanism but does not describe return behavior or cursor-format expectations; output schema covers the return shape, so 3 is appropriate.
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 zero waste. The primary use case is front-loaded, and the exclusion follows immediately. 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?
For a tool with 10 optional parameters including 7 distinct cursor types (since_state vs. type-specific *_since_state), the description is thin. It does not explain how the legacy since_state relates to messages_since_state, folders_since_state, etc. — a genuine gap an agent could trip on. Output schema and 100% schema coverage offset this somewhat, but the multi-cursor complexity warrants more guidance.
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% — all 10 parameters have individual descriptions in the input schema, so the baseline of 3 applies. The description adds no parameter-level detail beyond the schema, though its cursor-resume framing helps contextualize the various *_since_state 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?
States a specific purpose: resume mailbox sync from a prior state cursor. The verb 'resume' plus 'prior state cursor' makes the operation precise, and the explicit exclusion of ad hoc message search differentiates it from siblings like mailbox_list_messages and mailbox_search_message_snippets.
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?
Gives clear when-to-use (resuming sync from a cursor) and an explicit when-not-to-use (ad hoc search). However, it does not name the alternative tools to use for ad hoc search, so the agent must infer which sibling handles that case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_connectionGet Mailbox ConnectionARead-onlyIdempotentInspect
Validate the current Mailbox credential and read its team, connection label, permissions and authorised mailboxes. No mailbox selection or mailbox storage access is required.
| Name | Required | Description | Default |
|---|---|---|---|
| If-None-Match | No | ETag from a previous response. A match returns 304 with no body after rechecking authentication. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds meaningful behavioral context: it validates the current credential, reads specific connection-level data, and explicitly states that no mailbox selection or storage access is required. This is consistent with the annotations and goes beyond what they state.
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 with no wasted words. It front-loads the core purpose, lists the specific data returned, and adds a relevant scope constraint about mailbox selection and storage access. 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?
For a simple read-only tool with one optional parameter, an output schema, and strong annotations, the description is largely sufficient. It explains the purpose, scope, and key behavioral constraint. It does not explicitly route agents to sibling tools, but that gap is minor given the tool's simplicity and rich structured metadata.
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 one optional parameter, If-None-Match, with a description covering its ETag behavior, so schema description coverage is 100%. The tool description adds no additional parameter semantics beyond the schema, so the 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 states a specific action: validate the current Mailbox credential and read team, connection label, permissions, and authorised mailboxes. It clearly distinguishes itself from mailbox-content tools by noting that no mailbox selection or mailbox storage access is required, though it does not explicitly name or contrast sibling tools like mailbox_get_session.
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 its use for credential validation and connection metadata retrieval, and the 'no mailbox selection or mailbox storage access is required' line hints at when it is not appropriate. However, it provides no explicit guidance about when to prefer this tool over alternatives such as mailbox_get_session or sending_get_connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_draftRead Saved DraftARead-onlyIdempotentInspect
Read a saved draft and its current revision before editing or sending. Requires mailbox.read. Keep the revision and schedule version for later changes.
| Name | Required | Description | Default |
|---|---|---|---|
| draftId | Yes | Stable draft ID. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | Return 304 if this draft has not changed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the bar is lower, yet the description still adds real behavioral content: the required mailbox.read scope and the instruction to retain the revision and schedule version for subsequent mutations, which is optimistic-concurrency guidance not visible in the annotations. It does not explain what happens on a stale revision or how the 304 path behaves, so it is not exhaustive.
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 no filler; the action and its scope come first, followed by the precondition and the follow-up obligation. Every clause contributes distinct 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, return values need not be described, and the annotations cover the safety profile; the description fills the remaining gaps of auth scope and version retention. The phrase "schedule version" is left unexplained, a minor gap for a tool whose whole point is version bookkeeping.
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 draftId, mailbox_id and If-None-Match are already documented with their targeting and conditional-request semantics. The description mentions revisions but does not add input-level detail (such as how the revision relates to If-None-Match), so the schema carries the load and the baseline 3 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?
"Read a saved draft and its current revision" states a specific verb and resource, and adds scope (current revision) that separates it from a plain listing call. It does not explicitly name sibling tools like mailbox_list_drafts or mailbox_update_draft, so differentiation is implied through the workflow rather than stated.
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?
"before editing or sending" gives clear context for when this read is the right call, positioning it upstream of update/send operations. It stops short of naming the alternative tools or stating when-not to use it (e.g., bulk inventory of drafts), which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_identityGet Mailbox IdentityARead-onlyIdempotentInspect
Use this to read the mailbox sender identity and display name. Use it before composing replies when the sender should match the mailbox identity.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds context about reading sender identity and display name before composing replies, but does not disclose additional behavioral details such as error conditions or auth requirements. 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?
Two short sentences carry the purpose and the key usage context without any filler. The information is front-loaded and every word contributes to the agent's understanding.
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 simple read-only tool with one optional parameter, an output schema, and strong annotations, the description is nearly complete. It could slightly improve by mentioning when to prefer mailbox_list_identities, but this is not a major gap given the clear composing-replies scenario.
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 parameter schema has 100% coverage and already explains mailbox_id clearly, including when to omit it. The description does not add parameter-specific guidance, but with such strong schema coverage, a baseline 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 tool reads the mailbox sender identity and display name, using a specific verb and resource. It does not explicitly differentiate itself from sibling tools like mailbox_list_identities, but the singular 'mailbox identity' and the composing-replies context imply the intended use.
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 gives an explicit use case: use this before composing replies when the sender should match the mailbox identity. It lacks explicit exclusions or alternatives, but the context is clear enough for an agent to select this tool for the stated scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_meGet Mailbox ProfileARead-onlyIdempotentInspect
Use this to identify the authenticated mailbox before acting on mail. It returns profile details for the mailbox key currently in use.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered by structured data. The description adds the 'currently in use' mailbox targeting nuance, but it does not describe caching/304 behavior or edge cases; the schema's If-None-Match parameter description covers the 304 behavior instead.
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 short sentences with no filler; the main use-case is front-loaded in the first sentence and the return value in the second. 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?
For a simple read-only profile tool with no required parameters, rich annotations, 100% schema parameter coverage, and an output schema, the description is sufficient. An agent has everything needed to invoke it and interpret the basic result.
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 both params (mailbox_id and If-None-Match) are already documented in the schema. The description does not add parameter-level meaning beyond what the schema provides, which yields the baseline score of 3.
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 clear verb ('identify', 'returns') and a specific resource ('authenticated mailbox' / 'mailbox key currently in use'), making the tool's function obvious. It does not explicitly distinguish itself from sibling tools like mailbox_get_identity or mailbox_get_session, so it stops short of full differentiation.
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 gives a concrete usage context: 'before acting on mail', which tells an agent when this lightweight profile lookup is appropriate. It does not state when not to use it or name alternatives, so it lacks explicit exclusion/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_messageGet MessageARead-onlyIdempotentInspect
Use this to fetch one message summary or detail by message_id. Use mailbox_list_body or mailbox_list_content when the body content is required.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| message_id | Yes | Message ID. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered by structured data. The description adds only the implication that it returns a summary rather than a body and that a detail mode exists, without saying how to trigger it. It does not mention that If-None-Match can return 304, although the schema documents that.
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 short sentences, with the primary action first and the alternative routing second. Every sentence carries information, and there is no redundant restatement of the title.
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?
An output schema exists, so return values need not be explained, and the parameters and annotations are rich. The only real gap is the unexplained distinction between 'summary' and 'detail' modes, which leaves ambiguity about what this call actually returns.
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 all three parameters are already documented, including mailbox_id scoping and the weak ETag for conditional requests. The description mentions message_id but adds no meaning beyond the schema, such as ID format or what happens when mailbox_id is wrong. Baseline 3 is appropriate because the schema does the heavy lifting.
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 states a specific verb and resource: fetch one message by message_id, scoped to a single message rather than a list. It also names the siblings that should be used instead when body content is needed, which helps distinguish it. However, the phrase 'summary or detail' is never explained: no parameter controls that choice, so an agent cannot tell which response it will get.
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 gives an explicit routing rule: use mailbox_list_body or mailbox_list_content when body content is required, implying that this tool returns metadata or summaries. It does not address other close alternatives, such as mailbox_batch_get_messages for multiple IDs or mailbox_get_thread for conversation context, so the guidance is good but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_sender_choicesGet permitted sender choicesBRead-onlyIdempotentInspect
Intersects current team, inbox and credential policies with provider restrictions and selected delivery groups. Subdomains require separate authorisation. Sending checks these permissions again before submission.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | Return 304 when this ETag still matches. | |
| delivery_group_id | No | Restrict choices to these delivery groups. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive and open-world behavior, so the description is not carrying the safety burden. It still adds genuine context beyond the annotations: the result is a policy intersection, subdomains need separate authorisation, and the permissions are re-validated at send time, which tells the agent the result is advisory rather than a guarantee.
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 sentences, none obviously wasteful, but the opening sentence is a dense chain of policy jargon that front-loads mechanics instead of the tool's outcome. Leading with what the tool returns would make the text far easier to act on.
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?
An output schema exists, so return values need not be spelled out, and the description covers the policy-intersection logic, the subdomain caveat and the re-check at send time. What is missing is a plain statement of what a 'choice' actually is (address? identity? provider account?) and whether results are filtered by the delivery group or merely annotated by 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 coverage is 100%, so all three parameters (mailbox_id, If-None-Match, delivery_group_id) are already documented in the schema. The description adds only a light gloss by referring to 'selected delivery groups', which corresponds to delivery_group_id, but says nothing about mailbox scoping or the ETag caching parameter. Baseline 3 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 explains how the result is computed (an intersection of team, inbox and credential policies with provider restrictions and delivery groups) but never states plainly that the tool returns the set of sender addresses/identities that may be used. The verb is implicit and buried in 'Intersects', so an agent must infer the output type from the title rather than the body text.
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?
There is no explicit when-to-use instruction and no reference to an alternative. The clause 'Sending checks these permissions again before submission' hints that this is a pre-send check, but the agent must derive that call ordering itself, and nothing says when this tool should be skipped (e.g., if the caller already knows the allowed sender).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_sessionGet Mailbox SessionARead-onlyIdempotentInspect
Use this before complex mailbox work to discover supported mailbox capabilities, limits, and endpoint metadata. Do not use it for message search.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety behavior is covered. The description adds only that the payload contains capabilities, limits, and endpoint metadata, without describing caching semantics, variability of the response, or what 'limits' concretely means. Useful but thin beyond the structured fields.
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 short sentences with zero filler; the intended use is front-loaded and the exclusion follows immediately. Nothing is redundant with the title or restated needlessly.
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?
An output schema exists, so return values need not be explained, and the description covers the essential purpose and one key exclusion for a low-complexity, zero-required-parameter tool. It stops short of clarifying how it relates to the many overlapping sibling discovery/connection tools, which would have made it fully 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 description coverage is 100%, so both parameters (mailbox_id and If-None-Match) are already fully documented in the schema, establishing the baseline of 3. The description contributes no additional meaning about when to supply mailbox_id or how conditional requests interact with this tool.
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 names a specific function — discovering supported mailbox capabilities, limits, and endpoint metadata — which is a distinct outcome rather than a restatement of the name. It also explicitly separates itself from message search, so an agent can tell it is a discovery/metadata call rather than a data read.
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 gives a clear positive trigger ('before complex mailbox work') and a clear negative exclusion ('do not use it for message search'). It does not name the alternative tool to use for search, nor does it distinguish itself from near-duplicate discovery siblings such as mailbox_get_connection or qubrics_mailbox_get_session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_get_threadGet ThreadARead-onlyIdempotentInspect
Use this to read one thread summary by thread_id. Use mailbox_list_thread_messages when the task needs the messages in the thread.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes | Thread ID. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile needs no restating. The description adds the useful fact that the payload is a thread 'summary' rather than full messages, but says nothing about what the summary contains, pagination, or how the If-None-Match/304 path behaves in practice (that is only implied by the schema field).
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 tight sentences, purpose first then the alternative, with no filler. Slightly clipped — it reads more like a routing note than a full definition, but nothing is wasted.
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, full parameter documentation and complete annotations, the description only needs to establish scope and routing, which it does. The remaining hole is the prerequisite relationship to mailbox_list_threads for sourcing a thread_id and the distinction from the duplicated qubrics_mailbox_get_thread.
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%, including the mailbox_id targeting rule and the weak-ETag caching semantic, so the schema carries the parameter burden. The description only echoes thread_id, adding no meaning beyond the schema; baseline 3 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 names a specific verb and resource ('read one thread summary') and keys it to thread_id, which is enough to separate it from the message-list siblings. It does not differentiate itself from mailbox_list_threads or the duplicate qubrics_mailbox_get_thread, so the agent must still infer ordering within the thread family.
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 explicitly routes the agent: use this for the thread summary, use mailbox_list_thread_messages when the messages themselves are needed. That is a concrete when-to-use with a named alternative. The gap is how a thread_id is obtained in the first place (mailbox_list_threads) and whether this must be called before the message list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_list_bodyRead Message BodyARead-onlyIdempotentInspect
Use this to read the raw or simplified body for a known message_id. Prefer it when the task needs message text but not every MIME detail.
| Name | Required | Description | Default |
|---|---|---|---|
| part | No | Body part to return. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| message_id | Yes | Message ID. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. | |
| max_body_chars | No | Maximum body characters to return before truncation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, open-world, and non-destructive behavior. The description adds useful behavioral context about response granularity (raw/simplified body, not full MIME details), which goes beyond what annotations express.
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 no filler. The verb, resource, precondition, and selection guidance are front-loaded and 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?
The schema covers all parameters, an output schema exists, and annotations cover safety guarantees. The description provides enough decision context for an agent to invoke the tool correctly, though explicit sibling routing for full-MIME or attachment needs would make it fully 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%, so the baseline is 3. The description adds general context about body versus MIME details but does not explain parameter-specific behavior beyond what the schema already 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 description states a specific verb ('read'), a specific resource ('body'), and a precise scope ('for a known message_id'). It also distinguishes the tool from generic message retrieval by clarifying that it returns raw or simplified body content and omits full MIME detail.
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 gives an explicit preference condition: use it when the task needs message text but not every MIME detail. This gives an agent useful selection context, though it does not name specific alternative tools or explicitly say 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.
mailbox_list_calendar_eventsList Calendar EventsARead-onlyIdempotentInspect
List events in the selected mailbox or look up a caller-held UID. Requires calendar.read. UID search is eventually consistent: an empty immediate lookup leaves an uncertain create unresolved and never authorises repeating it.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Exact immutable event UID. Empty results can reflect a recent create awaiting search visibility; never repeat an uncertain create. | |
| limit | No | Maximum records per page, up to 100. | |
| cursor | No | Cursor from the previous page. Keep the same filters while paging. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| calendar_id | No | Limit events to this calendar in the selected mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, open-world behavior, so the bar is lower; the description still adds real value by disclosing the required calendar.read scope and the eventual-consistency trait of UID search. The warning that an empty lookup leaves an uncertain create unresolved and must not be retried is exactly the kind of behavioral context annotations cannot convey.
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 short sentences, front-loaded with purpose, followed by the auth requirement and the consistency caveat in priority order. Slightly hurt by the awkward phrasing 'never authorises repeating it', which a reader has to parse before understanding the retry prohibition.
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 declaring the safety profile, an output schema covering return values, and full schema parameter descriptions, the remaining burden is auth and consistency semantics — both are stated. An agent can select and invoke this tool correctly without further inference.
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 every parameter (uid, limit, cursor, mailbox_id, calendar_id) is already documented in the schema, including the mailbox_id omit-when-single-mailbox rule. The description only restates the UID lookup mode and adds no syntax, range, or interaction detail beyond the schema, so the baseline 3 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?
States a specific verb and resource ('List events in the selected mailbox') and adds a second mode ('look up a caller-held UID'), so the agent knows this tool both enumerates and fetches by UID. It stops short of naming the closest sibling (mailbox_get_calendar_event) which appears to be the dedicated single-event fetch, leaving the mode overlap unresolved.
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?
'Requires calendar.read' gives a clear prerequisite, and the two operating modes imply when the uid parameter path applies. However, there is no explicit when-to-use versus mailbox_get_calendar_event or mailbox_get_calendar_event_changes, and no guidance on when to paginate through the full mailbox listing versus targeting a UID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_list_calendarsList CalendarsARead-onlyIdempotentInspect
List calendars in the selected mailbox. Requires calendar.read. Use a small limit and continue with the returned cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum records per page, up to 100. | |
| cursor | No | Cursor from the previous page. Keep the same filters while paging. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description usefully adds the required permission and the cursor-based pagination contract, but leaves openWorldHint and the actual return shape unexplained despite a list of calendars potentially spanning accounts.
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 short sentences, each earning its place: what it does, what auth it needs, how to page. It is front-loaded and free of filler, though it is terse enough that it borders on under-specified.
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, return values need no explanation, and all three parameters are documented in the schema. The description covers permissions and paging, which is nearly everything an agent needs for a simple read-only list operation; only the relationship to sibling calendar tools is missing.
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 limit, cursor, and mailbox_id are already fully documented, including the omit-when-single-mailbox rule. The description reinforces the paging semantics of limit and cursor but adds no new parameter detail beyond that.
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 opens with a specific verb and resource ('List calendars in the selected mailbox'), which distinguishes it from mailbox_list_calendar_events and mailbox_get_calendar. It stops short of naming the closest sibling, so the agent must infer that this enumerates calendar containers rather than calendar events.
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 gives two concrete operating instructions: the required scope (calendar.read) and the paging pattern (small limit, continue with returned cursor). It does not say when to prefer mailbox_get_calendar or when listing is unnecessary, so usage is implied rather than contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_list_contentRead Message ContentARead-onlyIdempotentInspect
Use this to read structured content for a known message_id. Prefer it when headers, participants, or body parts affect the answer.
| Name | Required | Description | Default |
|---|---|---|---|
| part | No | Body part to return. `auto` prefers text when available. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| message_id | Yes | Message ID. | |
| include_html | No | When true, include HTML content when available. | |
| strip_quotes | No | When true, remove quoted reply text. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. | |
| include_links | No | When true, include links extracted from the body. | |
| max_body_chars | No | Maximum body characters to return before truncation. | |
| include_headers | No | Header detail to include in the response. | |
| strip_signature | No | When true, remove detected email signatures. | |
| include_attachments | No | Attachment detail to include. Contents are not returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as read-only, idempotent, non-destructive, and open-world, so the safety profile is covered. The description adds little behavioral detail beyond the general content scope: it does not mention truncation behavior, ETag/304 semantics, mailbox scoping, or that attachment contents are excluded.
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 the main action, and contains no redundant restatement of the title or schema. Every sentence contributes to identifying the tool's intended use.
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 11 parameters, rich annotations, full schema coverage, and an output schema, which reduces what the description must cover. Still, with many similar mailbox-reading siblings, the description is thin on routing guidance and behavioral expectations, leaving an agent to infer when this tool is better than mailbox_get_message or mailbox_list_body.
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 fully documents parameters such as part, include_headers, strip_quotes, and If-None-Match. The description mentions message_id and general content categories, but adds no meaning beyond what the schema already 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 description states a specific action and target: read structured content for a known message_id, with headers, participants, and body parts as relevant details. It is clear enough on its own, but it does not differentiate this tool from close siblings such as mailbox_get_message or mailbox_list_body.
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 gives a usable condition: use it for a known message_id and prefer it when headers, participants, or body parts affect the answer. However, it provides no when-not guidance and does not name alternatives among the many overlapping mailbox read tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_list_draftsList Saved DraftsARead-onlyIdempotentInspect
List saved drafts in the selected inbox, newest first. Requires mailbox.read. Use a small limit and continue with the returned cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size; default 50, maximum 100. | |
| cursor | No | Cursor returned by the previous page. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds value beyond that by disclosing the required scope (mailbox.read), the sort order (newest first), and the cursor-based pagination contract.
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 short sentences, zero filler, with the purpose and ordering front-loaded before the permission and pagination notes. Every sentence carries information an agent would otherwise have to infer.
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 read-only paginated list tool with full schema coverage, an output schema, and rich annotations, this covers scope, auth, ordering and pagination. Only the routing to sibling tools for draft detail or message listing is left implicit.
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 limit, cursor and mailbox_id are already fully documented, and the baseline of 3 applies. The description only adds the soft heuristic "use a small limit," without clarifying cursor lifetime, stability across pages, or mailbox_id omission behavior beyond what the schema states.
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?
States a specific verb and resource ("List saved drafts") plus scope ("in the selected inbox") and ordering ("newest first"). It does not name a sibling such as mailbox_get_draft or mailbox_list_messages to disambiguate draft-listing from message-listing, so it stops short of a 5.
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?
Provides real usage context: the required scope mailbox.read and explicit pagination advice ("Use a small limit and continue with the returned cursor"). It gives no when-not guidance or named alternative for cases where the caller wants full message listings instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_list_foldersList FoldersARead-onlyIdempotentInspect
Use this to inspect mailbox folders before filing or moving messages. It is read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default 50, max 100). | |
| cursor | No | Pagination cursor — the `next_cursor` from the previous response. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, idempotentHint, and destructiveHint=false; the description merely restates 'read-only' and adds no new behavioral traits like pagination or auth. 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?
Two short sentences, front-loaded with purpose and no filler. 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?
With full schema coverage, an output schema present, and annotations covering read-only and idempotent behavior, the description's purpose and use-case complete the picture.
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%, and the description relies on the schema for parameter details. It adds no extra semantics, which meets 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 identifies a specific verb ('inspect') and resource ('mailbox folders'), plus a clear use case. It doesn't explicitly differentiate from sibling tools, but 'folders' is distinct among the sibling list.
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?
States a concrete trigger: before filing or moving messages. It doesn't mention alternatives or when not to use, so it doesn't reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_list_granted_mailboxesList Granted MailboxesARead-onlyIdempotentInspect
Use this first when the token can access more than one mailbox. It searches only the mailboxes granted to this connection and returns IDs to pass as mailbox_id.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by mailbox ID or email address. | |
| limit | No | Maximum results (default 50). | |
| cursor | No | Cursor from the previous response. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context: it searches only the granted mailbox set and returns IDs intended for mailbox_id, which goes beyond the annotations without contradicting them.
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 short sentences front-load the usage condition ('Use this first') before stating scope and output. Every sentence earns its place with no redundancy or filler.
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 simple read-only list/search tool with fully documented optional parameters and an output schema, the description covers why to use it, when to use it, its scope, and how its result is consumed downstream. Nothing essential is missing for correct 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?
The input schema provides full descriptions for q, limit, and cursor, with 100% coverage. The description adds no parameter-level semantics beyond that, so the schema carries the load and the baseline 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 states a specific verb ('searches') and resource ('mailboxes granted to this connection'), and clarifies the output: IDs to pass as mailbox_id. 'Use this first' positions it as the discovery tool among sibling mailbox operations, making its purpose distinct.
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 to use this tool first when the token can access more than one mailbox, giving a clear trigger condition. It does not name alternatives or state when not to use it, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_list_identitiesList Mailbox IdentitiesARead-onlyIdempotentInspect
Use this to list sender identities available to the mailbox. Prefer mailbox_get_identity when only the default identity is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default 50, max 100). | |
| cursor | No | Pagination cursor — the `next_cursor` from the previous response. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description does not add additional behavioral context (e.g., pagination details or rate limits), but with the output schema present and the annotations strong, a baseline 3 is appropriate.
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 no fluff. The primary purpose is in the first sentence, and the sibling distinction is delivered concisely in the second. 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 that the output schema is present (so return format is documented), the annotations cover safety, and the parameters are fully explained in the schema, the description covers all essential decision points. It could add a note on pagination behavior, but the cursor parameter implies it, making this a minor gap. Overall, it's complete for an agent to call 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 description coverage is 100%, meaning all three parameters (limit, cursor, mailbox_id) already have clear documentation in the schema. The tool description does not add any extra nuance beyond what the schema provides, so it meets the baseline of 3 without adding value.
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 states a clear verb ('list') and specific resource ('sender identities available to the mailbox'), and it explicitly differentiates from the sibling mailbox_get_identity by naming the condition under which that alternative is preferred. This leaves no ambiguity about what the tool does.
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 this tool (to list all identities) and when to prefer the alternative 'mailbox_get_identity' when only the default identity is needed. This provides direct routing guidance without requiring inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_list_messagesList MessagesARead-onlyIdempotentInspect
Use this to scan mailbox messages by cursor without fetching full bodies. Filter by folder_id, keyword/not_keyword, dates, sender/recipient, text query, unread state, or has_attachment; attachment metadata includes a short-lived download_url.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search query across message fields. | |
| cc | No | Filter by CC recipient email address or display name. | |
| to | No | Filter by To recipient email address or display name. | |
| bcc | No | Filter by BCC recipient email address or display name. | |
| body | No | Filter by message body text. | |
| from | No | Filter by sender email address or display name. | |
| after | No | Filter to messages after this ISO 8601 timestamp. | |
| limit | No | Maximum results (default 50, max 100). | |
| before | No | Filter to messages before this ISO 8601 timestamp. | |
| cursor | No | Pagination cursor — the `next_cursor` from the previous response. | |
| keyword | No | Require this message keyword, such as `$seen`. | |
| sort_by | No | Message field to sort by. | |
| subject | No | Filter by subject text. | |
| folder_id | No | Filter to messages in this folder ID. | |
| is_unread | No | When true, only return unread messages. | |
| thread_id | No | Filter to messages in this thread ID. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| header_name | No | Header name to match with `header_value`. | |
| not_keyword | No | Exclude messages with this keyword. | |
| header_value | No | Header value to match with `header_name`. | |
| has_attachment | No | When true, only return messages with attachments. | |
| max_size_bytes | No | Maximum message size in bytes. | |
| min_size_bytes | No | Minimum message size in bytes. | |
| sort_direction | No | Sort direction. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description earns credit for what it adds: cursor-based pagination and, notably, that attachment metadata carries a short-lived download_url — an operational constraint an agent could not learn from the schema. It stops short of describing result shape or default ordering, but the output schema covers returns.
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 core behavior and followed by a compact filter inventory. The filter enumeration partly restates what 24 well-described parameters already say, but it is short enough to earn its place as a quick orientation.
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 24-parameter, all-optional filtered-list tool with an output schema, the description covers the essential model: metadata-only scanning, cursor pagination, filterable dimensions, and the short-lived attachment URL caveat. Missing only marginal items such as default ordering or the interaction between cursor and changing filters.
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% across all 24 parameters, so each filter is already fully documented. The description groups the filters into categories (dates, sender/recipient, keyword, unread, attachment) but introduces no syntax, precedence, or combination rules beyond the schema, so the baseline 3 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?
"Scan mailbox messages by cursor without fetching full bodies" states a specific verb, resource, and a distinguishing scope (metadata-only, not full bodies). That implicitly separates it from mailbox_get_message / mailbox_list_body. It does not name any of its many close siblings (list_thread_messages, search_message_snippets, count_messages), so differentiation is inferred rather than explicit.
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?
"Use this to scan..." gives an implied context and the no-full-bodies framing hints that a body-fetching tool is the follow-up. But there is no explicit when-to-use vs. when-not, and with 8+ overlapping list/search siblings an agent still has to guess whether this or list_thread_messages, list_content, or search_message_snippets is correct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_list_thread_messagesList Thread MessagesARead-onlyIdempotentInspect
Use this to list messages inside a known thread. Use message body tools only for messages that need full content.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Message sort direction within the thread. | |
| limit | No | Maximum results (default 50, max 100). | |
| cursor | No | Pagination cursor — the `next_cursor` from the previous response. | |
| thread_id | Yes | Thread ID. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description's one added behavioral fact is that results are not full message bodies, which is genuinely useful; it says nothing about result ordering, pagination behavior, or what happens on an unknown thread_id.
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 short sentences, the primary purpose front-loaded and the fallback guidance second. Nothing is repeated from the schema and no sentence is filler.
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 and full parameter coverage, return-value and pagination details need not be restated. The only meaningful gap is the relationship to sibling tools like mailbox_get_thread and mailbox_list_messages, which an agent must infer from names alone.
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% and all five parameters, including sort direction, limit bounds, cursor semantics and the multi-mailbox targeting rule, are documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 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?
States a specific verb and resource: list messages inside a known thread. That distinguishes it from mailbox_list_messages (all messages) and mailbox_get_thread (thread metadata), though it never explicitly names those siblings.
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 prerequisite (a known thread) is stated, and the second sentence routes the agent away from this tool toward 'message body tools' when full content is needed. It stops short of naming the concrete alternative (e.g. mailbox_list_body or mailbox_get_message), leaving the mapping to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_list_threadsList ThreadsBRead-onlyIdempotentInspect
Use this to scan conversation threads without loading every message. Continue with next_cursor only when additional threads are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search query across thread messages. | |
| after | No | Filter to threads updated after this ISO 8601 timestamp. | |
| limit | No | Maximum results (default 50, max 100). | |
| before | No | Filter to threads updated before this ISO 8601 timestamp. | |
| cursor | No | Pagination cursor — the `next_cursor` from the previous response. | |
| folder_id | No | Filter to threads with messages in this folder ID. | |
| is_unread | No | When true, only return threads with unread messages. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| participant | No | Filter by participant email address or display name. | |
| has_attachment | No | When true, only return threads with attachments. | |
| sort_direction | No | Sort direction. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive and open-world. The description adds one real piece of behavior beyond that: results are thread-level scans that do not load full messages, plus lazy pagination advice. It says nothing about default ordering, result caps, or the mailbox_id scoping/auth behavior that matters for an 11-param listing tool.
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 short sentences, front-loaded with the purpose and followed by the pagination constraint. There is a little filler ("Use this to") and the second sentence largely echoes the cursor schema description, but nothing extraneous.
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 and rich annotations, the description does not need to explain return values, and the schema covers all 11 parameters. However, for a tool whose name invites confusion with the many sibling list/get tools, it lacks the disambiguation an agent needs to make a correct first choice.
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 every parameter is already documented. The description only restates cursor pagination ("continue with next_cursor"), adding essentially no meaning beyond the schema. Baseline 3 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?
"Scan conversation threads without loading every message" gives a clear verb and resource and hints at why this differs from a full thread/message fetch. It stops short of naming the sibling alternatives (mailbox_get_thread, mailbox_list_thread_messages), so an agent must infer the distinction.
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 gives one concrete usage rule — request the next page only when more threads are actually needed — which is useful operational guidance. It never states when to prefer this over mailbox_get_thread or mailbox_list_thread_messages, so selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_read_attachmentRead AttachmentARead-onlyIdempotentInspect
Use this after finding a message attachment when you need the attachment contents. Text-like attachments are downloaded server-side and returned as text, so agents do not need a generic web_fetch tool. Binary or oversized attachments return metadata plus a fresh download link.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Read mode: auto, metadata, text, or resource_link. auto inlines small text attachments. | auto |
| mailbox_id | No | Mailbox public ID when the credential can access more than one mailbox. | |
| message_id | Yes | Message ID containing the attachment. | |
| attachment_id | Yes | Attachment ID from message metadata. | |
| max_text_bytes | No | Maximum text bytes to return inline. Defaults to 262144 and is capped at 1048576. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so safety is covered. The description does add useful behavior beyond them: server-side download of text attachments and metadata-plus-fresh-link fallback for binary or oversized files. It says nothing about permissions, mailbox scoping, or failure modes.
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 short sentences, front-loaded with the usage trigger and followed by the two behavioral cases. The web_fetch remark earns its place by preventing a detour, and there is no filler.
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?
An output schema exists, so return-value detail is not required, and the description covers the main branching outcomes (inline text vs. metadata plus link). The remaining gap is sibling disambiguation within a very crowded attachment-tool family.
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, and the description goes slightly beyond by explaining that oversized attachments degrade to a link, which is the semantics behind max_text_bytes. It does not mention the mode parameter or mailbox_id scoping, leaving those entirely to 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?
States a clear verb and resource (read an attachment's contents) and ties it to a trigger (after finding a message attachment). It does not distinguish itself from close siblings like mailbox_get_attachment, mailbox_get_attachment_text, or mailbox_request_attachment_text, so an agent must infer which of the look-alikes to pick.
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?
Gives a clear entry condition (after locating an attachment when you need its contents) and explicitly closes off one alternative (generic web_fetch). It is silent on the real ambiguity, though: nothing says when to prefer this over get_attachment, get_attachment_text, or request_attachment_text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_request_attachment_textRequest Attachment TextAIdempotentInspect
Extract readable text from an attachment up to 7500000 bytes at no extra charge. Requires mailbox.read. Repeated requests reuse the current extraction for 24 hours. OCR is unavailable; check status and outcome, and use the original download if extraction cannot complete.
| Name | Required | Description | Default |
|---|---|---|---|
| max_bytes | No | Maximum UTF-8 text bytes returned. Default 262144; maximum 1048576. Applies to cached results too. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| message_id | Yes | Message ID in the selected mailbox. | |
| attachment_id | Yes | Attachment ID from that message. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already state idempotent=true, destructive=false, and readOnly=false; the description adds value by explaining the 24-hour cached-reuse behavior and the mailbox.read authorization requirement. It also discloses the OCR limitation and the failed-extraction path, which annotations cannot convey. The instruction to 'check status and outcome' stays vague about where or how, but the presence of an output schema offsets that.
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 short sentences, with the core action and the size and cost constraint front-loaded, followed by the authorization, caching, and fallback notes. Every sentence carries operational information, though 'at no extra charge' reads as promotional filler and the size figure adds ambiguity rather than clarity.
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 four-parameter tool with a full output schema, the description covers authorization, cost, caching, limits, and failure handling, so the agent can call it correctly. The remaining gaps are sibling disambiguation and the ambiguous byte limit, which are notable but not blocking.
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, and the description does not clarify any parameter beyond the schema. The phrase 'up to 7500000 bytes' is potentially misleading next to a max_bytes parameter whose maximum is 1048576, and the description never explains that the 7.5 MB figure is presumably the attachment-size limit; an agent could conflate the two.
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 names a specific verb and resource ('Extract readable text from an attachment'), so the agent knows exactly what the tool does, and it adds a scope limit and cost note. It does not, however, distinguish this tool from close siblings such as mailbox_get_attachment_text and qubrics_mailbox_request_attachment_text, so an agent cannot tell the request and immediate-get variants apart from the description 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?
It gives useful operating guidance: the required mailbox.read scope, the fact that OCR is unavailable, and the fallback to the original download when extraction cannot complete. It never states when to choose this over the existing get_attachment_text sibling or what error conditions should trigger a retry rather than a fallback, so the when-to-use decision is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_search_message_snippetsSearch Message SnippetsARead-onlyIdempotentInspect
Use this to search message snippets by query text. Narrow with folder_id, keyword/not_keyword, dates, sender/recipient, unread state, or has_attachment; use returned message IDs with a read tool before making content-specific claims.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search text used to generate snippets. | |
| cc | No | Filter by CC recipient email address or display name. | |
| to | No | Filter by To recipient email address or display name. | |
| bcc | No | Filter by BCC recipient email address or display name. | |
| body | No | Filter by message body text. | |
| from | No | Filter by sender email address or display name. | |
| after | No | Filter to messages after this ISO 8601 timestamp. | |
| limit | No | Maximum results (default 50, max 100). | |
| before | No | Filter to messages before this ISO 8601 timestamp. | |
| keyword | No | Require this message keyword, such as `$seen`. | |
| subject | No | Filter by subject text. | |
| folder_id | No | Filter to messages in this folder ID. | |
| is_unread | No | When true, only return unread messages. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| header_name | No | Header name to match with `header_value`. | |
| message_ids | No | Comma-separated message IDs, maximum 100. | |
| not_keyword | No | Exclude messages with this keyword. | |
| header_value | No | Header value to match with `header_name`. | |
| has_attachment | No | When true, only return messages with attachments. | |
| max_size_bytes | No | Maximum message size in bytes. | |
| min_size_bytes | No | Minimum message size in bytes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds a distinct behavioral disclosure beyond those annotations: snippets may not be sufficient for content-specific claims, so agents must read the underlying messages first. This is valuable context that the schema and annotations do not provide.
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 no wasted words. The main purpose is front-loaded, filters are compactly grouped, and the critical read-before-claim caveat is placed at the end. It avoids repeating schema details and is easy for an agent to parse.
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 21-parameter tool, the description is sufficient because the schema documents every parameter and the output schema covers the return shape. The annotations fully cover the safety profile, and the description adds the one operational caveat an agent needs: read full messages before making content-specific claims. Nothing critical is missing.
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?
All 21 parameters already have description coverage in the input schema, so the description does not need to explain individual fields. It adds a useful thematic grouping of filters, but no additional syntax or 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 opens with a specific action and resource: 'search message snippets by query text.' This clearly identifies the tool as a snippet search rather than a full-message retrieval or listing tool, and the closing instruction to read full messages reinforces that it returns snippets/IDs. It is unambiguous and differentiates from siblings like mailbox_get_message and mailbox_list_messages.
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 states the primary use case and enumerates the main narrowing dimensions: folder, keyword, dates, sender/recipient, unread state, and attachments. It also gives a clear operational caution: use returned message IDs with a read tool before making content-specific claims. However, it does not explicitly name the read tool or state when not to use this tool versus a sibling, so the guidance is strong but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_send_draftSend Saved DraftAInspect
Send only the saved revision the user approved. Requires mailbox.read and email.send. Pass expected_revision; to schedule within 30 days also pass scheduled_for and expected_schedule_version. After cancelling a schedule, include the current schedule version.
| Name | Required | Description | Default |
|---|---|---|---|
| draftId | Yes | Stable draft ID. | |
| If-Match | No | Current draft ETag; expected_revision is required. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| scheduled_for | No | Send no earlier than this future time, within 30 days. Include a timezone and at most millisecond precision. Omit to send now. | |
| expected_revision | Yes | Exact saved revision to send. A stale revision returns conflict. | |
| expected_schedule_version | No | Current schedule version. Required for scheduling and after cancelling a schedule. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-read-only, non-idempotent, non-destructive, open-world operation. The description adds genuinely new behavioral context beyond them: required scopes (mailbox.read and email.send), the optimistic-concurrency contract that a stale expected_revision returns a conflict, and the 30-day scheduling horizon. It stops short of saying what happens to the draft after a successful send.
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 short sentences, front-loaded with the core action and the approval constraint, then escalating to the optional scheduling path. Every sentence carries requirement or precondition information, though the telegraphic phrasing ('Requires mailbox.read and email.send') is terse enough to read as a checklist.
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 covering the safety profile, a full output schema, and 100% schema description coverage, the description only needs to supply auth requirements, precedence, and conditional-parameter logic — all of which it does. The one residual gap, post-send draft state, is plausibly covered by the output 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 the schema already documents every parameter individually and the baseline is 3. The description adds conditional interaction logic the schema does not express — expected_revision as mandatory, and expected_schedule_version being required both for scheduling and after a schedule cancellation — but offers no detail on If-Match or mailbox_id handling.
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 states a specific verb and resource ('Send... the saved revision') and adds a distinguishing scope: only the revision the user approved, implying a guarded send rather than a generic send. It never names the closest siblings (mailbox_send_message, mailbox_update_draft), so the separation is implied by scope rather than explicit.
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?
Usage conditions are conveyed through parameter preconditions ('to schedule within 30 days also pass scheduled_for', 'after cancelling a schedule, include the current schedule version'), which tells the agent when each mode applies. There is no explicit statement of when to choose this over mailbox_send_message or mailbox_control_draft_schedule, and no exclusion of unsaved/composed content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_send_messageSend Mailbox MessageAInspect
Use this to send a message from the authenticated mailbox. For attachments, call mailbox_upload_attachment first using presign_upload_url or tiny content_base64, then pass the returned blob_id. Include an Idempotency-Key for retries.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Visible copied recipients. | |
| to | No | Primary recipients. Supply 1 to 50 recipients in total across To, Cc and Bcc. | |
| bcc | No | Hidden copied recipients. | |
| from | No | Sender address. Defaults to mailbox identity. | |
| subject | No | Subject line; defaults to empty. | |
| reply_to | No | Reply-To recipients. | |
| html_body | No | HTML body. | |
| text_body | No | Plain text body. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| attachments | No | Attachments to send with the message. | |
| custom_headers | No | Custom X-* headers to include. Mailbox writes reject X-SES-TENANT, X-SES-CONFIGURATION-SET and X-SES-MESSAGE-TAGS case-insensitively. | |
| Idempotency-Key | No | Client-chosen unique key to safely retry the request. Cached for 24h per (mailbox, endpoint, key). Different body with same key returns 409 idempotency_conflict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), and the description adds real operational context beyond them: the two-step attachment flow with an alternative for small inline payloads, and the 24h retry-safety contract implied by the Idempotency-Key. The instruction to supply an Idempotency-Key is consistent with idempotentHint=false, since it tells the agent how to achieve safe retries on a non-idempotent endpoint rather than contradicting the annotation.
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 short sentences, action first, with the prerequisite workflow and retry advice front-loaded and no filler. Every sentence maps to something the agent must do differently at call time.
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?
Rich structured data (full schema coverage, annotations, output schema) carries most of the burden, and the description covers the two non-obvious mechanics. However, for a 12-parameter, nested-object, open-world send tool with dozens of overlapping siblings, the absence of any sibling disambiguation or delivery-side-effect note (recipient limits, sender defaults are only in schema) leaves a meaningful gap.
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 every parameter including blob_id provenance, the mailbox_id targeting rule, and the Idempotency-Key conflict behavior. The description's attachment guidance largely restates schema content, adding only the ordering ('call ... first ... then pass'), so baseline 3 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?
States a specific verb and resource ('send a message from the authenticated mailbox'), so the core action is unambiguous. It even names the prerequisite sibling mailbox_upload_attachment, but it never distinguishes itself from other send paths in the sibling list (mailbox_send_draft, qubrics_mailbox_send_message, sending_send_email), leaving an agent to infer which send tool to pick.
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?
Gives explicit conditional guidance for two cases: attachments (upload first, then pass blob_id) and retries (include an Idempotency-Key). What is missing is the primary routing decision — when to compose-and-send here versus creating a draft or using the sending_* family — which is the most consequential choice an agent faces with this sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_update_calendar_eventEdit Calendar EventAIdempotentInspect
Edit an event without sending invitations or email reminders. Requires calendar.write and the reviewed If-Match value. Reload after a conflict before making another change.
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | Local start date and time without an offset, interpreted in time_zone. | |
| title | No | Event title. | |
| If-Match | Yes | ETag from the most recent event GET. Wildcards are rejected. | |
| duration | No | Event duration expressed as days, hours, minutes or seconds. | |
| event_id | Yes | Event ID in the selected mailbox. | |
| time_zone | No | Time zone for local event times. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| description | No | Plain text event details. Set null to clear. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, idempotent, non-destructive, open-world. The description adds genuine value on top: no invitations or reminders are dispatched, a write scope is required, and the If-Match concurrency contract with reload-on-conflict behavior is stated. It stops short of saying whether omitted fields are preserved or cleared.
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 compact sentences, each carrying distinct information: the action, the required permission and concurrency token, and the conflict recovery step. Nothing is wasted and the key constraint 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?
With an output schema present, return values need no explanation, and the description covers permissions and concurrency well. The remaining gap is update semantics: whether this is a full replace or a partial patch, and whether an omitted field such as duration is preserved or cleared.
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 all eight parameters are already documented in the schema, and the description correctly adds no redundant re-listing. The only parameter-level context it contributes is that If-Match must be the 'reviewed' value, a modest addition over the schema's own wording. Baseline 3 is appropriate here.
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 states a specific verb and resource ('Edit an event') and adds a distinguishing behavioral detail: no invitations or email reminders are sent. It does not explicitly name the sibling it contrasts with (mailbox_create_calendar_event), so differentiation is implied rather than spelled out.
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 gives real preconditions ('Requires calendar.write and the reviewed If-Match value') and a procedural rule for the conflict case ('Reload after a conflict before making another change'). What's missing is explicit routing: when to use this versus create_calendar_event or the qubrics_ prefixed variant is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_update_draftEdit Saved DraftAInspect
Edit a saved draft without sending it. Requires mailbox.read and mailbox.drafts.write. Pass the reviewed expected_revision; reload after a conflict before making another edit.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Visible copied recipients. | |
| to | No | Primary recipients; at most 50 total across To, Cc and Bcc. | |
| bcc | No | Hidden copied recipients. | |
| from | No | Authorised sender; defaults to this inbox. | |
| draftId | Yes | Stable draft ID. | |
| subject | No | Subject; may be empty. | |
| If-Match | No | Current draft ETag; expected_revision is also required. | |
| reply_to | No | Authorised reply addresses; defaults to this inbox. | |
| html_body | No | HTML body, preserved when saved. | |
| text_body | No | Plain-text body. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| attachments | No | Attachments and inline images. | |
| custom_headers | No | Custom X-* headers. Writes reject X-SES-TENANT, X-SES-CONFIGURATION-SET and X-SES-MESSAGE-TAGS case-insensitively. On updates, omit this field to preserve saved headers, or pass {} to clear them. | |
| expected_revision | Yes | The revision that was reviewed; a stale value returns conflict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the tool as a non-read-only, non-destructive, non-idempotent open-world mutation. The description adds useful behavioral context beyond that: required scopes and optimistic concurrency via expected_revision with reload-after-conflict guidance. It does not fully explain how omitted fields are handled on update, which keeps it from a 5.
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 short sentences, front-loaded with the core action and differentiated from sending. The permission and concurrency details follow logically with no filler.
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?
This is a complex 14-parameter mutation with an output schema and detailed parameter descriptions, and the description covers the key auth and revision-conflict behavior. It could be slightly more complete by stating global partial-update semantics for omitted fields, but nothing essential for calling it is missing.
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 all 14 parameters are already documented in the input schema, including expected_revision, mailbox_id, attachments, and custom headers. The description reinforces expected_revision but does not add meaning beyond the schema's own parameter 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 states a specific verb and resource: edit a saved draft. The phrase "without sending it" clearly distinguishes this from send_draft, so an agent can identify the operation without opening sibling schemas.
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 provides clear context: use this to modify an existing draft rather than send it, and it names the required permissions and expected_revision workflow. It does not explicitly compare against create_draft, delete_draft, or control_draft_schedule, so it stops short of full when-to-use/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_update_identityUpdate Mailbox IdentityAIdempotentInspect
Use this only when the user explicitly asks to change sender identity details. Do not use it for one-off message composition.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Default sender name. Send null or an empty string to clear it. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| html_signature | No | HTML signature appended to Mailbox API sends that include html_body. | |
| text_signature | No | Plain text signature appended to Mailbox API sends that include text_body. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safe mutation profile is known. The description adds a usage boundary (not for one-off composition) but does not disclose additional behavioral details such as persistence, overwrite semantics, or whether omitted fields are preserved. There is 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 with no filler. The critical usage condition is front-loaded, and the exclusion is stated immediately afterward. 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?
For an update tool with zero required parameterslint, the schema covers all fields, the output schema exists, and annotations cover idempotency/destructiveness. The description covers when to use it and what not to use it for. The only noticeable gap is explicit partial-update semantics — whether omitted fields are preserved — which is a minor omission given the schema and annotations.
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%, and each parameter already has meaningful descriptions, including null-clearing semantics for name and signature fields and mailbox_id scoping guidance. The description does not add parameter-level meaning beyond labeling the operation as changing sender identity details, so the baseline 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 states the action with a specific verb and resource: 'change sender identity details.' It also explicitly distinguishes this from 'one-off message composition,' separating it from sending-related siblings. The title reinforces the target resource, so an agent can identify what this tool changes.
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 gives an explicit trigger condition: 'only when the user explicitly asks to change sender identity details.' It also provides a clear exclusion: 'Do not use it for one-off message composition,' which prevents confusing this with sending tools. This is direct, actionable usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_upload_attachmentUpload AttachmentAInspect
Use this before sending a mailbox attachment. For real files set presign_upload_url=true with filename, content_type, and size_bytes, then PUT the file to the returned short-lived URL promptly and send the returned blob_id. Inline content_base64 is a last resort for tiny agent-authored files only and is capped at 32 KiB decoded.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Filename to use when sending the uploaded attachment. | |
| mailbox_id | No | Mailbox public ID when the credential can access more than one mailbox. | |
| size_bytes | No | Exact byte size required when presign_upload_url=true. | |
| content_type | No | MIME type to store with the upload, for example application/pdf. | application/octet-stream |
| content_base64 | No | Last-resort inline base64 for tiny agent-authored files only. Decoded content must be at most 32 KiB; use presign_upload_url for real files. | |
| presign_upload_url | No | When true, return a short-lived signed PUT URL instead of reading bytes. Provide size_bytes and upload with a shell/client promptly. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare this is a non-destructive, non-idempotent, open-world write. The description adds genuinely new behavioral facts: the signed PUT URL is short-lived and must be used promptly, inline content is capped at 32 KiB decoded, and the artifact returned is a blob_id to be passed to the send call. It does not say what happens if the URL expires or whether abandoned uploads are retained, but it materially exceeds the annotation content.
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 sentences, each doing work: the trigger condition first, then the primary path, then the fallback path with its limit. No preamble, no restatement of the title, and the recommended mode is front-loaded ahead of the discouraged one.
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 two-mode upload tool with six parameters, an output schema covering the blob_id/URL, and full schema coverage, the description supplies the essential end-to-end flow. Remaining gaps (URL expiry behavior, mailbox_id selection, cleanup of orphaned uploads) are secondary and partly mitigated by the output 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 filename, size_bytes, content_type, content_base64 and presign_upload_url are already documented in the schema, including the 32 KiB cap and the size_bytes dependency. The description largely restates those relationships; its only genuine addition is the operational step of PUTting the bytes to the returned URL. Baseline 3 fits.
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 establishes the operation as a preparation step for sending an attachment and speaks of a 'returned blob_id', so the upload-and-register semantics come through clearly. It does not, however, distinguish itself from the many near-identical siblings (qubrics_mailbox_upload_attachment, sending_upload_attachment, qubrics_sending_create_attachment_upload), leaving an agent to guess which duplicate to call.
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 gives a clear when-to-use anchor ('before sending a mailbox attachment') and explicitly routes between two modes: presigned URL for real files, inline base64 as a 'last resort for tiny agent-authored files only'. It states no exclusions relative to sibling tools, and gives no guidance on when mailbox_id is needed, which is the one missing usage axis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mailbox_wait_for_messageWait For MessageARead-onlyIdempotentInspect
Use this to wait briefly for new mail instead of manual polling. It polls for up to 25 seconds, returns a matching message with attachment metadata when found, or a clean no_message result so you can call again.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Optional full-text query to match. | |
| after | No | ISO 8601 lower bound for received_at. Omit to wait for messages received after this call starts. | |
| keyword | No | Optional keyword/label that the message must have, such as $seen. | |
| subject | No | Optional subject text filter. | |
| folder_id | No | Optional folder ID filter. | |
| from_email | No | Optional sender email address or display-name filter. | |
| mailbox_id | No | Mailbox public ID when the credential can access more than one mailbox. | |
| has_attachment | No | When true, wait only for messages with attachments. | |
| timeout_seconds | No | Maximum seconds to wait. Capped at 25 seconds so MCP clients do not hold a tool call open indefinitely. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, idempotent, open-world behavior, so the safety bar is low; the description adds genuine context beyond them: a bounded 25-second poll window and the existence of a distinct no_message outcome versus a matched message. It does not say whether the returned message is consumed or merely observed, which matters for repeated calls.
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 zero filler: the wait duration and return contract come first, then the no_message loop behavior. Nothing could be removed without losing an operative detail.
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?
An output schema exists, so return shape needn't be spelled out, and the description still sketches it usefully; all 9 filters are optional and fully documented in schema. The only gap is the lifecycle question — whether a matched message is consumed or remains visible to subsequent list calls.
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% across all 9 parameters, so the schema already documents every filter, the timeout cap, and the after-bound default. The description's only parameter-adjacent detail ('up to 25 seconds') merely restates the schema's maximum, adding no new semantics.
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?
States a specific verb and resource ('wait briefly for new mail') and describes what comes back ('a matching message with attachment metadata' or 'a clean no_message result'). It distinguishes itself from the generic polling pattern but never names the sibling read tools (mailbox_list_messages, mailbox_get_message) an agent might otherwise pick, so sibling differentiation is only implicit.
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 frames the use case as an alternative to 'manual polling' and gives actionable follow-up guidance ('call again' after a no_message result), which is real when-to-use direction. It stops short of stating when NOT to use it — e.g. that it is not for reading already-received mail, where list/get tools apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_batch_delete_messagesBatch Delete MessagesADestructiveInspect
Use this only when the user explicitly asks to delete messages and supplies or confirms the message IDs. Deletion is a mailbox mutation.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Message IDs to delete, maximum 100. | |
| permanent | No | When true, permanently deletes instead of moving to Trash. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| if_in_state | No | Optional message state token for stale-write protection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is carried by structured data. The description's real added value is the human-confirmation requirement; 'Deletion is a mailbox mutation' largely restates what the annotations already say. It does not disclose the permanent-vs-Trash consequence or partial-failure behavior beyond what the schema states.
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 short sentences, front-loaded with the gating condition before the rationale. The second sentence adds little since the annotations already flag the mutation, but it costs only one line and reinforces intent.
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?
An output schema exists, so return values need not be explained, and the schema covers all four parameters. What is missing for a destructive batch tool is any note on atomicity/partial failures, recovery of trashed messages, or the 100-ID ceiling at the description level.
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 ids, permanent, mailbox_id, and if_in_state. The description only alludes to message IDs and adds no syntax, default, or interaction detail (e.g., how permanent interacts with recovery). Baseline 3 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 names a specific verb (delete) and resource (messages), and the prerequisite phrasing makes it unambiguously the destructive batch operation among the many mailbox_* siblings. It never says 'batch' or quantifies the scope, but the tool name plus the ID-list framing is enough to distinguish it from list/get/update siblings.
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 gives a clear gating condition: only when the user explicitly asks to delete and supplies or confirms IDs. That is strong when-to-use guidance for a destructive tool. It does not name an alternative path (e.g., when a softer action such as batch update or move-to-Trash is preferable), so it stops short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_batch_get_messagesBatch Get MessagesARead-onlyIdempotentInspect
Use this when the user supplies several message IDs or a prior search returns multiple candidates. It avoids repeated single-message calls.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Message IDs to fetch, maximum 100. | |
| part | No | Body part to return when body_mode is not `none`. | |
| body_mode | No | Body shape to include for each message. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| include_html | No | When true, include HTML content when available. | |
| strip_quotes | No | When true, remove quoted reply text. | |
| include_links | No | When true, include links extracted from the body. | |
| max_body_chars | No | Maximum body characters per message before truncation. | |
| include_headers | No | Header detail to include in each message. | |
| strip_signature | No | When true, remove detected email signatures. | |
| include_attachments | No | Attachment detail to include. Contents are not returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld behavior, so safety is covered. The description adds only the efficiency rationale and nothing about batch edge cases (partial failures, unknown IDs, the 100-item cap) or what body/config combinations produce.
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 short sentences with no waste; the trigger condition is front-loaded ahead of the rationale, so an agent can decide quickly.
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?
An output schema exists so return values need not be explained, but for an 11-parameter batch tool the description says nothing about the 100-ID limit, behavior when some IDs are invalid, or the relationship to sibling single-message and delete/update batch tools.
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% and every one of the 11 parameters, including the four enums, is documented in the schema. The description adds no extra meaning — no guidance on how body_mode and part interact, or when mailbox_id is required.
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 frames the tool as fetching multiple messages in one call and contrasts it with 'repeated single-message calls', which makes the batch-retrieval purpose legible. It never states explicitly that it returns message content by ID, but the name and the ID-based trigger condition make it clear enough.
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 gives two concrete trigger conditions — the user supplies several message IDs, or a prior search returns multiple candidates — and implicitly names the alternative (single-message calls). It does not state a when-not case, such as fetching one message for full thread context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_batch_update_messagesBatch Update MessagesAIdempotentInspect
Use this to mark, flag, move to a folder, or set keywords/labels on multiple messages after the user has confirmed the desired change. Do not use it for read-only tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Message IDs to update, maximum 100. | |
| seen | No | Set or clear the seen flag. | |
| flagged | No | Set or clear the flagged marker. | |
| keywords | No | Map of message keyword names to booleans. `true` sets the keyword; `false` clears it. Keyword names are normalised to lowercase. Lifecycle keywords such as `$draft` are read-only. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| if_in_state | No | Optional message state token for stale-write protection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, idempotent, non-destructive, open-world behavior, so the safety profile is largely covered. The description adds the useful confirmation-gating requirement, but says nothing about partial success across a batch, per-message error reporting, or whether omitted fields are left untouched — all relevant for a 100-id bulk mutation with an output schema.
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 short sentences with the positive use case front-loaded and the exclusion second; nothing is padded or redundant. Every clause carries operational 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 annotations, a fully documented six-parameter schema, and an output schema, the description needs only to establish scope and gating, which it does. The one real gap is the unsupported folder-move claim, which could lead an agent to look for a folder parameter that does not exist.
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 every parameter (including the seen/flagged clear-vs-set semantics and keyword normalization) is already documented in the schema; baseline 3 applies. The description adds no parameter-level meaning, and its 'move to a folder' phrasing has no corresponding parameter, which is mildly misleading rather than helpful.
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?
States specific verbs (mark, flag, move, set keywords/labels) against a specific resource (multiple messages), which cleanly separates it from read-only siblings like qubrics_mailbox_batch_get_messages. The only weakness is that 'move to a folder' describes a capability the input schema does not expose, so the stated scope slightly overreaches the actual operation.
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?
Gives a real precondition ('after the user has confirmed the desired change') and an explicit exclusion ('Do not use it for read-only tasks'), which steers the agent to the batch-get sibling for reads. It stops short of naming which sibling to use instead or of clarifying how it relates to qubrics_mailbox_batch_delete_messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_control_draft_scheduleChange Draft ScheduleAIdempotentInspect
Reschedule or cancel a saved draft send only when the user asks. Requires mailbox.read and email.send. Pass the current expected_revision and expected_schedule_version; scheduled_for=null cancels. Cancellation fails once sending has begun.
| Name | Required | Description | Default |
|---|---|---|---|
| draftId | Yes | Stable draft ID. | |
| If-Match | No | Current draft ETag; both revision and schedule version remain required. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| scheduled_for | Yes | New future time within 30 days, or null to cancel and make the draft editable. Cancellation fails once sending has begun. | |
| expected_revision | Yes | Exact saved content revision. | |
| expected_schedule_version | Yes | Current schedule version; stale requests return conflict. Repeating the last identical request returns its current result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it names the required scopes (mailbox.read, email.send), the optimistic-concurrency requirement that both expected_revision and expected_schedule_version must be current, and a real failure mode (cancellation fails once sending has begun). The annotations already establish non-read-only, idempotent, non-destructive semantics, and nothing in the description contradicts them; only the post-success behavior is left to the output schema.
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 short clauses, front-loaded with the action and the user-consent gate, then preconditions, then the cancel toggle, then the failure condition. No sentence is redundant.
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 mutation tool of this complexity the definition covers the essential agent-facing facts: side effect, permissions, concurrency tokens, cancel mechanism, and failure boundary. With an output schema present and full schema descriptions, nothing material is missing.
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 would be 3, but the description adds meaning the schema does not: that the revision and schedule-version values must be the *current* ones and passed as a pair, and that scheduled_for=null is the cancel switch. It does not explain the If-Match header parameter's role beyond the schema's own text.
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?
States a specific verb pair (reschedule or cancel) against a specific resource (a saved draft send / its schedule), which is far more precise than the bare name. It does not explicitly name the nearest siblings it is not (mailbox_update_draft for content edits, mailbox_send_draft for immediate sending), so an agent must infer the boundary.
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 phrase 'only when the user asks' is an explicit gating condition that tells the agent not to act proactively, which is valuable for a state-changing tool. It stops short of naming alternatives or stating when-not to use it relative to sibling tools such as update_draft or delete_draft.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_count_messagesCount MessagesARead-onlyIdempotentInspect
Use this to count messages matching mailbox filters without listing every result. Follow with mailbox_list_messages only when examples are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search query across message fields. | |
| cc | No | Filter by CC recipient email address or display name. | |
| to | No | Filter by To recipient email address or display name. | |
| bcc | No | Filter by BCC recipient email address or display name. | |
| body | No | Filter by message body text. | |
| from | No | Filter by sender email address or display name. | |
| after | No | Filter to messages after this ISO 8601 timestamp. | |
| before | No | Filter to messages before this ISO 8601 timestamp. | |
| keyword | No | Require this message keyword, such as `$seen`. | |
| subject | No | Filter by subject text. | |
| folder_id | No | Filter to messages in this folder ID. | |
| is_unread | No | When true, only return unread messages. | |
| thread_id | No | Filter to messages in this thread ID. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| header_name | No | Header name to match with `header_value`. | |
| not_keyword | No | Exclude messages with this keyword. | |
| header_value | No | Header value to match with `header_name`. | |
| has_attachment | No | When true, only return messages with attachments. | |
| max_size_bytes | No | Maximum message size in bytes. | |
| min_size_bytes | No | Minimum message size in bytes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered by structured data. The description's only additional behavioral signal is that results are aggregated rather than enumerated, which hints at a cheaper call, but it says nothing about what the count represents (total vs. capped) or any limits.
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 purpose and immediately followed by the routing rule. No redundant restatement of the name or the schema.
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 need not explain the return value, and it correctly focuses on purpose and follow-up. The main gap is that with zero required parameters an empty call silently counts the entire mailbox, and the description never flags that or any scope limit.
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% across all 20 filter parameters, so the schema already carries the semantics and the description correctly does not repeat them. It adds only the loose phrase 'mailbox filters' and gives no hint about combining filters or the behavior of an empty filter set, so the baseline 3 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 gives a specific verb and resource ('count messages matching mailbox filters') and explicitly separates the tool from the list-based alternative by noting it works 'without listing every result'. It stops just short of a full contrast statement (e.g. 'unlike mailbox_list_messages, this returns only a total'), so a 4 rather than a 5.
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 names the concrete alternative (mailbox_list_messages) and the exact condition that should trigger a follow-up call: only when examples are needed. That is clear routing guidance, but it gives no inverse guidance about when counting is unnecessary or what to do if the count is zero.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_create_calendarCreate CalendarAInspect
Create a private calendar only when the user asks. Requires calendar.write. This does not send invitations or email reminders.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Private calendar name. | |
| time_zone | Yes | Time zone for local event times. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| Idempotency-Key | No | Stable key for this exact create in this mailbox. Saved responses replay for 24 hours. Uncertain creates still require read-only reconciliation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower. The description still adds real value by disclosing the permission requirement and the negative side effects (no invitations, no email reminders), which an agent needs before committing a create.
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 short sentences, each doing distinct work: guardrail, permission, side-effect exclusion. Front-loaded with the action and the condition, with zero filler.
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?
An output schema exists, so return values need no explanation, and for a simple two-required-parameter create the description covers the essentials: scope, permission, and what does not happen. Only the multi-mailbox/mailbox_id context is left entirely to 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 description coverage is 100%, including the mailbox_id targeting rule and the Idempotency-Key replay semantics, so the schema carries parameter meaning. The description adds nothing about name, time_zone, or multi-mailbox targeting, leaving this at the baseline for a fully documented 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?
States a specific verb and resource ('Create a private calendar'), and the 'private' qualifier plus the no-invitations note separates it from event-creation siblings like mailbox_create_calendar_event. It does not name a sibling directly, but the resource boundary (calendar vs. event) is 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?
Gives an explicit gating condition ('only when the user asks') and the required scope ('Requires calendar.write'), which tells the agent both when to call and what permission precondition must hold. No explicit mention of list_calendars for checking existing calendars first, which is the main missing routing hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_create_calendar_eventCreate Calendar EventAInspect
Save an event without invitations or email reminders. Requires calendar.write. Retain the required UID before dispatch; after an uncertain result reconcile by UID lookup and never repeat the create after an empty immediate lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Stable caller-held identity, retained before this request. An uncertain create must be reconciled by UID lookup; never repeat it after an empty immediate lookup. | |
| start | Yes | Local start date and time without an offset, interpreted in time_zone. | |
| title | Yes | Event title. | |
| duration | Yes | Event duration expressed as days, hours, minutes or seconds. | |
| time_zone | Yes | Time zone for local event times. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| calendar_id | Yes | Calendar ID in the selected mailbox. | |
| description | No | Plain text event details. Set null to clear. | |
| Idempotency-Key | No | Stable key for this exact create in this mailbox. Saved responses replay for 24 hours. Uncertain creates still require read-only reconciliation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that no invitations or reminders are sent, that calendar.write is required, and how to reconcile an uncertain result by UID lookup without repeating the create. These are high-value operational details for a non-idempotent, open-world mutation.
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 tight sentences, front-loaded with the core behavior and followed by the permission and reconciliation rules. Every sentence carries useful information, though the final sentence is dense and could be split for readability.
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 create tool with a rich input schema, an output schema, and annotations. The description covers the non-obvious behavioral risks: missing invitations, the write permission, and safe handling of uncertain creates.
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 every parameter is already documented in the schema. The description reinforces the UID reconciliation rule but adds no new syntax or meaning beyond the schema text, making the baseline score 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?
States a specific verb and resource: save an event, with the key qualifier that no invitations or email reminders are sent. That distinguishes it from messaging and invitation flows, but it does not explicitly distinguish creation from the sibling update_calendar_event tool.
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?
Gives a clear usage condition (events without invitations or email reminders) and a prerequisite (calendar.write). It does not explicitly name an alternative sibling for the invitation case or say when to use update instead, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_create_draftCreate Saved DraftAInspect
Save a message for review without sending it. Requires mailbox.read and mailbox.drafts.write. Use source.action for reply, reply_all, forward or adopt; explicit content overrides prepared defaults. Adoption requires Idempotency-Key; reuse it when retrying the same create request.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Visible copied recipients. | |
| to | No | Primary recipients; at most 50 total across To, Cc and Bcc. | |
| bcc | No | Hidden copied recipients. | |
| from | No | Authorised sender; defaults to this inbox. | |
| source | No | Source for this draft. Adoption requires Idempotency-Key. Explicit content fields override prepared defaults. | |
| subject | No | Subject; may be empty. | |
| reply_to | No | Authorised reply addresses; defaults to this inbox. | |
| html_body | No | HTML body, preserved when saved. | |
| text_body | No | Plain-text body. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| attachments | No | Attachments and inline images. | |
| custom_headers | No | Custom X-* headers. Writes reject X-SES-TENANT, X-SES-CONFIGURATION-SET and X-SES-MESSAGE-TAGS case-insensitively. On updates, omit this field to preserve saved headers, or pass {} to clear them. | |
| Idempotency-Key | No | Reuse this key when retrying the same create request. | |
| reply_to_message_id | No | Message in this inbox to reply to; thread headers are snapshotted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare non-read-only, non-destructive, non-idempotent, open-world; the description adds the authorization scopes and the non-obvious fact that adopt creates are made safely retryable by reusing an Idempotency-Key. That idempotency nuance is valuable context beyond the idempotentHint=false flag and does not contradict it. It does not discuss behavior on duplicate adoption without a key, but the essential traits are disclosed.
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 compact sentences, front-loaded with the purpose, then permissions, then action modes, then the retain/concurrency rule. No filler, though the override and Idempotency-Key points are stated twice within the same description.
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 14-parameter nested create tool with an output schema, the description covers purpose, auth, action selection, override precedence, and retry semantics. Details like mailbox targeting, attachment limits, recipient caps, and custom-header restrictions are delegated to the fully described schema, which is acceptable.
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 itself already documents the source.action enum, the Idempotency-Key reuse rule, and the override behavior, so the description largely restates structured data. It does add the cross-field precedence idea at a glance, but little 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 opens with a concrete verb and resource plus a scoping distinction ('Save a message for review without sending it'), which separates it from send_draft/send_message. It stops short of naming those siblings explicitly, so an agent must infer the boundary from the 'without sending' phrase.
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 gives clear operating conditions: required scopes (mailbox.read, mailbox.drafts.write), the four source.action modes, the rule that explicit content overrides prepared defaults, and the Idempotency-Key retry discipline for adoption. It does not say when to prefer mailbox_update_draft or mailbox_control_draft_schedule instead, which is the remaining gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_delete_calendarDelete an empty calendarADestructiveIdempotentInspect
Requires calendar.write. Fetch the calendar and pass its ETag in If-Match. A calendar containing events returns 409 conflict.
| Name | Required | Description | Default |
|---|---|---|---|
| If-Match | Yes | ETag from the most recent calendar GET. Wildcards are rejected. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| calendar_id | Yes | Calendar ID in the selected mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known; the description still adds real value by naming the required calendar.write scope, the ETag/If-Match guard, and the 409 failure mode for non-empty calendars. What is missing is whether deletion is recoverable or whether the ETag check can fail with 412 on stale values.
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 short sentences, each carrying distinct information (permission, precondition workflow, failure mode) with no filler. The one weakness is ordering: it leads with the scope requirement rather than the action, so the tool's identity is only implicit in the body.
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 three-parameter destructive tool with full schema coverage, an output schema, and rich annotations, the description covers permissions, preconditions, and the main error case. Only secondary failure modes and post-deletion state are left unexplained.
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 each parameter is already documented, including that If-Match rejects wildcards and that mailbox_id may be omitted for single-mailbox credentials. The description only adds the procedural link between GET and If-Match, which is a marginal gain over the schema text.
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 name/title establish a specific verb+resource (delete calendar) and the description narrows the scope to empty calendars, which separates it from mailbox_delete_calendar_event. However, the description body itself never restates the operation, opening with an auth requirement instead, so the purpose is carried partly by the title rather than the prose.
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?
'Fetch the calendar and pass its ETag in If-Match' gives an explicit prerequisite workflow, and 'A calendar containing events returns 409 conflict' tells the agent the precondition that makes this tool unusable. It stops short of naming the alternative (delete_calendar_event to empty a calendar first), leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_delete_calendar_eventDelete Calendar EventADestructiveIdempotentInspect
Delete an event only when the user asks. Requires calendar.write and the reviewed If-Match value. This does not send cancellation emails; reload after a conflict.
| Name | Required | Description | Default |
|---|---|---|---|
| If-Match | Yes | ETag from the most recent event GET. Wildcards are rejected. | |
| event_id | Yes | Event ID in the selected mailbox. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint and idempotency, but the description adds substantive behavior: the calendar.write scope requirement, the need for a reviewed If-Match, the absence of cancellation emails, and the reload-on-conflict recovery step. Those are real operational facts an agent would not get from the annotations alone.
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 short sentences, all front-loaded and free of filler. Each sentence carries distinct information (permission, precondition, side effect, conflict handling), though the conflict clause is clipped enough to require interpretation.
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 destructive single-resource mutation with an output schema and full schema coverage, the description covers authorization, precondition freshness, side-effect absence, and failure recovery. The only gap is guidance on cancellation workflows that would otherwise be the alternative to deletion.
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 explains event_id, If-Match (ETag, no wildcards) and mailbox_id. The description's mention of a 'reviewed If-Match value' adds a light procedural nuance but no new parameter-level meaning; baseline 3 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?
States a specific verb and resource ('Delete an event') and constrains it to user-initiated deletions. The distinct resource separates it from create/update calendar event siblings, though no sibling is named explicitly.
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?
'only when the user asks' gives one gating condition for use, which is useful for a destructive operation. It never contrasts with alternatives such as updating or declining/cancelling, and gives no guidance on recurring events or when deletion should be refused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_delete_draftDelete Saved DraftADestructiveInspect
Delete a saved draft only when the user asks. Requires mailbox.read and mailbox.drafts.write. Deletion finishes in the background; a send already in progress cannot be deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| draftId | Yes | Stable draft ID. | |
| If-Match | No | Delete only if this is still the current draft. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and idempotentHint=false, so the description isn't needed for the safety profile. It still adds real context the annotations cannot: the required scopes (mailbox.read, mailbox.drafts.write), that deletion completes asynchronously in the background, and that a draft mid-send cannot be deleted — a meaningful failure-mode disclosure.
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 short sentences, zero filler, with the most important constraint (only when the user asks) front-loaded, followed by permissions and behavioral caveats in descending priority.
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?
An output schema exists, so return values need no explanation, and the description covers permissions, async completion, and the in-flight-send restriction. The only minor gap is the If-Match precondition, whose use-case context (conflict avoidance) is left to the schema's one-line note.
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 draftId, If-Match, and mailbox_id are already documented in the schema, and the description adds no further parameter guidance. Baseline 3 is appropriate: it neither contradicts nor enriches 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 names a specific verb and resource ('Delete a saved draft'), so an agent immediately knows the operation. It does not, however, distinguish this tool from the near-identical sibling 'mailbox_delete_draft' (or from batch deletion tools), so an agent facing duplicate names gets no disambiguation help.
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?
'Delete a saved draft only when the user asks' is an explicit gating condition, telling the agent not to delete autonomously. It does not name alternatives (e.g., update_draft, send_draft, batch_delete) or state what to do when the draft is scheduled, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_attachmentGet Attachment MetadataARead-onlyIdempotentInspect
Use this after finding a message attachment. It returns metadata plus a fresh short-lived download_url for that exact attachment; fetch the URL promptly, and call this tool again if it expires.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID when the credential can access more than one mailbox. | |
| message_id | Yes | Message ID containing the attachment. | |
| attachment_id | Yes | Attachment ID from message metadata. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the key behavioral trait that the download_url is short-lived and may require a repeat call after expiry. It does not cover auth requirements or rate limits, but it adds meaningful operational context that an annotation alone would not convey.
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 tightly written sentences with the prerequisite front-loaded and the critical expiry behavior immediately after. Every phrase earns its place and there is no redundant restatement of the title.
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 simple three-parameter read tool with full schema coverage, rich annotations, and an output schema, the description covers the essential invocation context and the non-obvious ephemeral URL behavior. An agent has enough information to call it correctly and handle expiry.
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 documents mailbox_id, message_id, and attachment_id. The description confirms that the result pertains to 'that exact attachment' but does not add semantics 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 states a specific action and result: it returns attachment metadata plus a fresh short-lived download_url for the exact attachment. That clearly distinguishes it from general message retrieval, though it does not explicitly name or distinguish sibling content-reading tools such as mailbox_read_attachment or mailbox_get_attachment_text.
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 gives clear usage context: use it after finding a message attachment, fetch the returned URL promptly, and call the tool again if the URL expires. It does not explicitly state when not to use it or compare it against the attachment-content siblings, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_attachment_textRead Attachment TextARead-onlyIdempotentInspect
Read or poll a previously requested attachment extraction. Requires mailbox.read. This does not start conversion; cache expiry or source removal returns not_found. Check status and outcome before using text.
| Name | Required | Description | Default |
|---|---|---|---|
| max_bytes | No | Maximum UTF-8 text bytes returned. Default 262144; maximum 1048576. Applies to cached results too. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| message_id | Yes | Message ID in the selected mailbox. | |
| If-None-Match | No | Return 304 when the authorised response is unchanged. | |
| attachment_id | Yes | Attachment ID from that message. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds real value beyond that: the required mailbox.read scope, the guarantee that no conversion is triggered, and the not_found failure mode from cache expiry or source removal. It does not describe truncation behavior when max_bytes clips the text, which is the one remaining behavioral gap.
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 short sentences, front-loaded with the action and precondition, then permission, then failure mode, then a usage warning. No sentence is filler and nothing is buried.
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 read-only poll tool with an output schema, the description covers prerequisites, permission, and failure semantics, which is enough to call it correctly. The only shortfall is that it gestures at 'status and outcome' without saying what states exist, relying on the output schema to explain them.
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 all five parameters including max_bytes limits, mailbox_id scoping, and If-None-Match are already documented. The description adds no parameter-level detail beyond a loose reference to 'status and outcome'. Baseline 3 is appropriate when the schema does the heavy lifting.
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?
States a specific verb pair (read/poll) and resource (a previously requested attachment extraction), and the clause 'does not start conversion' implicitly separates it from the sibling request_attachment_text tool. An agent can distinguish it from mailbox_get_attachment / mailbox_read_attachment without opening schemas, though the counterpart tool is never named.
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?
Gives clear when-to-use context (only for extractions already requested, as a poll) and an implied when-not (it will not begin a conversion). The 'check status and outcome before using text' line adds a sequencing rule. Naming the request tool explicitly and stating what to do on not_found would push this to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_calendarGet CalendarARead-onlyIdempotentInspect
Read one calendar in the selected mailbox. Requires calendar.read.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| calendar_id | Yes | Calendar ID in the selected mailbox. | |
| If-None-Match | No | ETag from a previous resource GET; a matching version returns 304. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive behavior, and open-world access. The description adds useful context that the operation requires calendar.read and targets the selected mailbox, which is beyond the annotations. It could say more about permission failure behavior or conditional requests, but the added auth requirement is meaningful.
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 short sentences with no waste. It front-loads the action and then states the permission prerequisite, making it easy to scan.
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 is a simple read operation with full schema coverage, annotations, and an output schema. The description covers purpose and permission needs, though it does not mention conditional ETag/304 behavior or error outcomes; those are adequately represented in the schema and annotations.
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 all three parameters are already documented in the schema. The description's phrase "in the selected mailbox" supports mailbox_id semantics but adds no syntax, format, or edge-case details 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 description uses a specific verb and resource: "Read one calendar." It clearly distinguishes this operation from listing calendars or reading events, but it does not explicitly name sibling tools or contrast their use cases.
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 gives the basic context—reading a single calendar in the selected mailbox—and states the required permission. It does not explain when to prefer this over mailbox_list_calendars, mailbox_get_calendar_event, or other calendar-related siblings, nor does it provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_calendar_eventGet Calendar EventARead-onlyIdempotentInspect
Read one event before editing or deleting it. Requires calendar.read. Retain its current concurrency token for the next conditional change.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Event ID in the selected mailbox. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | ETag from a previous resource GET; a matching version returns 304. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: the required calendar.read scope and the instruction to retain the concurrency token for the next conditional mutation, which is exactly the kind of behavioral detail an agent 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?
Three terse sentences with zero filler: the action, the prerequisite permission, and the follow-up obligation are each front-loaded in order of need. Nothing is repeated from the schema or annotations.
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 three-parameter read tool with an output schema and full annotation coverage, the definition supplies the remaining essentials: scope requirement and concurrency-token handling. Only the absence of explicit alternatives keeps it from being fully 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 description coverage is 100%, so event_id, mailbox_id and If-None-Match are already documented. The phrase "concurrency token" loosely connects to the ETag parameter, but the description adds no format or syntax detail beyond what the schema states, so the baseline 3 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 uses a specific verb and scope ("Read one event"), which cleanly separates it from sibling listing tools like mailbox_list_calendar_events. It stops short of naming those siblings explicitly, so differentiation is inferred rather than spelled out.
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?
"Read one event before editing or deleting it" gives a concrete when-to-use trigger tied to the update/delete workflow, which is genuine routing guidance. It never states when not to use it (e.g., for bulk reads, use the list or changes tool), so it falls short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_calendar_event_changesGet Calendar Event ChangesARead-onlyIdempotentInspect
Read bounded event changes from a retained state. Requires calendar.read. When sync_required is true, perform a full event resync; these coalesced changes are not a complete activity history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum changed IDs across the response, up to 100. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| since_state | No | Event state from the previous changes response. Omit to establish a full-refresh baseline. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds genuinely new context beyond that: the calendar.read scope requirement, the sync_required full-resync branch, and the caveat that coalesced changes are not a complete activity history.
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 short sentences, front-loaded with the core action, then the permission prerequisite, then the sync_required fallback. No filler and every clause carries information an agent needs.
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 a 3-param all-optional schema, full schema coverage, an output schema and rich annotations, the description fills the remaining gaps: auth scope, the full-resync escape hatch, and the completeness caveat on results. Only the explicit relationship to sibling calendar tools is missing.
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 limit, mailbox_id and since_state are already fully documented, setting the baseline at 3. The description's 'bounded' and 'retained state' phrasing loosely frames since_state/limit but adds no syntax, format or default detail 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 and resource ('Read bounded event changes from a retained state') and adds a distinguishing qualifier about coalesced changes. It separates itself from list/get event siblings by implying an incremental delta feed, though it never names those siblings explicitly.
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 gives a clear conditional directive for a return-value branch ('When sync_required is true, perform a full event resync'), which is real usage guidance. However, it never states when to choose this tool over mailbox_list_calendar_events or mailbox_get_calendar_event, leaving the delta-vs-list decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_changesGet Mailbox ChangesARead-onlyIdempotentInspect
Use this to resume mailbox sync from a prior state cursor. Do not use it for ad hoc message search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum change records to return (default 50, max 500). | |
| types | No | Comma-separated list: messages, folders, threads, submissions, identities, quotas. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| since_state | No | Legacy message state cursor to resume from. | |
| quotas_since_state | No | Quota state cursor to resume from. | |
| folders_since_state | No | Folder state cursor to resume from. | |
| threads_since_state | No | Thread state cursor to resume from. | |
| messages_since_state | No | Message state cursor to resume from. | |
| identities_since_state | No | Identity state cursor to resume from. | |
| submissions_since_state | No | Submission state cursor to resume from. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered and the description only needs to add sync semantics, which it does by framing calls as cursor-based resumption. It does not disclose whether the response includes a new cursor, how the per-type cursors interact, or what happens on an expired/ancient cursor.
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 short sentences, with the positive use case front-loaded and the exclusion following immediately. Nothing is wasted or buried.
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 and annotations covering safety, the description supplies the essential sync framing plus a boundary against search use. Its residual gap is the semantics of the seven cursor/type parameters in combination, which a ten-parameter sync tool arguably should address.
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 every one of the ten parameters is already documented, establishing a baseline of 3. The description adds no meaning beyond the schema about the per-type cursor parameters or how they relate to the 'types' filter — for example whether a cursor is only honored when its type is listed.
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 states a specific action and resource: resuming mailbox sync from a prior state cursor, which is clearly distinct from a one-off read. It does not spell out that the result is a set of change records across the message/folder/thread/identity/etc. types, so the name and schema still carry some of the meaning.
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 gives an explicit exclusion — not for ad hoc message search — which steers an agent toward the search/list siblings. It does not name the alternative tool or state the prerequisite that a valid cursor from a previous response is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_connectionGet Mailbox ConnectionARead-onlyIdempotentInspect
Validate the current Mailbox credential and read its team, connection label, permissions and authorised mailboxes. No mailbox selection or mailbox storage access is required.
| Name | Required | Description | Default |
|---|---|---|---|
| If-None-Match | No | ETag from a previous response. A match returns 304 with no body after rechecking authentication. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, and the description adds real context beyond them: this is a credential-validation read that returns team, label, permissions and authorised mailboxes, and needs no mailbox storage access. The ETag/304 recheck behavior lives in the schema rather than the description, which is a minor omission but not a gap the annotations leave open.
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 filler. The core action and the list of returned data come first, and the precondition (no mailbox selection needed) follows as a qualifying clause. Nothing is repeated and nothing needs trimming.
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 is a simple read with zero required parameters, an output schema, and four annotations covering safety. The description explains what is validated and what is read back, which is enough for correct invocation. It could go further by naming the failure or error behavior for an invalid credential, but nothing essential is missing.
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%: the single optional If-None-Match parameter is fully documented in the schema, including the 304 no-body outcome. The description adds no parameter-level detail of its own, which is the expected baseline when the schema already does the work.
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 names a specific action and resource: validating the Mailbox credential and reading its team, connection label, permissions and authorised mailboxes. It is concrete and lists what comes back. It does not, however, distinguish this tool from close siblings such as mailbox_get_session or mailbox_get_me, so an agent cannot fully tell them apart from the text 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 sentence 'No mailbox selection or mailbox storage access is required' gives a useful precondition: the call works at the connection level without picking a mailbox. That implies when the tool applies, but it never explicitly states when to choose it over mailbox_get_session or mailbox_get_me, which cover overlapping ground.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_draftRead Saved DraftARead-onlyIdempotentInspect
Read a saved draft and its current revision before editing or sending. Requires mailbox.read. Keep the revision and schedule version for later changes.
| Name | Required | Description | Default |
|---|---|---|---|
| draftId | Yes | Stable draft ID. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | Return 304 if this draft has not changed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds genuinely new context: the mailbox.read scope requirement and the instruction to retain the returned revision/schedule version for later mutations, which hints at optimistic-concurrency semantics. It does not explain the 304 conditional behavior that the If-None-Match parameter implies.
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 short sentences, front-loaded with the action and followed by the prerequisite and the follow-up obligation. No filler, though the final clause is terse enough to be slightly cryptic about which fields to retain.
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, a fully documented schema and an output schema present, the definition covers the remaining agent-facing needs: auth scope and the need to preserve version tokens. Only the conditional-request/304 semantics of If-None-Match and its relationship to sibling draft tools are left implicit.
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%, including a description for mailbox_id and If-None-Match, so the schema carries parameter meaning and a 3 baseline applies. The description's only added parameter-adjacent signal is that the revision and schedule version must be kept for later calls, which is useful but does not directly explain how to use draftId or If-None-Match.
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?
'Read a saved draft and its current revision' states a specific verb and resource, and 'revision' distinguishes it from a plain get. It does not explicitly name the nearby siblings (list_drafts, get_draft, update_draft), but the read-before-edit framing makes the distinct role clear.
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?
'before editing or sending' gives a concrete trigger condition that ties this read to the update/send workflow. It stops short of naming alternatives such as list_drafts for finding a draftId or get_draft, so routing is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_identityGet Mailbox IdentityARead-onlyIdempotentInspect
Use this to read the mailbox sender identity and display name. Use it before composing replies when the sender should match the mailbox identity.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered elsewhere. The description adds only the payload hint (sender identity plus display name) and no note on what happens if the credential is multi-mailbox, so it contributes marginally beyond structured data.
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 short sentences, zero filler, with the action stated first and the usage timing second. It could consolidate into one sentence, but nothing is redundant.
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?
An output schema exists and annotations are rich, so the description needn't explain return values or safety. For a no-required-parameter read tool this is nearly sufficient; the only real gap is disambiguation from sibling identity and sender-choice tools.
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% and the single parameter mailbox_id is already documented in the schema with the omission rule for single-mailbox credentials. The description never mentions mailbox_id, so it adds no meaning beyond the schema; baseline 3 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 uses a specific verb ('read') plus the resource ('mailbox sender identity and display name'), which is more precise than the title alone. It doesn't differentiate itself from close siblings like mailbox_list_identities, mailbox_get_sender_choices, or mailbox_get_me, so an agent still has to infer which 'identity' tool applies.
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?
'Use it before composing replies when the sender should match the mailbox identity' gives a concrete triggering condition rather than vague intent. It stops short of exclusions or naming alternatives, so an agent comparing it against mailbox_get_sender_choices gets no tie-breaker.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_meGet Mailbox ProfileBRead-onlyIdempotentInspect
Use this to identify the authenticated mailbox before acting on mail. It returns profile details for the mailbox key currently in use.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds the useful framing that it reads the credential's current mailbox scope, but it says nothing about the ETag/304 conditional-request behavior implied by the If-None-Match parameter, which is the main non-obvious trait of this call.
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 short sentences, front-loaded with the use case before the return claim, with no filler. Slight redundancy between "identify the authenticated mailbox" and "profile details for the mailbox key in use," which keeps it off a 5.
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 trivial two-optional-parameter read with rich annotations and an output schema, the description covers the essentials and need not describe return values. However, in this sibling set the primary risk is picking the wrong identity/session/connection tool, and the definition does nothing to mitigate 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?
Schema coverage is 100%, so both parameters (mailbox_id and If-None-Match) are fully documented in structured data. The description's phrase "mailbox key currently in use" lightly reinforces the default-mailbox behavior but adds no syntax, format, or selection guidance beyond the schema. Baseline 3 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 says it returns "profile details for the mailbox key currently in use," which is a specific resource and verb, but it does not differentiate from near-identical siblings like mailbox_get_identity, mailbox_get_session, mailbox_get_connection, and mailbox_list_granted_mailboxes. An agent facing that crowded namespace cannot tell from this text which one answers "who am I / which mailbox is this."
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?
"Use this to identify the authenticated mailbox before acting on mail" gives an implied usage context and ordering, but states no exclusions and never names an alternative. With four plus peers that also expose mailbox/identity context, the missing when-not guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_messageGet MessageARead-onlyIdempotentInspect
Use this to fetch one message summary or detail by message_id. Use mailbox_list_body or mailbox_list_content when the body content is required.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| message_id | Yes | Message ID. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds only that the result may be a 'summary or detail', without explaining what determines which, or mentioning the conditional-request/304 behavior that the schema documents. With annotations carrying most of the load, this is adequate but thin.
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 short sentences with zero filler; the primary action comes first and the fallback routing follows immediately. Every clause 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?
With a rich annotation set and an output schema, the description does not need to explain return values, and it correctly flags the body-content alternative. The only real gap is the unexplained 'summary or detail' distinction, which leaves the agent unsure what it will receive from a given call.
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 mailbox_id, message_id and If-None-Match are already documented, including the multi-mailbox targeting rule and the ETag semantics. The description adds no parameter-level meaning beyond restating message_id, so the baseline of 3 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?
States a specific verb and resource: fetch one message by message_id, and clarifies the scope is a single message. It distinguishes itself from the body-reading siblings (mailbox_list_body, mailbox_list_content) but does not differentiate from other near-neighbors such as mailbox_batch_get_messages or mailbox_get_thread, which an agent must still infer.
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 routes the agent away from this tool when full body content is required, naming the two alternatives to use instead. It gives no guidance for the multi-message case (batch_get_messages) or thread retrieval, so the routing is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_sender_choicesGet permitted sender choicesBRead-onlyIdempotentInspect
Intersects current team, inbox and credential policies with provider restrictions and selected delivery groups. Subdomains require separate authorisation. Sending checks these permissions again before submission.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | Return 304 when this ETag still matches. | |
| delivery_group_id | No | Restrict choices to these delivery groups. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuine context beyond that: the result is a policy intersection, subdomains need separate authorisation, and permissions are revalidated at send time — material facts an agent would otherwise not know.
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 sentences, no padding, but front-loading is weak: it opens with a dense 'Intersects...' clause instead of stating the tool's output, and the acronym-heavy policy jargon costs more effort than it saves.
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?
An output schema exists, so return-value details are unnecessary, and the annotations cover the safety profile. What's missing is the plain statement of what the tool yields and how it differs from the unprefixed duplicate sibling, which for a 3-param read tool leaves a noticeable gap.
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 every parameter is documented in the schema itself. The description adds nothing about mailbox_id scoping, delivery_group_id filtering, or the ETag/304 behavior beyond what the schema provides, so the baseline 3 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 explains the computation ('intersects current team, inbox and credential policies with provider restrictions') but never plainly states that the tool returns the set of sender addresses/identities the caller may use. The agent must infer the output from the title 'Get permitted sender choices' rather than from the description itself. It also doesn't distinguish this tool from the sibling mailbox_get_sender_choices.
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 closest thing to guidance is 'Sending checks these permissions again before submission', which hints this tool is consulted before sending, but no explicit when-to-use, when-not-to-use, or alternative is named. A near-duplicate sibling (mailbox_get_sender_choices) exists with no routing hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_sessionGet Mailbox SessionARead-onlyIdempotentInspect
Use this before complex mailbox work to discover supported mailbox capabilities, limits, and endpoint metadata. Do not use it for message search.
| Name | Required | Description | Default |
|---|---|---|---|
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds that the call returns capabilities, limits, and endpoint metadata, which is useful orientation, but it says nothing about caching/ETag behavior, credential scoping implications, or whether capabilities are static or account-dependent. Given the rich annotation set, this is adequate but not rich.
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, zero filler, with the primary use case front-loaded before the exclusion. Every clause earns its place and nothing is repeated from the schema or annotations.
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, full parameter documentation, and rich annotations, the description only needs to establish when to call this versus siblings — which it does. The only residual gap is that it does not hint at the ETag/caching workflow or multi-mailbox scoping tradeoffs, which are behavioral rather than structural concerns.
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% and both parameters carry their own explanatory text, including the conditional guidance for mailbox_id and the 304 semantics for If-None-Match. The description adds no parameter meaning beyond the schema, so the baseline of 3 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 gives a concrete verb ('discover') and enumerates the resource contents (capabilities, limits, endpoint metadata), which is far more specific than the name 'get_session' alone. It also explicitly carves out message search, distinguishing it from the many mailbox_search/list siblings. It stops short of stating what a 'session' object is, but the purpose is 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?
Explicit timing guidance ('use this before complex mailbox work') plus an explicit exclusion ('do not use it for message search') is strong when/when-not coverage. It loses a point because the exclusion does not name the alternative tool the agent should call instead, forcing the agent to locate a search sibling on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_get_threadGet ThreadARead-onlyIdempotentInspect
Use this to read one thread summary by thread_id. Use mailbox_list_thread_messages when the task needs the messages in the thread.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes | Thread ID. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is fully covered. The description adds only the framing that the result is a summary (metadata-level) rather than message content. It says nothing beyond annotations about ETag/304 conditional behavior or multi-mailbox scoping, both of which live only in the schema.
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, zero filler, with the positive usage stated first and the routing alternative second. Nothing repeats the name or title and nothing is buried.
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?
An output schema exists and the input schema fully documents all three parameters, so the description need not explain return values or parameter formats. For a simple read tool this is close to complete; only the conditional-request behavior is left to the schema rather than reinforced.
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% and includes the nuanced mailbox_id targeting rule and If-None-Match semantics, so the schema carries parameter meaning. The description restates thread_id but adds no syntax, format, or precedence guidance beyond it. Baseline 3 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?
States a specific verb and resource ('read one thread summary by thread_id') and explicitly frames the return as a summary rather than full messages, which is the key distinction from mailbox_list_thread_messages and qubrics_mailbox_list_threads. An agent can pick it out of a very large sibling set without opening the schema.
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?
Names the alternative tool explicitly ('mailbox_list_thread_messages') and gives the condition that selects it ('when the task needs the messages in the thread'). This is the primary confusion risk for a thread-summary tool, and it is resolved directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_list_bodyRead Message BodyARead-onlyIdempotentInspect
Use this to read the raw or simplified body for a known message_id. Prefer it when the task needs message text but not every MIME detail.
| Name | Required | Description | Default |
|---|---|---|---|
| part | No | Body part to return. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| message_id | Yes | Message ID. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. | |
| max_body_chars | No | Maximum body characters to return before truncation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds the useful scoping note that the message_id must already be known, but it says nothing about truncation via max_body_chars or the 304 conditional-fetch behavior exposed in the schema.
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 tight sentences with the purpose stated first and the selection preference second; no filler, no repetition of the title.
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?
An output schema exists, so return shape need not be described, and the read-only annotations carry most behavioral weight. The definition is nearly sufficient for this simple read, with only the relationship to the full-message sibling and truncation behavior left implicit.
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 every parameter including part, mailbox_id, max_body_chars and If-None-Match is already documented in the schema. The description's phrase "raw or simplified body" loosely gestures at the part enum but adds no format or truncation semantics beyond what the schema states, so the baseline 3 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 uses a specific verb ("read") and resource ("the raw or simplified body for a known message_id"), so the agent knows exactly what is fetched. It differentiates itself indirectly from the heavier message-fetch sibling by saying it is for cases that don't need "every MIME detail," but it never names that sibling.
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?
"Use this to read ... Prefer it when the task needs message text but not every MIME detail" gives a clear positive condition for selection. What is missing is an explicit pointer to the alternative tool (e.g. mailbox_get_message) that should be used when full MIME structure is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_list_calendar_eventsList Calendar EventsARead-onlyIdempotentInspect
List events in the selected mailbox or look up a caller-held UID. Requires calendar.read. UID search is eventually consistent: an empty immediate lookup leaves an uncertain create unresolved and never authorises repeating it.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Exact immutable event UID. Empty results can reflect a recent create awaiting search visibility; never repeat an uncertain create. | |
| limit | No | Maximum records per page, up to 100. | |
| cursor | No | Cursor from the previous page. Keep the same filters while paging. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| calendar_id | No | Limit events to this calendar in the selected mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, so the bar is lower, and the description still adds real operational facts: the required scope and the eventual-consistency hazard where an empty UID hit is a false negative after a recent create rather than a definitive absence. The awkward phrasing 'never authorises repeating it' conveys the anti-retry rule but reads obliquely.
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 short sentences, mode of operation first, permission requirement second, the non-obvious consistency trap last. Every sentence carries distinct information with no filler.
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?
An output schema exists so return values need no explanation, and annotations plus the stated scope cover safety. However, for a five-parameter paginated list tool the description never mentions pagination behavior, result ordering, or how the filters combine, leaving those to the schema alone.
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 schema already explains uid, limit, cursor, mailbox_id and calendar_id, including the create-visibility caveat. The description's UID consistency note restates what the uid schema description already says, adding no new syntax or filter-combination detail 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?
States a specific verb and resource ('List events') plus a second explicit mode ('look up a caller-held UID') scoped to a selected mailbox. An agent can tell this is the enumeration tool rather than a mutation, though it never distinguishes itself from the sibling qubrics_mailbox_get_calendar_event, which also retrieves a single event by UID.
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?
Gives the prerequisite ('Requires calendar.read') and a pointed warning about the UID path: an empty immediate lookup does not resolve an uncertain create and must not be repeated. What is missing is routing guidance — when to list versus call get_calendar_event for a known UID, or get_calendar_event_changes for incremental sync.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_list_calendarsList CalendarsARead-onlyIdempotentInspect
List calendars in the selected mailbox. Requires calendar.read. Use a small limit and continue with the returned cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum records per page, up to 100. | |
| cursor | No | Cursor from the previous page. Keep the same filters while paging. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the safety bar is low; the description still adds real value by disclosing the required calendar.read scope and the cursor-based pagination loop. It stops short of describing ordering or what a calendar record contains, though the output schema covers returns.
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 short sentences, action first, then the permission precondition, then the pagination tactic. No filler; the only mild ambiguity is "selected mailbox," which is not tied explicitly to mailbox_id.
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?
A read-only list tool with full schema coverage and an output schema needs only purpose, scope, and paging guidance, all of which are present. Minor gap: it does not clarify how the "selected mailbox" is determined when mailbox_id is omitted and multiple mailboxes are granted.
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 already documents all three parameters at 100% coverage, including limit bounds, cursor format, and the mailbox_id omission rule. The description's "small limit" and "continue with the returned cursor" restate schema semantics without adding new meaning, so baseline 3 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?
States a specific verb and resource ("List calendars") scoped to a mailbox, which distinguishes it from the closely named sibling mailbox_list_calendar_events by resource type rather than by explicit callout. An agent can infer the difference, but the description never names the alternative outright.
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?
Gives procedural guidance (use a small limit, continue with the returned cursor) and a permission prerequisite (calendar.read), plus "selected mailbox" hints at mailbox targeting. It does not state when to prefer this over mailbox_list_calendar_events or mailbox_get_calendar, so usage is implied rather than fully directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_list_contentRead Message ContentBRead-onlyIdempotentInspect
Use this to read structured content for a known message_id. Prefer it when headers, participants, or body parts affect the answer.
| Name | Required | Description | Default |
|---|---|---|---|
| part | No | Body part to return. `auto` prefers text when available. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| message_id | Yes | Message ID. | |
| include_html | No | When true, include HTML content when available. | |
| strip_quotes | No | When true, remove quoted reply text. | |
| If-None-Match | No | Weak ETag from a previous response. Returns 304 when unchanged. | |
| include_links | No | When true, include links extracted from the body. | |
| max_body_chars | No | Maximum body characters to return before truncation. | |
| include_headers | No | Header detail to include in the response. | |
| strip_signature | No | When true, remove detected email signatures. | |
| include_attachments | No | Attachment detail to include. Contents are not returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld, so safety is covered. Beyond that the description adds essentially nothing: it does not mention truncation via max_body_chars, the 304 conditional-response behavior, or that attachment contents are never returned — all behaviors an agent would want highlighted.
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 short sentences, front-loaded with the primary use case and followed by a preference condition. Nothing is redundant, though the second sentence is vague enough that it earns only partial credit.
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?
An output schema and full parameter documentation exist, so much of the burden is off the description. Still, for an 11-parameter read tool the description never characterizes what 'structured content' contains or how truncation/conditional requests behave, leaving the definition minimally 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 description coverage is 100% with 11 well-described parameters including enums for part, include_headers, and include_attachments. The description adds no parameter meaning at all, so the schema baseline of 3 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?
States a specific verb and resource ('read structured content for a known message_id'), which distinguishes it from search/discovery tools that take query terms rather than an ID. It does not, however, separate it from nearby siblings such as mailbox_get_message or mailbox_list_body, which likely also return message content.
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?
'Prefer it when headers, participants, or body parts affect the answer' gives a positive selection condition, but no alternative is named and no exclusion is stated. An agent must still infer whether to call this or get_message/list_body.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_list_draftsList Saved DraftsARead-onlyIdempotentInspect
List saved drafts in the selected inbox, newest first. Requires mailbox.read. Use a small limit and continue with the returned cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size; default 50, maximum 100. | |
| cursor | No | Cursor returned by the previous page. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds useful behavior beyond that: it requires mailbox.read, returns results newest first, and uses cursor-based pagination.
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 short sentences with no wasted wording. The purpose is front-loaded, followed by the permission requirement and the pagination instruction.
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 simple read-only list tool with an output schema and full parameter descriptions, the definition is complete enough. It covers purpose, authorization, ordering, and pagination, while the schema covers mailbox targeting.
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 all three parameters are already documented in the schema. The description adds only general guidance about using a small limit and a returned cursor, and it does not explain mailbox_id semantics beyond what the schema already 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 description gives a specific verb and resource: "List saved drafts," plus scope ("selected inbox") and ordering ("newest first"). It clearly separates this list operation from sibling draft operations such as get, update, delete, and send.
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 states the required permission and gives pagination guidance: use a small limit and continue with the returned cursor. However, it does not explain when to use this tool instead of alternatives such as mailbox_list_drafts or mailbox_list_messages, nor does it give any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_list_foldersList FoldersBRead-onlyIdempotentInspect
Use this to inspect mailbox folders before filing or moving messages. It is read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default 50, max 100). | |
| cursor | No | Pagination cursor — the `next_cursor` from the previous response. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so 'It is read-only' restates structured data rather than adding value. Nothing is said about pagination behavior (the limit/cursor loop), whether folders are flat or hierarchical, or what identifiers are needed for later file/move calls — which is exactly the context this description sets up.
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 short sentences, with the workflow context front-loaded ahead of the safety note. The only waste is the trailing 'It is read-only,' which duplicates the annotations and could be dropped or replaced with genuinely new 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?
The tool is simple (0 required params, full schema coverage, output schema present, rich annotations), so most of the burden is already carried elsewhere and the description is minimally sufficient. Still, it omits pagination follow-through and the folder-identifier details an agent would want before chaining into a move/filing call, which the description itself invokes as the motivation.
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 each parameter carries its own explanation (limit default/max, cursor source, mailbox_id scoping rule), so the schema does the work. The description adds no parameter meaning beyond that, which is the expected baseline of 3 when schema coverage is high.
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 pairs a specific verb ('inspect') with a specific resource ('mailbox folders'), making it obvious this is the folder-enumeration tool rather than a message or calendar tool. It never explicitly says 'lists/returns the folders available,' so it stops short of a 5, but the resource boundary against siblings is clear.
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?
'Use this to inspect mailbox folders before filing or moving messages' gives a real usage context tied to a prerequisite workflow. However, no alternative tool is named and there is no when-not-to-use guidance, so an agent must infer the boundaries itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_list_granted_mailboxesList Granted MailboxesARead-onlyIdempotentInspect
Use this first when the token can access more than one mailbox. It searches only the mailboxes granted to this connection and returns IDs to pass as mailbox_id.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by mailbox ID or email address. | |
| limit | No | Maximum results (default 50). | |
| cursor | No | Cursor from the previous response. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and openWorld behavior, so the safety profile is covered. The description adds useful scoping context that only granted mailboxes are searched, but says nothing about result format or pagination behavior.
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 tightly written sentences with the usage cue front-loaded ahead of the scope and return-value note. There is no filler or 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?
With an output schema present and rich annotations, the description only needs to convey purpose, scope, and usage timing, all of which it does. It is complete enough for correct invocation, though a note on what the returned IDs feed into would add polish.
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 q, limit, and cursor in detail. The description adds no additional meaning about parameter usage, matching the baseline of 3 when the schema does the heavy lifting.
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 states the specific resource (mailboxes granted to this connection) and output (IDs to pass as mailbox_id), making the operation clear. It stops short of an explicit verb+resource phrasing like 'list granted mailboxes' but the intent is unmistakable.
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?
'Use this first when the token can access more than one mailbox' gives explicit sequencing guidance that helps an agent decide when to reach for this tool. It doesn't name a specific alternative (e.g. qubrics_mailbox_get_me) for the single-mailbox case, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_list_identitiesList Mailbox IdentitiesARead-onlyIdempotentInspect
Use this to list sender identities available to the mailbox. Prefer mailbox_get_identity when only the default identity is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default 50, max 100). | |
| cursor | No | Pagination cursor — the `next_cursor` from the previous response. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds only the implicit notion that results are scoped to identities available to the mailbox; it says nothing about pagination behavior or ordering beyond what the schema's cursor/limit fields provide.
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 short sentences with zero filler; the core action is front-loaded and the alternative-tool routing follows immediately. Nothing could be removed without losing 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, full parameter documentation, and complete read-only annotations, the description needs only to state purpose and sibling routing, which it does. It could mention pagination or credential scoping for full completeness, but nothing required to invoke the tool correctly is missing.
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 limit, cursor, and mailbox_id are all documented in the schema with defaults and constraints. The description adds no additional parameter meaning, which is acceptable at the baseline when the schema does the heavy lifting.
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 specifies a clear verb ('list') and resource ('sender identities available to the mailbox'), and it distinguishes itself from the sibling qubrics_mailbox_get_identity by framing this as the multi-result variant. It does not explicitly mention scoping to a single credential, but the purpose is unmistakable.
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 gives explicit routing guidance: prefer mailbox_get_identity when only the default identity is needed, which is a clear when-to-use-this-vs-alternative statement. It stops short of covering edge cases such as mailbox_id scoping or when to paginate, but the primary decision is resolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_list_messagesList MessagesARead-onlyIdempotentInspect
Use this to scan mailbox messages by cursor without fetching full bodies. Filter by folder_id, keyword/not_keyword, dates, sender/recipient, text query, unread state, or has_attachment; attachment metadata includes a short-lived download_url.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search query across message fields. | |
| cc | No | Filter by CC recipient email address or display name. | |
| to | No | Filter by To recipient email address or display name. | |
| bcc | No | Filter by BCC recipient email address or display name. | |
| body | No | Filter by message body text. | |
| from | No | Filter by sender email address or display name. | |
| after | No | Filter to messages after this ISO 8601 timestamp. | |
| limit | No | Maximum results (default 50, max 100). | |
| before | No | Filter to messages before this ISO 8601 timestamp. | |
| cursor | No | Pagination cursor — the `next_cursor` from the previous response. | |
| keyword | No | Require this message keyword, such as `$seen`. | |
| sort_by | No | Message field to sort by. | |
| subject | No | Filter by subject text. | |
| folder_id | No | Filter to messages in this folder ID. | |
| is_unread | No | When true, only return unread messages. | |
| thread_id | No | Filter to messages in this thread ID. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| header_name | No | Header name to match with `header_value`. | |
| not_keyword | No | Exclude messages with this keyword. | |
| header_value | No | Header value to match with `header_name`. | |
| has_attachment | No | When true, only return messages with attachments. | |
| max_size_bytes | No | Maximum message size in bytes. | |
| min_size_bytes | No | Minimum message size in bytes. | |
| sort_direction | No | Sort direction. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the description's contribution is the extras: cursor-based pagination and the notable detail that attachment metadata carries a 'short-lived download_url', which an agent would otherwise not anticipate. It stops short of stating default page size or result ordering beyond what the schema documents.
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?
A single front-loaded sentence with the purpose first and the filter inventory second; semicolons carry the sub-points without filler. Every clause contributes either scope or capability 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?
For a 24-parameter list tool with an output schema and full annotations, the description covers purpose, the no-body constraint, pagination, and the short-lived download_url caveat. The remaining gaps (sorting behavior, multi-mailbox scoping nuance) are adequately handled by schema parameter descriptions, so nothing essential is missing.
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 schema already explains all 24 parameters individually; the description only groups a subset (folder_id, keyword/not_keyword, dates, sender/recipient, text query, unread, has_attachment) into a readable summary. It adds the useful pairing of keyword with not_keyword, but omits sort_by, thread_id, mailbox_id, header matching, and size bounds.
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 opens with a specific verb and resource ('scan mailbox messages by cursor') and immediately scopes what it does not do ('without fetching full bodies'), which distinguishes it from get_message and batch_get_messages. It doesn't name any sibling tool explicitly, so the differentiation is inferential rather than explicit.
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 phrase 'without fetching full bodies' implies this is the lightweight/preview path and that a different tool is needed for full content, but no alternatives are named and no when-not conditions are given. An agent must infer from sibling names whether to use this versus search_message_snippets, list_thread_messages, or count_messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_list_thread_messagesList Thread MessagesBRead-onlyIdempotentInspect
Use this to list messages inside a known thread. Use message body tools only for messages that need full content.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Message sort direction within the thread. | |
| limit | No | Maximum results (default 50, max 100). | |
| cursor | No | Pagination cursor — the `next_cursor` from the previous response. | |
| thread_id | Yes | Thread ID. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so the safety profile is fully covered by structured data. The description adds no behavioral context of its own, such as pagination behavior, default result size, or what happens when thread_id is unknown or inaccessible.
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 short sentences with the primary action front-loaded and no filler. The second sentence is slightly imprecise ("message body tools" is undefined), which costs a point but the overall shape is 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?
An output schema exists, so return values need not be explained, and the schema covers all five parameters. What remains unaddressed is the listing behavior itself — pagination defaults, ordering, and scoping across multiple mailboxes — leaving the definition adequate but thin for a paginated 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% and every parameter — sort, limit, cursor, thread_id, mailbox_id — is documented in the schema including the multi-mailbox targeting caveat. The description contributes nothing beyond that, so the baseline of 3 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 states a specific verb and resource: "list messages inside a known thread," which is distinct from thread-level retrieval (get_thread) or mailbox-wide listing. It implicitly differentiates itself from body-fetching tools, though it never names a sibling explicitly.
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?
"inside a known thread" implies the precondition that a thread_id is already in hand, and the second sentence steers agents away from body tools unless full content is needed. However, "message body tools" is not mapped to any concrete sibling name (e.g., mailbox_list_body, mailbox_get_message), so the routing guidance stays generic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_list_threadsList ThreadsARead-onlyIdempotentInspect
Use this to scan conversation threads without loading every message. Continue with next_cursor only when additional threads are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search query across thread messages. | |
| after | No | Filter to threads updated after this ISO 8601 timestamp. | |
| limit | No | Maximum results (default 50, max 100). | |
| before | No | Filter to threads updated before this ISO 8601 timestamp. | |
| cursor | No | Pagination cursor — the `next_cursor` from the previous response. | |
| folder_id | No | Filter to threads with messages in this folder ID. | |
| is_unread | No | When true, only return threads with unread messages. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| participant | No | Filter by participant email address or display name. | |
| has_attachment | No | When true, only return threads with attachments. | |
| sort_direction | No | Sort direction. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive behavior, so the safety profile is covered. The description usefully adds that results are thread-level summaries rather than full messages, but says nothing about ordering defaults, result payload shape, or rate/latency behavior beyond that single trait.
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 short sentences, front-loaded with the purpose and followed by the pagination instruction. Nothing is redundant or padded.
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 11 optional parameters, rich annotations and an output schema, the definition is callable as written, but for a tool this configurable the description is thin — it omits what a returned thread contains and how filters interact (e.g., whether q searches message bodies). Adequate but with clear room to do more.
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% with 11 well-documented parameters, so the schema carries the burden and a 3 is the baseline. The description only echoes the cursor pattern ('next_cursor from the previous response'), adding no filtering or sorting semantics beyond what the schema already 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 description states a specific verb and resource ('scan conversation threads') and scopes it as a lightweight listing that does not load message bodies, which distinguishes it from message-fetching operations. It stops short of naming the sibling tools (get_thread, list_thread_messages) that would be the alternative, so a 4 rather than a 5.
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 contrast with 'loading every message' implies when to prefer this tool over thread/message retrieval, and there is explicit pagination guidance ('Continue with next_cursor only when additional threads are needed'). However, no alternative is named and there is no guidance on when to use it versus mailbox_list_messages or a search tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_read_attachmentRead AttachmentARead-onlyIdempotentInspect
Use this after finding a message attachment when you need the attachment contents. Text-like attachments are downloaded server-side and returned as text, so agents do not need a generic web_fetch tool. Binary or oversized attachments return metadata plus a fresh download link.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Read mode: auto, metadata, text, or resource_link. auto inlines small text attachments. | auto |
| mailbox_id | No | Mailbox public ID when the credential can access more than one mailbox. | |
| message_id | Yes | Message ID containing the attachment. | |
| attachment_id | Yes | Attachment ID from message metadata. | |
| max_text_bytes | No | Maximum text bytes to return inline. Defaults to 262144 and is capped at 1048576. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this a safe, idempotent, non-destructive read, so the description's added value is in the mechanics: text-like payloads are downloaded server-side and inlined, while binary or oversized payloads return metadata plus a fresh download link. That is genuine behavioral context an agent could not derive from the annotations. It stops short of describing the failure modes (expired links, permission denied on multi-mailbox credentials) that would make it fully transparent.
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 short sentences, front-loaded with the usage trigger and then the branching behavior, with no filler. The middle clause about not needing a generic web_fetch tool is somewhat tangential but does usefully preempt a wrong tool choice.
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?
An output schema exists, so return values need not be spelled out, and the description covers the main branch point (text inline versus metadata plus link). For a five-parameter, read-only tool this is close to complete; only the mode-switching behavior and multi-mailbox credential handling remain unaddressed in prose.
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 all five parameters including mode, mailbox_id, and max_text_bytes are already documented in the schema, establishing the baseline of 3. The description gestures at size limits ('oversized attachments') but does not explain the mode values or how max_text_bytes interacts with the inline-versus-link decision.
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 pairs a specific verb ('read') with a specific resource ('message attachment') and states what is retrieved ('the attachment contents'). It clearly differs from a search or list tool, though it never names the closely-related siblings mailbox_get_attachment, mailbox_get_attachment_text, or mailbox_request_attachment_text, so fine-grained differentiation is left implicit.
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 gives a precondition and trigger ('after finding a message attachment when you need the attachment contents'), which is real usage guidance. However, with at least three sibling tools covering attachment retrieval, there is no explicit statement of when to pick this one over get_attachment or request_attachment_text, leaving the routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_request_attachment_textRequest Attachment TextAIdempotentInspect
Extract readable text from an attachment up to 7500000 bytes at no extra charge. Requires mailbox.read. Repeated requests reuse the current extraction for 24 hours. OCR is unavailable; check status and outcome, and use the original download if extraction cannot complete.
| Name | Required | Description | Default |
|---|---|---|---|
| max_bytes | No | Maximum UTF-8 text bytes returned. Default 262144; maximum 1048576. Applies to cached results too. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| message_id | Yes | Message ID in the selected mailbox. | |
| attachment_id | Yes | Attachment ID from that message. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses required permission, idempotent caching for 24 hours, OCR unavailability, status/outcome checking, and fallback behavior. The annotations already cover safety and idempotency, but the description adds useful operational context; the '7500000 bytes' wording is somewhat ambiguous relative to the schema's max_bytes limit.
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 compact and front-loads the main action and key constraints. Most sentences earn their place, though the 'up to 7500000 bytes at no extra charge' phrase is slightly ambiguous and could be clearer.
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 does not need to explain return values. It covers permissions, caching, OCR limitations, status checking, and fallback adequately for an asynchronous extraction-request tool, though it could better distinguish this tool from its close siblings.
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 parameter meanings are already documented in the input schema. The description adds little parameter-specific detail beyond an ambiguous size mention, so it meets the baseline for fully documented 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?
The description states a specific verb and resource: extract readable text from an attachment. It includes size, cost, permission, and caching constraints, but it does not explicitly distinguish this tool from sibling attachment-text tools such as mailbox_get_attachment_text or request variants.
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 gives clear prerequisites (mailbox.read), explains the 24-hour cache reuse behavior, states that OCR is unavailable, and tells the caller to check status/outcome and fall back to the original download if extraction fails. It lacks explicit routing guidance versus sibling attachment tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_search_message_snippetsSearch Message SnippetsARead-onlyIdempotentInspect
Use this to search message snippets by query text. Narrow with folder_id, keyword/not_keyword, dates, sender/recipient, unread state, or has_attachment; use returned message IDs with a read tool before making content-specific claims.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search text used to generate snippets. | |
| cc | No | Filter by CC recipient email address or display name. | |
| to | No | Filter by To recipient email address or display name. | |
| bcc | No | Filter by BCC recipient email address or display name. | |
| body | No | Filter by message body text. | |
| from | No | Filter by sender email address or display name. | |
| after | No | Filter to messages after this ISO 8601 timestamp. | |
| limit | No | Maximum results (default 50, max 100). | |
| before | No | Filter to messages before this ISO 8601 timestamp. | |
| keyword | No | Require this message keyword, such as `$seen`. | |
| subject | No | Filter by subject text. | |
| folder_id | No | Filter to messages in this folder ID. | |
| is_unread | No | When true, only return unread messages. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| header_name | No | Header name to match with `header_value`. | |
| message_ids | No | Comma-separated message IDs, maximum 100. | |
| not_keyword | No | Exclude messages with this keyword. | |
| header_value | No | Header value to match with `header_name`. | |
| has_attachment | No | When true, only return messages with attachments. | |
| max_size_bytes | No | Maximum message size in bytes. | |
| min_size_bytes | No | Minimum message size in bytes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world access, so the safety profile is covered. The description adds genuine context beyond them: results are snippets, not authoritative content, and must be re-read via a read tool before content claims. It does not discuss result ordering or what a snippet contains, which keeps it from a 5.
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 compact clauses, with the core purpose front-loaded and the filter list and follow-up caveat following efficiently. Slight density in the filter enumeration, but nothing is wasted.
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 21-parameter search tool with an output schema and full annotation coverage, the description supplies the essential framing: it is a snippet search, filters exist, and results must be verified with a read tool. The heavy parameter detail is correctly delegated to the schema. Missing only peripheral behavior such as result ordering or snippet truncation.
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?
With 100% schema description coverage across 21 parameters, the schema already documents every filter precisely, including mailbox_id scoping and ISO 8601 dates. The description only enumerates filter categories (folder_id, keyword/not_keyword, dates, sender/recipient, unread, has_attachment) without adding syntax or semantics beyond the schema, so baseline 3 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?
States a specific verb and resource ('search message snippets by query text'), which is clearly narrower than the message/thread listing siblings. It does not explicitly name an alternative like mailbox_list_messages, so the differentiation is implied by the snippet/search framing rather than spelled out.
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?
Gives concrete narrowing axes and, importantly, a workflow rule: use returned message IDs with a read tool before making content-specific claims. That is a real when-to-use / when-not-to-conclude instruction. It stops short of naming a sibling search/list tool to prefer in other situations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_send_draftSend Saved DraftAInspect
Send only the saved revision the user approved. Requires mailbox.read and email.send. Pass expected_revision; to schedule within 30 days also pass scheduled_for and expected_schedule_version. After cancelling a schedule, include the current schedule version.
| Name | Required | Description | Default |
|---|---|---|---|
| draftId | Yes | Stable draft ID. | |
| If-Match | No | Current draft ETag; expected_revision is required. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| scheduled_for | No | Send no earlier than this future time, within 30 days. Include a timezone and at most millisecond precision. Omit to send now. | |
| expected_revision | Yes | Exact saved revision to send. A stale revision returns conflict. | |
| expected_schedule_version | No | Current schedule version. Required for scheduling and after cancelling a schedule. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the non-read-only, non-idempotent, non-destructive, open-world profile, and the description adds real context on top: required scopes mailbox.read and email.send, the conflict behavior on a stale revision, and the 30-day scheduling window. It does not discuss retry safety or what a successful send returns, but the output schema covers the latter.
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 short sentences, front-loaded with the action before the prerequisites, and every sentence carries either a scope requirement or a conditional parameter rule. The dense, telegraphic phrasing ("Pass expected_revision") is efficient but leaves little room for orientation.
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 high-stakes mutation with six parameters, the description covers the safety-critical pieces: required auth scopes, revision pinning, conflict signaling, and scheduling conditions, while the output schema handles return values. Only multi-mailbox targeting (mailbox_id) and ETag handling are left entirely to 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 the baseline is 3, and the description earns more by explaining cross-parameter conditional requirements the schema cannot express — expected_schedule_version is needed only when scheduling or right after a cancellation. It does not mention mailbox_id or the If-Match parameter at all, so a small gap remains.
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 gives a specific verb and resource ("Send only the saved revision") and adds a scope qualifier — the exact approved revision, not the live draft — which implicitly separates it from a compose-and-send tool. It never names a sibling such as mailbox_send_message or the schedule-control tool, so the differentiation is inferable rather than stated.
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 gives concrete conditional guidance: pass expected_revision always, pass scheduled_for plus expected_schedule_version to schedule within 30 days, and include the current schedule version after cancelling a schedule. What's missing is an explicit "use X instead" pointer to the compose-new-message or schedule-modification tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_send_messageSend Mailbox MessageAInspect
Use this to send a message from the authenticated mailbox. For attachments, call mailbox_upload_attachment first using presign_upload_url or tiny content_base64, then pass the returned blob_id. Include an Idempotency-Key for retries.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Visible copied recipients. | |
| to | No | Primary recipients. Supply 1 to 50 recipients in total across To, Cc and Bcc. | |
| bcc | No | Hidden copied recipients. | |
| from | No | Sender address. Defaults to mailbox identity. | |
| subject | No | Subject line; defaults to empty. | |
| reply_to | No | Reply-To recipients. | |
| html_body | No | HTML body. | |
| text_body | No | Plain text body. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| attachments | No | Attachments to send with the message. | |
| custom_headers | No | Custom X-* headers to include. Mailbox writes reject X-SES-TENANT, X-SES-CONFIGURATION-SET and X-SES-MESSAGE-TAGS case-insensitively. | |
| Idempotency-Key | No | Client-chosen unique key to safely retry the request. Cached for 24h per (mailbox, endpoint, key). Different body with same key returns 409 idempotency_conflict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a non-read-only, open-world, non-idempotent operation. The description adds attachment pre-upload sequencing and retry-key behavior, but it does not mention that sending is effectively irreversible, nor does it cover permission or rate-limit considerations.
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 three short sentences with no wasted wording. The main action is front-loaded, followed by the attachment workflow and retry guidance.
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 12 parameters, full schema coverage, and an output schema, the description covers the important non-obvious workflows: attachments and retries. It could still say more about use versus draft-based sending and delivery irreversibility.
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 still adds value by explaining the attachment workflow and idempotency-key usage beyond the schema's individual property 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 states a specific verb and resource: sending a message from the authenticated mailbox. It is clear, but it does not differentiate this tool from close siblings such as mailbox_send_draft or sending_send_email.
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 gives useful attachment guidance: upload first, then pass the returned blob_id. It also mentions Idempotency-Key for retries, but it does not explain when to use this tool versus creating or sending a draft, or versus the sending_* variants.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_update_calendar_eventEdit Calendar EventAIdempotentInspect
Edit an event without sending invitations or email reminders. Requires calendar.write and the reviewed If-Match value. Reload after a conflict before making another change.
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | Local start date and time without an offset, interpreted in time_zone. | |
| title | No | Event title. | |
| If-Match | Yes | ETag from the most recent event GET. Wildcards are rejected. | |
| duration | No | Event duration expressed as days, hours, minutes or seconds. | |
| event_id | Yes | Event ID in the selected mailbox. | |
| time_zone | No | Time zone for local event times. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| description | No | Plain text event details. Set null to clear. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring non-read-only, idempotent, non-destructive and open-world, the description still adds real value: that no invitations or reminders are emitted, the required permission scope, the If-Match precondition, and conflict-recovery behavior. It does not cover partial-versus-full replacement semantics for the four optional fields, which is the main behavioral gap.
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 short sentences, each carrying distinct information: the mutation, the permission/etag precondition, and the conflict-recovery rule. The precondition is front-loaded and there is no filler.
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?
An output schema exists and every parameter is documented, so the description needn't cover returns. It covers permissions, notification suppression, and conflict handling, but leaves ambiguous whether omitted optional fields are preserved or cleared on an edit — a meaningful gap for a mutation 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 the schema already documents all eight parameters including If-Match and time_zone. The description only adds the qualifier that If-Match must be the 'reviewed' value; it says nothing about how title, start, duration, description or mailbox_id interact. Baseline 3 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?
States a specific verb and resource ('Edit an event') and immediately adds a distinguishing behavior ('without sending invitations or email reminders'), which separates it from create/send paths. It does not name a sibling tool explicitly, so it falls short of a 5.
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?
Gives concrete preconditions ('Requires calendar.write and the reviewed If-Match value') and a recovery rule ('Reload after a conflict before making another change'), which implies when it can be called. It never contrasts itself with create_calendar_event, get_calendar_event, or delete_calendar_event, so alternative-selection guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_update_draftEdit Saved DraftAInspect
Edit a saved draft without sending it. Requires mailbox.read and mailbox.drafts.write. Pass the reviewed expected_revision; reload after a conflict before making another edit.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Visible copied recipients. | |
| to | No | Primary recipients; at most 50 total across To, Cc and Bcc. | |
| bcc | No | Hidden copied recipients. | |
| from | No | Authorised sender; defaults to this inbox. | |
| draftId | Yes | Stable draft ID. | |
| subject | No | Subject; may be empty. | |
| If-Match | No | Current draft ETag; expected_revision is also required. | |
| reply_to | No | Authorised reply addresses; defaults to this inbox. | |
| html_body | No | HTML body, preserved when saved. | |
| text_body | No | Plain-text body. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| attachments | No | Attachments and inline images. | |
| custom_headers | No | Custom X-* headers. Writes reject X-SES-TENANT, X-SES-CONFIGURATION-SET and X-SES-MESSAGE-TAGS case-insensitively. On updates, omit this field to preserve saved headers, or pass {} to clear them. | |
| expected_revision | Yes | The revision that was reviewed; a stale value returns conflict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses required permissions and optimistic-concurrency behavior, including conflict handling and reload guidance. This adds meaningful operational context for a non-idempotent update tool. It does not explain whether unspecified fields are preserved or cleared, which is a notable remaining behavioral gap.
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 compact sentences with no wasted wording. The core action and the critical concurrency instruction are front-loaded and easy to scan.
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 complex 14-parameter draft update with nested recipients and attachments, the description covers permissions and revision conflicts but leaves update semantics ambiguous. It does not say whether omitted fields preserve existing draft content or clear it, which is important for correct invocation. The presence of a detailed schema and output schema reduces the burden, but the core update-style behavior remains underspecified.
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 in detail. The description reinforces expected_revision semantics and conflict recovery but does not otherwise add parameter-level 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 states a specific verb and resource: editing a saved draft. The clause 'without sending it' clearly distinguishes the tool from send_draft and makes the operation's scope immediately understandable.
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 gives clear usage context: edit a draft, do not send it, and provide the reviewed expected_revision. It also tells the agent to reload after a conflict before retrying. It stops short of explicitly naming create_draft or send_draft as alternatives, but the non-sending boundary is still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_update_identityUpdate Mailbox IdentityAIdempotentInspect
Use this only when the user explicitly asks to change sender identity details. Do not use it for one-off message composition.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Default sender name. Send null or an empty string to clear it. | |
| mailbox_id | No | Mailbox public ID to target when the credential grants access to more than one mailbox. Omit when the credential is scoped to exactly one mailbox. | |
| html_signature | No | HTML signature appended to Mailbox API sends that include html_body. | |
| text_signature | No | Plain text signature appended to Mailbox API sends that include text_body. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety and repeatability profile is covered. The description adds one useful behavioral constraint — the change must be user-initiated — but says nothing about partial-update semantics, whether omitted fields are left untouched, or what the response reports. With annotations present, this is adequate but thin.
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 short sentences, front-loaded with the gating condition, and no filler. It is efficient, though the space saved was not redeployed into saying what the tool actually modifies.
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?
Four optional parameters, full schema coverage, an output schema and annotations mean the surrounding structured data carries much of the load. Still, an agent reading only the description would not know that signatures are what get changed or how this differs from the duplicated non-prefixed sibling, so it is not fully self-sufficient for a mutation 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 every parameter including the null-clears behavior for name and both signatures is already documented in the schema. The description contributes no additional parameter meaning, which makes the baseline 3 correct here.
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 states a specific action and object: change sender identity details. That is clearer than the bare title, but it never says what 'identity details' actually are (sender name, HTML/text signatures), so an agent must open the schema to learn the scope. It also does not distinguish this tool from the near-identical sibling mailbox_update_identity or from mailbox_list_identities / mailbox_get_identity.
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 gives both a positive trigger ('only when the user explicitly asks to change sender identity details') and an explicit exclusion ('do not use it for one-off message composition'). What it omits is the named alternative — e.g., use mailbox_send_message or mailbox_get_sender_choices to pick a one-off sender — so the agent knows what to avoid but not what to call instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_upload_attachmentUpload AttachmentAInspect
Use this before sending a mailbox attachment. For real files set presign_upload_url=true with filename, content_type, and size_bytes, then PUT the file to the returned short-lived URL promptly and send the returned blob_id. Inline content_base64 is a last resort for tiny agent-authored files only and is capped at 32 KiB decoded.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Filename to use when sending the uploaded attachment. | |
| mailbox_id | No | Mailbox public ID when the credential can access more than one mailbox. | |
| size_bytes | No | Exact byte size required when presign_upload_url=true. | |
| content_type | No | MIME type to store with the upload, for example application/pdf. | application/octet-stream |
| content_base64 | No | Last-resort inline base64 for tiny agent-authored files only. Decoded content must be at most 32 KiB; use presign_upload_url for real files. | |
| presign_upload_url | No | When true, return a short-lived signed PUT URL instead of reading bytes. Provide size_bytes and upload with a shell/client promptly. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the presigned-upload workflow, the short-lived URL, the need to PUT promptly, and the requirement to use the returned blob_id when sending. It also states the 32 KiB decoded cap for inline content and explains the intended ordering of operations.
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 compact and front-loaded: it first states the purpose, then explains the preferred presigned workflow, then the inline fallback. Every sentence carries actionable information without repetition.
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 moderate parameter count, full schema coverage, annotations, and available output schema, the description provides enough workflow and constraint detail for an agent to call the tool correctly. The key sequencing and size-limit behaviors are explicitly covered.
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 schema already documents each parameter. The description adds useful meaning by connecting presign_upload_url=true to filename, content_type, and size_bytes, and by clarifying the inline content_base64 fallback and size cap.
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 states a specific action and resource: uploading a mailbox attachment before sending. It clearly describes the two upload modes. However, it does not distinguish this tool from similarly named sibling upload tools such as sending_upload_attachment or qubrics_sending_upload_attachment.
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 gives clear when-to-use guidance: use before sending an attachment, use presigned upload for real files, and use inline base64 only as a last resort for tiny files. It does not explicitly compare this tool against the other attachment-upload siblings, so the alternative-selection guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_mailbox_wait_for_messageWait For MessageARead-onlyIdempotentInspect
Use this to wait briefly for new mail instead of manual polling. It polls for up to 25 seconds, returns a matching message with attachment metadata when found, or a clean no_message result so you can call again.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Optional full-text query to match. | |
| after | No | ISO 8601 lower bound for received_at. Omit to wait for messages received after this call starts. | |
| keyword | No | Optional keyword/label that the message must have, such as $seen. | |
| subject | No | Optional subject text filter. | |
| folder_id | No | Optional folder ID filter. | |
| from_email | No | Optional sender email address or display-name filter. | |
| mailbox_id | No | Mailbox public ID when the credential can access more than one mailbox. | |
| has_attachment | No | When true, wait only for messages with attachments. | |
| timeout_seconds | No | Maximum seconds to wait. Capped at 25 seconds so MCP clients do not hold a tool call open indefinitely. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world, so the safety profile is covered. The description adds real context beyond that: the blocking duration, the two possible outcomes (matching message with attachment metadata vs. 'no_message'), and the implied retry pattern. It does not mention any rate limits or how default filters (e.g., omit 'after') affect the wait window, which the schema only partly covers.
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 purpose and the outcome shapes, with no filler. 'Wait briefly' and 'polls for up to 25 seconds' overlap slightly, and the total duration is stated twice across description and schema, but the redundancy is minor.
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 nine all-optional, fully documented parameters, an output schema handling return values, and annotations covering safety, the description only needs to convey the blocking semantics and the two outcomes. It does that, so an agent knows what to expect and what to do on an empty result.
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 each of the nine parameters already has documented meaning, including the 'after' default and the 25-second cap. The description adds no filter-specific guidance (e.g., how combining 'q', 'subject', and 'keyword' behaves), so it stays at 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?
The description names a specific verb and resource ('wait briefly for new mail') and states the mechanism (polling up to 25 seconds), so an agent can distinguish it from plain read tools like mailbox_list_messages. It stops short of naming any sibling tool explicitly, so it is clear but not fully differentiated.
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 gives positive usage context ('instead of manual polling') and explains the follow-up loop after a 'no_message' result ('so you can call again'). It does not state when NOT to use it (e.g., prefer a direct read when the message already exists), so exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_sending_create_attachment_uploadCreate Attachment UploadAInspect
Use this when a remote or shell-capable agent needs a short-lived upload URL for an outbound Sending API attachment. Provide filename, content_type, and exact size_bytes, PUT the file bytes outside model context with the returned headers, then pass the returned attachment_id to sending_send_email.
| Name | Required | Description | Default |
|---|---|---|---|
| sha256 | No | Optional SHA-256 hex digest for the upload bytes. | |
| filename | Yes | Filename to associate with the uploaded attachment. | |
| size_bytes | Yes | Exact byte size that will be uploaded. | |
| content_type | No | MIME type expected for the upload. | |
| Idempotency-Key | No | Optional client-generated key to make the request idempotent for 24 hours. Replays under the same key return the cached response; a reused key with a different body returns 409 idempotency_conflict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses the two-phase contract: the tool returns a URL plus headers, the bytes are PUT outside model context, and the resulting attachment_id must be carried into sending_send_email. It does not state how long the URL stays valid or what happens if size_bytes or content_type disagree with the actual upload, which are the main failure modes for a short-lived URL.
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 usage condition, then the ordered call sequence. Every clause carries operational information with no restatement of the title or name.
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 signed-URL minting tool with an output schema, the description covers the input contract, the out-of-band upload step, and the handoff to sending_send_email. Missing only expiry and mismatch-handling detail, which are secondary 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 five parameters are already documented, and the description only echoes the filename/content_type/size_bytes triple with an emphasis on 'exact' size. It adds no guidance on the optional sha256 or Idempotency-Key fields, so the 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?
States a specific verb and resource: it mints a short-lived upload URL for an outbound Sending API attachment, which clearly separates it from the mailbox-side attachment tools. It is slightly weaker against its closest sibling, qubrics_sending_upload_attachment, since it never says which of the two an agent should reach for.
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 opening clause 'Use this when a remote or shell-capable agent needs a short-lived upload URL' gives a concrete triggering condition, and the closing clause routes the agent forward to sending_send_email. It omits any exclusion or comparison against the direct-upload siblings, so the agent must still infer when this two-step flow is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_sending_get_attachmentGet Attachment MetadataARead-onlyIdempotentInspect
Use this to inspect a temporary Sending attachment_id before sending. It returns metadata only, not file bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| attachment_id | Yes | Temporary attachment ID returned by an upload endpoint. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds the crucial behavioral fact that no file content is returned, which is exactly the ambiguity an agent would otherwise have for an 'attachment' tool.
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, zero padding, with the purpose and the key caveat both 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?
An output schema exists so return values need no explanation, and only one required parameter exists. Complete for a simple read, though naming the sibling that fetches actual file content would close the last gap.
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 attachment_id parameter is already documented with its pattern and origin in the upload endpoint. The description only restates that it is a temporary Sending attachment_id, adding little 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?
States a specific verb (inspect) and resource (temporary Sending attachment_id) and scopes it to pre-send validation. 'Metadata only, not file bytes' implicitly separates it from mailbox_get_attachment and mailbox_read_attachment, though those siblings are never named.
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?
'Before sending' gives a clear usage moment, but there is no explicit when-not guidance and no routing to alternatives such as read_attachment for actual bytes or the upload endpoints that produce the ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_sending_get_connectionGet Sending ConnectionARead-onlyIdempotentInspect
Validate the current Sending credential and read its team, connection label and permissions. Requires email.send. This does not send email or check credits or provider readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| If-None-Match | No | Weak ETag from a previous response. When it matches the current resource, the server returns 304 Not Modified with no body. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real value on top: the required email.send scope is an auth requirement not present in structured fields, and the explicit non-goals prevent the agent from assuming credit or provider-readiness checks. It says nothing about live-call cost, latency, or the conditional-request behavior, but the essential behavioral profile 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?
Three short sentences, front-loaded with the action, then the permission requirement, then the exclusions. Every sentence carries distinct information with no repetition of the name or title.
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?
An output schema exists, so return values need no prose, and the description still previews the payload (team, label, permissions). With zero required parameters and one documented optional header, nothing an agent needs in order to call this correctly is missing.
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% and the single optional If-None-Match parameter is fully documented in the schema itself, so the description owes nothing there. It adds no additional parameter meaning, which is the baseline 3 case when the schema does the work.
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?
Names a specific verb pair (validate/read) and a specific resource (the Sending credential plus its team, connection label, and permissions), so the agent knows exactly what comes back. The closing negation separates it from sending_send_email and other siblings that might be confused with it.
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?
States a concrete prerequisite (requires email.send) and explicit exclusions: it does not send email, check credits, or check provider readiness. It stops short of naming the sibling tool to use for those purposes, so the agent must still infer the alternative, which keeps it out of the 5 tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_sending_send_emailSend EmailAInspect
Use this to send one outbound email through the sending API. For attachments, call sending_upload_attachment first for local/tiny content or sending_create_attachment_upload for delegated file PUTs, then pass attachments as attachment_id refs. Inline base64 is only for tiny generated content. Include an Idempotency-Key so retries do not create duplicate sends.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients (subject to 50 total To, CC, and BCC recipients) | |
| to | Yes | Primary recipient | |
| bcc | No | BCC recipients (subject to 50 total To, CC, and BCC recipients) | |
| from | Yes | Sender address | |
| subject | Yes | Email subject line (max 998 chars, RFC 5322) | |
| reply_to | No | Reply-To address | |
| html_body | Yes | HTML email content (max 25MB) | |
| text_body | No | Plain text alternative (max 25MB) | |
| attachments | No | File attachments (max 10). Use attachment_id refs for uploaded files. | |
| return_path | No | Envelope sender for VERP support | |
| custom_headers | No | Custom X-* headers to include in the email | |
| delivery_group | No | One delivery group public ID or a non-empty array of up to 50 IDs | |
| Idempotency-Key | No | Optional client-generated key to make the request idempotent for 24 hours. Replays under the same key return the cached response; a reused key with a different body returns 409 idempotency_conflict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare openWorldHint=true and idempotentHint=false, so the description earns credit for explaining how to mitigate that non-idempotency by supplying an Idempotency-Key so retries do not duplicate sends. It also discloses the prerequisite ordering for attachments, which is behavioral context not present in the schema. It says nothing about sender verification, rate limits, or quotas.
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, front-loaded with the core action, then the attachment prerequisite, then the idempotency advice. There is no filler and each sentence carries actionable 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?
For a 13-parameter mutation tool with an output schema, the description covers the two things an agent could most plausibly get wrong: attachment sourcing and duplicate sends on retry. Numeric limits such as 10 attachments and 50 total recipients are left to the schema, which is acceptable given full coverage there.
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 explains every parameter, making 3 the baseline. The description adds a little meaning on top by advising that attachments be passed as attachment_id refs rather than inline base64 except for tiny generated content, but it repeats rather than extends the Idempotency-Key semantics already documented 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 opening sentence names a specific verb and resource ('send one outbound email through the sending API') and the word 'one' implicitly separates it from qubrics_sending_send_email_batch. It does not, however, explicitly distinguish this from mailbox_send_message, so the sibling differentiation is only partial.
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 gives concrete routing guidance for the attachment sub-workflow: use qubrics_sending_upload_attachment for local/tiny content, qubrics_sending_create_attachment_upload for delegated PUTs, and inline base64 only for tiny generated content. It stops short of saying when to prefer this tool over mailbox_send_message or the batch variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_sending_send_email_batchSend Email BatchAInspect
Use this to send multiple outbound emails in one request. For attachments, prefer uploaded attachment_id refs; avoid inline base64 except for tiny generated content. Use it only when the user confirms every recipient and message.
| Name | Required | Description | Default |
|---|---|---|---|
| messages | Yes | Array of email messages to send (max 100) | |
| Idempotency-Key | No | Optional client-generated key to make the request idempotent for 24 hours. Replays under the same key return the cached response; a reused key with a different body returns 409 idempotency_conflict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, open-world operation, and the description adds a useful confirmation gate. However, it says nothing about what happens on partial failure across up to 100 messages, nor about the Idempotency-Key replay/409 behavior that the schema exposes -- the two things an agent most needs to know before firing a batch send. 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?
Three short sentences, front-loaded with the core action, then constraints. No filler, though the attachment sentence could be tightened slightly and the confirmation rule might read better before the attachment advice.
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?
An output schema exists so return values need not be described, and the schema itself documents limits (100 messages, 50 recipients, 10 attachments). Still, for a high-stakes open-world batch mutation the description omits batch-level semantics such as atomicity/partial failure and rate or size ceilings, leaving gaps an agent cannot close from annotations alone.
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, and the description earns an extra point by adding a genuine preference beyond the schema: use uploaded attachment_id refs and avoid inline base64 except for tiny generated content. That is decision-relevant guidance the anyOf in the schema does not convey.
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?
States a specific verb and resource with scope: 'send multiple outbound emails in one request'. The batch nature distinguishes it in spirit from sending_send_email / mailbox_send_message, but the description never names the single-send sibling, so the differentiation is implicit rather than explicit.
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?
Gives a clear precondition ('only when the user confirms every recipient and message') and attachment-routing guidance (prefer attachment_id over inline base64). It does not state when to fall back to the single-message send tool, which is the most likely alternative an agent would weigh.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qubrics_sending_upload_attachmentUpload AttachmentAInspect
Use this before sending a Sending API attachment. For real files use sending_create_attachment_upload and PUT the file outside model context. Inline content_base64 is a last resort for tiny agent-authored files only and is capped at 32 KiB decoded.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Filename to use when sending the uploaded attachment. | |
| content_type | No | MIME type to store with the upload, for example application/pdf. | application/octet-stream |
| content_base64 | No | Last-resort inline base64 for tiny agent-authored files only. Decoded content must be at most 32 KiB; use a presigned upload for real files. | |
| idempotency_key | No | Optional Idempotency-Key for safely retrying the upload. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/open-world/non-idempotent profile, so the lower bar applies; the description adds the genuinely useful behavioral constraint that inline content is capped at 32 KiB decoded and discouraged entirely. It does not mention upload lifetime, expiry, or what happens if the upload is never consumed by a send, which would round out the mutation picture.
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 short sentences, front-loaded with the routing decision and then the constraint, with zero redundant restatement of the tool name or schema fields.
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, return values need no explanation, and the description covers the routing and size-limit decisions an agent must make before calling. The one gap is what to do with the resulting upload reference when composing the subsequent send, which the agent must infer.
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 earns an increment by steering parameter choice rather than just restating it, telling the agent to avoid content_base64 for real files and use a different presigned-upload path instead. filename, content_type, and idempotency_key get no added meaning, but their schema entries are already complete.
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 establishes that this tool prepares an attachment for the Sending API and explicitly names the sibling it is not for real files (sending_create_attachment_upload). What it actually produces (an upload record to reference later) is only implied by 'Use this before sending,' so it falls just short of a crisp verb+resource statement.
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 gives explicit when-to-use (before sending an attachment), a named alternative with the condition that selects it (real files → sending_create_attachment_upload with an out-of-band PUT), and a bounded fallback (inline base64 only for tiny agent-authored files, 32 KiB decoded). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sending_create_attachment_uploadCreate Attachment UploadAInspect
Use this when a remote or shell-capable agent needs a short-lived upload URL for an outbound Sending API attachment. Provide filename, content_type, and exact size_bytes, PUT the file bytes outside model context with the returned headers, then pass the returned attachment_id to sending_send_email.
| Name | Required | Description | Default |
|---|---|---|---|
| sha256 | No | Optional SHA-256 hex digest for the upload bytes. | |
| filename | Yes | Filename to associate with the uploaded attachment. | |
| size_bytes | Yes | Exact byte size that will be uploaded. | |
| content_type | No | MIME type expected for the upload. | |
| Idempotency-Key | No | Optional client-generated key to make the request idempotent for 24 hours. Replays under the same key return the cached response; a reused key with a different body returns 409 idempotency_conflict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=true. The description adds real behavioral context beyond those: the URL is short-lived, the actual byte transfer must happen outside model context using returned headers, and the call yields an attachment_id rather than a completed upload. It stops short of stating the URL's TTL or whether an expired URL can be recreated, which would have made this a 5.
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?
A single front-loaded sentence starting with the selection condition, then the required inputs, then the operational step, then the handoff target. Every clause carries information and nothing is repeated.
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, a full schema, and an output schema present, the description needs to explain the two-phase flow and the handoff, which it does. The only gaps are edge behavior the caller might need: what happens when the short-lived URL expires and whether sha256 is validated at creation time or at upload time.
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 filename, content_type, size_bytes, sha256, and Idempotency-Key thoroughly. The description only echoes the parameter names and stresses that size_bytes must be exact, adding marginal meaning. This is the expected baseline when the schema does the heavy lifting.
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 states a specific verb and resource ('short-lived upload URL for an outbound Sending API attachment') and scopes it to a caller type ('remote or shell-capable agent'), which implicitly separates it from the sibling sending_upload_attachment that takes bytes inline. An agent can tell which of the two upload paths applies without opening either schema.
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 gives an explicit when-to-use condition (remote or shell-capable agent, out-of-context bytes), the required preconditions (filename, content_type, exact size_bytes), the operational step (PUT outside model context with returned headers), and the downstream handoff ('pass the returned attachment_id to sending_send_email'). That is a complete routing story rather than a vague hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sending_get_attachmentGet Attachment MetadataARead-onlyIdempotentInspect
Use this to inspect a temporary Sending attachment_id before sending. It returns metadata only, not file bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| attachment_id | Yes | Temporary attachment ID returned by an upload endpoint. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it returns metadata only, not file bytes, and operates on a temporary attachment, which helps set agent expectations.
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 no filler. It front-loads the usage directive and immediately states the return behavior, making the tool's core purpose and limitation immediately visible.
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 one-parameter tool with an output schema and full annotation coverage, the description provides all necessary context: what it does, when to use it, and what it returns. Nothing an agent needs to call it correctly is missing.
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 schema already fully describes attachment_id as a temporary upload ID. The description reinforces 'temporary' and 'Sending' context, but adds little semantic value beyond what the schema provides, staying at the baseline for high schema coverage.
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 ('inspect a temporary Sending attachment_id'), the resource, and the timing ('before sending'). It also explicitly distinguishes the output as 'metadata only, not file bytes', differentiating it from attachment-reading 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 phrase 'before sending' provides clear contextual timing for when this tool is appropriate, implying use after upload and before send. It does not explicitly name sibling alternatives or exclusions, but the context is unambiguous enough for simple tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sending_get_connectionGet Sending ConnectionARead-onlyIdempotentInspect
Validate the current Sending credential and read its team, connection label and permissions. Requires email.send. This does not send email or check credits or provider readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| If-None-Match | No | Weak ETag from a previous response. When it matches the current resource, the server returns 304 Not Modified with no body. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the authorization requirement (email.send) and the boundary exclusions (does not send email or check credits/provider readiness), which are valuable behavioral details not captured in annotations. 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: the first states the primary action and output, the second adds the permission requirement and explicitly lists what the tool does not do. Every sentence carries meaning, and the most important information is front-loaded. No redundancy or fluff.
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 optional parameter, no required params) and the presence of an output schema (which would describe the returned team, connection label, and permissions), the description is sufficiently complete. It covers purpose, permission, and exclusions. The only minor gap is not describing the behavior when the credential is invalid, but that is likely covered by the output 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% because the only parameter, If-None-Match, has a description explaining its purpose (weak ETag, 304 response). The tool description adds no additional parameter details, but since the schema already fully documents it, the baseline of 3 is appropriate. The description could have noted how the ETag affects the response, but it is not required.
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 validates the Sending credential and reads its team, connection label, and permissions. It uses specific verbs (validate, read) and names the resource. It also explicitly distinguishes itself by noting it does not send email or check credits/provider readiness, which separates it from sibling sending 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 states the prerequisite of email.send permission and clarifies what the tool does not do (send email, check credits, provider readiness), implicitly guiding the agent away from using it for those purposes. However, it does not explicitly name alternative tools like sending_send_email or mailbox_get_connection, leaving some inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sending_send_emailSend EmailAInspect
Use this to send one outbound email through the sending API. For attachments, call sending_upload_attachment first for local/tiny content or sending_create_attachment_upload for delegated file PUTs, then pass attachments as attachment_id refs. Inline base64 is only for tiny generated content. Include an Idempotency-Key so retries do not create duplicate sends.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients (subject to 50 total To, CC, and BCC recipients) | |
| to | Yes | Primary recipient | |
| bcc | No | BCC recipients (subject to 50 total To, CC, and BCC recipients) | |
| from | Yes | Sender address | |
| subject | Yes | Email subject line (max 998 chars, RFC 5322) | |
| reply_to | No | Reply-To address | |
| html_body | Yes | HTML email content (max 25MB) | |
| text_body | No | Plain text alternative (max 25MB) | |
| attachments | No | File attachments (max 10). Use attachment_id refs for uploaded files. | |
| return_path | No | Envelope sender for VERP support | |
| custom_headers | No | Custom X-* headers to include in the email | |
| delivery_group | No | One delivery group public ID or a non-empty array of up to 50 IDs | |
| Idempotency-Key | No | Optional client-generated key to make the request idempotent for 24 hours. Replays under the same key return the cached response; a reused key with a different body returns 409 idempotency_conflict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and idempotentHint=false, so the write/non-idempotent nature is covered. The description adds useful context: attachments must be uploaded first, inline base64 is only for tiny content, and an Idempotency-Key prevents duplicate sends on retry. 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?
Three tight sentences: purpose first, attachment routing second, idempotency guidance third. Every sentence earns its place and there is no filler or repetition of schema 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?
For a 13-parameter tool with nested objects and an output schema, the description covers the core flow and the two riskiest operational areas: attachments and duplicate sends. The only notable gap is that batch-vs-single-send selection is implied by the word 'one' rather than stated explicitly.
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 baseline is 3. The description adds value beyond the schema by prescribing the attachment_id workflow and adding the 'inline base64 is only for tiny generated content' constraint, which is not encoded 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 states a specific verb and resource: 'send one outbound email through the sending API.' The word 'one' helps distinguish it from the sibling sending_send_email_batch, and the phrase 'through the sending API' separates it from mailbox-related send 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 explicitly routes attachment workflows to sending_upload_attachment and sending_create_attachment_upload, and it gives a clear condition for when inline base64 is acceptable. It does not explicitly tell the agent when to prefer sending_send_email_batch over this single-send tool, so that sibling distinction is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sending_send_email_batchSend Email BatchAInspect
Use this to send multiple outbound emails in one request. For attachments, prefer uploaded attachment_id refs; avoid inline base64 except for tiny generated content. Use it only when the user confirms every recipient and message.
| Name | Required | Description | Default |
|---|---|---|---|
| messages | Yes | Array of email messages to send (max 100) | |
| Idempotency-Key | No | Optional client-generated key to make the request idempotent for 24 hours. Replays under the same key return the cached response; a reused key with a different body returns 409 idempotency_conflict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, openWorldHint=true), the description adds a safety gate requiring user confirmation of every recipient and message. It also advises against inline base64 attachments except for tiny generated content, which is useful behavioral context. It doesn't disclose partial-send or failure behavior, but the description meaningfully supplements the minimal 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?
Three sentences with no redundancy: the primary purpose is front-loaded, followed by a concise attachment tip and a safety condition. Every sentence contributes actionable information, and the structure is optimal for quick agent comprehension.
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 (a messages array with many subfields), the description combined with 100% schema coverage and an output schema is largely complete. It lacks an explicit comparison to the single-send sibling and doesn't mention batch size limits, but these are recoverable from the schema (max 100) and the tool name. The main gap is the absence of an explicit alternative, so 4 is appropriate.
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 specific parameter guidance by preferring uploaded attachment_id refs and discouraging inline base64 except for tiny generated content. This directly informs how to populate the attachments parameter, which is beyond the schema's generic 'Use attachment_id refs for uploaded files' note.
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 states a specific action: 'send multiple outbound emails in one request.' This clearly distinguishes the tool from the sibling sending_send_email by emphasizing 'multiple' and 'in one request.' The resource (emails) and operation (sending) are 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 gives a clear prerequisite: 'Use it only when the user confirms every recipient and message.' It also implies this tool is for batch sending rather than single sends, though it doesn't explicitly name sending_send_email as the alternative. The attachment guidance offers practical context for when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sending_upload_attachmentUpload AttachmentAInspect
Use this before sending a Sending API attachment. For real files use sending_create_attachment_upload and PUT the file outside model context. Inline content_base64 is a last resort for tiny agent-authored files only and is capped at 32 KiB decoded.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Filename to use when sending the uploaded attachment. | |
| content_type | No | MIME type to store with the upload, for example application/pdf. | application/octet-stream |
| content_base64 | No | Last-resort inline base64 for tiny agent-authored files only. Decoded content must be at most 32 KiB; use a presigned upload for real files. | |
| idempotency_key | No | Optional Idempotency-Key for safely retrying the upload. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutation and non-idempotency. The description adds meaningful constraints: the 32 KiB decoded cap, the 'last resort' status of inline base64, and the directive to keep real files outside model context. It does not fully explain what happens when content_base64 is null or what resource is created, but the output schema may cover return details.
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 sentences with no filler; the critical usage constraint is front-loaded and the alternative is named explicitly. The first sentence could be more action-oriented, but the structure is efficient and every sentence contributes.
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 output schema likely covers return values, so the description needn't detail them. However, the relationship between this tool and sending_create_attachment_upload is only partially specified: it is unclear whether calling this tool alone with content_base64 null produces a usable attachment or whether an additional staging step is required. For a 4-parameter tool, this is adequate but leaves a workflow gap.
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 baseline is 3. The tool description mainly restates what content_base64's schema description already says (32 KiB cap, last resort, presigned upload for real files), and it adds no new meaning for filename, content_type, or idempotency_key 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 positions the tool as a pre-send step for Sending API attachments and distinguishes it from sending_create_attachment_upload, but it never directly states the operation's core effect (e.g., 'uploads/registers an attachment'). The title and name compensate partially, so this is clear but not maximally explicit.
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 explicit when-to-use guidance: use before sending a Sending API attachment. It also tells the agent to use sending_create_attachment_upload and PUT the file outside model context for real files, and restricts inline content_base64 to a last resort for tiny agent-authored files. This is strong routing among siblings.
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.
86 tool updates
v1.0.17- Changed
mailbox_batch_get_messages1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "messages": { - "items": { - "additionalProperties": false, - "properties": { - "content": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata only. Attachment contents are not parsed by this endpoint.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "body": { - "additionalProperties": false, - "properties": { - "extracted_links": { - "items": { - "type": "string" - }, - "type": "array" - }, - "format": { - "enum": [ - "text", - "html" - ], - "type": [ - "string", - "null" - ] - }, - "html": { - "description": "HTML body when requested. Returned as a JSON string and not as rendered content.", - "type": [ - "string", - "null" - ] - }, - "is_truncated": { - "type": "boolean" - }, - "quotes_stripped": { - "type": "boolean" - }, - "signature_stripped": { - "type": "boolean" - }, - "text": { - "type": [ - "string", - "null" - ] - }, - "truncated_at_chars": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "format", - "text", - "html", - "is_truncated", - "truncated_at_chars", - "signature_stripped", - "quotes_stripped", - "extracted_links" - ], - "type": "object" - }, - "dates": { - "additionalProperties": false, - "properties": { - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "received_at", - "sent_at" - ], - "type": "object" - }, - "headers": { - "additionalProperties": false, - "properties": { - "full": { - "items": { - "additionalProperties": false, - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": [ - "name", - "value" - ], - "type": "object" - }, - "type": [ - "array", - "null" - ] - }, - "mode": { - "enum": [ - "none", - "selected", - "full" - ], - "type": "string" - }, - "selected": { - "properties": { - "in_reply_to": { - "type": [ - "string", - "null" - ] - }, - "message_id": { - "items": { - "type": "string" - }, - "type": "array" - }, - "references": { - "items": { - "type": "string" - }, - "type": "array" - }, - "reply_to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "message_id", - "in_reply_to", - "references", - "reply_to" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [ - "mode", - "selected", - "full" - ], - "type": "object" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "participants": { - "additionalProperties": false, - "properties": { - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "from": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "reply_to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "from", - "to", - "cc", - "bcc", - "reply_to" - ], - "type": "object" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - }, - "option_hash": { - "type": "string" - } - }, - "required": [ - "email_state", - "option_hash" - ], - "type": "object" - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "thread_id", - "subject", - "participants", - "dates", - "body", - "headers", - "attachments", - "states" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "message": { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - "raw_body": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "body": { - "additionalProperties": false, - "properties": { - "html": { - "type": [ - "string", - "null" - ] - }, - "is_truncated": { - "type": "boolean" - }, - "text": { - "type": [ - "string", - "null" - ] - }, - "truncated_at_chars": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "text", - "html", - "is_truncated", - "truncated_at_chars" - ], - "type": "object" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "part": { - "enum": [ - "text", - "html", - "both" - ], - "type": "string" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email_state" - ], - "type": "object" - }, - "thread_id": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "thread_id", - "part", - "body", - "states" - ], - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "message", - "raw_body", - "content" - ], - "type": "object" - }, - "type": "array" - }, - "not_found": { - "items": { - "type": "string" - }, - "type": "array" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email_state" - ], - "type": "object" - } - }, - "required": [ - "messages", - "not_found", - "states" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "messages": { + "items": { + "additionalProperties": false, + "properties": { + "content": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata only. Attachment contents are not parsed by this endpoint.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": false, + "properties": { + "cleaned_html": { + "description": "HTML with recognised quotes and signatures removed according to the stripping options. Original HTML remains in html. This is not sanitised content. Null when HTML is absent, not requested, truncated, or exceeds cleaning limits.", + "type": [ + "string", + "null" + ] + }, + "extracted_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "format": { + "enum": [ + "text", + "html" + ], + "type": [ + "string", + "null" + ] + }, + "html": { + "description": "HTML body when requested. Returned as a JSON string and not as rendered content.", + "type": [ + "string", + "null" + ] + }, + "html_cleaning": { + "additionalProperties": false, + "description": "HTML cleaning outcome; null when HTML is absent or not requested. Cleaning accepts at most 20,000 elements and 128 nested elements. Unrecognised quote and signature formats remain unchanged.", + "properties": { + "quotes_stripped": { + "type": "boolean" + }, + "signature_stripped": { + "type": "boolean" + }, + "status": { + "enum": [ + "complete", + "source_truncated", + "limit_exceeded" + ], + "type": "string" + } + }, + "required": [ + "status", + "signature_stripped", + "quotes_stripped" + ], + "type": [ + "object", + "null" + ] + }, + "is_truncated": { + "type": "boolean" + }, + "quotes_stripped": { + "type": "boolean" + }, + "signature_stripped": { + "type": "boolean" + }, + "text": { + "type": [ + "string", + "null" + ] + }, + "truncated_at_chars": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "format", + "text", + "html", + "cleaned_html", + "html_cleaning", + "is_truncated", + "truncated_at_chars", + "signature_stripped", + "quotes_stripped", + "extracted_links" + ], + "type": "object" + }, + "dates": { + "additionalProperties": false, + "properties": { + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "received_at", + "sent_at" + ], + "type": "object" + }, + "headers": { + "additionalProperties": false, + "properties": { + "full": { + "items": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "mode": { + "enum": [ + "none", + "selected", + "full" + ], + "type": "string" + }, + "selected": { + "properties": { + "in_reply_to": { + "type": [ + "string", + "null" + ] + }, + "message_id": { + "items": { + "type": "string" + }, + "type": "array" + }, + "references": { + "items": { + "type": "string" + }, + "type": "array" + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "message_id", + "in_reply_to", + "references", + "reply_to" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "mode", + "selected", + "full" + ], + "type": "object" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "participants": { + "additionalProperties": false, + "properties": { + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "from", + "to", + "cc", + "bcc", + "reply_to" + ], + "type": "object" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "option_hash": { + "type": "string" + } + }, + "required": [ + "email_state", + "option_hash" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "thread_id", + "subject", + "participants", + "dates", + "body", + "headers", + "attachments", + "states" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "message": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + "raw_body": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "body": { + "additionalProperties": false, + "properties": { + "html": { + "type": [ + "string", + "null" + ] + }, + "is_truncated": { + "type": "boolean" + }, + "text": { + "type": [ + "string", + "null" + ] + }, + "truncated_at_chars": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "text", + "html", + "is_truncated", + "truncated_at_chars" + ], + "type": "object" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "part": { + "enum": [ + "text", + "html", + "both" + ], + "type": "string" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email_state" + ], + "type": "object" + }, + "thread_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "thread_id", + "part", + "body", + "states" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "message", + "raw_body", + "content" + ], + "type": "object" + }, + "type": "array" + }, + "not_found": { + "items": { + "type": "string" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email_state" + ], + "type": "object" + } + }, + "required": [ + "messages", + "not_found", + "states" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Added
mailbox_control_draft_schedule - Added
mailbox_create_calendar - Added
mailbox_create_calendar_event - Added
mailbox_create_draft - Added
mailbox_delete_calendar - Added
mailbox_delete_calendar_event - Added
mailbox_delete_draft - Changed
mailbox_get_attachment1 field changed- changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - } - }, - "type": "object" - }, - "ok": { - "const": true - } - }, - "required": [ - "ok", - "data" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "doc_url": { - "type": "string" - }, - "errors": { - "items": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "required": [ - "field", - "code", - "message" - ], - "type": "object" - }, - "type": "array" - }, - "message": { - "type": "string" - }, - "param": { - "type": "string" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - } - }, - "type": "object" - }, - "ok": { - "const": false - } - }, - "required": [ - "ok", - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": true + } + }, + "required": [ + "ok", + "data" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "doc_url": { + "type": "string" + }, + "errors": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "field", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "param": { + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": false + } + }, + "required": [ + "ok", + "error" + ], + "type": "object" + } +]
- Added
mailbox_get_attachment_text - Added
mailbox_get_calendar - Added
mailbox_get_calendar_event - Added
mailbox_get_calendar_event_changes - Added
mailbox_get_draft - Changed
mailbox_get_message1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "html_body": { - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "in_reply_to": { - "description": "`In-Reply-To` header values, with the surrounding angle brackets removed — the message this one replies to. Empty when the message is not a reply.", - "example": [ - "20260918.0009@example.com" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "message_id": { - "description": "`Message-ID` header values for this message, with the surrounding angle brackets removed. Empty when the message carries no `Message-ID`.", - "example": [ - "20260919.0001@example.com" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "references": { - "description": "`References` header values, with the surrounding angle brackets removed — the ancestor chain of this message, oldest first. Empty when the message starts a conversation.", - "example": [ - "20260917.0001@example.com", - "20260918.0009@example.com" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "reply_to": { - "description": "`Reply-To` addresses. Address replies here rather than to `from` whenever this is non-empty. Empty when the message carries no `Reply-To`.", - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "text_body": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags", - "text_body", - "html_body", - "message_id", - "in_reply_to", - "references", - "reply_to" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "html_body": { + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "in_reply_to": { + "description": "`In-Reply-To` header values, with the surrounding angle brackets removed — the message this one replies to. Empty when the message is not a reply.", + "example": [ + "20260918.0009@example.com" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "message_id": { + "description": "`Message-ID` header values for this message, with the surrounding angle brackets removed. Empty when the message carries no `Message-ID`.", + "example": [ + "20260919.0001@example.com" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "references": { + "description": "`References` header values, with the surrounding angle brackets removed — the ancestor chain of this message, oldest first. Empty when the message starts a conversation.", + "example": [ + "20260917.0001@example.com", + "20260918.0009@example.com" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "reply_to": { + "description": "`Reply-To` addresses. Address replies here rather than to `from` whenever this is non-empty. Empty when the message carries no `Reply-To`.", + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "text_body": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags", + "text_body", + "html_body", + "message_id", + "in_reply_to", + "references", + "reply_to" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Added
mailbox_get_sender_choices - Changed
mailbox_get_session1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "capabilities": { - "additionalProperties": false, - "properties": { - "attachments": { - "additionalProperties": false, - "properties": { - "download": { - "type": "boolean" - }, - "metadata": { - "type": "boolean" - }, - "parsing": { - "type": "boolean" - }, - "range_download": { - "type": "boolean" - }, - "send_with_uploaded_blob": { - "type": "boolean" - }, - "upload": { - "type": "boolean" - } - }, - "required": [ - "upload", - "download", - "range_download", - "metadata", - "parsing", - "send_with_uploaded_blob" - ], - "type": "object" - }, - "folders": { - "additionalProperties": false, - "properties": { - "changes": { - "type": "boolean" - }, - "create": { - "type": "boolean" - }, - "delete": { - "type": "boolean" - }, - "detail": { - "type": "boolean" - }, - "list": { - "type": "boolean" - }, - "query_changes": { - "type": "boolean" - }, - "update": { - "type": "boolean" - } - }, - "required": [ - "list", - "detail", - "create", - "update", - "delete", - "changes", - "query_changes" - ], - "type": "object" - }, - "identities": { - "additionalProperties": false, - "properties": { - "changes": { - "type": "boolean" - }, - "create": { - "type": "boolean" - }, - "delete": { - "type": "boolean" - }, - "list": { - "type": "boolean" - }, - "update": { - "type": "boolean" - } - }, - "required": [ - "list", - "changes", - "create", - "update", - "delete" - ], - "type": "object" - }, - "messages": { - "additionalProperties": false, - "properties": { - "batch_get": { - "type": "boolean" - }, - "batch_update": { - "type": "boolean" - }, - "changes": { - "type": "boolean" - }, - "clean_content": { - "type": "boolean" - }, - "count": { - "type": "boolean" - }, - "delete": { - "type": "boolean" - }, - "detail": { - "type": "boolean" - }, - "keywords": { - "type": "boolean" - }, - "list": { - "type": "boolean" - }, - "permanent_delete": { - "type": "boolean" - }, - "query_changes": { - "type": "boolean" - }, - "raw_body": { - "type": "boolean" - }, - "search_snippets": { - "type": "boolean" - }, - "update_fields": { - "items": { - "enum": [ - "seen", - "flagged", - "keywords" - ], - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "list", - "detail", - "raw_body", - "clean_content", - "batch_get", - "count", - "search_snippets", - "changes", - "query_changes", - "update_fields", - "keywords", - "batch_update", - "delete", - "permanent_delete" - ], - "type": "object" - }, - "quotas": { - "additionalProperties": false, - "properties": { - "changes": { - "type": "boolean" - }, - "list": { - "type": "boolean" - }, - "update": { - "type": "boolean" - }, - "usage": { - "type": "boolean" - } - }, - "required": [ - "list", - "usage", - "changes", - "update" - ], - "type": "object" - }, - "submissions": { - "additionalProperties": false, - "properties": { - "changes": { - "type": "boolean" - }, - "detail": { - "type": "boolean" - }, - "list": { - "type": "boolean" - }, - "send": { - "type": "boolean" - } - }, - "required": [ - "list", - "detail", - "changes", - "send" - ], - "type": "object" - }, - "sync": { - "additionalProperties": false, - "properties": { - "query_changes": { - "items": { - "enum": [ - "messages", - "folders" - ], - "type": "string" - }, - "type": "array" - }, - "typed_changes": { - "type": "boolean" - }, - "types": { - "items": { - "enum": [ - "messages", - "folders", - "threads", - "submissions", - "identities", - "quotas" - ], - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "typed_changes", - "types", - "query_changes" - ], - "type": "object" - }, - "threads": { - "additionalProperties": false, - "properties": { - "changes": { - "type": "boolean" - }, - "clean_content": { - "type": "boolean" - }, - "detail": { - "type": "boolean" - }, - "list": { - "type": "boolean" - }, - "messages": { - "type": "boolean" - } - }, - "required": [ - "list", - "detail", - "messages", - "clean_content", - "changes" - ], - "type": "object" - } - }, - "required": [ - "messages", - "threads", - "folders", - "submissions", - "identities", - "quotas", - "attachments", - "sync" - ], - "type": "object" - }, - "endpoints": { - "additionalProperties": false, - "properties": { - "folders": { - "items": { - "type": "string" - }, - "type": "array" - }, - "mailbox": { - "items": { - "type": "string" - }, - "type": "array" - }, - "messages": { - "items": { - "type": "string" - }, - "type": "array" - }, - "submissions": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sync": { - "items": { - "type": "string" - }, - "type": "array" - }, - "threads": { - "items": { - "type": "string" - }, - "type": "array" - }, - "usage": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "mailbox", - "messages", - "threads", - "folders", - "submissions", - "usage", - "sync" - ], - "type": "object" - }, - "gated": { - "additionalProperties": false, - "description": "Flags are true when a feature is intentionally unavailable through the mailbox API.", - "properties": { - "attachment_parsing": { - "type": "boolean" - }, - "blob_copy": { - "type": "boolean" - }, - "blob_lookup": { - "type": "boolean" - }, - "events": { - "type": "boolean" - }, - "filter_script_writes": { - "type": "boolean" - }, - "identity_mutation": { - "type": "boolean" - }, - "message_copy": { - "type": "boolean" - }, - "message_import": { - "type": "boolean" - }, - "message_parse": { - "type": "boolean" - }, - "quota_mutation": { - "type": "boolean" - }, - "raw_protocol": { - "type": "boolean" - }, - "vacation_response": { - "type": "boolean" - } - }, - "required": [ - "identity_mutation", - "quota_mutation", - "vacation_response", - "filter_script_writes", - "events", - "raw_protocol", - "attachment_parsing", - "message_copy", - "message_import", - "message_parse", - "blob_lookup", - "blob_copy" - ], - "type": "object" - }, - "limits": { - "additionalProperties": false, - "properties": { - "attachment_upload_bytes_max": { - "type": "integer" - }, - "batch_ids_max": { - "type": "integer" - }, - "body_chars_max": { - "type": "integer" - }, - "changes_limit_max": { - "type": "integer" - }, - "inline_attachment_bytes_max": { - "type": "integer" - }, - "keywords_per_update_max": { - "type": "integer" - }, - "list_limit_max": { - "type": "integer" - }, - "message_body_chars_default": { - "type": "integer" - }, - "outbound_raw_message_bytes_max": { - "type": "integer" - }, - "thread_body_chars_default": { - "type": "integer" - } - }, - "required": [ - "list_limit_max", - "changes_limit_max", - "batch_ids_max", - "message_body_chars_default", - "thread_body_chars_default", - "body_chars_max", - "inline_attachment_bytes_max", - "attachment_upload_bytes_max", - "outbound_raw_message_bytes_max", - "keywords_per_update_max" - ], - "type": "object" - }, - "mailbox": { - "additionalProperties": false, - "properties": { - "display_name": { - "type": [ - "string", - "null" - ] - }, - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "id": { - "description": "Mailbox public ID", - "example": "mbx_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "id", - "email", - "display_name" - ], - "type": "object" - }, - "states": { - "additionalProperties": false, - "properties": { - "folders": { - "type": "string" - }, - "identities": { - "type": "string" - }, - "messages": { - "type": "string" - }, - "quotas": { - "type": "string" - }, - "submissions": { - "type": "string" - }, - "threads": { - "type": "string" - } - }, - "required": [ - "messages", - "folders", - "threads", - "submissions", - "identities", - "quotas" - ], - "type": "object" - } - }, - "required": [ - "mailbox", - "states", - "capabilities", - "limits", - "gated", - "endpoints" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "capabilities": { + "additionalProperties": false, + "properties": { + "attachments": { + "additionalProperties": false, + "properties": { + "download": { + "type": "boolean" + }, + "metadata": { + "type": "boolean" + }, + "parsing": { + "type": "boolean" + }, + "range_download": { + "type": "boolean" + }, + "send_with_uploaded_blob": { + "type": "boolean" + }, + "upload": { + "type": "boolean" + } + }, + "required": [ + "upload", + "download", + "range_download", + "metadata", + "parsing", + "send_with_uploaded_blob" + ], + "type": "object" + }, + "folders": { + "additionalProperties": false, + "properties": { + "changes": { + "type": "boolean" + }, + "create": { + "type": "boolean" + }, + "delete": { + "type": "boolean" + }, + "detail": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "query_changes": { + "type": "boolean" + }, + "update": { + "type": "boolean" + } + }, + "required": [ + "list", + "detail", + "create", + "update", + "delete", + "changes", + "query_changes" + ], + "type": "object" + }, + "identities": { + "additionalProperties": false, + "properties": { + "changes": { + "type": "boolean" + }, + "create": { + "type": "boolean" + }, + "delete": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "update": { + "type": "boolean" + } + }, + "required": [ + "list", + "changes", + "create", + "update", + "delete" + ], + "type": "object" + }, + "messages": { + "additionalProperties": false, + "properties": { + "batch_get": { + "type": "boolean" + }, + "batch_update": { + "type": "boolean" + }, + "changes": { + "type": "boolean" + }, + "clean_content": { + "type": "boolean" + }, + "count": { + "type": "boolean" + }, + "delete": { + "type": "boolean" + }, + "detail": { + "type": "boolean" + }, + "keywords": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "permanent_delete": { + "type": "boolean" + }, + "query_changes": { + "type": "boolean" + }, + "raw_body": { + "type": "boolean" + }, + "search_snippets": { + "type": "boolean" + }, + "update_fields": { + "items": { + "enum": [ + "seen", + "flagged", + "keywords" + ], + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "list", + "detail", + "raw_body", + "clean_content", + "batch_get", + "count", + "search_snippets", + "changes", + "query_changes", + "update_fields", + "keywords", + "batch_update", + "delete", + "permanent_delete" + ], + "type": "object" + }, + "quotas": { + "additionalProperties": false, + "properties": { + "changes": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "update": { + "type": "boolean" + }, + "usage": { + "type": "boolean" + } + }, + "required": [ + "list", + "usage", + "changes", + "update" + ], + "type": "object" + }, + "submissions": { + "additionalProperties": false, + "properties": { + "changes": { + "type": "boolean" + }, + "detail": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "send": { + "type": "boolean" + } + }, + "required": [ + "list", + "detail", + "changes", + "send" + ], + "type": "object" + }, + "sync": { + "additionalProperties": false, + "properties": { + "query_changes": { + "items": { + "enum": [ + "messages", + "folders" + ], + "type": "string" + }, + "type": "array" + }, + "typed_changes": { + "type": "boolean" + }, + "types": { + "items": { + "enum": [ + "messages", + "folders", + "threads", + "submissions", + "identities", + "quotas" + ], + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "typed_changes", + "types", + "query_changes" + ], + "type": "object" + }, + "threads": { + "additionalProperties": false, + "properties": { + "changes": { + "type": "boolean" + }, + "clean_content": { + "type": "boolean" + }, + "detail": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "messages": { + "type": "boolean" + } + }, + "required": [ + "list", + "detail", + "messages", + "clean_content", + "changes" + ], + "type": "object" + } + }, + "required": [ + "messages", + "threads", + "folders", + "submissions", + "identities", + "quotas", + "attachments", + "sync" + ], + "type": "object" + }, + "endpoints": { + "additionalProperties": false, + "properties": { + "folders": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mailbox": { + "items": { + "type": "string" + }, + "type": "array" + }, + "messages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "submissions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sync": { + "items": { + "type": "string" + }, + "type": "array" + }, + "threads": { + "items": { + "type": "string" + }, + "type": "array" + }, + "usage": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "mailbox", + "messages", + "threads", + "folders", + "submissions", + "usage", + "sync" + ], + "type": "object" + }, + "gated": { + "additionalProperties": false, + "description": "Flags are true when a feature is intentionally unavailable through the mailbox API.", + "properties": { + "attachment_parsing": { + "type": "boolean" + }, + "blob_copy": { + "type": "boolean" + }, + "blob_lookup": { + "type": "boolean" + }, + "events": { + "type": "boolean" + }, + "filter_script_writes": { + "type": "boolean" + }, + "identity_mutation": { + "type": "boolean" + }, + "message_copy": { + "type": "boolean" + }, + "message_import": { + "type": "boolean" + }, + "message_parse": { + "type": "boolean" + }, + "quota_mutation": { + "type": "boolean" + }, + "raw_protocol": { + "type": "boolean" + }, + "vacation_response": { + "type": "boolean" + } + }, + "required": [ + "identity_mutation", + "quota_mutation", + "vacation_response", + "filter_script_writes", + "events", + "raw_protocol", + "attachment_parsing", + "message_copy", + "message_import", + "message_parse", + "blob_lookup", + "blob_copy" + ], + "type": "object" + }, + "limits": { + "additionalProperties": false, + "properties": { + "attachment_upload_bytes_max": { + "type": "integer" + }, + "batch_ids_max": { + "type": "integer" + }, + "body_chars_max": { + "type": "integer" + }, + "changes_limit_max": { + "type": "integer" + }, + "draft_schedule_days_max": { + "enum": [ + 30 + ], + "type": "integer" + }, + "inline_attachment_bytes_max": { + "type": "integer" + }, + "keywords_per_update_max": { + "type": "integer" + }, + "list_limit_max": { + "type": "integer" + }, + "message_body_chars_default": { + "type": "integer" + }, + "outbound_raw_message_bytes_max": { + "type": "integer" + }, + "thread_body_chars_default": { + "type": "integer" + } + }, + "required": [ + "draft_schedule_days_max", + "list_limit_max", + "changes_limit_max", + "batch_ids_max", + "message_body_chars_default", + "thread_body_chars_default", + "body_chars_max", + "inline_attachment_bytes_max", + "attachment_upload_bytes_max", + "outbound_raw_message_bytes_max", + "keywords_per_update_max" + ], + "type": "object" + }, + "mailbox": { + "additionalProperties": false, + "properties": { + "display_name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "id": { + "description": "Mailbox public ID", + "example": "mbx_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "id", + "email", + "display_name" + ], + "type": "object" + }, + "states": { + "additionalProperties": false, + "properties": { + "folders": { + "type": "string" + }, + "identities": { + "type": "string" + }, + "messages": { + "type": "string" + }, + "quotas": { + "type": "string" + }, + "submissions": { + "type": "string" + }, + "threads": { + "type": "string" + } + }, + "required": [ + "messages", + "folders", + "threads", + "submissions", + "identities", + "quotas" + ], + "type": "object" + } + }, + "required": [ + "mailbox", + "states", + "capabilities", + "limits", + "gated", + "endpoints" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Changed
mailbox_get_thread1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Thread ID", - "type": "string" - }, - "last_message": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "message_count": { - "type": "integer" - }, - "message_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "participants": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - }, - "thread_state": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "thread_state", - "email_state" - ], - "type": "object" - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "unread_count": { - "type": "integer" - } - }, - "required": [ - "id", - "subject", - "message_count", - "unread_count", - "has_attachments", - "folder_ids", - "participants", - "last_message", - "states", - "message_ids" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Thread ID", + "type": "string" + }, + "last_message": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "message_count": { + "type": "integer" + }, + "message_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "participants": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "thread_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "thread_state", + "email_state" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "unread_count": { + "type": "integer" + } + }, + "required": [ + "id", + "subject", + "message_count", + "unread_count", + "has_attachments", + "folder_ids", + "participants", + "last_message", + "states", + "message_ids" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Added
mailbox_list_calendar_events - Added
mailbox_list_calendars - Changed
mailbox_list_content1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata only. Attachment contents are not parsed by this endpoint.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "body": { - "additionalProperties": false, - "properties": { - "extracted_links": { - "items": { - "type": "string" - }, - "type": "array" - }, - "format": { - "enum": [ - "text", - "html" - ], - "type": [ - "string", - "null" - ] - }, - "html": { - "description": "HTML body when requested. Returned as a JSON string and not as rendered content.", - "type": [ - "string", - "null" - ] - }, - "is_truncated": { - "type": "boolean" - }, - "quotes_stripped": { - "type": "boolean" - }, - "signature_stripped": { - "type": "boolean" - }, - "text": { - "type": [ - "string", - "null" - ] - }, - "truncated_at_chars": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "format", - "text", - "html", - "is_truncated", - "truncated_at_chars", - "signature_stripped", - "quotes_stripped", - "extracted_links" - ], - "type": "object" - }, - "dates": { - "additionalProperties": false, - "properties": { - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "received_at", - "sent_at" - ], - "type": "object" - }, - "headers": { - "additionalProperties": false, - "properties": { - "full": { - "items": { - "additionalProperties": false, - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": [ - "name", - "value" - ], - "type": "object" - }, - "type": [ - "array", - "null" - ] - }, - "mode": { - "enum": [ - "none", - "selected", - "full" - ], - "type": "string" - }, - "selected": { - "properties": { - "in_reply_to": { - "type": [ - "string", - "null" - ] - }, - "message_id": { - "items": { - "type": "string" - }, - "type": "array" - }, - "references": { - "items": { - "type": "string" - }, - "type": "array" - }, - "reply_to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "message_id", - "in_reply_to", - "references", - "reply_to" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [ - "mode", - "selected", - "full" - ], - "type": "object" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "participants": { - "additionalProperties": false, - "properties": { - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "from": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "reply_to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "from", - "to", - "cc", - "bcc", - "reply_to" - ], - "type": "object" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - }, - "option_hash": { - "type": "string" - } - }, - "required": [ - "email_state", - "option_hash" - ], - "type": "object" - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "thread_id", - "subject", - "participants", - "dates", - "body", - "headers", - "attachments", - "states" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata only. Attachment contents are not parsed by this endpoint.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": false, + "properties": { + "cleaned_html": { + "description": "HTML with recognised quotes and signatures removed according to the stripping options. Original HTML remains in html. This is not sanitised content. Null when HTML is absent, not requested, truncated, or exceeds cleaning limits.", + "type": [ + "string", + "null" + ] + }, + "extracted_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "format": { + "enum": [ + "text", + "html" + ], + "type": [ + "string", + "null" + ] + }, + "html": { + "description": "HTML body when requested. Returned as a JSON string and not as rendered content.", + "type": [ + "string", + "null" + ] + }, + "html_cleaning": { + "additionalProperties": false, + "description": "HTML cleaning outcome; null when HTML is absent or not requested. Cleaning accepts at most 20,000 elements and 128 nested elements. Unrecognised quote and signature formats remain unchanged.", + "properties": { + "quotes_stripped": { + "type": "boolean" + }, + "signature_stripped": { + "type": "boolean" + }, + "status": { + "enum": [ + "complete", + "source_truncated", + "limit_exceeded" + ], + "type": "string" + } + }, + "required": [ + "status", + "signature_stripped", + "quotes_stripped" + ], + "type": [ + "object", + "null" + ] + }, + "is_truncated": { + "type": "boolean" + }, + "quotes_stripped": { + "type": "boolean" + }, + "signature_stripped": { + "type": "boolean" + }, + "text": { + "type": [ + "string", + "null" + ] + }, + "truncated_at_chars": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "format", + "text", + "html", + "cleaned_html", + "html_cleaning", + "is_truncated", + "truncated_at_chars", + "signature_stripped", + "quotes_stripped", + "extracted_links" + ], + "type": "object" + }, + "dates": { + "additionalProperties": false, + "properties": { + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "received_at", + "sent_at" + ], + "type": "object" + }, + "headers": { + "additionalProperties": false, + "properties": { + "full": { + "items": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "mode": { + "enum": [ + "none", + "selected", + "full" + ], + "type": "string" + }, + "selected": { + "properties": { + "in_reply_to": { + "type": [ + "string", + "null" + ] + }, + "message_id": { + "items": { + "type": "string" + }, + "type": "array" + }, + "references": { + "items": { + "type": "string" + }, + "type": "array" + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "message_id", + "in_reply_to", + "references", + "reply_to" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "mode", + "selected", + "full" + ], + "type": "object" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "participants": { + "additionalProperties": false, + "properties": { + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "from", + "to", + "cc", + "bcc", + "reply_to" + ], + "type": "object" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "option_hash": { + "type": "string" + } + }, + "required": [ + "email_state", + "option_hash" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "thread_id", + "subject", + "participants", + "dates", + "body", + "headers", + "attachments", + "states" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Added
mailbox_list_drafts - Changed
mailbox_list_messages1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "items": { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - "type": "array" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - }, - "sync_state": { - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - }, - "pagination": { - "additionalProperties": false, - "properties": { - "has_more": { - "type": "boolean" - }, - "next_cursor": { - "type": "string" - } - }, - "required": [ - "has_more" - ], - "type": "object" - } - }, - "required": [ - "data", - "pagination" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + }, + "sync_state": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } +]
- Changed
mailbox_list_thread_messages1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "items": { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - "type": "array" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - }, - "sync_state": { - "type": "string" - }, - "thread_id": { - "type": "string" - } - }, - "required": [ - "request_id", - "thread_id" - ], - "type": "object" - }, - "pagination": { - "additionalProperties": false, - "properties": { - "has_more": { - "type": "boolean" - }, - "next_cursor": { - "type": "string" - } - }, - "required": [ - "has_more" - ], - "type": "object" - } - }, - "required": [ - "data", - "pagination" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + }, + "sync_state": { + "type": "string" + }, + "thread_id": { + "type": "string" + } + }, + "required": [ + "request_id", + "thread_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } +]
- Changed
mailbox_list_threads1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "items": { - "additionalProperties": false, - "properties": { - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Thread ID", - "type": "string" - }, - "last_message": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "message_count": { - "type": "integer" - }, - "participants": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - }, - "thread_state": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "thread_state", - "email_state" - ], - "type": "object" - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "unread_count": { - "type": "integer" - } - }, - "required": [ - "id", - "subject", - "message_count", - "unread_count", - "has_attachments", - "folder_ids", - "participants", - "last_message", - "states" - ], - "type": "object" - }, - "type": "array" - }, - "meta": { - "additionalProperties": false, - "properties": { - "query_state": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - }, - "pagination": { - "additionalProperties": false, - "properties": { - "has_more": { - "type": "boolean" - }, - "next_cursor": { - "type": "string" - } - }, - "required": [ - "has_more" - ], - "type": "object" - } - }, - "required": [ - "data", - "pagination" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Thread ID", + "type": "string" + }, + "last_message": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "message_count": { + "type": "integer" + }, + "participants": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "thread_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "thread_state", + "email_state" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "unread_count": { + "type": "integer" + } + }, + "required": [ + "id", + "subject", + "message_count", + "unread_count", + "has_attachments", + "folder_ids", + "participants", + "last_message", + "states" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "query_state": { + "type": "string" + }, + "request_id": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } +]
- Changed
mailbox_read_attachment1 field changed- changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "bytes_read": { - "minimum": 0, - "type": "integer" - }, - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "read_mode": { - "const": "text" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - }, - "text": { - "type": "string" - }, - "truncated": { - "type": "boolean" - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id", - "read_mode", - "text", - "truncated", - "bytes_read" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "read_mode": { - "const": "resource_link" - }, - "resource_link": { - "additionalProperties": false, - "properties": { - "mime_type": { - "type": "string" - }, - "name": { - "type": "string" - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "uri": { - "type": "string" - } - }, - "required": [ - "uri", - "name", - "mime_type", - "size_bytes" - ], - "type": "object" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - }, - "text": { - "type": "null" - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id", - "read_mode", - "text", - "resource_link" - ], - "type": "object" - } - ] - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - } - }, - "type": "object" - }, - "ok": { - "const": true - } - }, - "required": [ - "ok", - "data" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "doc_url": { - "type": "string" - }, - "errors": { - "items": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "required": [ - "field", - "code", - "message" - ], - "type": "object" - }, - "type": "array" - }, - "message": { - "type": "string" - }, - "param": { - "type": "string" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - } - }, - "type": "object" - }, - "ok": { - "const": false - } - }, - "required": [ - "ok", - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "bytes_read": { + "minimum": 0, + "type": "integer" + }, + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "read_mode": { + "const": "text" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + }, + "text": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id", + "read_mode", + "text", + "truncated", + "bytes_read" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "read_mode": { + "const": "resource_link" + }, + "resource_link": { + "additionalProperties": false, + "properties": { + "mime_type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "uri": { + "type": "string" + } + }, + "required": [ + "uri", + "name", + "mime_type", + "size_bytes" + ], + "type": "object" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + }, + "text": { + "type": "null" + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id", + "read_mode", + "text", + "resource_link" + ], + "type": "object" + } + ] + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": true + } + }, + "required": [ + "ok", + "data" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "doc_url": { + "type": "string" + }, + "errors": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "field", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "param": { + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": false + } + }, + "required": [ + "ok", + "error" + ], + "type": "object" + } +]
- Added
mailbox_request_attachment_text - Added
mailbox_send_draft - Changed
mailbox_send_message10 fields changed- changed
Input schema / properties / bcc / descriptionPrevious value: -"BCC recipients."New value: +"Hidden copied recipients." - added
Input schema / properties / bcc / maxItemsAdded value: +50 - changed
Input schema / properties / cc / descriptionPrevious value: -"CC recipients."New value: +"Visible copied recipients." - added
Input schema / properties / cc / maxItemsAdded value: +50 - changed
Input schema / properties / custom_headers / descriptionPrevious value: -"Custom headers to include."New value: +"Custom X-* headers to include. Mailbox writes reject X-SES-TENANT, X-SES-CONFIGURATION-SET and X-SES-MESSAGE-TAGS case-insensitively." - changed
Input schema / properties / subject / descriptionPrevious value: -"Subject line for the outgoing email."New value: +"Subject line; defaults to empty." - added
Input schema / properties / subject / maxLengthAdded value: +998 - changed
Input schema / properties / to / descriptionPrevious value: -"Primary recipients."New value: +"Primary recipients. Supply 1 to 50 recipients in total across To, Cc and Bcc." - added
Input schema / properties / to / maxItemsAdded value: +50 - removed
Input schema / properties / to / minItemsRemoved value: -1
- Added
mailbox_update_calendar_event - Added
mailbox_update_draft - Changed
mailbox_upload_attachment1 field changed- changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "blob_id": { - "description": "Uploaded attachment blob ID for a later send request.", - "type": "string" - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": "integer" - } - }, - "required": [ - "blob_id", - "filename", - "content_type", - "size_bytes" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "expires_at": { - "description": "Upload URL expiry time.", - "format": "date-time", - "type": "string" - }, - "headers": { - "additionalProperties": false, - "description": "Headers that must be sent exactly with the PUT request.", - "properties": { - "Content-Length": { - "type": "string" - }, - "Content-Type": { - "type": "string" - } - }, - "required": [ - "Content-Type", - "Content-Length" - ], - "type": "object" - }, - "max_size_bytes": { - "description": "Maximum accepted attachment size in bytes.", - "type": "integer" - }, - "method": { - "description": "HTTP method to use with `upload_url`.", - "enum": [ - "PUT" - ], - "type": "string" - }, - "upload_id": { - "description": "Short-lived upload intent ID.", - "type": "string" - }, - "upload_url": { - "description": "Short-lived signed PUT URL for this exact attachment. Upload promptly; if it expires, create a new upload URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/attachment-uploads/upl_123?upload_token=...", - "type": "string" - } - }, - "required": [ - "upload_id", - "upload_url", - "method", - "expires_at", - "headers", - "max_size_bytes" - ], - "type": "object" - } - ] - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - } - }, - "type": "object" - }, - "ok": { - "const": true - } - }, - "required": [ - "ok", - "data" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "doc_url": { - "type": "string" - }, - "errors": { - "items": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "required": [ - "field", - "code", - "message" - ], - "type": "object" - }, - "type": "array" - }, - "message": { - "type": "string" - }, - "param": { - "type": "string" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - } - }, - "type": "object" - }, - "ok": { - "const": false - } - }, - "required": [ - "ok", - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "blob_id": { + "description": "Uploaded attachment blob ID for a later send request.", + "type": "string" + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": "integer" + } + }, + "required": [ + "blob_id", + "filename", + "content_type", + "size_bytes" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "expires_at": { + "description": "Upload URL expiry time.", + "format": "date-time", + "type": "string" + }, + "headers": { + "additionalProperties": false, + "description": "Headers that must be sent exactly with the PUT request.", + "properties": { + "Content-Length": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + }, + "required": [ + "Content-Type", + "Content-Length" + ], + "type": "object" + }, + "max_size_bytes": { + "description": "Maximum accepted attachment size in bytes.", + "type": "integer" + }, + "method": { + "description": "HTTP method to use with `upload_url`.", + "enum": [ + "PUT" + ], + "type": "string" + }, + "upload_id": { + "description": "Short-lived upload intent ID.", + "type": "string" + }, + "upload_url": { + "description": "Short-lived signed PUT URL for this exact attachment. Upload promptly; if it expires, create a new upload URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/attachment-uploads/upl_123?upload_token=...", + "type": "string" + } + }, + "required": [ + "upload_id", + "upload_url", + "method", + "expires_at", + "headers", + "max_size_bytes" + ], + "type": "object" + } + ] + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": true + } + }, + "required": [ + "ok", + "data" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "doc_url": { + "type": "string" + }, + "errors": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "field", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "param": { + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": false + } + }, + "required": [ + "ok", + "error" + ], + "type": "object" + } +]
- Changed
mailbox_wait_for_message1 field changed- changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "matched": { - "type": "boolean" - }, - "message": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "attachments": { - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "received_at": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "received_at", - "attachments" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "next_after": { - "type": "string" - } - }, - "required": [ - "matched", - "message", - "next_after" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - }, - "sync_state": { - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - }, - "ok": { - "const": true - } - }, - "required": [ - "ok", - "data" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "doc_url": { - "type": "string" - }, - "errors": { - "items": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "field": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "required": [ - "field", - "code", - "message" - ], - "type": "object" - }, - "type": "array" - }, - "message": { - "type": "string" - }, - "param": { - "type": "string" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - }, - "sync_state": { - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - }, - "ok": { - "const": false - } - }, - "required": [ - "ok", - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "matched": { + "type": "boolean" + }, + "message": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.qubrics.com/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "received_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "received_at", + "attachments" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "next_after": { + "type": "string" + } + }, + "required": [ + "matched", + "message", + "next_after" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + }, + "sync_state": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "ok": { + "const": true + } + }, + "required": [ + "ok", + "data" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "doc_url": { + "type": "string" + }, + "errors": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "field", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "param": { + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + }, + "sync_state": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "ok": { + "const": false + } + }, + "required": [ + "ok", + "error" + ], + "type": "object" + } +]
- Added
qubrics_mailbox_batch_delete_messages - Added
qubrics_mailbox_batch_get_messages - Added
qubrics_mailbox_batch_update_messages - Added
qubrics_mailbox_control_draft_schedule - Added
qubrics_mailbox_count_messages - Added
qubrics_mailbox_create_calendar - Added
qubrics_mailbox_create_calendar_event - Added
qubrics_mailbox_create_draft - Added
qubrics_mailbox_delete_calendar - Added
qubrics_mailbox_delete_calendar_event - Added
qubrics_mailbox_delete_draft - Added
qubrics_mailbox_get_attachment - Added
qubrics_mailbox_get_attachment_text - Added
qubrics_mailbox_get_calendar - Added
qubrics_mailbox_get_calendar_event - Added
qubrics_mailbox_get_calendar_event_changes - Added
qubrics_mailbox_get_changes - Added
qubrics_mailbox_get_connection - Added
qubrics_mailbox_get_draft - Added
qubrics_mailbox_get_identity - Added
qubrics_mailbox_get_me - Added
qubrics_mailbox_get_message - Added
qubrics_mailbox_get_sender_choices - Added
qubrics_mailbox_get_session - Added
qubrics_mailbox_get_thread - Added
qubrics_mailbox_list_body - Added
qubrics_mailbox_list_calendar_events - Added
qubrics_mailbox_list_calendars - Added
qubrics_mailbox_list_content - Added
qubrics_mailbox_list_drafts - Added
qubrics_mailbox_list_folders - Added
qubrics_mailbox_list_granted_mailboxes - Added
qubrics_mailbox_list_identities - Added
qubrics_mailbox_list_messages - Added
qubrics_mailbox_list_thread_messages - Added
qubrics_mailbox_list_threads - Added
qubrics_mailbox_read_attachment - Added
qubrics_mailbox_request_attachment_text - Added
qubrics_mailbox_search_message_snippets - Added
qubrics_mailbox_send_draft - Added
qubrics_mailbox_send_message - Added
qubrics_mailbox_update_calendar_event - Added
qubrics_mailbox_update_draft - Added
qubrics_mailbox_update_identity - Added
qubrics_mailbox_upload_attachment - Added
qubrics_mailbox_wait_for_message - Added
qubrics_sending_create_attachment_upload - Added
qubrics_sending_get_attachment - Added
qubrics_sending_get_connection - Added
qubrics_sending_send_email - Added
qubrics_sending_send_email_batch - Added
qubrics_sending_upload_attachment - Changed
sending_create_attachment_upload1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "description": "Unique request identifier", - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "expires_at": { - "description": "ISO timestamp when the upload URL expires.", - "example": "2026-07-07T08:15:00.000Z", - "format": "date-time", - "type": "string" - }, - "headers": { - "additionalProperties": { - "type": "string" - }, - "description": "Headers that must be sent with the PUT upload request.", - "example": { - "Content-Length": "20480", - "Content-Type": "application/pdf", - "X-Sendmux-Upload-Token": "smx_upload_..." - }, - "type": "object" - }, - "max_size_bytes": { - "description": "Maximum upload size in bytes", - "example": 18874368, - "type": "integer" - }, - "method": { - "description": "HTTP method for upload_url", - "enum": [ - "PUT" - ], - "type": "string" - }, - "upload_id": { - "description": "Temporary upload intent ID.", - "example": "upl_tz4a98xxat96iws9zmbrgj3a", - "pattern": "^upl_[a-z0-9]{24}$", - "type": "string" - }, - "upload_url": { - "description": "Short-lived URL that accepts a binary PUT with the returned headers.", - "example": "https://smtp.sendmux.ai/api/v1/emails/attachment-uploads/upl_tz4a98xxat96iws9zmbrgj3a", - "format": "uri", - "type": "string" - } - }, - "required": [ - "upload_id", - "upload_url", - "method", - "expires_at", - "max_size_bytes", - "headers" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "description": "Unique request identifier", + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "expires_at": { + "description": "ISO timestamp when the upload URL expires.", + "example": "2026-07-07T08:15:00.000Z", + "format": "date-time", + "type": "string" + }, + "headers": { + "additionalProperties": { + "type": "string" + }, + "description": "Headers that must be sent with the PUT upload request.", + "example": { + "Content-Length": "20480", + "Content-Type": "application/pdf", + "X-Qubrics-Upload-Token": "smx_upload_...", + "X-Sendmux-Upload-Token": "smx_upload_..." + }, + "type": "object" + }, + "max_size_bytes": { + "description": "Maximum upload size in bytes", + "example": 18874368, + "type": "integer" + }, + "method": { + "description": "HTTP method for upload_url", + "enum": [ + "PUT" + ], + "type": "string" + }, + "upload_id": { + "description": "Temporary upload intent ID.", + "example": "upl_tz4a98xxat96iws9zmbrgj3a", + "pattern": "^upl_[a-z0-9]{24}$", + "type": "string" + }, + "upload_url": { + "description": "Short-lived URL that accepts a binary PUT with the returned headers.", + "example": "https://smtp.sendmux.ai/api/v1/emails/attachment-uploads/upl_tz4a98xxat96iws9zmbrgj3a", + "format": "uri", + "type": "string" + } + }, + "required": [ + "upload_id", + "upload_url", + "method", + "expires_at", + "max_size_bytes", + "headers" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
8 tool updates
v1.0.14- Changed
mailbox_batch_get_messages1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "messages": { - "items": { - "additionalProperties": false, - "properties": { - "content": { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata only. Attachment contents are not parsed by this endpoint.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "body": { - "additionalProperties": false, - "properties": { - "extracted_links": { - "items": { - "type": "string" - }, - "type": "array" - }, - "format": { - "enum": [ - "text", - "html" - ], - "type": [ - "string", - "null" - ] - }, - "html": { - "description": "HTML body when requested. Returned as a JSON string and not as rendered content.", - "type": [ - "string", - "null" - ] - }, - "is_truncated": { - "type": "boolean" - }, - "quotes_stripped": { - "type": "boolean" - }, - "signature_stripped": { - "type": "boolean" - }, - "text": { - "type": [ - "string", - "null" - ] - }, - "truncated_at_chars": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "format", - "text", - "html", - "is_truncated", - "truncated_at_chars", - "signature_stripped", - "quotes_stripped", - "extracted_links" - ], - "type": "object" - }, - "dates": { - "additionalProperties": false, - "properties": { - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "received_at", - "sent_at" - ], - "type": "object" - }, - "headers": { - "additionalProperties": false, - "properties": { - "full": { - "items": { - "additionalProperties": false, - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": [ - "name", - "value" - ], - "type": "object" - }, - "type": [ - "array", - "null" - ] - }, - "mode": { - "enum": [ - "none", - "selected", - "full" - ], - "type": "string" - }, - "selected": { - "properties": { - "in_reply_to": { - "type": [ - "string", - "null" - ] - }, - "message_id": { - "items": { - "type": "string" - }, - "type": "array" - }, - "references": { - "items": { - "type": "string" - }, - "type": "array" - }, - "reply_to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "message_id", - "in_reply_to", - "references", - "reply_to" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [ - "mode", - "selected", - "full" - ], - "type": "object" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "participants": { - "additionalProperties": false, - "properties": { - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "from": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "reply_to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "from", - "to", - "cc", - "bcc", - "reply_to" - ], - "type": "object" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - }, - "option_hash": { - "type": "string" - } - }, - "required": [ - "email_state", - "option_hash" - ], - "type": "object" - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "thread_id", - "subject", - "participants", - "dates", - "body", - "headers", - "attachments", - "states" - ], - "type": [ - "object", - "null" - ] - }, - "message": { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - "raw_body": { - "additionalProperties": false, - "properties": { - "body": { - "additionalProperties": false, - "properties": { - "html": { - "type": [ - "string", - "null" - ] - }, - "is_truncated": { - "type": "boolean" - }, - "text": { - "type": [ - "string", - "null" - ] - }, - "truncated_at_chars": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "text", - "html", - "is_truncated", - "truncated_at_chars" - ], - "type": "object" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "part": { - "enum": [ - "text", - "html", - "both" - ], - "type": "string" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email_state" - ], - "type": "object" - }, - "thread_id": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "thread_id", - "part", - "body", - "states" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [ - "message", - "raw_body", - "content" - ], - "type": "object" - }, - "type": "array" - }, - "not_found": { - "items": { - "type": "string" - }, - "type": "array" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email_state" - ], - "type": "object" - } - }, - "required": [ - "messages", - "not_found", - "states" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "messages": { + "items": { + "additionalProperties": false, + "properties": { + "content": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata only. Attachment contents are not parsed by this endpoint.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": false, + "properties": { + "extracted_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "format": { + "enum": [ + "text", + "html" + ], + "type": [ + "string", + "null" + ] + }, + "html": { + "description": "HTML body when requested. Returned as a JSON string and not as rendered content.", + "type": [ + "string", + "null" + ] + }, + "is_truncated": { + "type": "boolean" + }, + "quotes_stripped": { + "type": "boolean" + }, + "signature_stripped": { + "type": "boolean" + }, + "text": { + "type": [ + "string", + "null" + ] + }, + "truncated_at_chars": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "format", + "text", + "html", + "is_truncated", + "truncated_at_chars", + "signature_stripped", + "quotes_stripped", + "extracted_links" + ], + "type": "object" + }, + "dates": { + "additionalProperties": false, + "properties": { + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "received_at", + "sent_at" + ], + "type": "object" + }, + "headers": { + "additionalProperties": false, + "properties": { + "full": { + "items": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "mode": { + "enum": [ + "none", + "selected", + "full" + ], + "type": "string" + }, + "selected": { + "properties": { + "in_reply_to": { + "type": [ + "string", + "null" + ] + }, + "message_id": { + "items": { + "type": "string" + }, + "type": "array" + }, + "references": { + "items": { + "type": "string" + }, + "type": "array" + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "message_id", + "in_reply_to", + "references", + "reply_to" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "mode", + "selected", + "full" + ], + "type": "object" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "participants": { + "additionalProperties": false, + "properties": { + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "from", + "to", + "cc", + "bcc", + "reply_to" + ], + "type": "object" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "option_hash": { + "type": "string" + } + }, + "required": [ + "email_state", + "option_hash" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "thread_id", + "subject", + "participants", + "dates", + "body", + "headers", + "attachments", + "states" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "message": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + "raw_body": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "body": { + "additionalProperties": false, + "properties": { + "html": { + "type": [ + "string", + "null" + ] + }, + "is_truncated": { + "type": "boolean" + }, + "text": { + "type": [ + "string", + "null" + ] + }, + "truncated_at_chars": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "text", + "html", + "is_truncated", + "truncated_at_chars" + ], + "type": "object" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "part": { + "enum": [ + "text", + "html", + "both" + ], + "type": "string" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email_state" + ], + "type": "object" + }, + "thread_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "thread_id", + "part", + "body", + "states" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "message", + "raw_body", + "content" + ], + "type": "object" + }, + "type": "array" + }, + "not_found": { + "items": { + "type": "string" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email_state" + ], + "type": "object" + } + }, + "required": [ + "messages", + "not_found", + "states" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Changed
mailbox_get_message1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "html_body": { - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "text_body": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags", - "text_body", - "html_body" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "html_body": { + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "in_reply_to": { + "description": "`In-Reply-To` header values, with the surrounding angle brackets removed — the message this one replies to. Empty when the message is not a reply.", + "example": [ + "20260918.0009@example.com" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "message_id": { + "description": "`Message-ID` header values for this message, with the surrounding angle brackets removed. Empty when the message carries no `Message-ID`.", + "example": [ + "20260919.0001@example.com" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "references": { + "description": "`References` header values, with the surrounding angle brackets removed — the ancestor chain of this message, oldest first. Empty when the message starts a conversation.", + "example": [ + "20260917.0001@example.com", + "20260918.0009@example.com" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "reply_to": { + "description": "`Reply-To` addresses. Address replies here rather than to `from` whenever this is non-empty. Empty when the message carries no `Reply-To`.", + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "text_body": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags", + "text_body", + "html_body", + "message_id", + "in_reply_to", + "references", + "reply_to" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Changed
mailbox_get_thread1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Thread ID", - "type": "string" - }, - "last_message": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "message_count": { - "type": "integer" - }, - "message_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "participants": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - }, - "thread_state": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "thread_state", - "email_state" - ], - "type": "object" - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "unread_count": { - "type": "integer" - } - }, - "required": [ - "id", - "subject", - "message_count", - "unread_count", - "has_attachments", - "folder_ids", - "participants", - "last_message", - "states", - "message_ids" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Thread ID", + "type": "string" + }, + "last_message": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "message_count": { + "type": "integer" + }, + "message_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "participants": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "thread_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "thread_state", + "email_state" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "unread_count": { + "type": "integer" + } + }, + "required": [ + "id", + "subject", + "message_count", + "unread_count", + "has_attachments", + "folder_ids", + "participants", + "last_message", + "states", + "message_ids" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Changed
mailbox_list_body1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "body": { - "additionalProperties": false, - "properties": { - "html": { - "type": [ - "string", - "null" - ] - }, - "is_truncated": { - "type": "boolean" - }, - "text": { - "type": [ - "string", - "null" - ] - }, - "truncated_at_chars": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "text", - "html", - "is_truncated", - "truncated_at_chars" - ], - "type": "object" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "part": { - "enum": [ - "text", - "html", - "both" - ], - "type": "string" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email_state" - ], - "type": "object" - }, - "thread_id": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "thread_id", - "part", - "body", - "states" - ], - "type": [ - "object", - "null" - ] - }, - { - "type": "object" - } - ] - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "body": { + "additionalProperties": false, + "properties": { + "html": { + "type": [ + "string", + "null" + ] + }, + "is_truncated": { + "type": "boolean" + }, + "text": { + "type": [ + "string", + "null" + ] + }, + "truncated_at_chars": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "text", + "html", + "is_truncated", + "truncated_at_chars" + ], + "type": "object" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "part": { + "enum": [ + "text", + "html", + "both" + ], + "type": "string" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email_state" + ], + "type": "object" + }, + "thread_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "thread_id", + "part", + "body", + "states" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Changed
mailbox_list_content1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata only. Attachment contents are not parsed by this endpoint.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "body": { - "additionalProperties": false, - "properties": { - "extracted_links": { - "items": { - "type": "string" - }, - "type": "array" - }, - "format": { - "enum": [ - "text", - "html" - ], - "type": [ - "string", - "null" - ] - }, - "html": { - "description": "HTML body when requested. Returned as a JSON string and not as rendered content.", - "type": [ - "string", - "null" - ] - }, - "is_truncated": { - "type": "boolean" - }, - "quotes_stripped": { - "type": "boolean" - }, - "signature_stripped": { - "type": "boolean" - }, - "text": { - "type": [ - "string", - "null" - ] - }, - "truncated_at_chars": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "format", - "text", - "html", - "is_truncated", - "truncated_at_chars", - "signature_stripped", - "quotes_stripped", - "extracted_links" - ], - "type": "object" - }, - "dates": { - "additionalProperties": false, - "properties": { - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "received_at", - "sent_at" - ], - "type": "object" - }, - "headers": { - "additionalProperties": false, - "properties": { - "full": { - "items": { - "additionalProperties": false, - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": [ - "name", - "value" - ], - "type": "object" - }, - "type": [ - "array", - "null" - ] - }, - "mode": { - "enum": [ - "none", - "selected", - "full" - ], - "type": "string" - }, - "selected": { - "properties": { - "in_reply_to": { - "type": [ - "string", - "null" - ] - }, - "message_id": { - "items": { - "type": "string" - }, - "type": "array" - }, - "references": { - "items": { - "type": "string" - }, - "type": "array" - }, - "reply_to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "message_id", - "in_reply_to", - "references", - "reply_to" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [ - "mode", - "selected", - "full" - ], - "type": "object" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "participants": { - "additionalProperties": false, - "properties": { - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "from": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "reply_to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "from", - "to", - "cc", - "bcc", - "reply_to" - ], - "type": "object" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - }, - "option_hash": { - "type": "string" - } - }, - "required": [ - "email_state", - "option_hash" - ], - "type": "object" - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "thread_id", - "subject", - "participants", - "dates", - "body", - "headers", - "attachments", - "states" - ], - "type": [ - "object", - "null" - ] - }, - { - "type": "object" - } - ] - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata only. Attachment contents are not parsed by this endpoint.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": false, + "properties": { + "extracted_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "format": { + "enum": [ + "text", + "html" + ], + "type": [ + "string", + "null" + ] + }, + "html": { + "description": "HTML body when requested. Returned as a JSON string and not as rendered content.", + "type": [ + "string", + "null" + ] + }, + "is_truncated": { + "type": "boolean" + }, + "quotes_stripped": { + "type": "boolean" + }, + "signature_stripped": { + "type": "boolean" + }, + "text": { + "type": [ + "string", + "null" + ] + }, + "truncated_at_chars": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "format", + "text", + "html", + "is_truncated", + "truncated_at_chars", + "signature_stripped", + "quotes_stripped", + "extracted_links" + ], + "type": "object" + }, + "dates": { + "additionalProperties": false, + "properties": { + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "received_at", + "sent_at" + ], + "type": "object" + }, + "headers": { + "additionalProperties": false, + "properties": { + "full": { + "items": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "mode": { + "enum": [ + "none", + "selected", + "full" + ], + "type": "string" + }, + "selected": { + "properties": { + "in_reply_to": { + "type": [ + "string", + "null" + ] + }, + "message_id": { + "items": { + "type": "string" + }, + "type": "array" + }, + "references": { + "items": { + "type": "string" + }, + "type": "array" + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "message_id", + "in_reply_to", + "references", + "reply_to" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "mode", + "selected", + "full" + ], + "type": "object" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "participants": { + "additionalProperties": false, + "properties": { + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "from", + "to", + "cc", + "bcc", + "reply_to" + ], + "type": "object" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "option_hash": { + "type": "string" + } + }, + "required": [ + "email_state", + "option_hash" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "thread_id", + "subject", + "participants", + "dates", + "body", + "headers", + "attachments", + "states" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Changed
mailbox_list_messages1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "items": { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - "type": "array" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - }, - "sync_state": { - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - }, - "pagination": { - "additionalProperties": false, - "properties": { - "has_more": { - "type": "boolean" - }, - "next_cursor": { - "type": "string" - } - }, - "required": [ - "has_more" - ], - "type": "object" - } - }, - "required": [ - "data", - "pagination" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + }, + "sync_state": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } +]
- Changed
mailbox_list_thread_messages1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "items": { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - "type": "array" - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "type": "string" - }, - "sync_state": { - "type": "string" - }, - "thread_id": { - "type": "string" - } - }, - "required": [ - "request_id", - "thread_id" - ], - "type": "object" - }, - "pagination": { - "additionalProperties": false, - "properties": { - "has_more": { - "type": "boolean" - }, - "next_cursor": { - "type": "string" - } - }, - "required": [ - "has_more" - ], - "type": "object" - } - }, - "required": [ - "data", - "pagination" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + }, + "sync_state": { + "type": "string" + }, + "thread_id": { + "type": "string" + } + }, + "required": [ + "request_id", + "thread_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } +]
- Changed
mailbox_list_threads1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "items": { - "additionalProperties": false, - "properties": { - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Thread ID", - "type": "string" - }, - "last_message": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "message_count": { - "type": "integer" - }, - "participants": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - }, - "thread_state": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "thread_state", - "email_state" - ], - "type": "object" - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "unread_count": { - "type": "integer" - } - }, - "required": [ - "id", - "subject", - "message_count", - "unread_count", - "has_attachments", - "folder_ids", - "participants", - "last_message", - "states" - ], - "type": "object" - }, - "type": "array" - }, - "meta": { - "additionalProperties": false, - "properties": { - "query_state": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - }, - "pagination": { - "additionalProperties": false, - "properties": { - "has_more": { - "type": "boolean" - }, - "next_cursor": { - "type": "string" - } - }, - "required": [ - "has_more" - ], - "type": "object" - } - }, - "required": [ - "data", - "pagination" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Thread ID", + "type": "string" + }, + "last_message": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "message_count": { + "type": "integer" + }, + "participants": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "thread_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "thread_state", + "email_state" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "unread_count": { + "type": "integer" + } + }, + "required": [ + "id", + "subject", + "message_count", + "unread_count", + "has_attachments", + "folder_ids", + "participants", + "last_message", + "states" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "query_state": { + "type": "string" + }, + "request_id": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } +]
3 tool updates
v1.0.12- Changed
mailbox_get_me1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "created_at": { - "description": "ISO 8601 creation timestamp", - "type": "string" - }, - "display_name": { - "description": "Optional display name shown in outbound From headers", - "type": [ - "string", - "null" - ] - }, - "email": { - "description": "Mailbox email address (lowercase)", - "example": "agent@acme.com", - "type": "string" - }, - "id": { - "description": "Public ID", - "example": "mbx_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - }, - "quota_bytes": { - "description": "Storage quota in bytes. Current writable tiers are 1 GB, 5 GB, and 50 GB.", - "type": [ - "integer", - "null" - ] - }, - "send_scope": { - "additionalProperties": false, - "properties": { - "group_public_ids": { - "description": "Delivery group public IDs (only when type=group)", - "items": { - "type": "string" - }, - "type": "array" - }, - "provider_public_ids": { - "description": "Provider public IDs (only when type=providers)", - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "description": "Outbound routing strategy. `all` lets the mailbox use any team-configured provider; `providers` restricts to the listed provider IDs; `group` routes via a delivery group.", - "enum": [ - "all", - "providers", - "group" - ], - "type": "string" - } - }, - "required": [ - "type" - ], - "type": [ - "object", - "null" - ] - }, - "status": { - "description": "active | suspended | deleted", - "example": "active", - "type": "string" - } - }, - "required": [ - "id", - "email", - "display_name", - "quota_bytes", - "send_scope", - "status", - "created_at" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "quota_used_bytes": { - "description": "Live storage usage in bytes. Omitted when usage is temporarily unavailable.", - "type": "integer" - } - }, - "type": "object" - } - ] - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "created_at": { + "description": "ISO 8601 creation timestamp", + "type": "string" + }, + "display_name": { + "description": "Optional display name shown in outbound From headers", + "type": [ + "string", + "null" + ] + }, + "email": { + "description": "Mailbox email address (lowercase)", + "example": "agent@acme.com", + "type": "string" + }, + "id": { + "description": "Public ID", + "example": "mbx_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + }, + "quota_bytes": { + "description": "Storage quota in bytes. Current writable tiers are 1 GB, 5 GB, and 50 GB.", + "type": [ + "integer", + "null" + ] + }, + "quota_used_bytes": { + "description": "Live storage usage in bytes. Omitted when usage is temporarily unavailable.", + "type": "integer" + }, + "send_scope": { + "additionalProperties": false, + "properties": { + "group_public_ids": { + "description": "Delivery group public IDs (only when type=group)", + "items": { + "type": "string" + }, + "type": "array" + }, + "provider_public_ids": { + "description": "Provider public IDs (only when type=providers)", + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "description": "Outbound routing strategy. `all` lets the mailbox use any team-configured provider; `providers` restricts to the listed provider IDs; `group` routes via a delivery group.", + "enum": [ + "all", + "providers", + "group" + ], + "type": "string" + } + }, + "required": [ + "type" + ], + "type": [ + "object", + "null" + ] + }, + "status": { + "description": "active | suspended | deleted", + "example": "active", + "type": "string" + } + }, + "required": [ + "id", + "email", + "display_name", + "quota_bytes", + "send_scope", + "status", + "created_at" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Changed
mailbox_get_message1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "attachments": { - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "html_body": { - "type": [ - "string", - "null" - ] - }, - "text_body": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "text_body", - "html_body" - ], - "type": "object" - } - ] - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "html_body": { + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "text_body": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags", + "text_body", + "html_body" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
- Changed
mailbox_get_thread1 field changed- changed
Output schema / properties / result / allOfPrevious value: -[ - { - "properties": { - "meta": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "ok": { - "enum": [ - true - ], - "type": "boolean" - } - }, - "required": [ - "ok", - "meta" - ], - "type": "object" - }, - { - "properties": { - "data": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Thread ID", - "type": "string" - }, - "last_message": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "attachments": { - "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", - "items": { - "additionalProperties": false, - "properties": { - "content_id": { - "description": "Content ID for inline attachments, when present.", - "type": [ - "string", - "null" - ] - }, - "content_type": { - "example": "application/pdf", - "type": "string" - }, - "disposition": { - "example": "attachment", - "type": [ - "string", - "null" - ] - }, - "download_url": { - "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", - "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", - "type": "string" - }, - "filename": { - "example": "invoice.pdf", - "type": [ - "string", - "null" - ] - }, - "id": { - "description": "Attachment blob ID.", - "type": "string" - }, - "size_bytes": { - "example": 12345, - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "id", - "filename", - "content_type", - "size_bytes", - "disposition", - "content_id" - ], - "type": "object" - }, - "type": "array" - }, - "bcc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "cc": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "flags": { - "additionalProperties": false, - "properties": { - "answered": { - "type": "boolean" - }, - "draft": { - "type": "boolean" - }, - "flagged": { - "type": "boolean" - }, - "seen": { - "type": "boolean" - } - }, - "required": [ - "seen", - "flagged", - "draft", - "answered" - ], - "type": "object" - }, - "folder_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "allOf": [ - { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "has_attachments": { - "type": "boolean" - }, - "id": { - "description": "Message ID", - "type": "string" - }, - "keywords": { - "description": "Active message keywords, including system flags and custom labels.", - "example": [ - "$seen", - "$flagged", - "agent_triaged" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "preview": { - "type": [ - "string", - "null" - ] - }, - "received_at": { - "type": [ - "string", - "null" - ] - }, - "sent_at": { - "type": [ - "string", - "null" - ] - }, - "size_bytes": { - "type": [ - "integer", - "null" - ] - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "thread_id": { - "type": [ - "string", - "null" - ] - }, - "to": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "thread_id", - "folder_ids", - "subject", - "preview", - "from", - "to", - "cc", - "bcc", - "received_at", - "sent_at", - "size_bytes", - "has_attachments", - "keywords", - "flags" - ], - "type": "object" - }, - { - "type": [ - "object", - "null" - ] - } - ] - }, - "message_count": { - "type": "integer" - }, - "participants": { - "items": { - "additionalProperties": false, - "properties": { - "email": { - "example": "agent@example.com", - "format": "email", - "type": "string" - }, - "name": { - "example": "Support", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "email", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "states": { - "additionalProperties": false, - "properties": { - "email_state": { - "type": [ - "string", - "null" - ] - }, - "thread_state": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "thread_state", - "email_state" - ], - "type": "object" - }, - "subject": { - "type": [ - "string", - "null" - ] - }, - "unread_count": { - "type": "integer" - } - }, - "required": [ - "id", - "subject", - "message_count", - "unread_count", - "has_attachments", - "folder_ids", - "participants", - "last_message", - "states" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "message_ids": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "message_ids" - ], - "type": "object" - } - ] - }, - "meta": { - "additionalProperties": false, - "properties": { - "request_id": { - "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - }, - "required": [ - "data" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Thread ID", + "type": "string" + }, + "last_message": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "message_count": { + "type": "integer" + }, + "message_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "participants": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "thread_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "thread_state", + "email_state" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "unread_count": { + "type": "integer" + } + }, + "required": [ + "id", + "subject", + "message_count", + "unread_count", + "has_attachments", + "folder_ids", + "participants", + "last_message", + "states", + "message_ids" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } +]
2 tool updates
v1.0.9- Changed
sending_send_email1 field changed- added
Input schema / properties / delivery_groupAdded value: +{ + "anyOf": [ + { + "pattern": "^dgrp_[a-z0-9][a-z0-9_-]{0,122}$", + "type": "string" + }, + { + "items": { + "pattern": "^dgrp_[a-z0-9][a-z0-9_-]{0,122}$", + "type": "string" + }, + "maxItems": 50, + "minItems": 1, + "type": "array" + } + ], + "description": "One delivery group public ID or a non-empty array of up to 50 IDs" +}
- Changed
sending_send_email_batch1 field changed- added
Input schema / properties / messages / items / properties / delivery_groupAdded value: +{ + "anyOf": [ + { + "pattern": "^dgrp_[a-z0-9][a-z0-9_-]{0,122}$", + "type": "string" + }, + { + "items": { + "pattern": "^dgrp_[a-z0-9][a-z0-9_-]{0,122}$", + "type": "string" + }, + "maxItems": 50, + "minItems": 1, + "type": "array" + } + ], + "description": "One delivery group public ID or a non-empty array of up to 50 IDs" +}
32 tool updates
v1.0.8- Changed
mailbox_batch_delete_messages4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "deleted": { + "items": { + "type": "string" + }, + "type": "array" + }, + "failed": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "id": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "id", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "not_found": { + "items": { + "type": "string" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "new_state": { + "type": [ + "string", + "null" + ] + }, + "old_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "old_state", + "new_state" + ], + "type": "object" + } + }, + "required": [ + "deleted", + "not_found", + "failed", + "states" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxBatchDeleteMessagesResultResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_batch_get_messages4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "messages": { + "items": { + "additionalProperties": false, + "properties": { + "content": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata only. Attachment contents are not parsed by this endpoint.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": false, + "properties": { + "extracted_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "format": { + "enum": [ + "text", + "html" + ], + "type": [ + "string", + "null" + ] + }, + "html": { + "description": "HTML body when requested. Returned as a JSON string and not as rendered content.", + "type": [ + "string", + "null" + ] + }, + "is_truncated": { + "type": "boolean" + }, + "quotes_stripped": { + "type": "boolean" + }, + "signature_stripped": { + "type": "boolean" + }, + "text": { + "type": [ + "string", + "null" + ] + }, + "truncated_at_chars": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "format", + "text", + "html", + "is_truncated", + "truncated_at_chars", + "signature_stripped", + "quotes_stripped", + "extracted_links" + ], + "type": "object" + }, + "dates": { + "additionalProperties": false, + "properties": { + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "received_at", + "sent_at" + ], + "type": "object" + }, + "headers": { + "additionalProperties": false, + "properties": { + "full": { + "items": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "mode": { + "enum": [ + "none", + "selected", + "full" + ], + "type": "string" + }, + "selected": { + "properties": { + "in_reply_to": { + "type": [ + "string", + "null" + ] + }, + "message_id": { + "items": { + "type": "string" + }, + "type": "array" + }, + "references": { + "items": { + "type": "string" + }, + "type": "array" + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "message_id", + "in_reply_to", + "references", + "reply_to" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "mode", + "selected", + "full" + ], + "type": "object" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "participants": { + "additionalProperties": false, + "properties": { + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "from": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "from", + "to", + "cc", + "bcc", + "reply_to" + ], + "type": "object" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "option_hash": { + "type": "string" + } + }, + "required": [ + "email_state", + "option_hash" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "thread_id", + "subject", + "participants", + "dates", + "body", + "headers", + "attachments", + "states" + ], + "type": [ + "object", + "null" + ] + }, + "message": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + "raw_body": { + "additionalProperties": false, + "properties": { + "body": { + "additionalProperties": false, + "properties": { + "html": { + "type": [ + "string", + "null" + ] + }, + "is_truncated": { + "type": "boolean" + }, + "text": { + "type": [ + "string", + "null" + ] + }, + "truncated_at_chars": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "text", + "html", + "is_truncated", + "truncated_at_chars" + ], + "type": "object" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "part": { + "enum": [ + "text", + "html", + "both" + ], + "type": "string" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email_state" + ], + "type": "object" + }, + "thread_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "thread_id", + "part", + "body", + "states" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "message", + "raw_body", + "content" + ], + "type": "object" + }, + "type": "array" + }, + "not_found": { + "items": { + "type": "string" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email_state" + ], + "type": "object" + } + }, + "required": [ + "messages", + "not_found", + "states" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxBatchGetResultResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_batch_update_messages4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "failed": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "id": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "id", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "not_found": { + "items": { + "type": "string" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "new_state": { + "type": [ + "string", + "null" + ] + }, + "old_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "old_state", + "new_state" + ], + "type": "object" + }, + "updated": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "updated", + "not_found", + "failed", + "states" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxBatchUpdateMessagesResultResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_count_messages4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "sync_state": { + "type": [ + "string", + "null" + ] + }, + "total": { + "type": "integer" + } + }, + "required": [ + "total", + "sync_state" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxMessageCountResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_get_attachment3 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": true + } + }, + "required": [ + "ok", + "data" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "doc_url": { + "type": "string" + }, + "errors": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "field", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "param": { + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": false + } + }, + "required": [ + "ok", + "error" + ], + "type": "object" + } +]
- Changed
mailbox_get_changes4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "anyOf": [ + { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "created": { + "items": { + "type": "string" + }, + "type": "array" + }, + "destroyed": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_more": { + "type": "boolean" + }, + "new_state": { + "type": "string" + }, + "old_state": { + "type": [ + "string", + "null" + ] + }, + "sync_required": { + "description": "When true, refetch this resource list instead of applying the incremental arrays.", + "type": "boolean" + }, + "updated": { + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_properties": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "old_state", + "new_state", + "has_more", + "created", + "updated", + "destroyed" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + } + }, + { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "types": { + "additionalProperties": false, + "properties": { + "folders": { + "additionalProperties": false, + "properties": { + "created": { + "items": { + "type": "string" + }, + "type": "array" + }, + "destroyed": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_more": { + "type": "boolean" + }, + "new_state": { + "type": "string" + }, + "old_state": { + "type": [ + "string", + "null" + ] + }, + "sync_required": { + "description": "When true, refetch this resource list instead of applying the incremental arrays.", + "type": "boolean" + }, + "updated": { + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_properties": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "old_state", + "new_state", + "has_more", + "created", + "updated", + "destroyed" + ], + "type": "object" + }, + "identities": { + "additionalProperties": false, + "properties": { + "created": { + "items": { + "type": "string" + }, + "type": "array" + }, + "destroyed": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_more": { + "type": "boolean" + }, + "new_state": { + "type": "string" + }, + "old_state": { + "type": [ + "string", + "null" + ] + }, + "sync_required": { + "description": "When true, refetch this resource list instead of applying the incremental arrays.", + "type": "boolean" + }, + "updated": { + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_properties": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "old_state", + "new_state", + "has_more", + "created", + "updated", + "destroyed" + ], + "type": "object" + }, + "messages": { + "additionalProperties": false, + "properties": { + "created": { + "items": { + "type": "string" + }, + "type": "array" + }, + "destroyed": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_more": { + "type": "boolean" + }, + "new_state": { + "type": "string" + }, + "old_state": { + "type": [ + "string", + "null" + ] + }, + "sync_required": { + "description": "When true, refetch this resource list instead of applying the incremental arrays.", + "type": "boolean" + }, + "updated": { + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_properties": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "old_state", + "new_state", + "has_more", + "created", + "updated", + "destroyed" + ], + "type": "object" + }, + "quotas": { + "additionalProperties": false, + "properties": { + "created": { + "items": { + "type": "string" + }, + "type": "array" + }, + "destroyed": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_more": { + "type": "boolean" + }, + "new_state": { + "type": "string" + }, + "old_state": { + "type": [ + "string", + "null" + ] + }, + "sync_required": { + "description": "When true, refetch this resource list instead of applying the incremental arrays.", + "type": "boolean" + }, + "updated": { + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_properties": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "old_state", + "new_state", + "has_more", + "created", + "updated", + "destroyed" + ], + "type": "object" + }, + "submissions": { + "additionalProperties": false, + "properties": { + "created": { + "items": { + "type": "string" + }, + "type": "array" + }, + "destroyed": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_more": { + "type": "boolean" + }, + "new_state": { + "type": "string" + }, + "old_state": { + "type": [ + "string", + "null" + ] + }, + "sync_required": { + "description": "When true, refetch this resource list instead of applying the incremental arrays.", + "type": "boolean" + }, + "updated": { + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_properties": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "old_state", + "new_state", + "has_more", + "created", + "updated", + "destroyed" + ], + "type": "object" + }, + "threads": { + "additionalProperties": false, + "properties": { + "created": { + "items": { + "type": "string" + }, + "type": "array" + }, + "destroyed": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_more": { + "type": "boolean" + }, + "new_state": { + "type": "string" + }, + "old_state": { + "type": [ + "string", + "null" + ] + }, + "sync_required": { + "description": "When true, refetch this resource list instead of applying the incremental arrays.", + "type": "boolean" + }, + "updated": { + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_properties": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "old_state", + "new_state", + "has_more", + "created", + "updated", + "destroyed" + ], + "type": "object" + } + }, + "type": "object" + } + }, + "required": [ + "types" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + } + } + ] + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_get_connection4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "credential": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "api_key", + "oauth", + "agent_token" + ], + "example": "api_key", + "type": "string" + } + }, + "required": [ + "id", + "type", + "name" + ], + "type": "object" + }, + "label": { + "description": "Display label for this connection.", + "type": "string" + }, + "mailboxes": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "format": "email", + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "id", + "email" + ], + "type": "object" + }, + "type": "array" + }, + "permissions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "team": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + } + }, + "required": [ + "team", + "credential", + "label", + "permissions", + "mailboxes" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "ConnectionResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_get_identity4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "email": { + "format": "email", + "type": "string" + }, + "html_signature": { + "type": "string" + }, + "id": { + "description": "Identity ID", + "type": "string" + }, + "may_delete": { + "description": "Whether the mailbox service allows this identity to be deleted.", + "type": "boolean" + }, + "name": { + "type": "string" + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "text_signature": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "email", + "reply_to", + "bcc", + "text_signature", + "html_signature", + "may_delete" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxIdentityResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_get_me4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "created_at": { + "description": "ISO 8601 creation timestamp", + "type": "string" + }, + "display_name": { + "description": "Optional display name shown in outbound From headers", + "type": [ + "string", + "null" + ] + }, + "email": { + "description": "Mailbox email address (lowercase)", + "example": "agent@acme.com", + "type": "string" + }, + "id": { + "description": "Public ID", + "example": "mbx_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + }, + "quota_bytes": { + "description": "Storage quota in bytes. Current writable tiers are 1 GB, 5 GB, and 50 GB.", + "type": [ + "integer", + "null" + ] + }, + "send_scope": { + "additionalProperties": false, + "properties": { + "group_public_ids": { + "description": "Delivery group public IDs (only when type=group)", + "items": { + "type": "string" + }, + "type": "array" + }, + "provider_public_ids": { + "description": "Provider public IDs (only when type=providers)", + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "description": "Outbound routing strategy. `all` lets the mailbox use any team-configured provider; `providers` restricts to the listed provider IDs; `group` routes via a delivery group.", + "enum": [ + "all", + "providers", + "group" + ], + "type": "string" + } + }, + "required": [ + "type" + ], + "type": [ + "object", + "null" + ] + }, + "status": { + "description": "active | suspended | deleted", + "example": "active", + "type": "string" + } + }, + "required": [ + "id", + "email", + "display_name", + "quota_bytes", + "send_scope", + "status", + "created_at" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "quota_used_bytes": { + "description": "Live storage usage in bytes. Omitted when usage is temporarily unavailable.", + "type": "integer" + } + }, + "type": "object" + } + ] + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxMeItemResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_get_message4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "attachments": { + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "html_body": { + "type": [ + "string", + "null" + ] + }, + "text_body": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text_body", + "html_body" + ], + "type": "object" + } + ] + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxMessageDetailResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_get_session4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "capabilities": { + "additionalProperties": false, + "properties": { + "attachments": { + "additionalProperties": false, + "properties": { + "download": { + "type": "boolean" + }, + "metadata": { + "type": "boolean" + }, + "parsing": { + "type": "boolean" + }, + "range_download": { + "type": "boolean" + }, + "send_with_uploaded_blob": { + "type": "boolean" + }, + "upload": { + "type": "boolean" + } + }, + "required": [ + "upload", + "download", + "range_download", + "metadata", + "parsing", + "send_with_uploaded_blob" + ], + "type": "object" + }, + "folders": { + "additionalProperties": false, + "properties": { + "changes": { + "type": "boolean" + }, + "create": { + "type": "boolean" + }, + "delete": { + "type": "boolean" + }, + "detail": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "query_changes": { + "type": "boolean" + }, + "update": { + "type": "boolean" + } + }, + "required": [ + "list", + "detail", + "create", + "update", + "delete", + "changes", + "query_changes" + ], + "type": "object" + }, + "identities": { + "additionalProperties": false, + "properties": { + "changes": { + "type": "boolean" + }, + "create": { + "type": "boolean" + }, + "delete": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "update": { + "type": "boolean" + } + }, + "required": [ + "list", + "changes", + "create", + "update", + "delete" + ], + "type": "object" + }, + "messages": { + "additionalProperties": false, + "properties": { + "batch_get": { + "type": "boolean" + }, + "batch_update": { + "type": "boolean" + }, + "changes": { + "type": "boolean" + }, + "clean_content": { + "type": "boolean" + }, + "count": { + "type": "boolean" + }, + "delete": { + "type": "boolean" + }, + "detail": { + "type": "boolean" + }, + "keywords": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "permanent_delete": { + "type": "boolean" + }, + "query_changes": { + "type": "boolean" + }, + "raw_body": { + "type": "boolean" + }, + "search_snippets": { + "type": "boolean" + }, + "update_fields": { + "items": { + "enum": [ + "seen", + "flagged", + "keywords" + ], + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "list", + "detail", + "raw_body", + "clean_content", + "batch_get", + "count", + "search_snippets", + "changes", + "query_changes", + "update_fields", + "keywords", + "batch_update", + "delete", + "permanent_delete" + ], + "type": "object" + }, + "quotas": { + "additionalProperties": false, + "properties": { + "changes": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "update": { + "type": "boolean" + }, + "usage": { + "type": "boolean" + } + }, + "required": [ + "list", + "usage", + "changes", + "update" + ], + "type": "object" + }, + "submissions": { + "additionalProperties": false, + "properties": { + "changes": { + "type": "boolean" + }, + "detail": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "send": { + "type": "boolean" + } + }, + "required": [ + "list", + "detail", + "changes", + "send" + ], + "type": "object" + }, + "sync": { + "additionalProperties": false, + "properties": { + "query_changes": { + "items": { + "enum": [ + "messages", + "folders" + ], + "type": "string" + }, + "type": "array" + }, + "typed_changes": { + "type": "boolean" + }, + "types": { + "items": { + "enum": [ + "messages", + "folders", + "threads", + "submissions", + "identities", + "quotas" + ], + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "typed_changes", + "types", + "query_changes" + ], + "type": "object" + }, + "threads": { + "additionalProperties": false, + "properties": { + "changes": { + "type": "boolean" + }, + "clean_content": { + "type": "boolean" + }, + "detail": { + "type": "boolean" + }, + "list": { + "type": "boolean" + }, + "messages": { + "type": "boolean" + } + }, + "required": [ + "list", + "detail", + "messages", + "clean_content", + "changes" + ], + "type": "object" + } + }, + "required": [ + "messages", + "threads", + "folders", + "submissions", + "identities", + "quotas", + "attachments", + "sync" + ], + "type": "object" + }, + "endpoints": { + "additionalProperties": false, + "properties": { + "folders": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mailbox": { + "items": { + "type": "string" + }, + "type": "array" + }, + "messages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "submissions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sync": { + "items": { + "type": "string" + }, + "type": "array" + }, + "threads": { + "items": { + "type": "string" + }, + "type": "array" + }, + "usage": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "mailbox", + "messages", + "threads", + "folders", + "submissions", + "usage", + "sync" + ], + "type": "object" + }, + "gated": { + "additionalProperties": false, + "description": "Flags are true when a feature is intentionally unavailable through the mailbox API.", + "properties": { + "attachment_parsing": { + "type": "boolean" + }, + "blob_copy": { + "type": "boolean" + }, + "blob_lookup": { + "type": "boolean" + }, + "events": { + "type": "boolean" + }, + "filter_script_writes": { + "type": "boolean" + }, + "identity_mutation": { + "type": "boolean" + }, + "message_copy": { + "type": "boolean" + }, + "message_import": { + "type": "boolean" + }, + "message_parse": { + "type": "boolean" + }, + "quota_mutation": { + "type": "boolean" + }, + "raw_protocol": { + "type": "boolean" + }, + "vacation_response": { + "type": "boolean" + } + }, + "required": [ + "identity_mutation", + "quota_mutation", + "vacation_response", + "filter_script_writes", + "events", + "raw_protocol", + "attachment_parsing", + "message_copy", + "message_import", + "message_parse", + "blob_lookup", + "blob_copy" + ], + "type": "object" + }, + "limits": { + "additionalProperties": false, + "properties": { + "attachment_upload_bytes_max": { + "type": "integer" + }, + "batch_ids_max": { + "type": "integer" + }, + "body_chars_max": { + "type": "integer" + }, + "changes_limit_max": { + "type": "integer" + }, + "inline_attachment_bytes_max": { + "type": "integer" + }, + "keywords_per_update_max": { + "type": "integer" + }, + "list_limit_max": { + "type": "integer" + }, + "message_body_chars_default": { + "type": "integer" + }, + "outbound_raw_message_bytes_max": { + "type": "integer" + }, + "thread_body_chars_default": { + "type": "integer" + } + }, + "required": [ + "list_limit_max", + "changes_limit_max", + "batch_ids_max", + "message_body_chars_default", + "thread_body_chars_default", + "body_chars_max", + "inline_attachment_bytes_max", + "attachment_upload_bytes_max", + "outbound_raw_message_bytes_max", + "keywords_per_update_max" + ], + "type": "object" + }, + "mailbox": { + "additionalProperties": false, + "properties": { + "display_name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "id": { + "description": "Mailbox public ID", + "example": "mbx_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "id", + "email", + "display_name" + ], + "type": "object" + }, + "states": { + "additionalProperties": false, + "properties": { + "folders": { + "type": "string" + }, + "identities": { + "type": "string" + }, + "messages": { + "type": "string" + }, + "quotas": { + "type": "string" + }, + "submissions": { + "type": "string" + }, + "threads": { + "type": "string" + } + }, + "required": [ + "messages", + "folders", + "threads", + "submissions", + "identities", + "quotas" + ], + "type": "object" + } + }, + "required": [ + "mailbox", + "states", + "capabilities", + "limits", + "gated", + "endpoints" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxSessionResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_get_thread4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Thread ID", + "type": "string" + }, + "last_message": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "message_count": { + "type": "integer" + }, + "participants": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "thread_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "thread_state", + "email_state" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "unread_count": { + "type": "integer" + } + }, + "required": [ + "id", + "subject", + "message_count", + "unread_count", + "has_attachments", + "folder_ids", + "participants", + "last_message", + "states" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "message_ids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "message_ids" + ], + "type": "object" + } + ] + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxThreadDetailResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_list_body4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "body": { + "additionalProperties": false, + "properties": { + "html": { + "type": [ + "string", + "null" + ] + }, + "is_truncated": { + "type": "boolean" + }, + "text": { + "type": [ + "string", + "null" + ] + }, + "truncated_at_chars": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "text", + "html", + "is_truncated", + "truncated_at_chars" + ], + "type": "object" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "part": { + "enum": [ + "text", + "html", + "both" + ], + "type": "string" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email_state" + ], + "type": "object" + }, + "thread_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "thread_id", + "part", + "body", + "states" + ], + "type": [ + "object", + "null" + ] + }, + { + "type": "object" + } + ] + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxRawBodyResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_list_content4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata only. Attachment contents are not parsed by this endpoint.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "body": { + "additionalProperties": false, + "properties": { + "extracted_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "format": { + "enum": [ + "text", + "html" + ], + "type": [ + "string", + "null" + ] + }, + "html": { + "description": "HTML body when requested. Returned as a JSON string and not as rendered content.", + "type": [ + "string", + "null" + ] + }, + "is_truncated": { + "type": "boolean" + }, + "quotes_stripped": { + "type": "boolean" + }, + "signature_stripped": { + "type": "boolean" + }, + "text": { + "type": [ + "string", + "null" + ] + }, + "truncated_at_chars": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "format", + "text", + "html", + "is_truncated", + "truncated_at_chars", + "signature_stripped", + "quotes_stripped", + "extracted_links" + ], + "type": "object" + }, + "dates": { + "additionalProperties": false, + "properties": { + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "received_at", + "sent_at" + ], + "type": "object" + }, + "headers": { + "additionalProperties": false, + "properties": { + "full": { + "items": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "mode": { + "enum": [ + "none", + "selected", + "full" + ], + "type": "string" + }, + "selected": { + "properties": { + "in_reply_to": { + "type": [ + "string", + "null" + ] + }, + "message_id": { + "items": { + "type": "string" + }, + "type": "array" + }, + "references": { + "items": { + "type": "string" + }, + "type": "array" + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "message_id", + "in_reply_to", + "references", + "reply_to" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "mode", + "selected", + "full" + ], + "type": "object" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "participants": { + "additionalProperties": false, + "properties": { + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "from": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "from", + "to", + "cc", + "bcc", + "reply_to" + ], + "type": "object" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "option_hash": { + "type": "string" + } + }, + "required": [ + "email_state", + "option_hash" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "thread_id", + "subject", + "participants", + "dates", + "body", + "headers", + "attachments", + "states" + ], + "type": [ + "object", + "null" + ] + }, + { + "type": "object" + } + ] + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxMessageContentResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_list_folders4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "can_add_items": { + "description": "Whether messages can be moved into this folder.", + "type": "boolean" + }, + "id": { + "description": "Folder ID", + "type": "string" + }, + "name": { + "type": "string" + }, + "parent_id": { + "type": [ + "string", + "null" + ] + }, + "role": { + "description": "System role when the folder is a built-in folder.", + "type": [ + "string", + "null" + ] + }, + "sort_order": { + "type": [ + "integer", + "null" + ] + }, + "total_messages": { + "type": "integer" + }, + "unread_messages": { + "type": "integer" + } + }, + "required": [ + "id", + "name", + "parent_id", + "role", + "sort_order", + "total_messages", + "unread_messages", + "can_add_items" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxFolderCursorListResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_list_granted_mailboxes4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "description": "Mailbox email address", + "example": "agent@acme.com", + "type": "string" + }, + "id": { + "description": "Mailbox public ID", + "example": "mbx_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "id", + "email" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "GrantedMailboxListResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_list_identities4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "email": { + "format": "email", + "type": "string" + }, + "html_signature": { + "type": "string" + }, + "id": { + "description": "Identity ID", + "type": "string" + }, + "may_delete": { + "description": "Whether the mailbox service allows this identity to be deleted.", + "type": "boolean" + }, + "name": { + "type": "string" + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "text_signature": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "email", + "reply_to", + "bcc", + "text_signature", + "html_signature", + "may_delete" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "identity_state": { + "type": "string" + }, + "request_id": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxIdentityCursorListResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_list_messages4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + }, + "sync_state": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxMessageSummaryCursorListResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_list_thread_messages4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + }, + "sync_state": { + "type": "string" + }, + "thread_id": { + "type": "string" + } + }, + "required": [ + "request_id", + "thread_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxThreadMessageSummaryCursorListResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_list_threads4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "properties": { + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Thread ID", + "type": "string" + }, + "last_message": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "description": "Attachment metadata for this message. Each item includes a short-lived `download_url`; if it expires, fetch message metadata again.", + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "cc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "flags": { + "additionalProperties": false, + "properties": { + "answered": { + "type": "boolean" + }, + "draft": { + "type": "boolean" + }, + "flagged": { + "type": "boolean" + }, + "seen": { + "type": "boolean" + } + }, + "required": [ + "seen", + "flagged", + "draft", + "answered" + ], + "type": "object" + }, + "folder_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "has_attachments": { + "type": "boolean" + }, + "id": { + "description": "Message ID", + "type": "string" + }, + "keywords": { + "description": "Active message keywords, including system flags and custom labels.", + "example": [ + "$seen", + "$flagged", + "agent_triaged" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preview": { + "type": [ + "string", + "null" + ] + }, + "received_at": { + "type": [ + "string", + "null" + ] + }, + "sent_at": { + "type": [ + "string", + "null" + ] + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "thread_id": { + "type": [ + "string", + "null" + ] + }, + "to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "thread_id", + "folder_ids", + "subject", + "preview", + "from", + "to", + "cc", + "bcc", + "received_at", + "sent_at", + "size_bytes", + "has_attachments", + "keywords", + "flags" + ], + "type": "object" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "message_count": { + "type": "integer" + }, + "participants": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "states": { + "additionalProperties": false, + "properties": { + "email_state": { + "type": [ + "string", + "null" + ] + }, + "thread_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "thread_state", + "email_state" + ], + "type": "object" + }, + "subject": { + "type": [ + "string", + "null" + ] + }, + "unread_count": { + "type": "integer" + } + }, + "required": [ + "id", + "subject", + "message_count", + "unread_count", + "has_attachments", + "folder_ids", + "participants", + "last_message", + "states" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": false, + "properties": { + "query_state": { + "type": "string" + }, + "request_id": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "pagination": { + "additionalProperties": false, + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + } + }, + "required": [ + "has_more" + ], + "type": "object" + } + }, + "required": [ + "data", + "pagination" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxThreadSummaryCursorListResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_read_attachment3 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "bytes_read": { + "minimum": 0, + "type": "integer" + }, + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "read_mode": { + "const": "text" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + }, + "text": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id", + "read_mode", + "text", + "truncated", + "bytes_read" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "read_mode": { + "const": "resource_link" + }, + "resource_link": { + "additionalProperties": false, + "properties": { + "mime_type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "size_bytes": { + "type": [ + "integer", + "null" + ] + }, + "uri": { + "type": "string" + } + }, + "required": [ + "uri", + "name", + "mime_type", + "size_bytes" + ], + "type": "object" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + }, + "text": { + "type": "null" + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id", + "read_mode", + "text", + "resource_link" + ], + "type": "object" + } + ] + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": true + } + }, + "required": [ + "ok", + "data" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "doc_url": { + "type": "string" + }, + "errors": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "field", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "param": { + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": false + } + }, + "required": [ + "ok", + "error" + ], + "type": "object" + } +]
- Changed
mailbox_search_message_snippets4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "not_found": { + "items": { + "type": "string" + }, + "type": "array" + }, + "snippets": { + "items": { + "additionalProperties": false, + "properties": { + "message_id": { + "type": "string" + }, + "preview": { + "description": "Body preview snippet. May include mark tags.", + "type": [ + "string", + "null" + ] + }, + "subject": { + "description": "Subject snippet. May include mark tags.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "message_id", + "subject", + "preview" + ], + "type": "object" + }, + "type": "array" + }, + "sync_state": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "snippets", + "not_found", + "sync_state" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxSearchSnippetsResultResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_send_message4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "message_id": { + "type": "string" + }, + "status": { + "enum": [ + "queued" + ], + "type": "string" + } + }, + "required": [ + "message_id", + "status" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxSendResultResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_update_identity4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "bcc": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "email": { + "format": "email", + "type": "string" + }, + "html_signature": { + "type": "string" + }, + "id": { + "description": "Identity ID", + "type": "string" + }, + "may_delete": { + "description": "Whether the mailbox service allows this identity to be deleted.", + "type": "boolean" + }, + "name": { + "type": "string" + }, + "reply_to": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "example": "agent@example.com", + "format": "email", + "type": "string" + }, + "name": { + "example": "Support", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "text_signature": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "email", + "reply_to", + "bcc", + "text_signature", + "html_signature", + "may_delete" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "MailboxIdentityResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
mailbox_upload_attachment5 fields changed- changed
Input schema / properties / content_base64 / descriptionPrevious value: -"Last-resort inline base64 for tiny agent-authored files only. Decoded content must be at most 32 KiB; use file_path or presign_upload_url for real files."New value: +"Last-resort inline base64 for tiny agent-authored files only. Decoded content must be at most 32 KiB; use presign_upload_url for real files." - removed
Input schema / properties / file_pathRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Local file path for stdio MCP only. The path must be inside a client-declared MCP root; hosted MCP rejects it." -} - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "blob_id": { + "description": "Uploaded attachment blob ID for a later send request.", + "type": "string" + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": "integer" + } + }, + "required": [ + "blob_id", + "filename", + "content_type", + "size_bytes" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "expires_at": { + "description": "Upload URL expiry time.", + "format": "date-time", + "type": "string" + }, + "headers": { + "additionalProperties": false, + "description": "Headers that must be sent exactly with the PUT request.", + "properties": { + "Content-Length": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + }, + "required": [ + "Content-Type", + "Content-Length" + ], + "type": "object" + }, + "max_size_bytes": { + "description": "Maximum accepted attachment size in bytes.", + "type": "integer" + }, + "method": { + "description": "HTTP method to use with `upload_url`.", + "enum": [ + "PUT" + ], + "type": "string" + }, + "upload_id": { + "description": "Short-lived upload intent ID.", + "type": "string" + }, + "upload_url": { + "description": "Short-lived signed PUT URL for this exact attachment. Upload promptly; if it expires, create a new upload URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/attachment-uploads/upl_123?upload_token=...", + "type": "string" + } + }, + "required": [ + "upload_id", + "upload_url", + "method", + "expires_at", + "headers", + "max_size_bytes" + ], + "type": "object" + } + ] + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": true + } + }, + "required": [ + "ok", + "data" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "doc_url": { + "type": "string" + }, + "errors": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "field", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "param": { + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": false + } + }, + "required": [ + "ok", + "error" + ], + "type": "object" + } +]
- Changed
mailbox_wait_for_message3 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "matched": { + "type": "boolean" + }, + "message": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "attachments": { + "items": { + "additionalProperties": false, + "properties": { + "content_id": { + "description": "Content ID for inline attachments, when present.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "example": "application/pdf", + "type": "string" + }, + "disposition": { + "example": "attachment", + "type": [ + "string", + "null" + ] + }, + "download_url": { + "description": "Short-lived URL for this exact attachment. Fetch it promptly; if it expires, call the message or attachment metadata endpoint again to receive a fresh URL.", + "example": "https://app.sendmux.ai/api/v1/mailbox/messages/msg_123/attachment-downloads/attref_abc123?download_token=...", + "type": "string" + }, + "filename": { + "example": "invoice.pdf", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Attachment blob ID.", + "type": "string" + }, + "size_bytes": { + "example": 12345, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "id", + "filename", + "content_type", + "size_bytes", + "disposition", + "content_id" + ], + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "received_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "received_at", + "attachments" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "next_after": { + "type": "string" + } + }, + "required": [ + "matched", + "message", + "next_after" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + }, + "sync_state": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "ok": { + "const": true + } + }, + "required": [ + "ok", + "data" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "doc_url": { + "type": "string" + }, + "errors": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "field", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "param": { + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + }, + "sync_state": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "ok": { + "const": false + } + }, + "required": [ + "ok", + "error" + ], + "type": "object" + } +]
- Changed
sending_create_attachment_upload5 fields changed- added
Input schema / properties / Idempotency-Key / exampleAdded value: +"order-12345-2026-04-24" - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "description": "Unique request identifier", + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "expires_at": { + "description": "ISO timestamp when the upload URL expires.", + "example": "2026-07-07T08:15:00.000Z", + "format": "date-time", + "type": "string" + }, + "headers": { + "additionalProperties": { + "type": "string" + }, + "description": "Headers that must be sent with the PUT upload request.", + "example": { + "Content-Length": "20480", + "Content-Type": "application/pdf", + "X-Sendmux-Upload-Token": "smx_upload_..." + }, + "type": "object" + }, + "max_size_bytes": { + "description": "Maximum upload size in bytes", + "example": 18874368, + "type": "integer" + }, + "method": { + "description": "HTTP method for upload_url", + "enum": [ + "PUT" + ], + "type": "string" + }, + "upload_id": { + "description": "Temporary upload intent ID.", + "example": "upl_tz4a98xxat96iws9zmbrgj3a", + "pattern": "^upl_[a-z0-9]{24}$", + "type": "string" + }, + "upload_url": { + "description": "Short-lived URL that accepts a binary PUT with the returned headers.", + "example": "https://smtp.sendmux.ai/api/v1/emails/attachment-uploads/upl_tz4a98xxat96iws9zmbrgj3a", + "format": "uri", + "type": "string" + } + }, + "required": [ + "upload_id", + "upload_url", + "method", + "expires_at", + "max_size_bytes", + "headers" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "AttachmentUploadIntentResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
sending_get_attachment4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "description": "Unique request identifier", + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "attachment_id": { + "description": "Temporary attachment ID to use in email attachments[].", + "example": "att_tz4a98xxat96iws9zmbrgj3a", + "pattern": "^att_[a-z0-9]{24}$", + "type": "string" + }, + "content_type": { + "description": "Stored attachment MIME type", + "example": "application/pdf", + "type": "string" + }, + "expires_at": { + "description": "ISO timestamp when this temporary attachment reference expires.", + "example": "2026-07-07T08:15:00.000Z", + "format": "date-time", + "type": "string" + }, + "filename": { + "description": "Stored attachment filename", + "example": "analysis.pdf", + "type": "string" + }, + "size_bytes": { + "description": "Stored attachment byte size", + "example": 20480, + "type": "integer" + } + }, + "required": [ + "attachment_id", + "filename", + "content_type", + "size_bytes", + "expires_at" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "AttachmentUploadResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
sending_get_connection4 fields changed- added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "description": "Unique request identifier", + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "credential": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "api_key", + "oauth", + "agent_token" + ], + "example": "api_key", + "type": "string" + } + }, + "required": [ + "id", + "type", + "name" + ], + "type": "object" + }, + "label": { + "description": "Display label for this connection.", + "type": "string" + }, + "mailboxes": { + "items": { + "additionalProperties": false, + "properties": { + "email": { + "format": "email", + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "id", + "email" + ], + "type": "object" + }, + "type": "array" + }, + "permissions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "team": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + } + }, + "required": [ + "team", + "credential", + "label", + "permissions", + "mailboxes" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "ConnectionResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
sending_send_email5 fields changed- added
Input schema / properties / Idempotency-Key / exampleAdded value: +"order-12345-2026-04-24" - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "description": "Unique request identifier", + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "message_id": { + "description": "Unique message identifier (eml_ prefix + 24 alphanumeric chars)", + "example": "eml_tz4a98xxat96iws9zmbrgj3a", + "pattern": "^eml_[a-z0-9]{24}$", + "type": "string" + }, + "status": { + "description": "Message queuing status", + "enum": [ + "queued" + ], + "type": "string" + } + }, + "required": [ + "message_id", + "status" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "SendSuccessResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
sending_send_email_batch5 fields changed- added
Input schema / properties / Idempotency-Key / exampleAdded value: +"order-12345-2026-04-24" - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / propertiesAdded value: +{ + "result": { + "allOf": [ + { + "properties": { + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "description": "Unique request identifier", + "example": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx", + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + }, + "ok": { + "enum": [ + true + ], + "type": "boolean" + } + }, + "required": [ + "ok", + "meta" + ], + "type": "object" + }, + { + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "results": { + "items": { + "additionalProperties": false, + "properties": { + "error": { + "allOf": [ + { + "additionalProperties": false, + "properties": { + "code": { + "description": "Machine-readable error code", + "example": "validation_error", + "type": "string" + }, + "doc_url": { + "description": "Link to error documentation", + "format": "uri", + "type": "string" + }, + "errors": { + "description": "Accumulated per-field issues (validation errors)", + "items": { + "additionalProperties": false, + "properties": { + "code": { + "description": "Issue code from the validator", + "example": "invalid_string", + "type": "string" + }, + "field": { + "description": "Dot-path to the failing field", + "example": "to.email", + "type": "string" + }, + "message": { + "description": "Human-readable issue message", + "type": "string" + } + }, + "required": [ + "field", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "Human-readable error description", + "type": "string" + }, + "param": { + "description": "Parameter that caused the error", + "type": "string" + }, + "retryable": { + "description": "True when the client may safely retry the same request. 429 and 5xx default true; 4xx default false.", + "type": "boolean" + } + }, + "required": [ + "code", + "message", + "retryable" + ], + "type": "object" + }, + { + "description": "Error details (only if failed)" + } + ] + }, + "index": { + "description": "Position in the input array", + "type": "integer" + }, + "message_id": { + "description": "Message ID (null if failed)", + "pattern": "^eml_[a-z0-9]{24}$", + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Result status", + "enum": [ + "queued", + "failed" + ], + "type": "string" + } + }, + "required": [ + "index", + "message_id", + "status" + ], + "type": "object" + }, + "type": "array" + }, + "summary": { + "additionalProperties": false, + "properties": { + "failed": { + "description": "Failed count", + "type": "integer" + }, + "queued": { + "description": "Successfully queued count", + "type": "integer" + }, + "total": { + "description": "Total messages in batch", + "type": "integer" + } + }, + "required": [ + "total", + "queued", + "failed" + ], + "type": "object" + } + }, + "required": [ + "results", + "summary" + ], + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" + } + ], + "unevaluatedProperties": { + "not": {} + }, + "x-fastmcp-top-level-schema": "BatchSendSuccessResponse" + } +} - added
Output schema / requiredAdded value: +[ + "result" +]
- Changed
sending_upload_attachment5 fields changed- changed
Input schema / properties / content_base64 / descriptionPrevious value: -"Last-resort inline base64 for tiny agent-authored files only. Decoded content must be at most 32 KiB; use file_path for real local files."New value: +"Last-resort inline base64 for tiny agent-authored files only. Decoded content must be at most 32 KiB; use a presigned upload for real files." - removed
Input schema / properties / file_pathRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Local file path for stdio MCP only. The path must be inside a client-declared MCP root; hosted MCP rejects it." -} - added
Output schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / additionalPropertiesRemoved value: -true - added
Output schema / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "attachment_id": { + "description": "Temporary attachment ID to use in email attachments[].", + "example": "att_tz4a98xxat96iws9zmbrgj3a", + "pattern": "^att_[a-z0-9]{24}$", + "type": "string" + }, + "content_type": { + "description": "Stored attachment MIME type", + "example": "application/pdf", + "type": "string" + }, + "expires_at": { + "description": "ISO timestamp when this temporary attachment reference expires.", + "example": "2026-07-07T08:15:00.000Z", + "format": "date-time", + "type": "string" + }, + "filename": { + "description": "Stored attachment filename", + "example": "analysis.pdf", + "type": "string" + }, + "size_bytes": { + "description": "Stored attachment byte size", + "example": 20480, + "type": "integer" + } + }, + "required": [ + "attachment_id", + "filename", + "content_type", + "size_bytes", + "expires_at" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": true + } + }, + "required": [ + "ok", + "data" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "doc_url": { + "type": "string" + }, + "errors": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "field", + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "param": { + "type": "string" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "request_id": { + "type": "string" + } + }, + "type": "object" + }, + "ok": { + "const": false + } + }, + "required": [ + "ok", + "error" + ], + "type": "object" + } +]
2 tool updates
v1.0.3- Added
mailbox_get_connection - Added
sending_get_connection
2 tool updates
v1.0.1- Changed
sending_send_email4 fields changed- changed
Input schema / properties / bcc / descriptionPrevious value: -"BCC recipients (max 100)"New value: +"BCC recipients (subject to 50 total To, CC, and BCC recipients)" - changed
Input schema / properties / bcc / maxItemsPrevious value: -100New value: +49 - changed
Input schema / properties / cc / descriptionPrevious value: -"CC recipients (max 100)"New value: +"CC recipients (subject to 50 total To, CC, and BCC recipients)" - changed
Input schema / properties / cc / maxItemsPrevious value: -100New value: +49
- Changed
sending_send_email_batch4 fields changed- changed
Input schema / properties / messages / items / properties / bcc / descriptionPrevious value: -"BCC recipients (max 100)"New value: +"BCC recipients (subject to 50 total To, CC, and BCC recipients)" - changed
Input schema / properties / messages / items / properties / bcc / maxItemsPrevious value: -100New value: +49 - changed
Input schema / properties / messages / items / properties / cc / descriptionPrevious value: -"CC recipients (max 100)"New value: +"CC recipients (subject to 50 total To, CC, and BCC recipients)" - changed
Input schema / properties / messages / items / properties / cc / maxItemsPrevious value: -100New value: +49
30 tool updates
v1.0.0- First observed
mailbox_batch_delete_messages - First observed
mailbox_batch_get_messages - First observed
mailbox_batch_update_messages - First observed
mailbox_count_messages - First observed
mailbox_get_attachment - First observed
mailbox_get_changes - First observed
mailbox_get_identity - First observed
mailbox_get_me - First observed
mailbox_get_message - First observed
mailbox_get_session - First observed
mailbox_get_thread - First observed
mailbox_list_body - First observed
mailbox_list_content - First observed
mailbox_list_folders - First observed
mailbox_list_granted_mailboxes - First observed
mailbox_list_identities - First observed
mailbox_list_messages - First observed
mailbox_list_thread_messages - First observed
mailbox_list_threads - First observed
mailbox_read_attachment - First observed
mailbox_search_message_snippets - First observed
mailbox_send_message - First observed
mailbox_update_identity - First observed
mailbox_upload_attachment - First observed
mailbox_wait_for_message - First observed
sending_create_attachment_upload - First observed
sending_get_attachment - First observed
sending_send_email - First observed
sending_send_email_batch - First observed
sending_upload_attachment
TDQS
Scored across 104 tools
The set contains literal duplicates: every `mailbox_*` tool is repeated as `qubrics_mailbox_*` (and `sending_*` as `qubrics_sending_*`) with byte-identical descriptions, so an agent has no basis to choose between them. On top of that, several near-variants overlap heavily (mailbox_get_attachment vs mailbox_read_attachment vs mailbox_get_attachment_text vs mailbox_request_attachment_text; list_body vs list_content vs get_message).
Names mix three prefix families (bare `mailbox_`, `qubrics_mailbox_`, `sending_`, `qubrics_sending_`) with no discernible rule for when the prefix is applied. The verb_noun portion is mostly consistent, but the duplicated prefixed/unprefixed twins make the naming scheme arbitrary and unpredictable.
104 tools for what is effectively a ~35-tool mail/calendar/sending API is an extreme mismatch, and most of the excess is pure duplication rather than added capability. This bloats the tool list, wastes context, and multiplies the chance of misselection.
The underlying domain coverage is genuinely broad: messages (list/get/body/content/snippets/count/batch get/update/delete), drafts full lifecycle incl. scheduling, calendar and events CRUD plus change sync, attachments (upload/download/extract), folders, identities, threads, sender choices, and outbound sending with batch. Minor gaps exist (no explicit reply/forward tool outside draft `source.action`, no message move-as-standalone beyond batch update), but core workflows are covered.
Maintenance
Related MCP Connectors
Hosted email for AI agents: create inboxes, send, receive, and reply over MCP with scoped API keys
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Real email inboxes for AI agents: register, receive, read and send mail over MCP. Free to receive.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for LobsterMail — gives AI agents email tools. Create inboxes, send and receive email, search messages, and manage webhooks.115 npmMIT
- AlicenseAqualityDmaintenanceMCP server for Sendook - an AI email communication platform. Enables AI agents to send and receive emails, manage inboxes, threads, and webhooks programmatically.16MIT
- AlicenseBqualityBmaintenanceOfficial mailbox.bot MCP server for AI agents. Send letters, certified mail and postcards, and give an agent its own street address + postal mailbox number. Agent receiving virtual mailboxes with a real street address are live now at $15/mo in Manhattan Beach, CA. Sandbox keys, approval controls, tracking and webhooks.55156 npm2MIT
- AlicenseBqualityCmaintenanceThe email API your AI agent can actually use. A Model Context Protocol server for Send16 that gives Claude, Cursor, and any MCP client 79 tools to send transactional & marketing email, manage contacts, audiences, segments, automations, templates, the inbox, suppressions, and webhooks.7942 npmMIT