Skip to main content
Glama

Move Email

move_email

Move emails from one Apple Mail mailbox to another using subject, sender, date, or ID filters. Preview matches with dry run before archiving or organizing.

Instructions

Move email(s) matching filters from one mailbox to another.

Supports subject, sender, and date filters. Use dry_run=True to preview matches without moving. Set only_read=True to skip unread emails (useful for archiving). For archiving to "Archive", just set to_mailbox="Archive". Pass message_ids to move specific messages by exact id (ignores other filters; same fast path as update_email_status).

Input Schema

NameRequiredDescriptionDefault
senderNoOptional sender to filter emails by
accountYesAccount name (e.g., "Gmail", "Work")
dry_runNoIf True, preview what would be moved without acting (default: False)
max_movesNoMaximum number of emails to move (default: 50, safety limit)
only_readNoIf True, only move emails that have been read (default: False)
to_mailboxYesDestination mailbox name. For nested mailboxes, use "/" separator (e.g., "Projects/Amplify Impact")
message_idsNoOptional list of exact Mail message ids for precise targeting. When set, all other filters are ignored.
from_mailboxNoSource mailbox name (default: "INBOX")INBOX
older_than_daysNoOptional age filter - only move emails older than N days
subject_keywordNoOptional keyword to search for in email subjects
subject_keywordsNoOptional list of keywords to match in subjects; matches any keyword

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed27 schema fields changedv3.2.1
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / account / description
      Added value: +"Account name (e.g., \"Gmail\", \"Work\")"
    • removedInput schema / properties / account / title
      Removed value: -"Account"
    • addedInput schema / properties / dry_run / description
      Added value: +"If True, preview what would be moved without acting (default: False)"
    • removedInput schema / properties / dry_run / title
      Removed value: -"Dry Run"
    • addedInput schema / properties / from_mailbox / description
      Added value: +"Source mailbox name (default: \"INBOX\")"
    • removedInput schema / properties / from_mailbox / title
      Removed value: -"From Mailbox"
    • addedInput schema / properties / max_moves / description
      Added value: +"Maximum number of emails to move (default: 50, safety limit)"
    • removedInput schema / properties / max_moves / title
      Removed value: -"Max Moves"
    • addedInput schema / properties / message_ids / description
      Added value: +"Optional list of exact Mail message ids for precise targeting. When set, all other filters are ignored."
    • removedInput schema / properties / message_ids / title
      Removed value: -"Message Ids"
    • addedInput schema / properties / older_than_days / description
      Added value: +"Optional age filter - only move emails older than N days"
    • removedInput schema / properties / older_than_days / title
      Removed value: -"Older Than Days"
    • addedInput schema / properties / only_read / description
      Added value: +"If True, only move emails that have been read (default: False)"
    • removedInput schema / properties / only_read / title
      Removed value: -"Only Read"
    • addedInput schema / properties / sender / description
      Added value: +"Optional sender to filter emails by"
    • removedInput schema / properties / sender / title
      Removed value: -"Sender"
    • addedInput schema / properties / subject_keyword / description
      Added value: +"Optional keyword to search for in email subjects"
    • removedInput schema / properties / subject_keyword / title
      Removed value: -"Subject Keyword"
    • addedInput schema / properties / subject_keywords / description
      Added value: +"Optional list of keywords to match in subjects; matches any keyword"
    • removedInput schema / properties / subject_keywords / title
      Removed value: -"Subject Keywords"
    • addedInput schema / properties / to_mailbox / description
      Added value: +"Destination mailbox name. For nested mailboxes, use \"/\" separator (e.g., \"Projects/Amplify Impact\")"
    • removedInput schema / properties / to_mailbox / title
      Removed value: -"To Mailbox"
    • removedInput schema / title
      Removed value: -"move_emailArguments"
    • removedOutput schema / properties / result / title
      Removed value: -"Result"
    • removedOutput schema / title
      Removed value: -"move_emailOutput"
    • addedOutput schema / x-fastmcp-wrap-result
      Added value: +true
  2. Changed1 schema field changedv3.1.8
    • addedInput schema / properties / message_ids
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Message Ids"
      +}
  3. First observedv3.1.0

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose real behavior: dry_run previews without acting, message_ids overrides all other filters, and only_read restricts to read mail. It omits whether the destination mailbox must already exist, permission requirements, and whether the move is reversible, which is a meaningful gap for an unannotated mutation tool.

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?

Five short sentences, front-loaded with the core action and then the highest-value usage hints (dry_run, only_read, Archive shorthand, message_ids precedence). Every sentence contributes; there is no filler or repetition of the tool name.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description covers the key invocation paths for an 11-parameter mutation tool. It is slightly short of complete because the max_moves safety limit and failure behavior (missing destination mailbox, partial moves) go unaddressed given there are no annotations to cover them.

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 schema already documents all 11 parameters and the baseline is 3. The description restates dry_run/only_read/message_ids semantics that the schema already provides, adding only marginal value (the 'Archive' shorthand and the sibling fast-path reference), so it does not rise above baseline.

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 opening sentence names a specific verb and resource ('Move email(s) ... from one mailbox to another') plus the selection mechanism (filters). It also distinguishes itself from sibling update_email_status by calling out that message_ids uses 'the same fast path', so an agent can route between the two.

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 gives concrete when-to-use guidance: dry_run=True to preview, only_read=True 'useful for archiving', and message_ids for exact-id targeting. It stops short of stating when NOT to use this tool (e.g. versus search_emails or update_email_status for non-move operations), so it is clear context without exclusions.

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