Skip to main content
Glama

Draft a message

drafts_create

Compose an email in a connected mailbox and keep it there as a draft. 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.
toNoWho the message is addressed to. A draft may name nobody yet; it is sent only once it names someone.
bccNoWho to blind-copy. The other recipients are not told.
bodyNoThe message 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, the mailbox's default where left out. 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.
subjectYesThe subject line.
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.
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. Changed2 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."
    • 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, the mailbox's default where left out. 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. Changed5 schema fields changed
    • changedInput schema / properties / body / description
      Previous value: -"The message text."New value: +"The message 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 / properties / to / description
      Previous value: -"Who the message is addressed to."New value: +"Who the message is addressed to. A draft may name nobody yet; it is sent only once it names someone."
    • removedInput schema / properties / to / minItems
      Removed value: -1
    • changedInput schema / required
      Previous value: -[
      -  "mailbox",
      -  "to",
      -  "subject",
      -  "body"
      -]New value: +[
      +  "mailbox",
      +  "subject"
      +]
  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. 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-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 / 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.6/5.0
Behavior4/5

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

With annotations already declaring a non-destructive write, the description adds useful behavioral detail: the draft remains in the mailbox, unconfirmed addresses should not be written to, and signatures are inserted by default unless sign=false. It still does not cover error or permission behavior, but the added context is substantive.

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, and the content is information-rich, but the description is a dense single paragraph with long nested clauses. It is not wasteful, yet it is harder to parse than necessary for an agent deciding how to call the tool.

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?

The tool has an output schema, rich annotations, and full schema description coverage, so the description need not explain return values or every parameter. It adds important draft and signature context, though it could more explicitly distinguish this tool from sibling draft operations.

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%, so the schema already documents all parameters thoroughly. The description adds some meaning around sign/from signature behavior, but it does not need to compensate for missing parameter documentation and does not explain most of the 13 parameters.

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 description states a specific action and resource: 'Compose an email in a connected mailbox and keep it there as a draft.' This makes clear it creates a draft rather than sending, but it does not explicitly differentiate from siblings such as drafts_update or drafts_send.

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?

It provides workflow guidance for finding an address in past mail and for handling signatures, including 'sign false leaves it off a terse note.' However, it does not explicitly say when to use this instead of drafts_update or drafts_send, leaving the sibling selection mostly implied.

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.