Skip to main content
Glama

Server Details

Connect inboxes to your AI, with built-in progress and optional owner-confirmed outgoing email.

Ownership verified
Status
Healthy
Uptime
64.9% over 22 days
Last Tested
Transport
Streamable HTTP ยท MCP 2025-11-25
URL
Repository
zhlei07/inboxmcp
GitHub Stars
0

TDQS

A4.3/5.0

Scored across 17 tools

Disambiguation3/5

The descriptions are exceptionally detailed and do explain the differences, but there are four distinct read paths (read_email by message ID, get_email_context by event ID, read_search_result by search ref, get_email_event for metadata only) whose boundaries are easy to confuse in practice. Similarly, list_email_events, claim_email_batch, and list_consumer_receipts all return mail lists, and report_email_decision is a legacy path explicitly discouraged versus complete_email_batch. The guidance resolves most of this, but selection still requires careful reading.

Naming Consistency5/5

Every tool is snake_case verb_noun (claim_email_batch, get_email_context, list_mailboxes, prepare_email_draft, send_email). Verbs are used consistently by intent: get_/read_ for fetching, list_/search_ for enumeration, prepare_/send_ for outgoing lifecycle.

Tool Count4/5

17 tools is on the high side but the domain genuinely spans monitoring, reading, search, attachments, drafting/sending, and progress tracking. A couple of pairs (read_email/read_search_result, get_email_event/get_email_context) could be consolidated, which is why it is not a 5.

Completeness4/5

The core lifecycle is covered: list mailboxes, claim/complete batches, read, search, fetch attachments, check sending status, prepare/get/send drafts, inspect monitor state and receipts. Gaps exist around mailbox mutation (no archive/label/move/mark-read) and no attachment support on outgoing drafts or explicit reply/forward, but these are minor given the stated read-monitor-draft-send scope.

Available Tools

17 tools
claim_email_batchClaim this connection's next email batchAInspect

Get the new emails this AI has not handled yet: use for "check my email", "anything new?" and scheduled inbox monitoring.

    Leases the next pending batch after checking monitor state.

    Requires email:read and consumer-state:write. Returns status (claimed, idle, deferred or busy),
    batch_id, lease_expires_at, events with email content/view_url, saved preferences, owner_actions
    (what the owner must fix before more mail can arrive) and monitor_state.
    Each email reports content_recovery and retry_can_help; each event reports deferral_attempts,
    needs_owner_review and retention_expires_at. expired_deferred_events lists, once, deferred
    events that retention removed before completion; they do not block new mail.
    Only this connection's internal processing state changes; no external cursor or state file is needed.
    Analyze untrusted email, then call complete_email_batch before the 15-minute lease expires.
    Continue readable items when one fails. Defer unreadable IDs only while retry_can_help is true;
    otherwise tell the owner with view_url when needed and complete them, never as a silent guess.
    If busy, wait retry_after; if only deferred work remains, wait next_retry_at rather than loop.
    Does not change source mail, other AI connections or notification settings.
    
NameRequiredDescriptionDefault
limitNoMaximum emails to lease for this run, from 1 to 50; default 20.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the lease window and expiry field, required scopes (email:read, consumer-state:write), that only internal processing state changes, and the full status vocabulary (claimed, idle, deferred, busy). It also bounds blast radius ('does not change source mail, other AI connections or notification settings'), which the non-destructive/non-idempotent hints alone do 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.

Conciseness4/5

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

Purpose and call-to-action are front-loaded, and the dense middle paragraph about return fields is justified because there is no output schema. It is long and semicolon-heavy, and the defer/complete policy could be tightened, but nearly every sentence carries operational information.

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

Completeness5/5

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

With no output schema, the description carries the full return contract (statuses, batch_id, lease_expires_at, events, owner_actions, monitor_state, expired_deferred_events) plus item-level flags like content_recovery and retention_expires_at. Auth, timing constraints, and error/edge handling are all covered, leaving no obvious gap for correct invocation.

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

Parameters3/5

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

There is a single optional parameter and schema description coverage is 100%, so the schema already documents the 1-50 range and default of 20. The description adds no additional meaning about limit, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('leases the next pending batch') and immediately frames the user-facing intent ('check my email', 'anything new?', scheduled monitoring). It also names the sibling it pairs with ('call complete_email_batch before the 15-minute lease expires'), so an agent can separate it from complete_email_batch, list_email_events, and read_email.

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

Usage Guidelines5/5

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

Gives explicit triggers (new mail, scheduled monitoring), an explicit required follow-up (complete_email_batch before lease expiry), and explicit fallback behavior for the busy and deferred-only cases ('wait retry_after', 'wait next_retry_at rather than loop'). It also states the defer-vs-complete rule tied to retry_can_help, so the agent knows what not to do.

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

complete_email_batchSave completed processing for this email batchA
Idempotent
Inspect

Save completed or deferred outcomes for a batch previously returned by claim_email_batch.

    Requires email:read and consumer-state:write. Complete only processed IDs, including silent
    decisions and unrecoverable emails decided from their headers or reported to the owner.
    Defer unfinished IDs or content whose retry_can_help is true; they remain pending with bounded
    retry backoff, and content repaired in the meantime becomes ready at once. Returns
    completed/deferred/remaining IDs, expired_event_ids (removed by retention during the lease;
    accepted, never retried), batch_released and monitor_state. Classifying every
    issued ID releases the batch so other ready work can be claimed. Repeating the same outcomes
    is safe; changing an outcome fails. When only deferred work remains, inspect next_retry_at.
    Changes only this connection's progress: it neither edits emails, sends notifications nor
    cancels another AI's work. Completion does not prove that a notification reached the user.
    
