Skip to main content
Glama

Microsoft 365 Move Email

m365_move_email
Destructive

Use this when the user wants emails of their Microsoft 365 / Outlook account moved to another folder on the Exchange server, to file, archive or organize them. Name the messages with message_id (one) or message_ids (up to 50), from m365_list_emails, m365_search_emails or m365_read_email; or a whole conversation with conversation_id (from m365_list_emails or m365_search_emails): then only its messages in source_folder (default inbox) move, never its copies in Sent Items, Drafts or other folders, unless all_folders=true. destination is a folder id, name or path from m365_list_email_folders, or inbox, archive, deleteditems, junkemail. A message counts as moved only when a second read shows it in the destination and no longer at its old id; a moved message gets a new id (new_id). Needs the Microsoft 365 permission Mail.ReadWrite: an account connected before it was asked for answers consent_required until it is connected again. For mail in the Mac's Mail app, use move_email.

Input Schema

NameRequiredDescriptionDefault
accountNoWhich connected Microsoft 365 account to use: its email (UPN), its id from list_m365_accounts, or its display name when unique. Leave it out to use the default account.
confirmNoIgnored; kept for older clients.
message_idNoThe ID of one message to move.
all_foldersNoWith conversation_id: true moves its messages from every folder, Sent Items and Drafts included (default false).
destinationYesThe folder to move them to: an id, name or path from m365_list_email_folders, or inbox, archive, deleteditems, junkemail.
message_idsNoIDs of up to 50 messages to move.
source_folderNoWith conversation_id: the folder its messages are moved from (default inbox). An id, name or path.
conversation_idNoMove the messages of this conversation that are in source_folder.

Output Schema

NameRequiredDescriptionDefault
countYes
movedYestrue only when every message was confirmed in the destination.
statusYes
accountNoThe email (UPN) of the Microsoft 365 account this call used.
messageNo
partialNotrue when the conversation has more messages than one call moves (50).
resultsYes
destinationNo
moved_countYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / confirm / description
      Previous value: -"Set to true to move (default: shows a preview only)."New value: +"Ignored; kept for older clients."
  2. Added

TDQS

A4.6/5.0
Behavior5/5

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

Goes well past the destructiveHint=true annotation: it discloses that a conversation move only affects messages in source_folder and never Sent Items/Drafts copies unless all_folders=true, that a move is verified by a second read and yields a new id, and that Mail.ReadWrite is required with accounts connected earlier returning consent_required until reconnected. That is exactly the 'what actually happens / what auth is needed' 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 usage trigger before the mechanics, and nearly every clause carries decision-relevant information (source tools, folder scoping, verification, permission). It is dense and semicolon-chained, bordering on a run-on, so not maximally tidy, but nothing is padding.

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 an 8-parameter destructive mutation with an output schema, it covers the remaining agent-relevant gaps: input provenance, folder scoping default, the new-id consequence, and the permission/consent failure mode. Return values needn't be explained since an output schema exists, and they aren't over-explained.

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 every parameter, including the message_ids cap of 50 and the source_folder/all_folders interaction. The description mostly restates those semantics; its only real addition is naming the sibling tools that produce the IDs. Baseline 3 applies given the schema does the heavy lifting.

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 ('emails of their Microsoft 365 / Outlook account moved to another folder on the Exchange server') plus the user-facing intent (file, archive, organize). It explicitly distinguishes itself from the similarly-named Mac Mail sibling: 'For mail in the Mac's Mail app, use move_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 when-to-use trigger ('when the user wants emails ... moved to another folder'), names the alternative tool for the other mail backend, and tells the agent where to get valid inputs (m365_list_emails, m365_search_emails, m365_read_email, m365_list_email_folders). Selection between the three targeting modes (message_id / message_ids / conversation_id) is spelled out.

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