Writing
Composing, translating and sending.
Writing tools
| Tool | What it does |
|---|---|
| composeEmail | Draft an email with AI assistance. Returns the text; it does not save a draft. |
| sendEmail | Send a new email. translateTo writes it in the recipient’s language; includeOriginal (default true) keeps what you wrote beneath the translation. |
| previewTranslation | What translateTo would produce (the translated subject and the exact body sendEmail would put on the wire), with nothing sent and nothing stored. |
| listTranslationLanguages | Every language translateTo accepts, optionally filtered by a fragment of a code, an English name or the language’s own name. |
sendEmail takes recipients, subject, body, and optionally a thread or draft id. It does not currently accept attachments, custom headers or a From address. It sends as the active connection.
There is no draft handling over MCP. Creating and editing drafts is REST-only today.
sendEmail with translateTo sends immediately and nobody reads the translation first. Call previewTranslation, show the person you are working for what it says, then pass the subject and body they approved back to sendEmail with translateTo LEFT OUT. Passing it again translates a second time and the wording moves.
translateTo takes a code (de), an English name ("German") or the language’s own name ("Deutsch"). One that cannot be placed refuses the call rather than sending the message untranslated. A message going out in a language its sender did not choose is the failure this refusal exists to prevent.
Translating costs three model calls (the body, the subject, and one to work out what you wrote in) whether you preview or send, so preview once rather than per revision. listTranslationLanguages costs nothing; it is a table, not a model call.
Neither tool proofreads and neither answers the message. Translation is all they do.