tools/call over POST /hubspot-email/mcp. The connector is connected through
OAuth (HubSpot login; see Forbind HubSpot Marketing Email).
Endpoint:
https://mcp.consile.ai/hubspot-email/mcp. HubSpot Marketing Email
is its own named connector with only its own tools.Write safety: guardrail model
The connector divides its write tools into two groups based on reversibility and audience impact. Runs freely (no confirmation needed):create_email: creates an unpublished draft; never sends.update_email_draft: edits the draft buffer only; the live/published version is unchanged.clone_email: produces a new draft; no audience impact.create_email_ab_variation: creates a draft variant; does not send.
confirm: true:
update_email: edits the live/current record (can change the audience or content of an already-published or scheduled email).publish_email: sends the email to real recipients. Highest-risk action.unpublish_email: cancels a scheduled send or unpublishes a published email.delete_email: soft-archives the email.reset_email_draft: discards unsaved draft changes (destructive; cannot be undone).restore_email_revision_to_draft: overwrites the draft buffer with a previous revision.restore_email_revision: replaces the live version with a previous revision.
confirm: true, every confirm-gated tool returns a WritePreview dry-run
and calls no HubSpot API. Sending is only reachable through the explicitly-confirmed
publish_email tool. create_email and update_email_draft can never publish or
schedule a send: the state/publishDate/sendOnPublish fields are intentionally
absent from those tools.
This is a designed-in safety default (connector-local application logic), not an
unbreakable platform gate. See
Handlinger & guardrails for the full
cross-connector policy.
WritePreview shape
When a write action requires confirmation butconfirm is omitted or false, the
tool returns this shape instead of calling HubSpot:
confirm: true added.
Shared parameters
Paging
List tools return a HubSpot{ total, results, paging } envelope. To fetch the
next page, pass the cursor from paging.next.after as the after argument.
Max items to return in this page (1-100).
Paging cursor from a previous response’s
paging.next.after.Email id
All per-email tools acceptemailId: the numeric HubSpot marketing email id.
Timestamps
Time-range fields accept ISO 8601 strings, e.g.2026-01-01T00:00:00Z.
Read tools (8 total)
list_emails
List marketing emails with paging and filtering. PassincludeStats: true to
include aggregated post-send statistics per email in the same response.
Field to sort by; prefix with
- for descending, e.g. -updatedAt.List archived emails instead of live ones.
Filter by campaign GUID.
Filter by email type:
BATCH_EMAIL, AB_EMAIL, AUTOMATED_EMAIL, RSS_EMAIL.Filter by published state.
Include post-send statistics in each result.
ISO 8601 lower bound on creation time.
ISO 8601 upper bound on creation time.
ISO 8601 lower bound on update time.
ISO 8601 upper bound on update time.
ISO 8601 lower bound on publish time.
ISO 8601 upper bound on publish time.
{ total, results[], paging }: each result includes the email id,
name, subject, type, published state, campaign, language, and (when requested)
aggregated send stats.
get_email
Get the full details of one marketing email by id (the live/current version).Include aggregated post-send statistics in the response.
Include per-variant stats for A/B emails.
Look up an archived email.
get_email_draft
Read the current unpublished draft (working copy) of a marketing email to inspect pending edits before publishing.list_email_revisions
List the historical revisions (version snapshots) of a marketing email, with paging.Paging cursor: revisions before this token.
{ results[], paging }: each revision includes revision id,
created time, and a snapshot of the email at that point.
get_email_revision
Get a single historical revision by revision id.The revision/version id (from
list_email_revisions).get_email_ab_variation
Get the opposite A/B variation of an A/B marketing email: given variation A it returns B, and vice versa.get_email_statistics
Get aggregated post-send statistics across emails sent in a time span: sent, delivered, open, click, bounce counters and ratios, plus the list of email ids sent. Matches the in-app Email Performance view.Start of the time span (ISO 8601).
End of the time span (ISO 8601).
Restrict to these email ids. Omit to include all sent emails in the span.
Restrict the returned statistic properties to one named field.
get_email_statistics_histogram
Get time-bucketed statistics over a span at a chosen interval. Each bucket carries the aggregated stats of emails sent in that interval. Useful for charting performance trends.Bucket size. One of:
HOUR, DAY, WEEK, MONTH, QUARTER, YEAR,
MINUTE, QUARTER_HOUR, SECOND.Start of the time span (ISO 8601).
End of the time span (ISO 8601).
Restrict to these email ids.
get_email_statistics.
Write tools (11 total)
Shared writable fields
Thecreate_email, update_email, and update_email_draft tools share a common
set of content and sender fields:
Email subject line.
Locale code, e.g.
en, en-us, da-dk.Marketing campaign GUID to associate the email with.
Business Unit id (requires the Business Units / Brands add-on).
Destination folder id.
Sender display name.
Reply-to email address.
Custom reply-to email address.
Contact list ids to send to (assembled into
to.contactLists.include).Path to the template or theme file the email uses.
Plain-text version of the email body.
create_email
Create a new marketing email as an unpublished draft. The state is forced toDRAFT
on creation: this tool can never publish or schedule a send. Only name is required.
Publish later with publish_email.
Runs freely. No confirmation needed.
Internal name of the email.
state: "DRAFT".
update_email
Sparse-update a marketing email’s fields on the live/current version, not just the draft buffer. Does not publish or send, but it can change the audience or content of an already-published or scheduled email. Requiresconfirm: true.
Set
true to apply. Omit or false to receive a WritePreview.confirm is not true.
update_email_draft
Create or update only the draft (working copy) of a marketing email without touching the live/published version. Does not publish or send. Runs freely. No confirmation needed.clone_email
Clone an existing marketing email into a new draft, optionally renaming it and setting a locale. Runs freely. No confirmation needed.The id of the marketing email to clone.
Name for the new cloned email.
Locale for the clone, e.g.
da-dk.create_email_ab_variation
Create an A/B test variation of a marketing email. The variation is created as a draft variant and does not send. Runs freely. No confirmation needed.The id of the email to create an A/B variation of.
Name of the new variation.
reset_email_draft
Discard unsaved draft changes, resetting the draft back to the latest published version. This cannot be undone. Requiresconfirm: true.
Set
true to apply. Omit or false to receive a WritePreview.restore_email_revision_to_draft
Copy a previous revision’s content into the current draft without publishing. Overwrites the draft buffer. Requiresconfirm: true.
The revision id to restore into the draft (from
list_email_revisions).Set
true to apply. Omit or false to receive a WritePreview.restore_email_revision
Restore a previous revision as the new current/live version of the marketing email. Replaces the live version. Requiresconfirm: true.
The revision id to restore (from
list_email_revisions).Set
true to apply. Omit or false to receive a WritePreview.publish_email
Publish or send the marketing email to its configured recipients. This is the highest-risk action: it sends real email to the customer’s contact lists. Requiresconfirm: true. Needs the marketing-email (or transactional-email) scope on a
Marketing Hub Enterprise portal (or transactional-email add-on).
Requires confirm: true.
Set
true to apply. Omit or false to receive a WritePreview.unpublish_email
Unpublish a published email or cancel a scheduled send. Requiresconfirm: true.
Set
true to apply. Omit or false to receive a WritePreview.delete_email
Delete a marketing email (soft-archive). The email can be retrieved from the archived state, but deletion is treated as irreversible here. Requiresconfirm: true.
Set
true to apply. Omit or false to receive a WritePreview.Code examples
Tool names are namespaced
hubspot-email__<tool> in Claude/ChatGPT (the AI invokes
these automatically). The bare names, e.g. publish_email, are used in this
reference for readability.An expired or revoked access token surfaces as
AccessTokenExpiredError. HubSpot
access tokens are short-lived (~30 minutes) and renewed automatically in the
background via the stored refresh token. If automatic renewal fails, reconnect via
the portal. See Errors & limits.