Skip to main content
Glama
Commonpost MCP for Thunderbird

Commonpost MCP for Thunderbird

Forward Message

forwardMessage
Destructive

Forward an email with its original content and attachments. Open a compose window for review, save it as a draft, or send directly with required sender and recipient fields.

Instructions

Forward with the original content and attachments. mode: window (compose window for review, default), draft (save to Drafts, to optional; returns messageId + folderPath; needs the saveDraft tool enabled), send (direct, needs to and from; blocked unless the user disables the skipReview safety block).

Input Schema

NameRequiredDescriptionDefault
ccNoCC recipients (comma-separated)
toNoRecipient email address (required with mode send)
bccNoBCC recipients (comma-separated)
bodyNoAdditional text to prepend
fromNoSender identity (email or identity ID from listAccounts); default: the identity the message was addressed to. Required with mode send.
modeNowindow (default), draft or send
isHtmlNoThe body is HTML (default: false)
messageIdYesThe message ID to forward (from searchMessages)
folderPathYesFolder URI (from searchMessages)
skipReviewNoLegacy: true means mode send (default: false)
attachmentsNoAdditional attachments: file paths (strings) or inline objects ({name, contentType, base64})

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.19.2
    • changedInput schema / properties / attachments / items / oneOf
      Previous value: -[
      -  {
      -    "description": "Absolute file path to attach",
      -    "type": "string"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "anyOf": [
      -      {
      -        "required": [
      -          "base64"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "required": [
      -          "content"
      -        ],
      -        "type": "object"
      -      }
      -    ],
      -    "properties": {
      -      "base64": {
      -        "contentEncoding": "base64",
      -        "description": "Base64-encoded file content",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "content": {
      -        "contentEncoding": "base64",
      -        "description": "Alias for base64 (accepted for backwards compatibility); base64 takes precedence when both are set",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "contentType": {
      -        "description": "MIME type, e.g. application/pdf",
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "Attachment filename",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "name"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "description": "Absolute file path",
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "anyOf": [
      +      {
      +        "required": [
      +          "base64"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "required": [
      +          "content"
      +        ],
      +        "type": "object"
      +      }
      +    ],
      +    "properties": {
      +      "base64": {
      +        "contentEncoding": "base64",
      +        "description": "File content, base64",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "content": {
      +        "contentEncoding": "base64",
      +        "description": "Old name of base64, which wins if both are set",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "contentType": {
      +        "description": "MIME type",
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "File name",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / body / description
      Previous value: -"Additional text to prepend (optional)"New value: +"Additional text to prepend"
    • changedInput schema / properties / folderPath / description
      Previous value: -"The folder URI path (from searchMessages results)"New value: +"Folder URI (from searchMessages)"
    • changedInput schema / properties / from / description
      Previous value: -"Sender identity (email address or identity ID from listAccounts); default: the identity the message was addressed to, as in Thunderbird. Required with mode send."New value: +"Sender identity (email or identity ID from listAccounts); default: the identity the message was addressed to. Required with mode send."
    • changedInput schema / properties / isHtml / description
      Previous value: -"Set to true if body contains HTML markup (default: false)"New value: +"The body is HTML (default: false)"
    • changedInput schema / properties / messageId / description
      Previous value: -"The message ID to forward (from searchMessages results)"New value: +"The message ID to forward (from searchMessages)"
  2. First observedv0.1.0

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and openWorldHint=true, and the description adds genuinely new behavioral context: direct send is gated by a user-facing safety block, draft mode depends on another tool being enabled, and draft mode returns messageId + folderPath. It does not explain what the destructiveHint implies for the source message (e.g., whether anything is moved or deleted), which keeps it from a 5.

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 text is compact and front-loaded, leading with what is forwarded before the mode branch, with each mode's parenthetical carrying real prerequisites rather than filler. The nested parentheses make it dense to parse, but no sentence is wasted.

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 11-parameter tool with no output schema, the description covers the decision-critical parts: default mode, per-mode requirements, the safety gate on sending, and the draft-mode return values. Remaining details such as window-mode behavior are low-risk and adequately implied by 'compose window for review' plus the schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds mode-conditional meaning the schema only states tersely: 'to' is optional in draft mode, required in send mode, and skipReview is framed as the legacy switch tied to the review safety block. The attachment parameter's additive nature ('original content and attachments') is only indirectly clarified, leaving a small gap.

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 opens with a specific verb and resource ('Forward with the original content and attachments'), so the agent immediately knows this forwards an existing message rather than composing a new one. It does not explicitly contrast with replyToMessage or sendMail, but the forwarding semantics are unambiguous enough to distinguish it from siblings.

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?

It spells out the three modes and the condition that selects each: window for review (the default), draft to persist and return messageId + folderPath (requiring the saveDraft tool to be enabled), and send requiring to/from while being blocked unless the user disables the skipReview safety block. That is explicit when-to-use, when-not, and dependency guidance rather than implied usage.

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