Skip to main content
Glama

Forward email

forward_email
DestructiveIdempotent

Forward an email to new recipients with a quoted original, optional comment, and attachments; reuse an idempotency key to prevent duplicate sends on retry.

Instructions

Forward an email to new recipients with a "Fwd:" subject and the quoted original. The original attachments are included unless includeAttachments is false, and an optional comment appears above the forwarded content. Repeating a successful forward with the same idempotencyKey and arguments returns the saved result instead of sending again.

Input Schema

NameRequiredDescriptionDefault
ccNoRecipients, each "Name <a@x.com>" or "a@x.com"
toYesRecipients, each "Name <a@x.com>" or "a@x.com"
fromNoConnected address or an available send-as address
commentNoComment above the forwarded message. Keep prose paragraphs on one continuous line and separate paragraphs with blank lines.
accountIdNoAccount to operate on. Optional when exactly one account is connected.
messageIdYes
idempotencyKeyYesReuse this key when retrying the same forward
includeAttachmentsNoDefault true

Output Schema

NameRequiredDescriptionDefault
dataYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.19.0
    • changedInput schema / properties / accountId / anyOf
      Previous value: -[
      -  {
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 512,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / cc / anyOf
      Previous value: -[
      -  {
      -    "description": "Recipients, each \"Name <a@x.com>\" or \"a@x.com\"",
      -    "items": {
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "Recipients, each \"Name <a@x.com>\" or \"a@x.com\"",
      +    "items": {
      +      "maxLength": 512,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "maxItems": 100,
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / messageId / maxLength
      Added value: +512
    • addedInput schema / properties / to / items / maxLength
      Added value: +512
    • addedInput schema / properties / to / maxItems
      Added value: +100
  2. Changed1 schema field changedv0.18.0
    • changedInput schema / properties / cc / anyOf
      Previous value: -[
      -  {
      -    "description": "Recipients, each \"Name <a@x.com>\" or \"a@x.com\"",
      -    "items": {
      -      "$ref": "#/properties/to/items"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "Recipients, each \"Name <a@x.com>\" or \"a@x.com\"",
      +    "items": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. Changed11 schema fields changedv0.15.0
    • addedInput schema / properties / accountId / anyOf
      Added value: +[
      +  {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / accountId / minLength
      Removed value: -1
    • removedInput schema / properties / accountId / type
      Removed value: -"string"
    • addedInput schema / properties / cc / anyOf
      Added value: +[
      +  {
      +    "description": "Recipients, each \"Name <a@x.com>\" or \"a@x.com\"",
      +    "items": {
      +      "$ref": "#/properties/to/items"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / cc / items
      Removed value: -{
      -  "$ref": "#/properties/to/items"
      -}
    • removedInput schema / properties / cc / type
      Removed value: -"array"
    • changedInput schema / properties / comment / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedInput schema / properties / from / anyOf
      Added value: +[
      +  {
      +    "format": "email",
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / from / format
      Removed value: -"email"
    • removedInput schema / properties / from / type
      Removed value: -"string"
    • changedInput schema / properties / includeAttachments / type
      Previous value: -"boolean"New value: +[
      +  "boolean",
      +  "null"
      +]
  4. Changed1 schema field changedv0.11.1
    • removedOutput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  5. Changed4 schema fields changedv0.11.0
    • addedInput schema / properties / comment / description
      Added value: +"Comment above the forwarded message. Keep prose paragraphs on one continuous line and separate paragraphs with blank lines."
    • addedInput schema / properties / idempotencyKey
      Added value: +{
      +  "description": "Reuse this key when retrying the same forward",
      +  "pattern": "^[\\x21-\\x7e]{1,255}$",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "messageId",
      -  "to"
      -]New value: +[
      +  "idempotencyKey",
      +  "messageId",
      +  "to"
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "data": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "accountId": {
      +          "type": "string"
      +        },
      +        "error": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "code": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "code"
      +          ],
      +          "type": "object"
      +        },
      +        "kind": {
      +          "type": "string"
      +        },
      +        "operationId": {
      +          "type": "string"
      +        },
      +        "result": {
      +          "additionalProperties": true,
      +          "properties": {
      +            "id": {
      +              "type": "string"
      +            },
      +            "threadId": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "threadId"
      +          ],
      +          "type": "object"
      +        },
      +        "scheduleId": {
      +          "type": "string"
      +        },
      +        "status": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "operationId",
      +        "accountId",
      +        "kind",
      +        "status"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "data"
      +  ],
      +  "type": "object"
      +}
  6. Changed1 schema field changedv0.9.0
    • addedInput schema / properties / from
      Added value: +{
      +  "description": "Connected address or an available send-as address",
      +  "format": "email",
      +  "type": "string"
      +}
  7. First observedv0.1.0

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations, which already declare destructiveHint=true and idempotentHint=true. The description discloses the resulting subject prefix, that original content is quoted, that attachments are carried over unless includeAttachments is false, where the comment appears, and exactly how idempotent replay behaves.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action and followed by the behavioral details an agent needs. No filler and nothing buried at the end.

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?

An output schema exists, so return values need not be explained, and the description covers the key behavioral traits of a forwarding mutation. Nearly complete, with only minor gaps such as account-selection prereqs already handled by the schema.

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 88%, so the schema already documents to/cc/from/accountId/messageId/idempotencyKey/includeAttachments. The description mostly restates schema facts (attachment default, comment placement) rather than adding new meaning, so baseline 3 applies.

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?

States a specific verb and resource ('Forward an email to new recipients') and adds the concrete result (Fwd: subject, quoted original). It is distinguishable from send_email by the word 'forward' and the quoted-content behavior, though it never explicitly names sibling tools.

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

Usage Guidelines4/5

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

Gives clear operational guidance on retries: repeating a successful forward with the same idempotencyKey and arguments returns the saved result. It does not explicitly rule out send_email or address preconditions, but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.