Skip to main content
Glama

Draft a reply

drafts_reply

Compose a reply to a message as a draft, inside the thread it answers 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. Nothing leaves the mailbox until the draft is sent. 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 draft 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.
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 the draft goes from once sent.
linkNo
uploadsNo
threadIdNo
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.
unfilledFieldsNoThe template fields your words hold unfilled, such as {first_name} or [Name], each as written. A send of the draft refuses one held in its words above any message it quotes until drafts_update puts the words each stands for in its place.
previousVersionIdNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • 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."
    • changedOutput schema / properties / unfilledFields / description
      Previous value: -"The template fields your words hold unfilled, such as {first_name} or [Name], each as written. A send of the draft refuses one held in its words above any message it quotes: put the words each stands for in its place with drafts_update first."New value: +"The template fields your words hold unfilled, such as {first_name} or [Name], each as written. A send of the draft refuses one held in its words above any message it quotes until drafts_update puts the words each stands for in its place."
  2. Changed2 schema fields changed
    • changedInput schema / properties / attachments / description
      Previous value: -"Files to carry: one held by a connected mailbox of the draft'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 the draft goes from once sent.",
      +  "type": "string"
      +}
  4. Changed3 schema fields changed
    • 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"
      -]New value: +[
      +  "mailbox",
      +  "messageId"
      +]
  5. Changed1 schema field changed
    • addedOutput schema / properties / unfilledFields
      Added value: +{
      +  "description": "The template fields your words hold unfilled, such as {first_name} or [Name], each as written. A send of the draft refuses one held in its words above any message it quotes: put the words each stands for in its place with drafts_update first.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  6. Changed1 schema field changed
    • 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"
      -      },
      -      "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, 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"
      +  }
      +]
  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 draft 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. Changed4 schema fields changed
    • changedInput schema / properties / bcc / 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 / 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
    • 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"
      +}
  13. Changed4 schema fields changed
    • changedInput schema / properties / attachments / description
      Previous value: -"Files to carry: one held by a connected mailbox of the draft's own provider, or content you write out."New value: +"Files to carry: one held by a connected mailbox of the draft'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."
    • 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"
      -      },
      -      "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"
      -  }
      -]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, 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"
      +      },
      +      "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"
      +  }
      +]
    • 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"
      -]
  14. Changed2 schema fields changed
    • addedOutput schema / properties / previousVersionId
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "link"
      -]New value: +[
      +  "id"
      +]
  15. 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"
  16. Changed3 schema fields changed
    • changedInput schema / properties / bcc / 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 / 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,}$"
  17. First observed

TDQS

A3.7/5.0
Behavior5/5

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

Beyond the annotations, it discloses that the operation creates a draft rather than sending, how unknown addresses are resolved and confirmed, how signatures are placed, and how sender address selection differs by provider. These are substantive behavioral details an agent could not infer from the annotations alone.

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

Conciseness2/5

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

The description is a long, dense paragraph with nested dashes and parenthetical clauses that make it hard to parse. The purpose is front-loaded, but the remaining prose is far from concise and includes complex procedural guidance that could be structured more clearly.

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

Completeness4/5

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

Given the 14-parameter schema, rich parameter descriptions, and an output schema, the description covers the critical non-obvious behavior: draft-only semantics, recipient selection, signature handling, and sender address constraints. It does not explain every parameter, but the schema already does so in detail.

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 all 14 parameters in detail. The description adds some recipient and signature context, but much of that overlaps with the schema's own parameter descriptions, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening clause states a specific verb and resource: compose a reply to a message as a draft, threaded and quoting the original. It distinguishes draft creation from sending, but it does not explicitly compare itself with sibling tools such as messages_reply or drafts_create.

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 when to use it by saying 'Nothing leaves the mailbox until the draft is sent,' and it explains replyAll, cc, and signature choices. However, it does not explicitly name alternatives or state when another draft or reply tool should be chosen instead.

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.