MCP tools for personalized emails
Generate and manage personalized email records through MCP without sending mail or publishing website changes.
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.
Illustrative response when no platform is connected:
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.
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.
| Argument | Type | Required | Meaning |
|---|---|---|---|
project_id | string | No | Public project ID. |
email_pid | string | Yes | Public email record ID. |
Illustrative response, with generated content abbreviated:
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.
| Argument | Type | Required | Default and behavior |
|---|---|---|---|
project_id | string | No | Active or eligible project. |
name | string | Yes | Initial name; generation can replace it. |
original_email | string | Yes | Source email text. |
instructions | string | No | Additional writing instructions; defaults to an empty string. |
Illustrative response, not a guarantee of model output:
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.
| Argument | Type | Required | Meaning |
|---|---|---|---|
project_id | string | No | Public project ID. |
email_pid | string | Yes | Existing email record. |
name | string | No | Replacement name. |
original_email | string | No | Replacement source email. |
At least one editable non-null field is required. There are no instructions, personalized_email, or regeneration arguments.
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.
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.