Skip to help content
RightMessage
MCP referenceReference

MCP tools for personalized emails

Generate and manage personalized email records through MCP without sending mail or publishing website changes.

Available on the Grow, Scale, and Pro plans.

Updated

View as Markdown

These tools generate and store personalized email content. They do not send a message, schedule a campaign, or copy content into your email platform. Review and test the output in that platform before sending it.

MCP email access and saved records

Every operation accepts an optional string project_id and follows the shared MCP authorization and project-selection rules. Invalid, missing, or inaccessible projects produce errors before an email is read or changed.

Email records live separately from website configuration. Creating, updating, and deleting them takes effect immediately in the account. There is no website draft/publication boundary, and configuration undo does not restore a deleted email.

Examples are illustrative and were not executed. Requests are tools/call parameters; responses are decoded content. email_pid is the public record ID returned by the tools, not the email's name or an address.

get-email-personalization-context

Returns plain-text guidance for drafting personalized email content using the connected platform, business context, and synced audience dimensions.

Arguments: optional project_id string; no other arguments.

JSON
{"name":"get-email-personalization-context","arguments":{"project_id":"123456789"}}

Illustrative response when no platform is connected:

Text
No email platform connected.

The team needs to connect an email platform (Kit, ActiveCampaign, HubSpot, etc.) before personalized Liquid templates can be generated.

With a platform connected, the response describes its templating conventions, available custom-field names, synced published dimensions, segment distribution over the last 30 days, and writing constraints. These include fallback content, avoiding nested conditions, and avoiding unsupported field references. It can read the provider's custom-field catalog. A failed field-catalog lookup can leave that part of the context empty.

The response is not a generated email and does not change provider data. It uses published audience information, not unpublished dimension changes. Do not assume every connected provider supports the same Liquid syntax.

list-personalized-emails

Lists the project's email records, newest first.

Arguments: optional project_id string. There is no pagination or search argument.

JSON
{"name":"list-personalized-emails","arguments":{"project_id":"123456789"}}
JSON
[{"pid":"987654321","name":"WorkForge welcome","completed_at":"2026-10-13T12:00:00Z","created_at":"2026-10-13T11:59:00Z","updated_at":"2026-10-13T12:00:00Z"}]

Each item contains only pid, name, completed_at, created_at, and updated_at. Despite the tool's broad description, the list response does not include email bodies. An empty account returns []. Read a record to retrieve its content.

get-personalized-email

Reads a single stored email without regenerating it.

ArgumentTypeRequiredMeaning
project_idstringNoPublic project ID.
email_pidstringYesPublic email record ID.
JSON
{"name":"get-personalized-email","arguments":{"project_id":"123456789","email_pid":"987654321"}}

Illustrative response, with generated content abbreviated:

JSON
{"pid":"987654321","name":"WorkForge welcome","original_email":"Welcome to WorkForge.","personalized_email":"Welcome to WorkForge.","rationale":"Use a general greeting when no segment matches.","affected_segments":[],"segmentation_dimensions":"[]","instructions":"Keep the welcome concise.","completed_at":"2026-10-13T12:00:00Z","created_at":"2026-10-13T11:59:00Z","updated_at":"2026-10-13T12:00:00Z"}

The record returns stored original_email, personalized_email, rationale, affected_segments, segmentation_dimensions, and instructions, plus metadata and timestamps. Stored generation fields can be empty or null on an incomplete record; consumers should not assume a completed template from the record's existence alone. The current create path initializes segmentation_dimensions to the string "[]".

Missing email_pid or a record outside the selected project returns an error.

create-personalized-email

Creates an email record and runs AI enrichment before returning.

ArgumentTypeRequiredDefault and behavior
project_idstringNoActive or eligible project.
namestringYesInitial name; generation can replace it.
original_emailstringYesSource email text.
instructionsstringNoAdditional writing instructions; defaults to an empty string.
JSON
{"name":"create-personalized-email","arguments":{"project_id":"123456789","name":"WorkForge welcome","original_email":"Welcome to WorkForge. Plan your next project today.","instructions":"Keep the welcome concise."}}

Illustrative response, not a guarantee of model output:

JSON
{"pid":"987654321","name":"WorkForge welcome","original_email":"Welcome to WorkForge. Plan your next project today.","personalized_email":"Welcome to WorkForge. Plan your next project today.","rationale":"Keep a clear fallback for every reader.","affected_segments":[],"instructions":"Keep the welcome concise.","completed_at":"2026-10-13T12:00:00Z","created_at":"2026-10-13T11:59:00Z"}

The response includes the fields shown above, not segmentation_dimensions or updated_at. Generation finishes before the call returns. There is no background generation job to poll.

This operation sends email text and context to the configured AI service and saves an email record. It does not require publication or send email. Missing required text produces an input error. Generation or storage failures return Failed to create personalized email: .... A failed generation can leave a record behind. Inspect the list before repeating a failed creation.

New records use segmentation_dimensions: "[]" during generation. Calling get-email-personalization-context first does not automatically attach its dimension mappings to this record. Generation also uses business context, your instructions, and the connected provider's templating guidance. Review any generated segment references rather than assuming the tool supplied the project's complete audience catalog.

update-personalized-email

Updates stored source content or the record's name. It does not regenerate personalized_email.

ArgumentTypeRequiredMeaning
project_idstringNoPublic project ID.
email_pidstringYesExisting email record.
namestringNoReplacement name.
original_emailstringNoReplacement source email.

At least one editable non-null field is required. There are no instructions, personalized_email, or regeneration arguments.

JSON
{"name":"update-personalized-email","arguments":{"project_id":"123456789","email_pid":"987654321","name":"WorkForge onboarding email"}}
JSON
{"pid":"987654321","name":"WorkForge onboarding email","original_email":"Welcome to WorkForge.","personalized_email":"Welcome to WorkForge.","updated_at":"2026-10-13T12:30:00Z"}

The response includes exactly pid, name, original_email, personalized_email, and updated_at. This immediately overwrites the supplied fields. Missing IDs, missing editable fields, and unknown records return errors; storage failures use Failed to update personalized email: .... After changing the source, the existing generated version can be out of date.

delete-personalized-email

Permanently deletes one stored email record from the selected project.

Arguments: optional project_id string and required email_pid string.

JSON
{"name":"delete-personalized-email","arguments":{"project_id":"123456789","email_pid":"987654321"}}
JSON
{"deleted":true,"email_pid":"987654321"}

Deletion is immediate and destructive. It does not delete a campaign previously copied into an email platform, retract sent mail, or create a recoverable configuration draft. Missing IDs and unknown records return errors; storage failures use Failed to delete personalized email: ....

For review and export steps in the dashboard, see Create and export a personalized email.

Still need a hand?

Tell us what you’re trying to do and where you’re getting stuck.

support@rightmessage.com