Read Sarbacane campaigns, stats, lists and blacklists; manage contacts and draft email 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: record an email and/or phone as unsubscribed in a blacklist, so campaigns using that blacklist skip it. Cannot be undone with these tools. POST /v1/blacklists/{blacklistId}/unsubscribers.
Blacklist id.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
WRITE: record an email and/or phone as unsubscribed in a blacklist, so campaigns using that blacklist skip it. Cannot be undone with these tools. POST /v1/blacklists/{blacklistId}/unsubscribers.
| Argument | Type | Description |
|---|---|---|
| string | ||
| phone | string | |
| blacklist_id* | string | Blacklist id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"blacklist_id"
],
"properties": {
"email": {
"type": "string",
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$",
"maxLength": 320,
"minLength": 3
},
"phone": {
"type": "string",
"pattern": "^\\+?[0-9 ().-]{5,30}$",
"maxLength": 30,
"minLength": 5
},
"blacklist_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Blacklist id."
}
}
}WRITE: add a contact to a contact list. Give an email, a phone number or both, and optional custom field values. Adds a new record; use sarbacane_upsert_contact to update an existing contact. POST /v1/lists/{listId}/contacts.
| Argument | Type | Description |
|---|---|---|
| string | ||
| phone | string | |
| fields | object | Custom field values as { <custom field id>: value }. Get the ids from sarbacane_list_list_fields. |
| list_id* | string | Contact list id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"email": {
"type": "string",
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$",
"maxLength": 320,
"minLength": 3
},
"phone": {
"type": "string",
"pattern": "^\\+?[0-9 ().-]{5,30}$",
"maxLength": 30,
"minLength": 5
},
"fields": {
"type": "object",
"description": "Custom field values as { <custom field id>: value }. Get the ids from sarbacane_list_list_fields.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"list_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Contact list id."
}
}
}WRITE: create a new email campaign as a DRAFT. It is never sent by these tools: add content (sarbacane_set_campaign_content or sarbacane_import_campaign_template) and a contact list (sarbacane_set_campaign_list), then send it from Sarbacane. POST /v1/campaigns/email.
| Argument | Type | Description |
|---|---|---|
| name* | string | Campaign name (internal). |
| subject* | string | Email subject. |
| preheader | string | Preheader text. |
| alias_from* | string | Sender name. |
| email_from* | string | Sender email address (must be a sender allowed on the account). |
| alias_reply_to* | string | Reply-to name. |
| email_reply_to* | string | Reply-to email address. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"email_from",
"alias_from",
"email_reply_to",
"alias_reply_to",
"subject"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Campaign name (internal)."
},
"subject": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Email subject."
},
"preheader": {
"type": "string",
"maxLength": 500,
"description": "Preheader text."
},
"alias_from": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Sender name."
},
"email_from": {
"type": "string",
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$",
"maxLength": 320,
"minLength": 3,
"description": "Sender email address (must be a sender allowed on the account)."
},
"alias_reply_to": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Reply-to name."
},
"email_reply_to": {
"type": "string",
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$",
"maxLength": 320,
"minLength": 3,
"description": "Reply-to email address."
}
}
}One campaign: state, kind, blacklists, send ids, sent date. The send id is needed to see content. GET /v1/campaigns/{campaignId}.
| Argument | Type | Description |
|---|---|---|
| campaign_id* | string | Campaign id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"campaign_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Campaign id."
}
}
}Statistics of a campaign per send: delivered count, opens, openers, clicks, clickers, unsubscribers, devices and operating systems. GET /v1/reports/{campaignId}.
| Argument | Type | Description |
|---|---|---|
| campaign_id* | string | Campaign id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"campaign_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Campaign id."
}
}
}The account's remaining credits per type (email campaigns, SMS, eye tracking, Sendkit emails) with expiry date and subscription type. GET /v1/credits.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}WRITE: load a saved template's content into an email campaign, replacing its content. POST /v1/campaigns/{campaignId}/content.
| Argument | Type | Description |
|---|---|---|
| campaign_id* | string | Campaign id. |
| template_id* | string | Template id (from Sarbacane). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id",
"template_id"
],
"properties": {
"campaign_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Campaign id."
},
"template_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Template id (from Sarbacane)."
}
}
}Entries of a blacklist by kind: bounces (invalid addresses), unsubscribers or complaints (personal data: email, phone). Filter by email, phone or modification date. GET /v1/blacklists/{blacklistId}/{bounces|unsubscribers|complaints}.
| Argument | Type | Description |
|---|---|---|
| kind* | string | Which entries: bounces, unsubscribers or complaints. |
| string | Only this email. | |
| limit | integer | Maximum items returned, 1-1000 (default 50). |
| phone | string | Only this phone number. |
| offset | integer | Starting position, from 0 (default 0). Pass the previous reply's next_offset. |
| blacklist_id* | string | Blacklist id (sarbacane_list_blacklists). |
| modified_after | string | Only entries modified at or after this time. |
| modified_before | string | Only entries modified at or before this time. |
All blacklists (suppression lists) of the account, with their ids. GET /v1/blacklists.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items returned, 1-1000 (default 50). |
| offset | integer | Starting position, from 0 (default 0). Pass the previous reply's next_offset. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum items returned, 1-1000 (default 50)."
},
"offset": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset."
}
}
}Recipients attached to a campaign (personal data: email, phone). GET /v1/campaigns/{campaignId}/recipients.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items returned, 1-1000 (default 50). |
| offset | integer | Starting position, from 0 (default 0). Pass the previous reply's next_offset. |
| campaign_id* | string | Campaign id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum items returned, 1-1000 (default 50)."
},
"offset": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset."
},
"campaign_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Campaign id."
}
}
}Campaigns of the account (id, name, kind, created/edited, recipient count). Filter by state or a text in the name or subject. GET /v1/campaigns.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items returned, 1-1000 (default 50). |
| state | string | Only campaigns in this state. |
| offset | integer | Starting position, from 0 (default 0). Pass the previous reply's next_offset. |
| search | string | Text in the campaign name or subject. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum items returned, 1-1000 (default 50)."
},
"state": {
"enum": [
"DRAFT",
"FINISH",
"ROUTING",
"MODERATION"
],
"type": "string",
"description": "Only campaigns in this state."
},
"offset": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset."
},
"search": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Text in the campaign name or subject."
}
}
}Contacts of one list (personal data: email, phone, custom fields). Filter by email, phone, a text search across fields, or the modification date. GET /v1/lists/{listId}/contacts.
| Argument | Type | Description |
|---|---|---|
| string | Only the contact with this email. | |
| limit | integer | Maximum items returned, 1-1000 (default 50). |
| phone | string | Only the contact with this phone number. |
| offset | integer | Starting position, from 0 (default 0). Pass the previous reply's next_offset. |
| search | string | Text to look for in the contact's fields. |
| list_id* | string | Contact list id. |
| modified_after | string | Only contacts modified at or after this time. |
| modified_before | string | Only contacts modified at or before this time. |
The custom fields (columns) of a contact list: id, caption and type (STRING, BOOL, INT, DATE). Field ids are the keys used when writing contacts. GET /v1/lists/{listId}/fields.
| Argument | Type | Description |
|---|---|---|
| list_id* | string | Contact list id (sarbacane_list_lists). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"list_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Contact list id (sarbacane_list_lists)."
}
}
}All contact lists of the account, with their ids. Use the ids for contacts, fields and campaigns. GET /v1/lists.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items returned, 1-1000 (default 50). |
| offset | integer | Starting position, from 0 (default 0). Pass the previous reply's next_offset. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum items returned, 1-1000 (default 50)."
},
"offset": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset."
}
}
}Users and pending invitations of the Sarbacane account (name, email, role, team). GET /v1/users.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items returned, 1-1000 (default 50). |
| offset | integer | Starting position, from 0 (default 0). Pass the previous reply's next_offset. |
| search | string | Filter users by name or email. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum items returned, 1-1000 (default 50)."
},
"offset": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset."
},
"search": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Filter users by name or email."
}
}
}Webhook subscriptions of the account: url, display name and subscribed event kinds. GET /v1/webhooks.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}WRITE: set the HTML (and optional plain-text) content of an email campaign's send, replacing what was there. Without send_id the campaign's only send is used (an A/B test campaign has several: pass one). POST /v1/campaigns/{campaignId}/send/{sendId}/content.
| Argument | Type | Description |
|---|---|---|
| html* | string | The HTML body of the email. |
| text | string | Plain-text alternative. |
| send_id | string | Send id from sarbacane_get_campaign (campaign.sends). Optional when the campaign has one send. |
| campaign_id* | string | Campaign id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id",
"html"
],
"properties": {
"html": {
"type": "string",
"maxLength": 1000000,
"minLength": 1,
"description": "The HTML body of the email."
},
"text": {
"type": "string",
"maxLength": 200000,
"description": "Plain-text alternative."
},
"send_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Send id from sarbacane_get_campaign (campaign.sends). Optional when the campaign has one send."
},
"campaign_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Campaign id."
}
}
}WRITE: import a contact list's contacts as the recipients of a campaign. It does not send the campaign. POST /v1/campaigns/{campaignId}/list.
| Argument | Type | Description |
|---|---|---|
| list_id* | string | Contact list id (sarbacane_list_lists). |
| campaign_id* | string | Campaign id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id",
"list_id"
],
"properties": {
"list_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Contact list id (sarbacane_list_lists)."
},
"campaign_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Campaign id."
}
}
}WRITE: add a contact to a list, or update it when the same email/phone pair already exists (custom field values are overwritten). POST /v1/lists/{listId}/contacts/upsert.
| Argument | Type | Description |
|---|---|---|
| string | ||
| phone | string | |
| fields | object | Custom field values as { <custom field id>: value }. Get the ids from sarbacane_list_list_fields. |
| list_id* | string | Contact list id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"email": {
"type": "string",
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$",
"maxLength": 320,
"minLength": 3
},
"phone": {
"type": "string",
"pattern": "^\\+?[0-9 ().-]{5,30}$",
"maxLength": 30,
"minLength": 5
},
"fields": {
"type": "object",
"description": "Custom field values as { <custom field id>: value }. Get the ids from sarbacane_list_list_fields.",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"list_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Contact list id."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"blacklist_id",
"kind"
],
"properties": {
"kind": {
"enum": [
"bounces",
"unsubscribers",
"complaints"
],
"type": "string",
"description": "Which entries: bounces, unsubscribers or complaints."
},
"email": {
"type": "string",
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$",
"maxLength": 320,
"minLength": 3,
"description": "Only this email."
},
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum items returned, 1-1000 (default 50)."
},
"phone": {
"type": "string",
"pattern": "^\\+?[0-9 ().-]{5,30}$",
"maxLength": 30,
"minLength": 5,
"description": "Only this phone number."
},
"offset": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset."
},
"blacklist_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Blacklist id (sarbacane_list_blacklists)."
},
"modified_after": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Only entries modified at or after this time."
},
"modified_before": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Only entries modified at or before this time."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"email": {
"type": "string",
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$",
"maxLength": 320,
"minLength": 3,
"description": "Only the contact with this email."
},
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum items returned, 1-1000 (default 50)."
},
"phone": {
"type": "string",
"pattern": "^\\+?[0-9 ().-]{5,30}$",
"maxLength": 30,
"minLength": 5,
"description": "Only the contact with this phone number."
},
"offset": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset."
},
"search": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Text to look for in the contact's fields."
},
"list_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 128,
"minLength": 1,
"description": "Contact list id."
},
"modified_after": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Only contacts modified at or after this time."
},
"modified_before": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Only contacts modified at or before this time."
}
}
}