Skip to main content
Glama

Reply to a message

messages_reply
DestructiveIdempotent

Reply to a message, inside its own thread and quoting it below the reply: to whoever wrote it - to whom it was sent, where this mailbox wrote it - or with replyAll to everyone on it. 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. An address the person did not give is found in their past mail - messages_list_all_mailboxes with from: or to: and the name, at the headers view - and is theirs to confirm before anything is written to it. The person's own last letter to someone - the newest found with to: and their address whose sender is an address mailboxes_list names - shows the manner they write to them in. Where the address it goes from has a signature - settings_send_as_get reads the default address's - the signature goes below your words and above any quote, so a sign-off, name, title, phone number or link in the words repeats it, and sign false leaves it off a terse note; where it has none, the words close as the person's own would.

Input Schema

NameRequiredDescriptionDefault
ccNoWho to copy, instead of those replyAll copies.
toNoWho the reply goes to, instead of whoever wrote the message - whom it was sent to, where this mailbox wrote it - and, with replyAll, those it was sent to.
bccNoWho to blind-copy. The other recipients are not told.
bodyNoThe reply text; html alone is enough, its text read from it.
flagNoOn an Outlook mailbox, a follow-up flag on these days for the person's own reminder, which the sent copy carries. No other mailbox keeps one.
fromNoThe address it goes from. Left out, a reply goes from the address its message was sent to where Gmail lists that one, else from the mailbox's default. A Gmail connected by Google sign-in goes from any address Gmail lists as verified for it, under that address's own signature; an Outlook mailbox, and any other, from its own address alone, refusing another. The answer names the address it goes from.
htmlNoThe message as HTML, for formatting; body stays its plain-text version, read from it where left out. An Outlook mailbox keeps only the HTML and writes the plain version from it.
signNofalse leaves the signature out; it goes in by default.
mailboxYesThe mailbox's name or its email address.
replyAllNotrue addresses everyone the message was sent to and copied too - never its blind copies, never this mailbox.
chatFilesNoFiles the person attached in this chat, as the chat itself hands them over - never an address you write: a file anywhere else is refused, and goes in attachments instead.
messageIdYesThe provider's own identifier.
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.
importanceNoHow important the message is marked, normal where left out: an Outlook mailbox marks its own, and any other writes the standard headers the recipient's mail app reads.
attachmentsNoFiles to carry: one held by any connected mailbox, content you write out, or a file put at an upload address. A file you hold and can send yourself by HTTP PUT, as from a terminal, is named by filename and mimeType alone: the call then writes nothing and answers with an address to put it at, and the same call made again names it by the upload that answer gave it. Any other file is written out, kept small.

Output Schema

