Read Enginemailer subscribers, lists and campaigns; add subscribers, create and send campaigns.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
WRITE: add a subscriber to the account (optionally into subcategories, with custom field values). Only add people who consented to marketing email. Free accounts may insert 50 subscribers a day, paid accounts 10,000. POST /restapi/subscriber/emsubscriber/insertSubscriber.
An email address (max 128 characters).
Where the subscriber came from, e.g. 'Signup from website' (max 256).
Custom field values to set.
Subcategory (list/segment) ids from enginemailer_list_subscriber_categories.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
WRITE: add a subscriber to the account (optionally into subcategories, with custom field values). Only add people who consented to marketing email. Free accounts may insert 50 subscribers a day, paid accounts 10,000. POST /restapi/subscriber/emsubscriber/insertSubscriber.
| Argument | Type | Description |
|---|---|---|
| email* | string | An email address (max 128 characters). |
| source_type | string | Where the subscriber came from, e.g. 'Signup from website' (max 256). |
| custom_fields | array | Custom field values to set. |
| subcategory_ids | array | Subcategory (list/segment) ids from enginemailer_list_subscriber_categories. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 128,
"description": "An email address (max 128 characters)."
},
"source_type": {
"type": "string",
"maxLength": 256,
"description": "Where the subscriber came from, e.g. 'Signup from website' (max 256)."
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Custom field key from enginemailer_list_custom_fields (customfield_key)."
},
"value": {
"type": "string",
"maxLength": 512,
"description": "The value. Dates 'dd MMM yyyy', phones '+<country><number>', checkbox values separated by '|'."
}
}
},
"maxItems": 100,
"description": "Custom field values to set."
},
"subcategory_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 500,
"description": "Subcategory (list/segment) ids from enginemailer_list_subscriber_categories."
}
}
}WRITE: set who a campaign will go to: all subscribers, or the subscribers in the given subcategory ids (match_type any = OR, all = AND). Does not send anything. Needs a paid account. POST /restapi/campaign/emcampaign/AssignRecipientList.
| Argument | Type | Description |
|---|---|---|
| audience* | string | |
| match_type | string | any = subscribers in at least one subcategory (OR, default); all = in every one (AND). |
| campaign_id* | integer | Campaign id. |
| subcategory_ids | array | Required when audience is subcategories. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id",
"audience"
],
"properties": {
"audience": {
"enum": [
"all_subscribers",
"subcategories"
],
"type": "string"
},
"match_type": {
"enum": [
"any",
"all"
],
"type": "string",
"description": "any = subscribers in at least one subcategory (OR, default); all = in every one (AND)."
},
"campaign_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Campaign id.",
"exclusiveMinimum": 0
},
"subcategory_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 500,
"minItems": 1,
"description": "Required when audience is subcategories."
}
}
}Status of a report export (Processing or Complete); when complete it includes the CSV download URL. POST /RESTAPI/V2/Submission/Report/CheckExport (read-only).
| Argument | Type | Description |
|---|---|---|
| export_id* | integer | ExportID from enginemailer_start_transactional_report_export. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"export_id"
],
"properties": {
"export_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "ExportID from enginemailer_start_transactional_report_export.",
"exclusiveMinimum": 0
}
}
}WRITE: create a campaign DRAFT. Nothing is sent: assign recipients with enginemailer_assign_campaign_recipients, then send with enginemailer_send_campaign. The sender domain must be verified in Enginemailer; max 200 campaigns per account. Needs a paid account. POST /restapi/Campaign/EMCampaign/CreateCampaign.
| Argument | Type | Description |
|---|---|---|
| name* | string | Internal campaign name. |
| subject* | string | |
| reply_to | string | An email address (max 128 characters). |
| sender_name* | string | |
| content_html* | string | The email body, HTML (max 256 KB). |
| sender_email* | string | Sender address on a verified domain. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"sender_name",
"sender_email",
"subject",
"content_html"
],
"properties": {
"name": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Internal campaign name."
},
"subject": {
"type": "string",
"maxLength": 256,
"minLength": 1
},
"reply_to": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 128,
"description": "An email address (max 128 characters)."
},
"sender_name": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"content_html": {
"type": "string",
"maxLength": 262144,
"minLength": 1,
"description": "The email body, HTML (max 256 KB)."
},
"sender_email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 128,
"description": "Sender address on a verified domain."
}
}
}Delivery results of a DELIVERED campaign: emails sent, delivered, bounces, opens, unique opens, clicks, unique clicks, unsubscribes, spam complaints. Needs a paid account. GET /restapi/campaign/emcampaign/getcampaigndeliverystatus.
| Argument | Type | Description |
|---|---|---|
| campaign_id* | integer | Campaign id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"campaign_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Campaign id.",
"exclusiveMinimum": 0
}
}
}One subscriber by email: id, status and all custom field values. GET /restapi/subscriber/emsubscriber/getSubscriber.
| Argument | Type | Description |
|---|---|---|
| email* | string | An email address (max 128 characters). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 128,
"description": "An email address (max 128 characters)."
}
}
}The categories that campaign recipients can be filtered by (id, name, description). Needs a paid account. GET /restapi/campaign/emcampaign/GetCategoryList.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}The subcategories of one campaign category (id, name, description); use these ids in enginemailer_assign_campaign_recipients. Needs a paid account. GET /restapi/campaign/emcampaign/GetSubCategoryList.
| Argument | Type | Description |
|---|---|---|
| category_id* | integer | Category id from enginemailer_list_campaign_categories. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"category_id"
],
"properties": {
"category_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Category id from enginemailer_list_campaign_categories.",
"exclusiveMinimum": 0
}
}
}List campaigns that have NOT been delivered yet (drafts and scheduled ones): id, name, subject, sender and schedule. Delivered campaigns are not listed by the API; use enginemailer_get_campaign_stats with a known id. Needs a paid account. GET /restapi/campaign/emcampaign/ListCampaign.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}The subscriber custom field definitions (key, name, type). Use the keys when adding or updating subscribers. GET /restapi/subscriber/emsubscriber/getCustomField.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}The subscriber category tree: each category with its subcategories (ids, names). Use the subcategory ids when adding or updating subscribers and when assigning campaign recipients. GET /restapi/subscriber/emsubscriber/getSubCategory.
| Argument | Type | Description |
|---|---|---|
| include_active_subscriber_count | boolean | Also return active subscriber counts (only for accounts the vendor has enabled this for). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"include_active_subscriber_count": {
"type": "boolean",
"description": "Also return active subscriber counts (only for accounts the vendor has enabled this for)."
}
}
}WRITE: create a subscriber category (category_id 0) or update one (its id), with subcategories (subcategory_id 0 creates one). Names and descriptions max 128 characters. POST /restapi/subscriber/emsubscriber/updateCategory.
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| is_visible | boolean | Visible to subscribers (default true). |
| category_id* | integer | 0 to create a new category, else the existing category id. |
| description | string | |
| subcategories | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"category_id",
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"is_visible": {
"type": "boolean",
"description": "Visible to subscribers (default true)."
},
"category_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "0 to create a new category, else the existing category id."
},
"description": {
"type": "string",
"maxLength": 128
},
"subcategories": {
"type": "array",
"items": {
"type": "object",
"required": [
"subcategory_id",
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"description": {
"type": "string",
"maxLength": 128
},
"subcategory_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "0 to create, else the existing subcategory id."
}
}
},
"maxItems": 200
}
}
}WRITE, SENDS EMAIL TO CUSTOMERS NOW and cannot be undone: delivers the campaign to its assigned recipients immediately. The campaign needs at least one recipient and must not be scheduled or already delivered. Show the user the campaign and its audience and get their go-ahead first; set confirm to true only then. Needs a paid account. GET /restapi/campaign/emcampaign/SendCampaign.
| Argument | Type | Description |
|---|---|---|
| confirm* | boolean | Must be true: the user has approved sending this campaign to its recipients now. |
| campaign_id* | integer | Campaign id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id",
"confirm"
],
"properties": {
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true: the user has approved sending this campaign to its recipients now."
},
"campaign_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Campaign id.",
"exclusiveMinimum": 0
}
}
}WRITE, SENDS ONE EMAIL NOW and cannot be undone: submits a transactional email to one recipient (plus optional CC/BCC). Needs a sender address on a verified domain; give either subject + content_html, or a template_id from the Enginemailer portal (the template supplies subject and sender name). Total message incl. attachments max 5 MB. Confirm the recipient and text with the user first; set confirm to true only then. POST /RESTAPI/V2/Submission/SendEmail.
| Argument | Type | Description |
|---|---|---|
| cc | array | |
| bcc | array | |
| confirm* | boolean | Must be true: the user has approved sending this email now. |
| subject | string | |
| to_email* | string | An email address (max 128 characters). |
| sender_name | string | |
| template_id | string | Stored template id from the Enginemailer portal. |
| content_html | string | Email body (HTML). Not needed with template_id. |
Start a CSV export of the transactional email delivery report for a period (start date at most 60 days back). Returns an export id; poll it with enginemailer_check_transactional_report_export. Creates a report file only; nothing is sent. POST /RESTAPI/V2/Submission/Report/Export.
| Argument | Type | Description |
|---|---|---|
| period* | string | Date range exactly like '1 Sep 2026 - 16 Sep 2026'. |
| domain_filter | string | Domain filter, sent as the vendor's DomainFilter (the sender domain in the vendor's report), e.g. example.com. |
| email_to_filter | string | Only emails sent to this recipient. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"period"
],
"properties": {
"period": {
"type": "string",
"pattern": "^\\d{1,2} [A-Za-z]{3} \\d{4} - \\d{1,2} [A-Za-z]{3} \\d{4}$",
"description": "Date range exactly like '1 Sep 2026 - 16 Sep 2026'."
},
"domain_filter": {
"type": "string",
"maxLength": 255,
"description": "Domain filter, sent as the vendor's DomainFilter (the sender domain in the vendor's report), e.g. example.com."
},
"email_to_filter": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 128,
"description": "Only emails sent to this recipient."
}
}
}WRITE: unsubscribe a subscriber so they no longer receive campaigns. Reversing it needs the subscriber to opt in again in Enginemailer. GET /restapi/subscriber/emsubscriber/unSubSubscriber.
| Argument | Type | Description |
|---|---|---|
| email* | string | An email address (max 128 characters). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 128,
"description": "An email address (max 128 characters)."
}
}
}WRITE: change an existing subscriber's subcategories and/or custom fields. subcategories_mode: append (default), remove (drop the given subcategories) or replace (the given list becomes the full list). custom_fields_mode: update_given (change only the given fields) or replace_all (default; fields not given are cleared). POST /restapi/subscriber/emsubscriber/updateSubscriber.
| Argument | Type | Description |
|---|---|---|
| email* | string | An email address (max 128 characters). |
| custom_fields | array | Custom field values to set. |
| subcategory_ids | array | Subcategory (list/segment) ids from enginemailer_list_subscriber_categories. |
| custom_fields_mode | string | update_given changes only the listed fields; replace_all (the vendor default) clears the others. |
| subcategories_mode | string | How subcategory_ids apply (default append). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 128,
"description": "An email address (max 128 characters)."
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Custom field key from enginemailer_list_custom_fields (customfield_key)."
},
"value": {
"type": "string",
"maxLength": 512,
"description": "The value. Dates 'dd MMM yyyy', phones '+<country><number>', checkbox values separated by '|'."
}
}
},
"maxItems": 100,
"description": "Custom field values to set."
},
"subcategory_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 500,
"description": "Subcategory (list/segment) ids from enginemailer_list_subscriber_categories."
},
"custom_fields_mode": {
"enum": [
"update_given",
"replace_all"
],
"type": "string",
"description": "update_given changes only the listed fields; replace_all (the vendor default) clears the others."
},
"subcategories_mode": {
"enum": [
"append",
"remove",
"replace"
],
"type": "string",
"description": "How subcategory_ids apply (default append)."
}
}
}| sender_email* | string | Sender address on a verified domain (must match the template's sender when template_id is used). |
| campaign_name | string | Label for reports. |
| substitution_tags | array | Merge tags. Values must not contain { } [ ]. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"to_email",
"sender_email",
"confirm"
],
"properties": {
"cc": {
"type": "array",
"items": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 128,
"description": "An email address (max 128 characters)."
},
"maxItems": 10
},
"bcc": {
"type": "array",
"items": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 128,
"description": "An email address (max 128 characters)."
},
"maxItems": 3
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true: the user has approved sending this email now."
},
"subject": {
"type": "string",
"maxLength": 256
},
"to_email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 128,
"description": "An email address (max 128 characters)."
},
"sender_name": {
"type": "string",
"maxLength": 128
},
"template_id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Stored template id from the Enginemailer portal."
},
"content_html": {
"type": "string",
"maxLength": 1048576,
"description": "Email body (HTML). Not needed with template_id."
},
"sender_email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 128,
"description": "Sender address on a verified domain (must match the template's sender when template_id is used)."
},
"campaign_name": {
"type": "string",
"maxLength": 128,
"description": "Label for reports."
},
"substitution_tags": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"value": {
"type": "string",
"maxLength": 2000
}
}
},
"maxItems": 100,
"description": "Merge tags. Values must not contain { } [ ]."
}
}
}