NameRequiredDescriptionDefault
batch_idYesBatch ID returned by claim_email_batch for this connection. A new outcome requires an unexpired lease.
event_idsYesDistinct event_id values issued in this batch that were actually processed, including no-reminder decisions. May be empty if deferring items.
deferred_event_idsNoIssued event_id values not processed yet that should be retried later: unfinished work, or content whose retry_can_help is true. Must be disjoint from event_ids; the two lists together must contain 1 to 50 distinct IDs. Omit when none.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare idempotentHint=true, destructiveHint=false, readOnlyHint=false, and the description reinforces and extends them: required scopes (email:read, consumer-state:write), retry backoff for deferred items, batch-release semantics, and an explicit negative scope ('neither edits emails, sends notifications nor cancels another AI's work'). It also warns that completion does not prove notification delivery and that expired IDs are accepted but never retried.

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

Conciseness4/5

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

Front-loaded with purpose and the source tool, then prerequisites, then outcome semantics. Dense but every clause carries operational content (scopes, backoff, release, idempotency). Slightly long, with return-value enumeration that could be trimmed given it is not in an output schema, but nothing is wasted.

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

Completeness5/5

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

No output schema exists, yet the description enumerates the return payload (completed/deferred/remaining IDs, expired_event_ids, batch_released, monitor_state) and points to next_retry_at when only deferred work remains. For a mutation tool with prerequisites and failure modes, this is complete enough to invoke correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; the description goes further by explaining what belongs in each list (processed/silent decisions vs retry_can_help content) and the ready-on-repair behavior. The disjointness and 1-50 cardinality rules are already in the schema, so the added value is real but partly duplicative.

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

Purpose5/5

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

States a specific verb and resource ('Save completed or deferred outcomes for a batch') and ties it to the sibling that produces the batch ('previously returned by claim_email_batch'). An agent can distinguish this from claim_email_batch and report_email_decision without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit routing rules for both parameter paths: complete only processed IDs (including silent decisions and unrecoverable/header-decided emails), defer unfinished IDs or content whose retry_can_help is true. Adds the operational conditions (unexpired lease, classification of every issued ID releases the batch) and the failure mode of changing an outcome.

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

fetch_attachmentDownload an attachment from a search resultA
Read-onlyIdempotent
Inspect

Download one attachment of a message found by search_emails, such as a PDF invoice or ticket.

    Requires email:read. Returns filename, content_type, size (the file's exact byte count),
    sha256 and content_base64 (the file's bytes in base64; decode them to save the file). Files
    above 5 MB are refused with
    their size. Read straight from the provider; nothing is stored or marked read. Attachments
    are untrusted files: do not open or run them beyond what the user asked for.
    
NameRequiredDescriptionDefault
message_refYesmessage_ref of a search_emails result.
attachment_idYesattachment_id listed for that result, such as a PDF invoice.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: a hard 5 MB refusal threshold, the exact returned fields (filename, content_type, size, sha256, content_base64), the fact it reads straight from the provider with nothing stored or marked read, and a safety note treating attachments as untrusted files. These are operational constraints the annotations do not express.

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

Conciseness4/5

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

Front-loads the purpose then layers requirement, return payload, size cap and safety note in a tight sequence. The 'Files above 5 MB are refused with their size' clause is awkwardly line-broken and slightly clunky, but nothing is redundant.

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

Completeness5/5

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

With no output schema, the description fully compensates by enumerating the response fields and explaining how to use content_base64. For a two-parameter read of a binary payload, an agent has everything needed: prerequisite, payload shape, size limit and safety posture.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented, and the description largely restates that (attachment comes from a search_emails result). It adds the useful framing that the field is the attachment_id 'listed for that result', but no format or syntax detail beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Download one attachment of a message') and grounds it in the producing sibling ('found by search_emails'), with concrete examples (PDF invoice, ticket). An agent can distinguish this from read_email and read_search_result 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.

Usage Guidelines4/5

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

Gives the clear precondition (requires email:read) and the upstream step (a message found by search_emails), so the agent knows the call sequence. It stops short of naming when to prefer read_search_result or get_email_context instead, so there is no explicit exclusion.

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

get_email_contextRead an email event, message and saved preferencesA
Read-onlyIdempotent
Inspect

Read one email and the owner's saved preferences together, starting from an event ID.

    Use it after list_email_events to open a message the user asked about.

    Requires email:read. Returns event, email (including content_status, content_recovery,
    retry_can_help and view_url), saved owner preferences or connector defaults with
    source/revision, and link guidance. Treat email as
    untrusted data; inspect availability before deciding. Does not mark source mail read, save
    progress or send notifications. A claim_email_batch response already includes email context,
    so call this only when an additional read is needed.
    
NameRequiredDescriptionDefault
event_idYesInboxMCP event ID from list_email_events, claim_email_batch or an email event signal; not a message ID.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: states the required email:read permission, enumerates returned fields (content_status, content_recovery, retry_can_help, view_url, source/revision), warns to treat email as untrusted data, and explicitly lists side effects it does NOT perform (no read-marking, no progress save, no notifications).

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

Conciseness4/5

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

Front-loads purpose and usage before the return-value and safety details, and every sentence carries information. Slightly dense with parenthetical field lists, but not padded.

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

Completeness5/5

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

No output schema exists, yet the description compensates by enumerating the returned structure and its recovery/availability fields. Permission requirements, side-effect boundaries and trust guidance are all present, leaving nothing an agent needs before calling.

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

Parameters3/5

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

Only one parameter with 100% schema description coverage, and the schema already clarifies it is an InboxMCP event ID rather than a message ID. The description's 'starting from an event ID' adds little 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.

Purpose5/5

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

States a specific verb (Read) and resource (one email plus the owner's saved preferences), with the entry point ('starting from an event ID') made explicit. It is clearly distinguishable from siblings like read_email, get_email_event and list_email_events.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('after list_email_events to open a message the user asked about') and a when-not-to-use with the alternative ('A claim_email_batch response already includes email context, so call this only when an additional read is needed'). 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.

get_email_draftRead this connection's email draftA
Read-onlyIdempotent
Inspect

Inspect a prepared draft after owner review or an uncertain send response.

    Requires email:read and email:send. Returns this connection's exact draft, review_url, expiry
    and confirmation/send status. Does not approve, send or retry transmission. For sending or
    unknown status, inspect the sent mailbox/provider before proposing a replacement draft.
    
NameRequiredDescriptionDefault
draft_idYesDraft id returned by prepare_email_draft for this OAuth connection; not an incoming message or event ID.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare it read-only and idempotent, but the description adds permission requirements (email:read and email:send), the exact return payload (draft, review_url, expiry, confirmation/send status), and an explicit non-action list. That is meaningful context beyond the structured hints.

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

Conciseness5/5

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

Four short sentences, each carrying distinct information: trigger, permissions, return contents, and exclusions/alternative path. Nothing is redundant and the trigger is front-loaded.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating return fields, and it also documents the auth scope and the non-actions. An agent has everything needed to call this correctly.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already explains that draft_id comes from prepare_email_draft and is not a message/event ID. The description adds no further syntax or format guidance, so the baseline 3 applies.

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

Purpose5/5

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

The description pairs a specific verb and resource ('Inspect a prepared draft') with a clear role boundary ('this connection's exact draft'), which an agent can distinguish from prepare_email_draft, send_email, and get_sending_status 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.

Usage Guidelines5/5

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

It states explicit triggers ('after owner review or an uncertain send response'), explicit exclusions ('Does not approve, send or retry transmission'), and redirects the agent elsewhere when the status is unknown ('inspect the sent mailbox/provider'). When-to-use and when-not-to-use are both covered.

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

get_email_eventRead an email eventA
Read-onlyIdempotent
Inspect

Inspect one authorized event's metadata when its message body is not needed.

    Requires email:read. Returns mailbox_id, message_id, event status and any legacy decision/reason.
    Use get_email_context to read both the event and email. Does not save processing progress,
    change source mail or send notifications; a legacy decision is not this connection's completion.
    
NameRequiredDescriptionDefault
event_idYesInboxMCP event ID from list_email_events, claim_email_batch or an email event signal; not a message ID.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, closed-world, non-destructive), and the description still adds real value: the required 'email:read' scope, the exact returned fields (mailbox_id, message_id, event status, legacy decision/reason), and the subtle clarification that a legacy decision is not this connection's completion. That last point prevents a genuine misreading of the result.

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

Conciseness5/5

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

Front-loads purpose, then prerequisites, then alternatives/exclusions in three tight sentences with no filler. Every clause carries routing or safety information, including the dense final sentence about decision semantics.

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

Completeness5/5

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

For a one-parameter read with no output schema, the description compensates by enumerating the return fields and stating auth requirements. Combined with rich annotations and full schema coverage, an agent has everything needed to call this correctly and interpret the result.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains that event_id comes from list_email_events or claim_email_batch and is not a message ID. The description adds no parameter-level syntax or formatting detail beyond that, so the baseline 3 is correct.

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

Purpose5/5

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

States a specific verb and resource ('Inspect one authorized event's metadata') and immediately scopes it with 'when its message body is not needed,' which cleanly separates it from read_email and get_email_context. The sibling list confirms those alternatives exist and the description names one of them directly.

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

Usage Guidelines5/5

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

Gives an explicit when ('metadata ... when message body is not needed'), a named alternative ('Use get_email_context to read both the event and email'), and negative routing ('Does not save processing progress, change source mail or send notifications'), which steers the agent away from report_email_decision and send_email. 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.

get_email_monitor_stateCheck this AI connection's email monitoringA
Read-onlyIdempotent
Inspect

Check readiness before starting or troubleshooting this AI connection's email monitor.

    Requires email:read. Returns stored progress, mailbox collection health, pending/deferred
    counts, needs_owner_review_count, active lease and retention gaps, or not_configured with
    reconnection guidance. expired_deferred lists deferred events that retention removed before
    completion; it is informational and never blocks claims, unlike a retention gap.
    Progress is stored by InboxMCP, not by Notion or local files. This call changes no state,
    enables no collection and verifies no notifications. Reconnect for missing progress
    permission only if this client is eligible for consumer-state:write; a read-only client
    ceiling cannot be raised by reconnecting. Never reset an existing task's baseline.
    
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds far more: the required email:read scope, the precise semantics of expired_deferred versus a retention gap, the fact that progress is stored by InboxMCP rather than Notion or local files, the eligibility nuance for reconnecting to consumer-state:write, and the warning never to reset an existing task baseline.

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

Conciseness4/5

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

Purpose and scope are front-loaded in the first sentence, and most subsequent sentences carry load-bearing constraints and return-shape detail. It is nonetheless dense and long for a zero-argument read tool, with several clauses that could be tightened, keeping it out of the top score.

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

Completeness5/5

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

With no output schema, the description carries the burden of explaining returns, and it does so thoroughly (progress, health, counts, leases, retention gaps, the not_configured case with reconnection guidance). An agent has everything needed to invoke it and interpret the result.

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

Parameters4/5

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

This tool takes zero parameters, so per the rubric the baseline is 4. There is no argument surface for the description to disambiguate, and it correctly spends no words on parameter syntax.

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

Purpose5/5

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

The description uses a specific verb-and-resource framing (check readiness/state of this AI connection's email monitor) and then enumerates exactly what it reports: stored progress, mailbox collection health, pending/deferred counts, needs_owner_review_count, leases and retention gaps. That granularity makes it trivially separable from siblings like get_sending_status or list_email_events, which cover different concerns.

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

Usage Guidelines4/5

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

It states a clear context of use: 'Check readiness before starting or troubleshooting this AI connection's email monitor.' That tells the agent when the tool is relevant, but it names no alternative sibling and gives no explicit when-not condition, so it falls short of the 5-level routing guidance.

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

get_sending_statusCheck optional outgoing email setupA
Read-onlyIdempotent
Inspect

Check outgoing-mail setup before offering to prepare a reply or new email.

    Requires email:read. Returns each authorized mailbox's outgoing enabled status and fixed
    From address, agent_send_authorized and the owner's setup_url; never returns credentials.
    Changes no setup or permissions. Reading/monitoring do not require sending; preparing or
    sending drafts needs separate email:send consent. Setup never authorizes a draft.
    
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description earns credit for adding non-structural behavior: the required email:read scope, the guarantee that credentials are never returned, that no setup or permissions are mutated, and the consent boundary (setup never authorizes a draft). That is exactly the kind of context annotations cannot express.

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

Conciseness4/5

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

Front-loaded with the action and use context, then auth scope, return payload, and consent boundaries. Tight overall, though the closing 'Changes no setup or permissions' and 'Setup never authorizes a draft' overlap slightly, costing a small amount of redundancy.

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

Completeness5/5

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

With no output schema, the description carries the return burden itself and does so by listing the exact fields returned. Combined with the auth scope and the explicit statement that nothing is mutated, an agent has everything needed to call this safely.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies; there is nothing further the description could meaningfully add on parameter usage. No parameter-level semantics are needed or missing.

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

Purpose5/5

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

States a specific verb and resource ('Check outgoing-mail setup') and immediately enumerates what it returns (per-mailbox outgoing enabled status, fixed From address, agent_send_authorized, setup_url). This is clearly distinguishable from write-side siblings like prepare_email_draft and send_email.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('before offering to prepare a reply or new email') and draws the boundary against alternatives: reading/monitoring do not require sending, while preparing or sending drafts needs separate email:send consent. Nothing is left to inference about when this tool applies versus its siblings.

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

list_consumer_receiptsList this connection's completed emailsA
Read-onlyIdempotent
Inspect

Review the email events this AI connection has already completed with complete_email_batch.

    Requires email:read. Returns only this connection's receipts, newest completion first: event and
    message IDs, mailbox, completion time and sender/subject metadata, with total_completed and
    next_offset for paging. Deferred or pending events are not receipts and no email body is returned.
    Returns not_configured when this connection has no built-in progress. Changes no state, never shows
    another AI connection's progress and does not verify notifications. Find pending work with
    claim_email_batch, not with this history.
    
NameRequiredDescriptionDefault
limitNoMaximum receipts to return, from 1 to 100; default 50.
offsetNoReceipts to skip, from 0; pass next_offset from the previous page. Default 0.
mailbox_idNoOptional mailbox ID from list_mailboxes within this connection's monitor. Omit for all of its mailboxes.
completed_afterNoOptional ISO 8601 timestamp with timezone, such as a previous last_completed_at; returns receipts completed at or after it.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial context beyond them: the email:read permission requirement, the not_configured failure mode when no built-in progress exists, connection-scoped isolation, that no email body is returned, and that notifications are not verified.

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

Conciseness4/5

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

Front-loads the core purpose, then permission, return shape, and exclusions in a tight sequence. Slightly dense with several clauses packed into the final sentence, but every sentence carries distinct information and no filler.

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

Completeness5/5

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

With no output schema, the description compensates by naming the returned fields (event/message IDs, mailbox, completion time, sender/subject metadata, totals, paging cursor). Combined with permission, failure-mode, and scoping notes, an agent has everything needed to call and interpret it.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning: newest-completion-first ordering, the total_completed/next_offset paging contract, and mailbox scoping tied to this connection's monitor. It does not restate the limit bounds, which the schema already covers.

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

Purpose5/5

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

States a specific verb+resource with scope: reviewing email events this AI connection has already completed with complete_email_batch, returning only this connection's receipts. It distinguishes itself from the sibling claim_email_batch and from pending/deferred events explicitly.

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

Usage Guidelines5/5

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

Gives explicit routing: 'Find pending work with claim_email_batch, not with this history.' It also states what is excluded (deferred/pending events are not receipts) and the read-only historical nature of the tool, leaving nothing to inference.

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

list_email_eventsList incoming email eventsA
Read-onlyIdempotent
Inspect

Browse incoming email (sender, subject, time) when the user asks what arrived or who wrote.

    Requires email:read. Returns events with message IDs, sender/subject metadata and legacy decisions,
    oldest first with next_cursor, or newest first with next_before when newest_first is true. Use
    get_email_context for a listed event's body. For recurring monitoring use claim_email_batch instead:
    this listing does not save progress, and a recorded legacy decision does not mean this connection
    has processed the email.
    
NameRequiredDescriptionDefault
afterNoExclusive event cursor, zero or greater. Only events newer than it are listed. In oldest-first order pass next_cursor from the previous page; 0 starts at the oldest retained event.
limitNoMaximum number of events to return, from 1 to 100; default 50.
beforeNoWith newest_first: exclusive upper cursor; pass next_before from the previous page. 0 starts at the newest event.
newest_firstNoList the most recent email first, for questions like 'what came in today?' or 'did X write?'. Page further back with next_before.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description still adds real context beyond them: the required email:read scope, the ordering and cursor semantics of the result set, and the non-obvious caveat that a recorded legacy decision does not imply this connection processed the email.

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

Conciseness4/5

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

Front-loaded with purpose and alternatives, and each sentence carries distinct information (permission, return shape, paging, hand-off, caveat). The middle block is dense and could be split for scanability, but there is no filler.

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

Completeness5/5

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

There is no output schema, so the description correctly carries the return contract (message IDs, sender/subject metadata, legacy decisions, next_cursor / next_before paging) along with the auth requirement. Nothing an agent needs 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.

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (after, limit, before, newest_first) are already fully documented in the schema, including which cursor to pass for each direction. The description reinforces the directional paging model but adds no syntax or constraints beyond what the schema states, so the baseline 3 is appropriate.

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

Purpose5/5

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

Opens with a specific verb+resource ('Browse incoming email') and scopes it with a parenthetical of the fields returned plus the user intent it serves. It also names the sibling it is not ('Use get_email_context for a listed event's body', 'for recurring monitoring use claim_email_batch instead'), so an agent can route without opening a schema.

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

Usage Guidelines5/5

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

States the triggering condition ('when the user asks what arrived or who wrote') and two explicit alternatives with their own conditions. It goes further by naming when-not: recurring monitoring belongs to claim_email_batch because 'this listing does not save progress'.

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

list_mailboxesList authorized mailboxesA
Read-onlyIdempotent
Inspect

Start here when the user asks about their email: list the inboxes this AI may read.

    Covers Gmail, Outlook/Microsoft 365, QQ Mail, 163, Exmail and other IMAP mailboxes the owner ticked
    for this connection. Requires email:read. Returns a mailboxes array with IDs, addresses, providers and
    sync status; use its IDs in later calls. Does not connect mailboxes or enable collection. Never
    returns credentials. An empty list comes with owner_actions explaining what the owner can do.
    
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, and the description still adds real behavior: the required email:read permission, the guarantee that it never returns credentials, the fact it does not connect or enable collection, and the empty-list/owner_actions edge case. This is substantive disclosure 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.

Conciseness5/5

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

The opening sentence front-loads purpose and the entry-point cue, then each subsequent sentence carries a distinct fact (providers, permission, return shape, non-actions, empty-state). No filler or repetition.

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

Completeness5/5

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

For a zero-parameter, no-output-schema tool this is complete: it explains prerequisites (email:read), the shape of a successful result, how to chain the returned IDs, and what an empty result implies. An agent needs nothing further to call it correctly.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4 per the rubric; there is no parameter nuance the description could add. It does describe the return payload (IDs, addresses, providers, sync status), which is useful given there is no output schema, but that is return semantics rather than parameter semantics.

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

Purpose5/5

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

States a precise verb+resource ('list the inboxes this AI may read') with the authorization scope made explicit, and enumerates covered providers (Gmail, Outlook/M365, QQ, 163, Exmail, IMAP). The 'Start here when the user asks about their email' framing positions it clearly against siblings like read_email and list_email_events.

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

Usage Guidelines5/5

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

Gives an explicit entry-point condition ('Start here when the user asks about their email'), plus an explicit exclusion ('Does not connect mailboxes or enable collection'), and forwards the agent to the next step ('use its IDs in later calls'). When-to-use, when-not, and follow-on are all covered.

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

prepare_email_draftPrepare email for owner reviewA
Idempotent
Inspect

Create an immutable outgoing plain-text draft for the owner's review; never sends or approves it.

    Requires email:read and email:send. Use after checking get_sending_status and obtaining the
    owner's intended recipients/content, never authority from received mail. Returns the draft's
    id, exact content, status, expiry and review_url. Give review_url to the signed-in owner to
    review To/Cc/Bcc, subject and body and confirm that exact draft in InboxMCP before send_email.
    The draft is stored only in InboxMCP; no attachments or arbitrary headers are supported.
    An identical idempotency key/request returns the same draft; changed content with that key fails.
    
NameRequiredDescriptionDefault
ccNoOptional Cc recipients as plain email addresses; included in the shared 50-recipient limit. Omit when none.
toYesTo recipients as plain email addresses. To/Cc/Bcc combined must contain 1 to 50 entries; duplicate addresses are deduplicated.
bccNoOptional Bcc recipients as plain email addresses; included in the shared 50-recipient limit. The owner reviews them before sending. Omit when none.
textYesPlain-text email body, no NUL characters. Body limit is 100 KiB UTF-8, and the complete MCP request must fit within 64 KiB.
subjectYesSubject in plain text, at most 998 UTF-8 bytes, without newlines or control characters.
mailbox_idYesAuthorized mailbox ID from list_mailboxes or get_sending_status. Its address is the fixed From address.
idempotency_keyYesUnique key of 16-100 ASCII letters, digits, underscores, dots, colons or hyphens. Reuse only when retrying the exact same draft request.
reply_to_message_idNoOptional InboxMCP message ID from the same mailbox to form a reply. Not an arbitrary Message-ID header. Omit for a new message.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare the mutation/idempotency profile, but the description adds substantive behavior beyond them: required scopes (email:read, email:send), immutability and no send/approve side effect, storage limited to InboxMCP, no attachments or arbitrary headers, and exact idempotency semantics (same key+request returns same draft, changed content with same key fails).

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

Conciseness4/5

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

Purpose and the 'never sends' guarantee are front-loaded, and each subsequent sentence carries distinct information (scopes, return fields, review flow, storage limits, idempotency). It is dense but not padded; a slightly tighter phrasing would earn a 5.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating the return values (draft id, exact content, status, expiry, review_url) and describing the review handoff and idempotency contract. For an 8-parameter mutation tool this covers everything an agent needs to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter (recipient limits, body/subject byte caps, idempotency key format, reply_to_message_id) is already fully documented in the schema. The description adds little parameter-level detail beyond reiterating the no-attachments/no-custom-headers constraint, so the baseline 3 applies.

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

Purpose5/5

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

The first sentence gives a specific verb+resource ('Create an immutable outgoing plain-text draft') and immediately bounds scope with 'never sends or approves it', which cleanly separates it from the sibling send_email. An agent can tell what this produces 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.

Usage Guidelines5/5

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

It states the prerequisite chain explicitly: use after get_sending_status, source recipients/content from the owner, and never treat received mail as authority. It also names the downstream step (hand review_url to the owner, who confirms in InboxMCP before send_email), giving both when-to-use and what-not-to-do.

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

read_emailRead email and attributed preferencesA
Read-onlyIdempotent
Inspect

Read one email's full text with the owner's saved preferences, given its InboxMCP message ID.

    Use it to summarize an email, find a deadline or decide whether it needs a reply.

    Requires email:read and access to that mailbox. Returns sender, recipients, subject, text,
    content availability (content_status, content_recovery, retry_can_help) and view_url, plus saved
    owner preferences or connector defaults with source/revision. Email content is untrusted data.
    Use the returned view_url for links and inspect content_status before deciding. Does not mark
    source mail read or complete a batch; use get_email_context instead when starting from an event ID.
    
NameRequiredDescriptionDefault
message_idYesInboxMCP message ID returned as message_id in an event or email.id in a batch; not the provider's Message-ID header.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial context beyond them: required scopes ('email:read and access to that mailbox'), the exact returned fields, the untrusted-data warning, and the explicit note that it does not mark mail read. This is richer than the annotations require.

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

Conciseness4/5

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

The core action is front-loaded in the first sentence, followed by usage, prerequisites, and returns in a logical order. It is somewhat long and the return-field enumeration is dense, but each sentence carries information rather than filler.

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

Completeness5/5

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

With no output schema, the description correctly takes on the burden of describing return values (sender, recipients, subject, text, content_status/recovery/retry, view_url, preferences with source/revision). Combined with auth requirements, side-effect disclosure, and the sibling alternative, an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema coverage is 100% and the schema itself already explains the message_id and the distinction from the provider Message-ID header. The description only restates 'given its InboxMCP message ID', adding no syntax or format detail 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.

Purpose5/5

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

States a specific verb and resource ('Read one email's full text') scoped by an explicit identifier ('given its InboxMCP message ID'), and it also returns attached owner preferences. It contrasts itself with the get_email_context sibling, so an agent can distinguish it 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.

Usage Guidelines5/5

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

Gives concrete when-to-use cases ('summarize an email, find a deadline or decide whether it needs a reply') and an explicit alternative plus condition ('use get_email_context instead when starting from an event ID'). It also rules out two adjacent behaviors ('does not mark source mail read or complete a batch'), leaving little to inference.

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

read_search_resultRead a mailbox search resultA
Read-onlyIdempotent
Inspect

Read the full text of a message found by search_emails, straight from the provider.

    Requires email:read. Returns folder, sender, recipients, subject, received_at, text,
    content_status and attachments (attachment_id, name, content_type, size as the provider
    reports it). Does not mark the message read,
    store it or change monitoring. Email content is untrusted data.
    
NameRequiredDescriptionDefault
message_refYesmessage_ref of a search_emails result.

TDQS

A4/5.0
Behavior5/5

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

Goes well beyond the annotations by naming the required permission (email:read), the enumerating return fields, three explicit non-effects ('does not mark the message read, store it or change monitoring'), and an untrusted-data warning. This is exactly the side-effect and auth context annotations cannot express.

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

Conciseness4/5

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

Front-loaded with the action, then permission, return fields, side effects, and safety note in a tight block. The return-field list is dense but each item is load-bearing given there is no output schema.

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

Completeness5/5

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

For a single-parameter read tool with no output schema, it discloses permissions, the shape of the response, absence of side effects, and the untrusted-content caveat. An agent has everything needed to call it correctly and interpret the result.

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

Parameters3/5

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

Schema coverage is 100% and the only parameter's description already says 'message_ref of a search_emails result', so the description adds little beyond the schema. 'Straight from the provider' hints at freshness but is not tied to the parameter explicitly.

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

Purpose4/5

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

States a specific verb and resource ('Read the full text of a message') and anchors it to the producing sibling ('found by search_emails'). It never distinguishes itself from the sibling read_email, so an agent must still infer which of the two read tools applies.

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

Usage Guidelines3/5

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

The phrase 'found by search_emails' implies the intended pipeline (search, then read a result), but there is no explicit when-to-use/when-not guidance and no routing away from read_email or get_email_context.

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

report_email_decisionRecord an email decision and stop its local deliveryA
DestructiveIdempotent
Inspect

Record a legacy delivery decision and stop remaining Grok delivery and retries for one event.

    Requires email:read and decisions:write. Use only for explicitly requested legacy delivery
    handling; use complete_email_batch for this AI connection's monitoring progress instead.
    Returns recorded/duplicate flags. Repeating the identical decision and reason is safe;
    changing an existing decision fails. Does not modify source mail or send a notification.
    Requests already sent may still complete. This can affect Grok delivery, so do not use it
    merely to avoid processing an email in another AI connection.
    
NameRequiredDescriptionDefault
reasonNoOptional explanation, at most 1000 characters. Exact duplicate decisions must reuse the same reason.
decisionYesAgent's recorded classification: notify, digest or silent. This value does not trigger a notification.
event_idYesAuthorized InboxMCP event ID whose remaining legacy delivery should be stopped.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it states required scopes (email:read, decisions:write), the idempotency semantics in detail (identical decision+reason is safe; changing an existing decision fails), the non-effects (does not modify source mail or send a notification), and the important caveat that 'requests already sent may still complete'. Annotations flag destructive/idempotent, but the description explains what is actually destroyed and under what conditions.

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

Conciseness4/5

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

The primary action is front-loaded in the first sentence and every subsequent sentence carries distinct information (auth, alternative, idempotency, side effects). It is dense but not padded; only the heavy line-wrapping/indentation makes it slightly harder to scan than it needs to be.

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

Completeness5/5

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

With no output schema, the description compensates by stating the return shape ('Returns recorded/duplicate flags'), and it covers permissions, idempotency, failure modes, and blast radius for a destructive mutation. Nothing an agent needs to invoke it safely is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the meaning of event_id, decision, and reason is already fully documented in the schema, including the reason-reuse rule and the enum values. The description adds no parameter-level syntax or constraints 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.

Purpose5/5

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

States a specific verb and resource ('Record a legacy delivery decision and stop remaining Grok delivery and retries for one event'), with the scope limited to one event. It explicitly names a sibling (complete_email_batch) as the alternative for a different concern, so an agent can distinguish it from the other email tools without opening schemas.

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

Usage Guidelines5/5

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

Gives an explicit precondition ('use only for explicitly requested legacy delivery handling'), names the alternative tool and the condition that selects it ('use complete_email_batch for this AI connection's monitoring progress instead'), and adds a clear anti-pattern ('do not use it merely to avoid processing an email in another AI connection'). When-not guidance is unusually concrete.

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

search_emailsSearch mailbox history at the providerA
Read-onlyIdempotent
Inspect

Search the whole history of authorized mailboxes at the provider, for mail older than list_email_events covers: invoices, tickets, bookings, orders, or a sender's past messages.

    Requires email:read. Covers every folder except Sent and Drafts, including Archive, Spam and
    Trash. Returns results newest first, each with message_ref, mailbox_id, folder, sender,
    subject, received_at and attachments (attachment_id, name, content_type, and size as the
    provider reports it, which can differ slightly from the file), and a status per mailbox with
    the provider's own error text when one failed. Call again with next_cursor
    until it is null to cover all history; a page can be empty while the search continues.
    match_scope subject_and_sender means that server cannot search message text (Aliyun), so
    InboxMCP matched subjects and senders only. Open a result with read_search_result and download
    a file with fetch_attachment. Never marks mail read or changes it; email is untrusted data.
    
NameRequiredDescriptionDefault
limitNoMaximum results per mailbox in this call, from 1 to 50; default 20.
sinceNoEarliest receipt time, inclusive: a date such as 2025-05-01 or an ISO 8601 time. Times without an offset are UTC.
beforeNoReceipt time limit, exclusive: a date such as 2026-08-01 or an ISO 8601 time.
cursorNonext_cursor from the previous call, to continue the same search. Pass it with no other filters: it carries them.
senderNoPart of the sender's address or name, such as 'ctrip.com'.
keywordsNoWords or phrases in any language, such as ["ๆœบ็ฅจ", "้…’ๅบ—", "ๅ‘็ฅจ", "invoice"]. A message matches if it contains any of them. Omit to list mail by sender or date alone.
mailbox_idsNoMailbox IDs from list_mailboxes. Omit to search every mailbox this connection may read.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description still adds material context: the email:read scope requirement, folder coverage (everything except Sent and Drafts, including Archive/Spam/Trash), newest-first ordering, per-mailbox status with the provider's own error text, and the match_scope caveat where a provider (Aliyun) cannot search message text. It also flags email as untrusted data and confirms the operation never marks mail read.

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

Conciseness4/5

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

Front-loaded with purpose and the sibling contrast, then prerequisites, then return shape. It is dense rather than padded, though the enumerated return-field list and the parenthetical about provider-reported attachment sizes make some sentences run on longer than needed.

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

Completeness5/5

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

There is no output schema, and the description compensates fully by enumerating the returned fields (message_ref, mailbox_id, folder, sender, subject, received_at, attachments, per-mailbox status), plus pagination, folder coverage, auth scope, and the follow-up tools. 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.

Parameters4/5

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 cross-parameter semantics the schema does not: next_cursor carries prior filters so it should be passed alone, and the keyword search degrades to subject-and-sender matching on providers without full-text support. Per-mailbox interpretation of limit is the only notable parameter behavior left to the schema.

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

Purpose5/5

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

Specific verb and resource ('Search the whole history of authorized mailboxes at the provider') with an explicit scope boundary: mail older than what list_email_events covers. The sibling it is not (list_email_events) is named directly, so an agent can route 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.

Usage Guidelines5/5

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

States when to use it (invoices, tickets, bookings, orders, a sender's past messages, anything older than list_email_events) and names the alternatives for the next step (read_search_result to open a result, fetch_attachment to download). It also gives the loop condition ('call again with next_cursor until it is null') and warns that an empty page does not mean the search is over.

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

send_emailSend an owner-confirmed email draftA
Idempotent
Inspect

Send only an exact draft recently approved by the owner in the InboxMCP browser.

    Requires email:read, email:send and enabled outgoing setup for the mailbox. This submits mail
    externally and has no approval override. Returns draft details, status and review_url;
    awaiting_confirmation returns without sending. Accepted/sending/unknown/failed results are
    never retransmitted by repeating this call. Unknown may already have been delivered: inspect
    the sent mailbox/provider before proposing another send. Accepted confirms provider acceptance
    only; never claim final recipient delivery. Use get_email_draft to check status without sending.
    
NameRequiredDescriptionDefault
draft_idYesDraft id returned by prepare_email_draft for this connection; the signed-in owner must approve its exact content in InboxMCP before transmission.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds critical context beyond these: it submits mail externally with no approval override, accepted means provider acceptance only (not final delivery), unknown may already have been delivered, and repeating the call does not retransmit. This is rich behavioral disclosure not present in annotations.

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

Conciseness4/5

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

Front-loaded with the core purpose and then layered with critical caveats. Slightly dense with multiple clauses, but every sentence addresses a real risk (retransmission, delivery ambiguity). Well-structured for a high-stakes mutation tool.

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

Completeness5/5

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

Covers permissions required, external side effects, no approval override, return shape (draft details, status, review_url), failure semantics (accepted/sending/unknown/failed), and the correct alternative for status checks. Complete for a single-param mutation tool with no output schema.

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

Parameters3/5

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

Schema coverage is 100% and the schema description already explains the draft_id must be owner-approved. The description reinforces this ('exact draft recently approved by the owner') but adds no new syntax or format details beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Send ... email draft') with a hard constraint baked into the purpose: 'Send only an exact draft recently approved by the owner in the InboxMCP browser.' This immediately distinguishes it from siblings like prepare_email_draft and get_email_draft.

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

Usage Guidelines5/5

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

Explicitly names get_email_draft as the alternative for status checking and states the condition for 'awaiting_confirmation' (returns without sending). It also warns against retransmission on non-accepted results and tells the agent to inspect the sent mailbox before proposing another send.

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.

  1. 3 tool updates
    • Changedfetch_attachment11 fields changed
      • removedInput schema / properties / attachment_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / attachment_id / default
        Removed value: -null
      • changedInput schema / properties / attachment_id / description
        Previous value: -"For Microsoft: attachment ID from list or search. For IMAP: use attachment_index instead."New value: +"attachment_id listed for that result, such as a PDF invoice."
      • addedInput schema / properties / attachment_id / type
        Added value: +"string"
      • removedInput schema / properties / attachment_index
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "For IMAP: 1-based index of attachment. For Microsoft: use attachment_id instead.",
        -  "title": "Attachment Index"
        -}
      • removedInput schema / properties / folder
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "For IMAP: folder name from the search result.",
        -  "title": "Folder"
        -}
      • removedInput schema / properties / mailbox_id
        Removed value: -{
        -  "description": "Mailbox ID from the search result.",
        -  "title": "Mailbox Id",
        -  "type": "string"
        -}
      • addedInput schema / properties / message_ref
        Added value: +{
        +  "description": "message_ref of a search_emails result.",
        +  "title": "Message Ref",
        +  "type": "string"
        +}
      • removedInput schema / properties / provider
        Removed value: -{
        -  "description": "Provider type: 'imap' or 'microsoft'.",
        -  "title": "Provider",
        -  "type": "string"
        -}
      • removedInput schema / properties / provider_uid
        Removed value: -{
        -  "description": "Provider UID from the search result (IMAP UID or Graph message ID).",
        -  "title": "Provider Uid",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "mailbox_id",
        -  "provider_uid",
        -  "provider"
        -]New value: +[
        +  "message_ref",
        +  "attachment_id"
        +]
    • Changedread_search_result6 fields changed
      • removedInput schema / properties / folder
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "For IMAP: folder name from the search result.",
        -  "title": "Folder"
        -}
      • removedInput schema / properties / mailbox_id
        Removed value: -{
        -  "description": "Mailbox ID from the search result.",
        -  "title": "Mailbox Id",
        -  "type": "string"
        -}
      • addedInput schema / properties / message_ref
        Added value: +{
        +  "description": "message_ref of a search_emails result.",
        +  "title": "Message Ref",
        +  "type": "string"
        +}
      • removedInput schema / properties / provider
        Removed value: -{
        -  "description": "Provider type from the search result: 'imap' or 'microsoft'.",
        -  "title": "Provider",
        -  "type": "string"
        -}
      • removedInput schema / properties / provider_uid
        Removed value: -{
        -  "description": "Provider UID from the search result (IMAP UID or Graph message ID).",
        -  "title": "Provider Uid",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "mailbox_id",
        -  "provider_uid",
        -  "provider"
        -]New value: +[
        +  "message_ref"
        +]
    • Changedsearch_emails13 fields changed
      • changedInput schema / properties / before / description
        Previous value: -"ISO 8601 date string for the end of the date range (exclusive)."New value: +"Receipt time limit, exclusive: a date such as 2026-08-01 or an ISO 8601 time."
      • addedInput schema / properties / cursor
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "next_cursor from the previous call, to continue the same search. Pass it with no other filters: it carries them.",
        +  "title": "Cursor"
        +}
      • removedInput schema / properties / folder
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "For IMAP: specific folder to search (e.g., 'INBOX', 'Archive'). Overrides include_spam/include_archive.",
        -  "title": "Folder"
        -}
      • removedInput schema / properties / include_archive
        Removed value: -{
        -  "default": true,
        -  "description": "Include Archive folders in search (default: True).",
        -  "title": "Include Archive",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / include_spam
        Removed value: -{
        -  "default": true,
        -  "description": "Include Spam/Junk folders in search (default: True).",
        -  "title": "Include Spam",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / keywords / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / keywords / description
        Previous value: -"Keywords or phrase to search in subject and body. Supports non-ASCII (Chinese) text."New value: +"Words or phrases in any language, such as [\"ๆœบ็ฅจ\", \"้…’ๅบ—\", \"ๅ‘็ฅจ\", \"invoice\"]. A message matches if it contains any of them. Omit to list mail by sender or date alone."
      • changedInput schema / properties / limit / default
        Previous value: -50New value: +20
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of results to return per mailbox, from 1 to 100. Default 50."New value: +"Maximum results per mailbox in this call, from 1 to 50; default 20."
      • changedInput schema / properties / mailbox_ids / description
        Previous value: -"List of mailbox IDs to search. If omitted, searches all authorized mailboxes."New value: +"Mailbox IDs from list_mailboxes. Omit to search every mailbox this connection may read."
      • removedInput schema / properties / offset
        Removed value: -{
        -  "default": 0,
        -  "description": "Number of results to skip for pagination. Default 0.",
        -  "title": "Offset",
        -  "type": "integer"
        -}
      • changedInput schema / properties / sender / description
        Previous value: -"Filter by sender email address."New value: +"Part of the sender's address or name, such as 'ctrip.com'."
      • changedInput schema / properties / since / description
        Previous value: -"ISO 8601 date string (e.g., '2025-05-01T00:00:00Z') for the start of the date range."New value: +"Earliest receipt time, inclusive: a date such as 2025-05-01 or an ISO 8601 time. Times without an offset are UTC."
  2. 3 tool updates
    • Addedfetch_attachment
    • Addedread_search_result
    • Addedsearch_emails
  3. 1 tool update
    • Changedlist_email_events3 fields changed
      • changedInput schema / properties / after / description
        Previous value: -"Exclusive event cursor, zero or greater. Use next_cursor from the previous page; 0 starts at the oldest retained event."New value: +"Exclusive event cursor, zero or greater. Only events newer than it are listed. In oldest-first order pass next_cursor from the previous page; 0 starts at the oldest retained event."
      • addedInput schema / properties / before
        Added value: +{
        +  "default": 0,
        +  "description": "With newest_first: exclusive upper cursor; pass next_before from the previous page. 0 starts at the newest event.",
        +  "title": "Before",
        +  "type": "integer"
        +}
      • addedInput schema / properties / newest_first
        Added value: +{
        +  "default": false,
        +  "description": "List the most recent email first, for questions like 'what came in today?' or 'did X write?'. Page further back with next_before.",
        +  "title": "Newest First",
        +  "type": "boolean"
        +}
  4. 2 tool updates
    • Changedcomplete_email_batch1 field changed
      • changedInput schema / properties / deferred_event_ids / description
        Previous value: -"Issued event_id values that could not be processed. Must be disjoint from event_ids; the two lists together must contain 1 to 50 distinct IDs. Omit when none."New value: +"Issued event_id values not processed yet that should be retried later: unfinished work, or content whose retry_can_help is true. Must be disjoint from event_ids; the two lists together must contain 1 to 50 distinct IDs. Omit when none."
    • Addedlist_consumer_receipts
  5. 10 tool updates
    • Changedclaim_email_batch1 field changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum emails to lease for this run, from 1 to 50; default 20."
    • Changedcomplete_email_batch3 fields changed
      • addedInput schema / properties / batch_id / description
        Added value: +"Batch ID returned by claim_email_batch for this connection. A new outcome requires an unexpired lease."
      • addedInput schema / properties / deferred_event_ids / description
        Added value: +"Issued event_id values that could not be processed. Must be disjoint from event_ids; the two lists together must contain 1 to 50 distinct IDs. Omit when none."
      • addedInput schema / properties / event_ids / description
        Added value: +"Distinct event_id values issued in this batch that were actually processed, including no-reminder decisions. May be empty if deferring items."
    • Changedget_email_context1 field changed
      • addedInput schema / properties / event_id / description
        Added value: +"InboxMCP event ID from list_email_events, claim_email_batch or an email event signal; not a message ID."
    • Changedget_email_draft1 field changed
      • addedInput schema / properties / draft_id / description
        Added value: +"Draft id returned by prepare_email_draft for this OAuth connection; not an incoming message or event ID."
    • Changedget_email_event1 field changed
      • addedInput schema / properties / event_id / description
        Added value: +"InboxMCP event ID from list_email_events, claim_email_batch or an email event signal; not a message ID."
    • Changedlist_email_events2 fields changed
      • addedInput schema / properties / after / description
        Added value: +"Exclusive event cursor, zero or greater. Use next_cursor from the previous page; 0 starts at the oldest retained event."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of events to return, from 1 to 100; default 50."
    • Changedprepare_email_draft8 fields changed
      • addedInput schema / properties / bcc / description
        Added value: +"Optional Bcc recipients as plain email addresses; included in the shared 50-recipient limit. The owner reviews them before sending. Omit when none."
      • addedInput schema / properties / cc / description
        Added value: +"Optional Cc recipients as plain email addresses; included in the shared 50-recipient limit. Omit when none."
      • addedInput schema / properties / idempotency_key / description
        Added value: +"Unique key of 16-100 ASCII letters, digits, underscores, dots, colons or hyphens. Reuse only when retrying the exact same draft request."
      • addedInput schema / properties / mailbox_id / description
        Added value: +"Authorized mailbox ID from list_mailboxes or get_sending_status. Its address is the fixed From address."
      • addedInput schema / properties / reply_to_message_id / description
        Added value: +"Optional InboxMCP message ID from the same mailbox to form a reply. Not an arbitrary Message-ID header. Omit for a new message."
      • addedInput schema / properties / subject / description
        Added value: +"Subject in plain text, at most 998 UTF-8 bytes, without newlines or control characters."
      • addedInput schema / properties / text / description
        Added value: +"Plain-text email body, no NUL characters. Body limit is 100 KiB UTF-8, and the complete MCP request must fit within 64 KiB."
      • addedInput schema / properties / to / description
        Added value: +"To recipients as plain email addresses. To/Cc/Bcc combined must contain 1 to 50 entries; duplicate addresses are deduplicated."
    • Changedread_email1 field changed
      • addedInput schema / properties / message_id / description
        Added value: +"InboxMCP message ID returned as message_id in an event or email.id in a batch; not the provider's Message-ID header."
    • Changedreport_email_decision3 fields changed
      • addedInput schema / properties / decision / description
        Added value: +"Agent's recorded classification: notify, digest or silent. This value does not trigger a notification."
      • addedInput schema / properties / event_id / description
        Added value: +"Authorized InboxMCP event ID whose remaining legacy delivery should be stopped."
      • addedInput schema / properties / reason / description
        Added value: +"Optional explanation, at most 1000 characters. Exact duplicate decisions must reuse the same reason."
    • Changedsend_email1 field changed
      • addedInput schema / properties / draft_id / description
        Added value: +"Draft id returned by prepare_email_draft for this connection; the signed-in owner must approve its exact content in InboxMCP before transmission."
  6. 13 tool updates
    • First observedclaim_email_batch
    • First observedcomplete_email_batch
    • First observedget_email_context
    • First observedget_email_draft
    • First observedget_email_event
    • First observedget_email_monitor_state
    • First observedget_sending_status
    • First observedlist_email_events
    • First observedlist_mailboxes
    • First observedprepare_email_draft
    • First observedread_email
    • First observedreport_email_decision
    • First observedsend_email

Publisher details

Operator
Martha Trade Pte. Ltd. ยท Publisher source
Operator website
https://inboxmcp.ai
Vendor relationship
First-party
Documentation
Not available
Trust center
Not available
Restrictions
Requires an InboxMCP account. Users connect their own mailboxes and authorize via OAuth (read-only by default). Sending email requires a separate permission and per-message confirmation by the owner.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Gives AI agents their own email address with inbound parsing, classification, extraction, and prompt injection screening, plus tools to manage mailboxes, send/receive emails, and handle draft approval workflows.
    14
    26 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Hosted email for AI agents. Connect Gmail, Outlook / Microsoft 365 or any IMAP mailbox to Claude, ChatGPT, Cursor and other MCP clients, then read, search, send, organize, draft, schedule and auto-triage mail. Email is fetched live and never stored. Free for 1 inbox and 150 email actions a month.
    23
    13
    AGPL 3.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to run real email operations across multiple IMAP/SMTP and provider OAuth accounts โ€” syncing, searching, reading, drafting, attaching, and sending mail โ€” while requiring explicit human approval for sending, deleting, or forwarding and recording an inspectable audit trail.
    149,589 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Connects AI agents to a user's mailbox with OAuth-scoped permissions, enabling email sending, inbox management, verification-email capture for tests, and migration from Resend.
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.