Skip to main content
Glama

Forward an email

mail_forward

Forwards a message, with its attachments, to new recipients from the account that received it, with an optional note on top. Use it to pass mail on to someone. Returns sent. It can return pending_approval: tell the user a person must approve it in Prubex, and do not retry. Example: { "message_id": "msg_…", "to": [{ "email": "chen@northwind.example.com" }] }.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "message_id": "<message_id>",
      "to": "<to>"
    },
    "name": "mail_forward"
  }
}

Input Schema

NameRequiredDescriptionDefault
ccNoCopied recipients.
toYesWho to forward it to, as `{ email, name? }`.
bccNoBlind-copied recipients.
bodyNoA note above the forwarded message.
message_idYesA message id (`msg_…`) from a list or search.
attachmentsNoFiles to add; with the original's attachments, within the account's limit.
idempotency_keyNoAny unique string. Retrying with the same key within 24 h never repeats the action.

Output Schema

NameRequiredDescriptionDefault
statusYes
messageYesWhat happened, in words for the user.
thread_idNo
account_idYes
expires_atNoWhen held: when the request expires.
message_idNoThe sent message, when the provider reports it.
review_urlNoWhen held: where a person approves it in Prubex.
approval_idNoWhen held: pass it to approvals_get later.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / attachments / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "upload_token": {
      -        "description": "From attachments_check_upload_status: a file the user uploaded.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "upload_token"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "content_base64": {
      -        "description": "Base64 content, at most 3 MB decoded for all inline files together. For anything larger, or a file only the user has, ask the user to upload it with attachments_generate_upload_link and pass the upload_token.",
      -        "maxLength": 4194304,
      -        "type": "string"
      -      },
      -      "filename": {
      -        "description": "The file name the recipient sees.",
      -        "maxLength": 255,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "mime_type": {
      -        "description": "e.g. \"application/pdf\".",
      -        "maxLength": 255,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "filename",
      -      "mime_type",
      -      "content_base64"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "upload_token": {
      +        "description": "From attachments_check_upload_status: a file the user uploaded.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "upload_token"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "content_base64": {
      +        "description": "Base64 content, at most 3 MB decoded for all inline files together. For a file on your own disk, if you can make HTTP requests, use an upload_token from attachments_generate_upload_link instead (you PUT the file yourself, no base64); for a file only the user has, give them that link.",
      +        "maxLength": 4194304,
      +        "type": "string"
      +      },
      +      "filename": {
      +        "description": "The file name the recipient sees.",
      +        "maxLength": 255,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "mime_type": {
      +        "description": "e.g. \"application/pdf\".",
      +        "maxLength": 255,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "filename",
      +      "mime_type",
      +      "content_base64"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed2 schema fields changed
    • addedInput schema / properties / bcc
      Added value: +{
      +  "description": "Blind-copied recipients.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "email": {
      +        "description": "The email address.",
      +        "format": "email",
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "Display name.",
      +        "maxLength": 200,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "email"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 100,
      +  "type": "array"
      +}
    • addedInput schema / properties / cc
      Added value: +{
      +  "description": "Copied recipients.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "email": {
      +        "description": "The email address.",
      +        "format": "email",
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "Display name.",
      +        "maxLength": 200,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "email"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 100,
      +  "type": "array"
      +}
  3. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare this is a mutating, non-idempotent, open-world, non-destructive operation, so the description's added value lies in the outcome states: it returns `sent`, or `pending_approval` in which case the user must be told and the call must not be retried. That is a concrete, non-obvious operational instruction. It stops short of covering partial failure or attachment-limit behavior, which the schema touches on separately.

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?

Behavior and the critical pending_approval instruction are front-loaded, and the example is compact. The sentence "Use it to pass mail on to someone" is redundant with the opening clause and could be dropped.

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?

For a 7-parameter nested tool with an output schema, the description covers the essential unknowns: sending account, attachment inheritance, the optional note, and the approval outcome. Return-value detail is correctly left to the output schema. Only the interplay between supplied attachments and the account's storage limit is left implicit.

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 parameters are fully documented in structured form and the baseline of 3 applies. The inline example clarifies the shape of `to` as an array of objects, but adds little beyond what the schema already spells out.

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?

"Forwards a message, with its attachments, to new recipients from the account that received it" names a specific verb plus resource and pins down the sending account, which separates it from mail_send and mail_reply. An agent can tell what this does without opening the schema.

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?

"Use it to pass mail on to someone" only restates the verb; there is no explicit statement of when to prefer this over mail_send, mail_create_draft or mail_reply. The one genuinely useful conditional is the pending_approval path, which is behavioral rather than selection guidance.

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.

Resources