Skip to main content
Glama

Move Email

move_email
Destructive

Moves an email to another mailbox (nested target folders are found by name). Pass account= (returned by list_emails/search_emails) so the message lookup targets one account instead of scanning all of them — without it, multi-account Macs are slow and can time out on bulk moves. If you know the folder the message is in, also pass mailbox= (the mailbox field from the listing) so the lookup searches it first. On an Exchange account Mail cannot confirm the move with the server, so it answers moved=false with status server_unconfirmed: use m365_move_email for that mailbox.

Input Schema

NameRequiredDescriptionDefault
accountNoMail.app account the message lives in (returned alongside the id). Pass it so the message is found in the right account.
confirmNoIgnored; kept for older clients.false
mailboxNoFolder the message is in TODAY, before the move. Passing it skips searching the other folders.
message_idYesThe message id returned by list_emails or search_emails. Accepts the bare id or the <angle-bracketed> form.
target_mailboxYesDestination folder, by name (see list_email_folders). Nested folders are found by their own name, not by a path.

Output Schema

NameRequiredDescriptionDefault
toNo
movedNo
statusNo
warningNo
message_idNo
server_confirmedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / confirm / description
      Previous value: -"Set to true to actually move the message. Defaults to false."New value: +"Ignored; kept for older clients."
  2. Changed2 schema fields changed
    • addedOutput schema / properties / server_confirmed
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "enum": [
      +    "server_unconfirmed"
      +  ],
      +  "type": "string"
      +}
  3. Changed5 schema fields changed
    • addedInput schema / properties / account / description
      Added value: +"Mail.app account the message lives in (returned alongside the id). Pass it so the message is found in the right account."
    • addedInput schema / properties / confirm / description
      Added value: +"Set to true to actually move the message. Defaults to false."
    • addedInput schema / properties / mailbox / description
      Added value: +"Folder the message is in TODAY, before the move. Passing it skips searching the other folders."
    • addedInput schema / properties / message_id / description
      Added value: +"The message id returned by list_emails or search_emails. Accepts the bare id or the <angle-bracketed> form."
    • addedInput schema / properties / target_mailbox / description
      Added value: +"Destination folder, by name (see list_email_folders). Nested folders are found by their own name, not by a path."
  4. Changed5 schema fields changed
    • removedInput schema / properties / account / description
      Removed value: -"Mail.app account the message lives in (returned alongside the id). Pass it so the message is found in the right account."
    • removedInput schema / properties / confirm / description
      Removed value: -"Set to true to actually move the message. Defaults to false."
    • removedInput schema / properties / mailbox / description
      Removed value: -"Folder the message is in TODAY, before the move. Passing it skips searching the other folders."
    • removedInput schema / properties / message_id / description
      Removed value: -"The message id returned by list_emails or search_emails. Accepts the bare id or the <angle-bracketed> form."
    • removedInput schema / properties / target_mailbox / description
      Removed value: -"Destination folder, by name (see list_email_folders). Nested folders are found by their own name, not by a path."
  5. Changed5 schema fields changed
    • addedInput schema / properties / account / description
      Added value: +"Mail.app account the message lives in (returned alongside the id). Pass it so the message is found in the right account."
    • addedInput schema / properties / confirm / description
      Added value: +"Set to true to actually move the message. Defaults to false."
    • addedInput schema / properties / mailbox / description
      Added value: +"Folder the message is in TODAY, before the move. Passing it skips searching the other folders."
    • addedInput schema / properties / message_id / description
      Added value: +"The message id returned by list_emails or search_emails. Accepts the bare id or the <angle-bracketed> form."
    • addedInput schema / properties / target_mailbox / description
      Added value: +"Destination folder, by name (see list_email_folders). Nested folders are found by their own name, not by a path."
  6. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the destructive/open-world annotations by disclosing performance behavior (multi-account scanning, bulk-move timeouts) and a platform limitation where Mail cannot confirm Exchange moves to the server. It explains the exact moved=false/server_unconfirmed result and points to m365_move_email as the fallback.

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 dense sentences with no filler: purpose first, then account guidance, mailbox guidance, and the Exchange caveat. The scoping guidance is front-loaded and each sentence earns its place.

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?

Given a destructive move tool with full schema coverage, annotations, and an output schema, the description covers the remaining behavioral risks an agent needs: multi-account lookup cost, folder lookup shortcut, and the Exchange limitation. Nothing material is missing 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?

Schema description coverage is 100%, so the parameter meanings are already well documented. The description reinforces the operational impact of account= and mailbox= and clarifies nested target matching, but most of this overlaps with the schema rather than adding new per-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 specific verb and resource ("Moves an email to another mailbox") and immediately clarifies nested-folder matching by name. It also distinguishes itself from m365_move_email for Exchange accounts, so an agent can tell which mover to pick without opening sibling schemas.

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

Usage Guidelines5/5

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

Explicitly tells the agent to pass account= from list_emails/search_emails and mailbox= when known, explaining why multi-account Macs can be slow or time out without them. It also names the alternative for Exchange accounts and the condition that triggers it: moved=false with status server_unconfirmed.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources