Skip to main content
Glama
kojott

mailmcp

Modify message

modify_message
DestructiveIdempotent

Update mailbox messages: mark read/unread, star, label, archive, or move them; if a move returns moved_uid, use that id for later actions.

Instructions

Mark read/unread, star/unstar, add/remove labels (Gmail labels, Outlook categories), move to a folder or archive. A move can change the id of the message: when the result carries moved_uid, use that id from then on.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
uidYesuid from search_messages: a number on IMAP mailboxes, an id string on Outlook; pass it back exactly as returned
seenNo
folderNoFolder/label path. Defaults to All Mail on Gmail, INBOX elsewhere.
accountYesAccount id from list_accounts
archiveNoRemove from inbox (Gmail) or move to Archive
flaggedNo
move_toNoDestination folder path
add_labelsNoGmail only
remove_labelsNoGmail only

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.8.1
    • addedInput schema / properties / uid / description
      Added value: +"uid from search_messages: a number on IMAP mailboxes, an id string on Outlook; pass it back exactly as returned"
    • addedInput schema / properties / uid / maxLength
      Added value: +512
    • removedInput schema / properties / uid / maximum
      Removed value: -9007199254740991
    • addedInput schema / properties / uid / minLength
      Added value: +1
    • removedInput schema / properties / uid / minimum
      Removed value: -1
    • changedInput schema / properties / uid / type
      Previous value: -"integer"New value: +"string"
  2. First observedv0.1.0

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the mutating nature is covered structurally. The description adds genuine value beyond that by warning that a move can change the message id and instructing the agent to switch to moved_uid, a critical operational detail not derivable from annotations.

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?

Two tightly written sentences with zero waste. The purpose is front-loaded in the first sentence, and the second sentence delivers the single most important behavioral caveat (moved_uid). Every word earns its place.

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

Completeness3/5

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

For a 9-parameter mutation tool with no output schema, the description covers the main operations and the moved_uid edge case, and the schema fills in the parameter details. However, the return behavior beyond moved_uid (what the response looks like in the general case) is never described, leaving a moderate gap for such a multi-action tool.

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 78%, close to the 80% high-coverage baseline, and most parameters (uid, folder, account, archive, move_to, add_labels, remove_labels) already have descriptions. The description adds only a marginal touch — noting Outlook categories alongside Gmail labels — and does not map operations to specific parameters or clarify the boolean fields, which are self-explanatory.

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 names a clear multi-purpose verb-resource pairing: it modifies a message by marking read/unread, starring, labeling, moving, or archiving. It is easily distinguished from siblings like trash_message (specific deletion) and the read-only fetch/get_message tools, so an agent can tell them apart without inspecting schemas.

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 description implies its use case — any message state mutation — which gives clear context, but it never names alternatives or exclusions. With trash_message as a sibling, there is no explicit guidance on when to use this move/label tool versus the dedicated trash tool, leaving some routing to inference.

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