Skip to main content
Glama

Send a draft

drafts_send
DestructiveIdempotent

Send a draft. It leaves the mailbox and consumes the draft. Only a draft is sent: a message already sent or received is refused, and nothing leaves. It sends mail the person asked to go; mail they asked to prepare is a draft. A request id already spent sends nothing again: the answer says whether that send went or may have gone.

Input Schema

NameRequiredDescriptionDefault
idYesThe id a draft tool answered, or the draftId a search or a read answered.
mailboxYesThe mailbox's name or its email address.
requestIdYesYour own id for this send, new for every message. One whose send went or may have gone sends nothing again.
afterwardsNoOnce it has gone, its thread is archived or marked read, as threads_archive or threads_modify does it - under that tool's own permission for this mailbox, counting no second action. Where that tool is turned off or the act fails, the mail still went, and the answer's afterwards says why its thread was left.

Output Schema

NameRequiredDescriptionDefault
idYes
acceptedNo
threadIdYes
messageIdNo
signatureNoWhich signature went under your words, or why none did: gmail, Gmail's own for the address it went from; lumman, the one Lumman keeps for an Outlook mailbox or one whose provider is imap; none_set, that address has none - settings_send_as_patch sets one, a Gmail one only where that address is the one the mailbox signs in with; left_out, the call asked for none; already_in_words, your words already carried it; company_adds, the person has said the mailbox's company adds its own on its server.
afterwardsNoWhat became of afterwards: done where the thread was archived or marked read; else the mail still went, reason says why its thread was left, and threadId names that thread for threads_archive or threads_modify.
sentCopyKeptNo
markedAnsweredNoPresent where the mailbox's server would not mark the message this replied to as answered: a search for what waits on the person still finds it there.
refusedRecipientsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / afterwards / description
      Previous value: -"Once it has gone, archive its thread or mark it read, as threads_archive or threads_modify would - under that tool's own permission for this mailbox, counting no second action. Where that tool is turned off or the act fails, the mail still went, and the answer's afterwards says why its thread was left."New value: +"Once it has gone, its thread is archived or marked read, as threads_archive or threads_modify does it - under that tool's own permission for this mailbox, counting no second action. Where that tool is turned off or the act fails, the mail still went, and the answer's afterwards says why its thread was left."
  2. Changed2 schema fields changed
    • addedInput schema / properties / afterwards
      Added value: +{
      +  "description": "Once it has gone, archive its thread or mark it read, as threads_archive or threads_modify would - under that tool's own permission for this mailbox, counting no second action. Where that tool is turned off or the act fails, the mail still went, and the answer's afterwards says why its thread was left.",
      +  "enum": [
      +    "archive",
      +    "read"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / afterwards
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "What became of afterwards: done where the thread was archived or marked read; else the mail still went, reason says why its thread was left, and threadId names that thread for threads_archive or threads_modify.",
      +  "properties": {
      +    "act": {
      +      "enum": [
      +        "archive",
      +        "read"
      +      ],
      +      "type": "string"
      +    },
      +    "done": {
      +      "type": "boolean"
      +    },
      +    "reason": {
      +      "type": "string"
      +    },
      +    "threadId": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "act",
      +    "done"
      +  ],
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • addedOutput schema / properties / markedAnswered
      Added value: +{
      +  "const": false,
      +  "description": "Present where the mailbox's server would not mark the message this replied to as answered: a search for what waits on the person still finds it there.",
      +  "type": "boolean"
      +}
  4. Changed2 schema fields changed
    • changedOutput schema / properties / signature / description
      Previous value: -"Which signature went under your words, or why none did: gmail, Gmail's own for the address it went from; lumman, the one Lumman keeps for an Outlook mailbox or one whose provider is imap; none_set, that address has none - settings_send_as_patch sets one, a Gmail one only where that address is the one the mailbox signs in with; left_out, the call asked for none; already_in_words, your words already carried it."New value: +"Which signature went under your words, or why none did: gmail, Gmail's own for the address it went from; lumman, the one Lumman keeps for an Outlook mailbox or one whose provider is imap; none_set, that address has none - settings_send_as_patch sets one, a Gmail one only where that address is the one the mailbox signs in with; left_out, the call asked for none; already_in_words, your words already carried it; company_adds, the person has said the mailbox's company adds its own on its server."
    • changedOutput schema / properties / signature / enum
      Previous value: -[
      -  "gmail",
      -  "lumman",
      -  "none_set",
      -  "left_out",
      -  "already_in_words"
      -]New value: +[
      +  "gmail",
      +  "lumman",
      +  "none_set",
      +  "left_out",
      +  "already_in_words",
      +  "company_adds"
      +]
  5. Changed2 schema fields changed
    • changedOutput schema / properties / signature / description
      Previous value: -"Which signature went under your words, or why none did: gmail, Gmail's own for the address it went from; none_set, that address has none - settings_send_as_patch sets a Gmail one where that address is the one the mailbox signs in with, and an Outlook mailbox, or one whose provider is imap, has none here; left_out, the call asked for none; already_in_words, your words already carried it."New value: +"Which signature went under your words, or why none did: gmail, Gmail's own for the address it went from; lumman, the one Lumman keeps for an Outlook mailbox or one whose provider is imap; none_set, that address has none - settings_send_as_patch sets one, a Gmail one only where that address is the one the mailbox signs in with; left_out, the call asked for none; already_in_words, your words already carried it."
    • changedOutput schema / properties / signature / enum
      Previous value: -[
      -  "gmail",
      -  "none_set",
      -  "left_out",
      -  "already_in_words"
      -]New value: +[
      +  "gmail",
      +  "lumman",
      +  "none_set",
      +  "left_out",
      +  "already_in_words"
      +]
  6. Changed1 schema field changed
    • addedOutput schema / properties / signature
      Added value: +{
      +  "description": "Which signature went under your words, or why none did: gmail, Gmail's own for the address it went from; none_set, that address has none - settings_send_as_patch sets a Gmail one where that address is the one the mailbox signs in with, and an Outlook mailbox, or one whose provider is imap, has none here; left_out, the call asked for none; already_in_words, your words already carried it.",
      +  "enum": [
      +    "gmail",
      +    "none_set",
      +    "left_out",
      +    "already_in_words"
      +  ],
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • addedOutput schema / properties / sentCopyKept
      Added value: +{
      +  "const": false,
      +  "type": "boolean"
      +}
  8. Changed2 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  9. Changed1 schema field changed
    • addedOutput schema / properties / refusedRecipients
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  10. Changed4 schema fields changed
    • removedOutput schema / properties / id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / threadId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / threadId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  11. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the destructive/open-world annotations it discloses that the draft is consumed, that the send is an external irreversible act ("leaves the mailbox"), the requestId idempotency contract (a spent id sends nothing again and the answer reports whether the send went or may have gone), and that afterwards runs under another tool's permission yet the mail still goes if that step fails.

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?

The effect and the draft-only constraint are front-loaded, and every sentence carries substance. The framing line about mail "asked to go" vs. "asked to prepare" is slightly discursive for the value it adds.

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?

With annotations covering the safety profile and an output schema covering return values, the description still supplies what an agent actually needs: the draft-only precondition, the consumption of the draft, the idempotency rule, and the failure semantics of the afterwards option.

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 100% and the descriptions already explain id, mailbox, requestId dedup, and the afterwards side effect, so the schema does the heavy lifting. The description's requestId sentence largely restates what the schema already says, adding only that the response reports whether the send went or may have gone.

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?

"Send a draft. It leaves the mailbox and consumes the draft." gives a specific verb and resource plus its effect, and "Only a draft is sent: a message already sent or received is refused" separates it from messages_send without requiring the schemas to be opened.

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 draws the intended boundary ("mail the person asked to go" vs. "mail they asked to prepare") and states the hard precondition that the target must still be a draft. It never names messages_send explicitly as the route for composing new mail, so the routing is clear but not 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.