Skip to main content
Glama

Save draft

save_draft

Save a NEW draft into Mail.app's Drafts folder. This tool never sends it (send_email sends, if the user's permissions allow). sender must be one of your own addresses; it decides which account the draft is filed under. The returned attachments list is read back from the saved draft, not echoed, and the call fails if Mail drops one. cc copies people properly instead of crowding them onto the To line. Returns draft_id (the draft's Message-ID) for update_draft, but see that tool: Mail re-syncs drafts and rotates the id within a minute or so. This starts a NEW conversation: it cannot carry In-Reply-To, so a recipient sees it as unrelated to anything. To answer an existing message so it threads, use save_reply_draft instead. category (e.g. 'Work') refuses a sender outside accounts with that label. By default the saved draft (new or reply) stays open in a Mail window so the user can review, edit and send it there; the user can turn that off in Keeploop. Pass leave_open=false to save quietly or true to force the window. Omit it to follow the user's setting. left_open says what happened. Accounts are labelled (Personal, Work, ...). For a personal task use the Personal accounts; call list_categories if unsure. Recipients must be email addresses. Given only a person's name, look the address up first (search_contacts when it is listed, else search_mail); if more than one person or address could be meant, ask the user. Never guess an address. attachments takes files already in the user's mail as {mail_id, attachment_id} (from get_email or find_attachments; Mail downloads one it has not stored yet), and absolute paths of files in the user's home folder (not hidden ones or ~/Library; from web and phone apps only as the user's Attach files from this Mac permission allows). Up to 18 MB in total. The user sees every file's name and size in the confirmation. Requires Keeploop Pro.

Input Schema

NameRequiredDescriptionDefault
ccNo
toYes
bodyYes
senderYes
subjectYes
categoryNo
leave_openNo
attachmentsNo

Output Schema

NameRequiredDescriptionDefault
toYes
noteNo
accountYes
subjectYes
draft_idNo
left_openNo
attachmentsNo
saved_to_draftsYes
replaced_draft_idNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / $defs
      Added value: +{
      +  "AttachmentRef": {
      +    "description": "An attachment already in the user's mail: get_email / find_attachments ids.",
      +    "properties": {
      +      "attachment_id": {
      +        "title": "Attachment Id",
      +        "type": "string"
      +      },
      +      "mail_id": {
      +        "title": "Mail Id",
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "mail_id",
      +      "attachment_id"
      +    ],
      +    "title": "AttachmentRef",
      +    "type": "object"
      +  }
      +}
    • changedInput schema / properties / attachments / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "$ref": "#/$defs/AttachmentRef"
      +        }
      +      ]
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Added

TDQS

A4.9/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: it never sends, the attachments list is read back and the call fails if Mail drops a file, draft_id rotates within a minute, category can refuse a sender, leave_open controls window behavior, 18 MB cap, path restrictions, and a Keeploop Pro requirement.

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

Conciseness4/5

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

Front-loaded with the core action and the send_email distinction, but it is dense and semi-colon-heavy with several clauses (cc, categories, attachment sourcing) that could be tightened without losing meaning.

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?

For an 8-parameter mutation tool with an output schema, the description covers the return fields it needs to (draft_id, left_open, attachments read-back) and all the operational constraints an agent must know, leaving nothing material unexplained.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and does: sender must be the user's own address and determines the filing account, category gating, two accepted attachment forms with sources and limits, cc semantics, and leave_open tri-state behavior.

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?

States a specific verb and resource ('Save a NEW draft into Mail.app's Drafts folder') and immediately scopes it against send_email and save_reply_draft, so an agent can distinguish it from siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Routes the agent explicitly: send_email sends, save_reply_draft threads a reply, and this tool starts a NEW conversation that cannot carry In-Reply-To. Also gives prerequisite guidance (look up addresses via search_contacts/search_mail, ask when ambiguous, call list_categories if unsure).

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.