Skip to main content
Glama
Email Sending MCP

Email Sending MCP

by resend

Forward Inbox Thread Email

forward-inbox-thread-email
Destructive

Forward a message from a Resend inbox thread to new recipients, with optional cc, bcc, and a note. Use it to pass along a message or loop others into the conversation.

Instructions

Purpose: Forward one message from a Resend inbox thread to someone else. This sends a real email the moment you call it, from the inbox's address to the recipients named in "to", "cc" and "bcc".

NOT for: Answering the sender (use reply-to-inbox-thread-email, which answers the message's author, or everyone on it with replyAll). Not for starting a new conversation from the inbox (use send-new-inbox-email).

Returns: The sent email's id.

When to use: User asks to forward a message in an inbox thread, pass it along, or loop someone in on it. Before using this tool, you MUST double-check with the user that they want to forward this message. Reference the RECIPIENTS, including any cc and bcc, and the SUBJECT when double-checking, and warn the user that forwarding cannot be undone: a sent email cannot be recalled, and every recipient keeps the original message. You may only use this tool if the user explicitly confirms they want to forward the message after you double-check. "to" is the only body field required: html and text are an optional note of your own, because the original message is carried either way. Across to, cc and bcc a forward can reach at most 50 recipients in total. The original message's attachments are sent with the forward; name any attachments you add in the double-check. A message whose original attachment was sent from a URL cannot be forwarded. Get the emailId from get-inbox-thread.

Input Schema

NameRequiredDescriptionDefault
ccNoEmail address to copy on the forward, or an array of addresses.
toYesRecipient email address to forward to (e.g. "teammate@example.com"), or an array of recipient email addresses to forward to several.
bccNoEmail address to blind-copy on the forward, or an array of addresses.
htmlNoOptional HTML note to add above the forwarded message. This does not replace the original body: the message being forwarded is carried along either way.
textNoOptional plain text note to add above the forwarded message. This does not replace the original body: the message being forwarded is carried along either way.
emailIdYesID of the message being forwarded. This is the "id" get-inbox-thread returns for each message in the thread.
headersNoOptional custom email headers as key/value pairs (e.g. {"X-Entity-Ref-ID": "unique-id"}). Header names cannot be empty, and names and values cannot contain line breaks or null characters. In-Reply-To, References and Reply-To are reserved: Resend sets them, and passing any of them, in any letter case, fails.
inboxIdYesInbox ID, or the inbox email address (e.g. "support@example.com"). Not the Resend receiving address.
subjectNoSubject for the forwarded email. Omit to use the thread's subject, prefixed with "Fwd:". Max 2000 characters. It cannot be only whitespace or contain a line break.
threadIdYesThread ID
attachmentsNoFiles to attach. Each one needs filename plus content or url. An empty file or a blocked file type (such as .exe) is rejected. The forward also sends the attachments of the original message, and they share one limit: at most 25 MB of content together. A url file does not count toward it, because it is fetched when the email is sent. The whole email, encoded, can be at most 40 MB.
idempotencyKeyNoOptional unique key that prevents duplicate sends on retries (sent as the Idempotency-Key header). Use the same key when retrying the same logical email; use a new key for a different email. Must be 1-256 characters.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv2.27.1
    • changedInput schema / properties / attachments / description
      Previous value: -"Files to attach. Each one needs filename plus content or url. An empty file or a blocked file type (such as .exe) is rejected. The forward also sends the attachments of the original message, and they share one limit: up to 10 files and at most 25 MB of content together. A url file counts toward the 10 files only, because it is fetched when the email is sent. The whole email, encoded, can be at most 40 MB."New value: +"Files to attach. Each one needs filename plus content or url. An empty file or a blocked file type (such as .exe) is rejected. The forward also sends the attachments of the original message, and they share one limit: at most 25 MB of content together. A url file does not count toward it, because it is fetched when the email is sent. The whole email, encoded, can be at most 40 MB."
    • changedInput schema / properties / attachments / items / properties / content / description
      Previous value: -"Base64-encoded file content. Provide content or url."New value: +"Base64-encoded file content. Use `url` instead for files larger than a few hundred kilobytes. Provide content or url."
    • changedInput schema / properties / attachments / items / properties / url / description
      Previous value: -"URL where the file is hosted. Resend fetches it when the email is sent. It must be an http or https URL that does not point to localhost, 127.0.0.1 or 0.0.0.0. Provide content or url."New value: +"URL where the file is hosted. Resend fetches it when the email is sent. It must start with http:// or https:// and cannot start with http://localhost:. A URL Resend cannot fetch fails the email when it is sent, not this call. Provide content or url."
    • removedInput schema / properties / attachments / maxItems
      Removed value: -10
    • changedInput schema / properties / inboxId / description
      Previous value: -"Inbox ID"New value: +"Inbox ID, or the inbox email address (e.g. \"support@example.com\"). Not the Resend receiving address."
  2. Addedv2.26.1

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and openWorldHint=true, but the description adds substantial non-structured context: the email is sent immediately, it cannot be recalled, recipients retain the original, a 50-recipient cap across to/cc/bcc, attachments from the original are carried along, and URL-sourced originals cannot be forwarded. These are real behavioral constraints an agent must know.

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?

Bold-labeled sections (Purpose / NOT for / Returns / When to use) make it scannable and front-loaded. It is slightly long and the double-check requirement is restated twice ('you MUST double-check' then 'only use this tool if the user explicitly confirms after you double-check'), which is minor redundancy.

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?

No output schema exists, but the description states the return value (the sent email's id) and covers the mutation's side effects, limits, and edge cases. Nothing an agent needs to invoke this correctly is missing.

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 per-field text by stating cross-parameter rules the schema does not express: 'to' is the only required body field, html/text are optional notes that never replace the original body, and the 50-recipient aggregate limit across to/cc/bcc.

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?

States a specific verb and resource ('Forward one message from a Resend inbox thread') and immediately names the two siblings it is NOT (reply-to-inbox-thread-email, send-new-inbox-email), so an agent can route without opening another schema.

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?

Explicit 'When to use' section, explicit 'NOT for' section with the correct alternative for each excluded case, plus a hard precondition (mandatory user double-check and confirmation) and where to obtain emailId (get-inbox-thread). This is close to a complete decision rule.

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

Deploy Server

Other Tools