Skip to main content
Glama
LeoPhoenixT

readNdraft IMAP MCP

by LeoPhoenixT

move_emails_batch

Destructive

Move 1-50 identified emails from an account to a destination mailbox in a single batch operation.

Instructions

Move 1-50 ordinary messages from one account to one mailbox.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
identitiesYes
destination_mailboxYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv0.11.0
    • changedOutput schema / $defs / BatchMoveOutput / properties / error / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/SafeErrorOutput"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / $defs / BatchMoveOutput / properties / error / title
      Removed value: -"Error"
    • addedOutput schema / $defs / SafeErrorOutput
      Added value: +{
      +  "properties": {
      +    "code": {
      +      "enum": [
      +        "partial_move",
      +        "permission_denied",
      +        "not_found",
      +        "invalid_request",
      +        "timeout",
      +        "rate_limited",
      +        "draft_busy",
      +        "recovery_required",
      +        "imap_error",
      +        "connection_error",
      +        "broker_error",
      +        "outcome_unknown"
      +      ],
      +      "title": "Code",
      +      "type": "string"
      +    },
      +    "message": {
      +      "title": "Message",
      +      "type": "string"
      +    },
      +    "reason": {
      +      "anyOf": [
      +        {
      +          "enum": [
      +            "task_rate",
      +            "session_queue_timeout",
      +            "imap_worker_capacity",
      +            "ipc_helper_capacity",
      +            "request_deadline",
      +            "transport_loss"
      +          ],
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "title": "Reason"
      +    },
      +    "retry_after_seconds": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "title": "Retry After Seconds"
      +    },
      +    "scope": {
      +      "enum": [
      +        "request",
      +        "item",
      +        "account",
      +        "broker",
      +        "client"
      +      ],
      +      "title": "Scope",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message",
      +    "scope",
      +    "reason",
      +    "retry_after_seconds"
      +  ],
      +  "title": "SafeErrorOutput",
      +  "type": "object"
      +}
  2. Addedv0.3.0

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the mutating nature is covered. The description adds some useful behavioral context via the 1-50 count limit and the 'ordinary messages' restriction, but it does not disclose additional side effects, failure modes, or what happens if limits are exceeded.

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 description is a single, tightly worded sentence with no filler. It front-loads the action and resource, then adds the most operationally important constraints: quantity limit, message type, and source/destination scope.

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?

The rich IdentityOutput schema and destructive annotations cover some context, and the description states the basic operation and limit. However, it omits how to obtain identities, how destination_mailbox should be formatted, and whether the batch is atomic or partially applied on failure, which matters for a destructive batch operation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it barely does. It does not explain that identities are an array of account/mailbox/UID references, how destination_mailbox is identified, or that all messages must come from one account despite each identity carrying its own mailbox field.

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 action ('Move'), a specific resource ('ordinary messages'), a quantity range ('1-50'), and the source/destination scope ('from one account to one mailbox'). The batch qualifier and count limit distinguish it from the singular move_email sibling without needing to open 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 Guidelines4/5

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

The description gives clear usage context: this is the multi-message batch move tool with a 1-50 message limit and a single destination mailbox. It does not explicitly name move_email as the alternative for single messages, but the scope and limits imply the intended use well enough for an agent to route correctly.

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