NameRequiredDescriptionDefault
idNo
fromNoThe address it went from.
uploadsNo
acceptedNo
threadIdNo
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. Changed3 schema fields 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."
    • changedInput schema / properties / attachments / description
      Previous value: -"Files to carry: one held by any connected mailbox, content you write out, or a file put at an upload address. A file you hold and can send yourself by HTTP PUT, as from a terminal, is named by filename and mimeType alone: the call then writes nothing and answers with an address to put it at, and the same call made again names it by the upload that answer gave it. Otherwise write a small file out."New value: +"Files to carry: one held by any connected mailbox, content you write out, or a file put at an upload address. A file you hold and can send yourself by HTTP PUT, as from a terminal, is named by filename and mimeType alone: the call then writes nothing and answers with an address to put it at, and the same call made again names it by the upload that answer gave it. Any other file is written out, kept small."
    • changedInput schema / properties / replyAll / description
      Previous value: -"Also address everyone the message was sent to and copied - never its blind copies, never this mailbox."New value: +"true addresses everyone the message was sent to and copied too - never its blind copies, never this mailbox."
  2. Changed2 schema fields changed
    • changedInput schema / properties / attachments / description
      Previous value: -"Files to carry: one held by a connected mailbox of the message's own provider, content you write out, or a file put at an upload address. A file you hold and can send yourself by HTTP PUT, as from a terminal, is named by filename and mimeType alone: the call then writes nothing and answers with an address to put it at, and the same call made again names it by the upload that answer gave it. Otherwise write a small file out."New value: +"Files to carry: one held by any connected mailbox, content you write out, or a file put at an upload address. A file you hold and can send yourself by HTTP PUT, as from a terminal, is named by filename and mimeType alone: the call then writes nothing and answers with an address to put it at, and the same call made again names it by the upload that answer gave it. Otherwise write a small file out."
    • changedInput schema / properties / attachments / items / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "attachmentId": {
      -        "description": "An attachment id, as a message read named it.",
      -        "maxLength": 2048,
      -        "pattern": "^(?:\\d+(?:\\.\\d+)*|[A-Za-z0-9_=-]+)$",
      -        "type": "string"
      -      },
      -      "mailbox": {
      -        "description": "The mailbox holding the message the file is in, of the same provider as the one written from.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "messageId": {
      -        "description": "The provider's own identifier.",
      -        "pattern": "^[A-Za-z0-9_=-]{1,512}$",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mailbox",
      -      "messageId",
      -      "attachmentId"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "content": {
      -        "contentEncoding": "base64",
      -        "description": "The file's own bytes, base64.",
      -        "format": "base64",
      -        "pattern": "^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$",
      -        "type": "string"
      -      },
      -      "contentId": {
      -        "description": "Places a picture inside the words rather than among the files: html shows it where it writes <img src=\"cid:<contentId>\">. One html does not show goes among the files.",
      -        "maxLength": 200,
      -        "pattern": "^[\\w.+-]+(?:@[\\w.-]+)?$",
      -        "type": "string"
      -      },
      -      "filename": {
      -        "description": "What the file is called.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "mimeType": {
      -        "description": "The file's media type.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "filename",
      -      "mimeType",
      -      "content"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "filename": {
      -        "description": "What the file is called.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "mimeType": {
      -        "description": "The file's media type.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "upload": {
      -        "description": "The upload an earlier call's answer gave this file, once the file is put at its address.",
      -        "format": "uuid",
      -        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "filename",
      -      "mimeType",
      -      "upload"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "A file you hold, named alone: the call answers with an address to put it at.",
      -    "properties": {
      -      "filename": {
      -        "description": "What the file is called.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "mimeType": {
      -        "description": "The file's media type.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "filename",
      -      "mimeType"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "attachmentId": {
      +        "description": "An attachment id, as a message read named it.",
      +        "maxLength": 2048,
      +        "pattern": "^(?:\\d+(?:\\.\\d+)*|[A-Za-z0-9_=-]+)$",
      +        "type": "string"
      +      },
      +      "mailbox": {
      +        "description": "The mailbox holding the message the file is in, whatever its provider.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "messageId": {
      +        "description": "The provider's own identifier.",
      +        "pattern": "^[A-Za-z0-9_=-]{1,512}$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mailbox",
      +      "messageId",
      +      "attachmentId"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "content": {
      +        "contentEncoding": "base64",
      +        "description": "The file's own bytes, base64.",
      +        "format": "base64",
      +        "pattern": "^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$",
      +        "type": "string"
      +      },
      +      "contentId": {
      +        "description": "Places a picture inside the words rather than among the files: html shows it where it writes <img src=\"cid:<contentId>\">. One html does not show goes among the files.",
      +        "maxLength": 200,
      +        "pattern": "^[\\w.+-]+(?:@[\\w.-]+)?$",
      +        "type": "string"
      +      },
      +      "filename": {
      +        "description": "What the file is called.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "mimeType": {
      +        "description": "The file's media type.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "filename",
      +      "mimeType",
      +      "content"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "filename": {
      +        "description": "What the file is called.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "mimeType": {
      +        "description": "The file's media type.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "upload": {
      +        "description": "The upload an earlier call's answer gave this file, once the file is put at its address.",
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "filename",
      +      "mimeType",
      +      "upload"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "A file you hold, named alone: the call answers with an address to put it at.",
      +    "properties": {
      +      "filename": {
      +        "description": "What the file is called.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "mimeType": {
      +        "description": "The file's media type.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "filename",
      +      "mimeType"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed2 schema fields changed
    • addedInput schema / properties / from
      Added value: +{
      +  "description": "The address it goes from. Left out, a reply goes from the address its message was sent to where Gmail lists that one, else from the mailbox's default. A Gmail connected by Google sign-in goes from any address Gmail lists as verified for it, under that address's own signature; an Outlook mailbox, and any other, from its own address alone, refusing another. The answer names the address it goes from.",
      +  "format": "email",
      +  "pattern": "^(?:[\\w!#$%&'*+/=?^\\x60{|}~-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+(?:\\.(?:[\\w!#$%&'*+/=?^\\x60{|}~-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+)*@(?:(?:(?:[A-Za-z0-9-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+\\.)+(?:[A-Za-z0-9-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+|\\[(?:\\d{1,3}(?:\\.\\d{1,3}){3}|IPv6:[\\dA-Fa-f:.]+)\\])$",
      +  "type": "string"
      +}
    • addedOutput schema / properties / from
      Added value: +{
      +  "description": "The address it went from.",
      +  "type": "string"
      +}
  4. Changed5 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"
      +}
    • changedInput schema / properties / body / description
      Previous value: -"The reply text."New value: +"The reply text; html alone is enough, its text read from it."
    • changedInput schema / properties / html / description
      Previous value: -"The message as HTML, for formatting; body stays its plain-text version. An Outlook mailbox keeps only the HTML and writes the plain version from it."New value: +"The message as HTML, for formatting; body stays its plain-text version, read from it where left out. An Outlook mailbox keeps only the HTML and writes the plain version from it."
    • changedInput schema / required
      Previous value: -[
      -  "mailbox",
      -  "messageId",
      -  "body",
      -  "requestId"
      -]New value: +[
      +  "mailbox",
      +  "messageId",
      +  "requestId"
      +]
    • 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"
      +}
  5. Changed5 schema fields changed
    • addedInput schema / properties / attachments
      Added value: +{
      +  "description": "Files to carry: one held by a connected mailbox of the message's own provider, content you write out, or a file put at an upload address. A file you hold and can send yourself by HTTP PUT, as from a terminal, is named by filename and mimeType alone: the call then writes nothing and answers with an address to put it at, and the same call made again names it by the upload that answer gave it. Otherwise write a small file out.",
      +  "items": {
      +    "anyOf": [
      +      {
      +        "properties": {
      +          "attachmentId": {
      +            "description": "An attachment id, as a message read named it.",
      +            "maxLength": 2048,
      +            "pattern": "^(?:\\d+(?:\\.\\d+)*|[A-Za-z0-9_=-]+)$",
      +            "type": "string"
      +          },
      +          "mailbox": {
      +            "description": "The mailbox holding the message the file is in, of the same provider as the one written from.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "messageId": {
      +            "description": "The provider's own identifier.",
      +            "pattern": "^[A-Za-z0-9_=-]{1,512}$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "mailbox",
      +          "messageId",
      +          "attachmentId"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "properties": {
      +          "content": {
      +            "contentEncoding": "base64",
      +            "description": "The file's own bytes, base64.",
      +            "format": "base64",
      +            "pattern": "^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$",
      +            "type": "string"
      +          },
      +          "contentId": {
      +            "description": "Places a picture inside the words rather than among the files: html shows it where it writes <img src=\"cid:<contentId>\">. One html does not show goes among the files.",
      +            "maxLength": 200,
      +            "pattern": "^[\\w.+-]+(?:@[\\w.-]+)?$",
      +            "type": "string"
      +          },
      +          "filename": {
      +            "description": "What the file is called.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "mimeType": {
      +            "description": "The file's media type.",
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "filename",
      +          "mimeType",
      +          "content"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "properties": {
      +          "filename": {
      +            "description": "What the file is called.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "mimeType": {
      +            "description": "The file's media type.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "upload": {
      +            "description": "The upload an earlier call's answer gave this file, once the file is put at its address.",
      +            "format": "uuid",
      +            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "filename",
      +          "mimeType",
      +          "upload"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "description": "A file you hold, named alone: the call answers with an address to put it at.",
      +        "properties": {
      +          "filename": {
      +            "description": "What the file is called.",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "mimeType": {
      +            "description": "The file's media type.",
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "filename",
      +          "mimeType"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / bcc
      Added value: +{
      +  "description": "Who to blind-copy. The other recipients are not told.",
      +  "items": {
      +    "format": "email",
      +    "pattern": "^(?:[\\w!#$%&'*+/=?^\\x60{|}~-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+(?:\\.(?:[\\w!#$%&'*+/=?^\\x60{|}~-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+)*@(?:(?:(?:[A-Za-z0-9-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+\\.)+(?:[A-Za-z0-9-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+|\\[(?:\\d{1,3}(?:\\.\\d{1,3}){3}|IPv6:[\\dA-Fa-f:.]+)\\])$",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / chatFiles
      Added value: +{
      +  "description": "Files the person attached in this chat, as the chat itself hands them over - never an address you write: a file anywhere else is refused, and goes in attachments instead.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "download_url": {
      +        "type": "string"
      +      },
      +      "file_id": {
      +        "type": "string"
      +      },
      +      "file_name": {
      +        "type": "string"
      +      },
      +      "mime_type": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "download_url",
      +      "file_id"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / uploads
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "address": {
      +        "type": "string"
      +      },
      +      "filename": {
      +        "type": "string"
      +      },
      +      "upload": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "filename",
      +      "upload",
      +      "address"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "id",
      -  "threadId"
      -]
  6. 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"
      +}
  7. Changed2 schema fields changed
    • addedInput schema / properties / flag
      Added value: +{
      +  "description": "On an Outlook mailbox, a follow-up flag on these days for the person's own reminder, which the sent copy carries. No other mailbox keeps one.",
      +  "properties": {
      +    "due": {
      +      "description": "The day it is due, as 2026-10-30.",
      +      "format": "date",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +      "type": "string"
      +    },
      +    "start": {
      +      "description": "The day it starts; today where left out.",
      +      "format": "date",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "due"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / importance
      Added value: +{
      +  "description": "How important the message is marked, normal where left out: an Outlook mailbox marks its own, and any other writes the standard headers the recipient's mail app reads.",
      +  "enum": [
      +    "high",
      +    "normal",
      +    "low"
      +  ],
      +  "type": "string"
      +}
  8. 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"
      +]
  9. 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"
      +]
  10. Changed2 schema fields changed
    • addedInput schema / properties / sign
      Added value: +{
      +  "description": "false leaves the signature out; it goes in by default.",
      +  "type": "boolean"
      +}
    • 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"
      +}
  11. Changed3 schema fields changed
    • changedInput schema / properties / cc / items / pattern
      Previous value: -"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[\\w!#$%&'*+/=?^\\x60{|}~-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+(?:\\.(?:[\\w!#$%&'*+/=?^\\x60{|}~-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+)*@(?:(?:(?:[A-Za-z0-9-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+\\.)+(?:[A-Za-z0-9-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+|\\[(?:\\d{1,3}(?:\\.\\d{1,3}){3}|IPv6:[\\dA-Fa-f:.]+)\\])$"
    • changedInput schema / properties / to / description
      Previous value: -"Who the reply goes to, instead of whoever wrote the message and, with replyAll, those it was sent to."New value: +"Who the reply goes to, instead of whoever wrote the message - whom it was sent to, where this mailbox wrote it - and, with replyAll, those it was sent to."
    • changedInput schema / properties / to / items / pattern
      Previous value: -"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[\\w!#$%&'*+/=?^\\x60{|}~-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+(?:\\.(?:[\\w!#$%&'*+/=?^\\x60{|}~-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+)*@(?:(?:(?:[A-Za-z0-9-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+\\.)+(?:[A-Za-z0-9-]|[¡-ᙿᚁ-῿​-‧‪-‮‰-⁞⁠-⿿、-﻾＀-￿])+|\\[(?:\\d{1,3}(?:\\.\\d{1,3}){3}|IPv6:[\\dA-Fa-f:.]+)\\])$"
  12. Changed1 schema field changed
    • addedOutput schema / properties / sentCopyKept
      Added value: +{
      +  "const": false,
      +  "type": "boolean"
      +}
  13. 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"
  14. Changed1 schema field changed
    • addedOutput schema / properties / refusedRecipients
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  15. Changed6 schema fields changed
    • changedInput schema / properties / cc / items / pattern
      Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • changedInput schema / properties / to / items / pattern
      Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • 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"
      +]
  16. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses idempotency behavior for requestId, replyAll recipient exclusions, signature placement and sign=false behavior, provider-specific from-address rules, Outlook-only flag behavior, and what afterwards does if archiving or marking read fails. These details materially inform safe invocation of a destructive send operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, but the description is a dense, run-on paragraph with nested clauses that are difficult to scan. Much of the content is valuable for this complex tool, but the phrasing is unnecessarily ornate and would benefit from tighter structure.

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?

Given a 16-parameter send tool with full schema coverage and an output schema, the description covers the major behavioral concerns an agent needs: recipient resolution, replyAll semantics, requestId idempotency, signatures, from-address rules, and post-send side effects. Return details are left appropriately to the output schema.

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

Parameters4/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 parameters. The description adds useful cross-parameter semantics: recipient defaults when to/cc are omitted, signature placement relative to quoted text, requestId replay behavior, and provider-specific from-address constraints.

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 states a specific verb and resource: replying to a message inside its own thread and quoting it below the reply. It distinguishes this send action from draft preparation and clarifies recipient behavior with replyAll, making it identifiable against siblings such as drafts_reply and messages_send.

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 explains when this tool sends versus when the person asked only to prepare a draft, and it describes recipient defaults and how to find an address the person did not provide. It does not explicitly compare against messages_forward or state a general exclusion for new-message composition, but the send-versus-draft guidance is clear.

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.