Skip to main content
Glama

Send email

send_email
Destructive

SEND a new email now, through Mail.app. Nothing is sent unless the user allows it: their permissions decide per recipient, account, label and app whether this is blocked, needs their click on this Mac (they see the full message), or goes ahead. Call explain_policy first if unsure. Every send then waits a few seconds so the user can cancel it, and the result says whether it went. to, cc and bcc are lists of plain addresses; every one is checked. sender must be one of the user's own addresses. This starts a NEW conversation; to answer a message use send_reply. 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. 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. Requires Keeploop Pro.

Input Schema

NameRequiredDescriptionDefault
ccNo
toYes
bccNo
bodyYes
senderYes
subjectYes
categoryNo
attachmentsNo

Output Schema

NameRequiredDescriptionDefault
ccYes
toYes
bccYes
noteNo
sentYes
senderNo
accountYes
send_idYes
subjectYes
decisionYes
cancelledYes
attachmentsNo
in_reply_toNo
threads_underNo

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?

Annotations already flag destructive/non-idempotent/open-world, but the description adds substantial behavior the annotations cannot: per-recipient permission gating, a post-send cancellation window, confirmation of delivery in the result, an 18 MB attachment cap, automatic download of unstored attachments, and visibility of every attachment name/size to the user. It also clarifies side effects on the user's machine (downloads into Mail). No contradiction with annotations.

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

Conciseness4/5

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

The action is front-loaded in the first clause and every sentence carries information, but the body is one dense block of clauses (attachments alone span several nested caveats) that would scan better split into short bulleted lines. Slightly heavy for a reader skimming for a go/no-go decision.

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, destructive, permission-gated mutation with an output schema, this covers everything an agent needs before calling: prerequisites, alternative tools, recipient lookup, attachment sourcing and limits, and confirmation semantics. Return-value detail is rightly left to the output schema.

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 must carry the burden, and it does: `to`/`cc`/`bcc` are plain address lists with every entry validated, `sender` is constrained to one of the user's own addresses, and `attachments` accepts either {mail_id, attachment_id} refs or absolute home-folder paths with explicit exclusions (hidden files, ~/Library) and a size cap. Only `category` goes unexplained, which is a minor gap.

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 — 'SEND a new email now, through Mail.app' — and explicitly distinguishes itself from the closest sibling: 'This starts a NEW conversation; to answer a message use send_reply.' An agent can select this over send_reply/save_draft without opening any 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?

Gives explicit prerequisites and routing rules: 'Call explain_policy first if unsure,' 'Requires Keeploop Pro,' and a full recipient-resolution policy (search_contacts, else search_mail, ask the user if ambiguous, 'Never guess an address'). It also names the correct alternative tool for replies.

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.