Skip to main content
Glama
Commonpost MCP for Thunderbird

Commonpost MCP for Thunderbird

Reply to Message

replyToMessage
Destructive

Reply to an email with quoted original text, opening a compose window, saving a draft, or sending directly; supports reply-all, attachments, and recipient overrides.

Instructions

Reply with quoted original text. mode: window (compose window for review, default), draft (save to Drafts with the recipients Thunderbird computes: Reply-To, Mail-Followup-To, mailing lists, identity auto Cc/Bcc; 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)
toNoOverride the recipients Thunderbird computes (required with mode send)
bccNoBCC recipients (comma-separated)
bodyYesReply body text
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)
replyAllNoReply to all recipients (default: false)
messageIdYesThe message ID to reply to (from searchMessages)
folderPathYesFolder URI (from searchMessages)
skipReviewNoLegacy: true means mode send (default: false)
attachmentsNoAttachments: file paths (strings) or inline objects ({name, contentType, base64})
latestInThreadNoReply to the newest message of this conversation instead (Sent included); not with mode send. Result: repliedTo when another message was answered, threadIncomplete when a newer one may exist

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 / 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 / latestInThread / description
      Previous value: -"Reply to the newest message of this conversation instead (Sent included); not with mode send. Result: repliedTo when another message was answered, threadIncomplete when the mailbox was read in part and a newer message may exist"New value: +"Reply to the newest message of this conversation instead (Sent included); not with mode send. Result: repliedTo when another message was answered, threadIncomplete when a newer one may exist"
    • changedInput schema / properties / messageId / description
      Previous value: -"The message ID to reply to (from searchMessages results)"New value: +"The message ID to reply to (from searchMessages)"
  2. First observedv0.1.0

TDQS

A3.9/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the recipient-computation logic in draft mode (Reply-To, Mail-Followup-To, mailing lists, identity auto Cc/Bcc), the return values (messageId, folderPath), and the skipReview safety gate. The annotations already flag destructiveHint and openWorldHint, and the description adds the operational prerequisites that make those hints actionable.

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 core action is front-loaded and no clause is filler, but the entire definition is a single run-on sentence with deeply nested parentheticals, which makes the mode semantics harder to scan than a short bulleted breakdown would be.

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 13-parameter mutation tool with no output schema, the description covers the risky parts: mode selection, send prerequisites, the safety block, and draft-mode return shape. It leaves the attachment and replyAll behaviors entirely to the schema, which is acceptable given full schema coverage but is the remaining gap.

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 coverage is 100%, so the schema already documents all 13 parameters, which sets the baseline at 3. The description does add real meaning for mode and skipReview (legacy alias for send), but says nothing about attachments, replyAll, isHtml, or latestInThread beyond what the schema states.

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 ('Reply with quoted original text') and immediately scopes the three execution modes. It implicitly distinguishes itself from forwardMessage and sendMail by framing everything as a reply to an existing messageId, but it never names a sibling outright, so an agent must infer the boundary.

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 concrete when-to-use guidance per mode: window is the default compose-for-review, draft requires saveDraft to be enabled, send requires to and from and is blocked unless the user disables the skipReview safety block. That is strong conditional guidance, though it offers no explicit 'use X instead' routing to forwardMessage or sendMail.

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