Skip to main content
Glama
proton-mcp

proton-mcp

by RndmJoker

Prepare a reply as a draft

reply_draft

Write a reply to a Proton Mail message as a draft without sending it, quoting the original and using Reply-To or sender as recipient.

Instructions

Writes a reply to a message as a draft. The recipient is the message's Reply-To if it set one, otherwise its sender. The original is quoted below the new text. Nothing is sent. Note on threading: the reply is built with In-Reply-To and References, but Proton replaces those with its own internal thread id when it stores a draft, so a draft that is stored and sent later carries Proton's idea of the conversation rather than ours. The body is plain text and markup is not interpreted. HTML written here is delivered as visible characters, so the recipient would read the tags rather than see formatting. Give a message its shape with line breaks, blank lines, indentation and plain lists, and write a link as the bare address so that what is read is what is followed. A message may instead be written as markup, in the html field, which is delivered as formatting rather than as visible tags. Give one or the other, not both: a message that carries markup has its plain text half dropped, so the half that was confirmed would never arrive. Permitted are headings, paragraphs, line breaks, rules, quotes, emphasis, lists, tables, links and images, with colour, font, alignment, spacing and borders. Anything else is refused rather than quietly removed, and the answer names what and why. Note that the preview page linked from the confirmation lists every address in the message in full, including the ones behind links and images, and every alt text, because those are what a recipient reads. The question in the client stays short and carries counts instead. Text is UTF-8 everywhere: subject, body and addresses. Write characters as the language actually spells them, including umlauts, accents, sharp s, quotation marks and any other non-ASCII character. Do not transliterate them away (no "ae" for "ä", no "ss" for "ß"): the subject is encoded for transport and decoded again on arrival, and the body carries its character set, both verified against the Bridge. A transliterated message is simply a message with the wrong words in it.

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": {
      "messageId": "<messageId>",
      "text": "<text>"
    },
    "name": "reply_draft"
  }
}

Input Schema

NameRequiredDescriptionDefault
htmlNoYour part of the message as markup instead of plain text. The original is quoted below it either way. The quote keeps the original's own markup, character for character, minus what would reach out of it: style blocks, document-level elements, scripts and comments. A message this server would not itself compose can therefore still be replied to or forwarded, but its formatting travels along, and so does anything a link in it points at.
textYesThe reply itself. The original is quoted below it.
mailboxNoThe mailbox the original is in, if known.
replyAllNoWhen true, the other recipients of the original are put in copy.
messageIdYesThe message id from a listing or a search, with or without angle brackets.
markupLevelNoHow much markup is permitted. "standard" covers ordinary formatted mail. "extended" permits every CSS property, including ones that can hide content, and makes the confirmation carry a warning telling the person to open the preview. Prefer "standard"; reach for "extended" only when asked for something that needs it, such as a button, which requires display:inline-block.standard

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.4.11

TDQS

A4.4/5.0
Behavior5/5

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

With annotations covering only the mutation/destructive profile, the description adds substantial behavior the annotations cannot: threading is replaced by Proton's internal thread id on storage, text and html are mutually exclusive and the plain-text half is dropped when both are given, unsupported markup is refused rather than stripped, and the preview/confirmation exposes every address and alt text. That is exactly the kind of consequence an agent needs before calling.

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

Conciseness3/5

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

The purpose is front-loaded, but the body is long and dense, with several run-on explanations and a rhetorical closing line ('A transliterated message is simply a message with the wrong words in it'). The UTF-8 and markup sections could be tightened without losing meaning, and bullets would make the text-vs-html constraint easier to act on.

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 six-parameter, no-output-schema mutation tool, the description covers the difficult parts: recipient selection, quoting, threading caveats, markup limits, and encoding. It does not clearly state what the tool actually returns (the confirmation/preview is referenced but not defined), which is the main gap against the absence of an output 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 goes beyond the schema by explaining the cross-parameter constraint (give text or html, not both, and why), the plain-text nondestructive-markup rule, and the practical reasoning for choosing standard over extended markupLevel. It does not add much on mailbox, messageId, or replyAll beyond the schema, keeping it from a 5.

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?

The first sentence names a specific verb and resource ('Writes a reply to a message as a draft') and immediately scopes it with 'Nothing is sent', which separates it from send_reply and send_draft. The recipient-resolution rule (Reply-To, otherwise sender) further pins down exactly what this tool does.

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?

The description makes the use case clear: compose a reply without sending, then confirm via the preview/confirmation. It also gives conditional guidance for the text/html choice and for markupLevel ('Prefer standard'). It never explicitly names send_reply or send_draft as alternatives, so the when-not-to-use routing is left implicit.

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