Query people, segments, campaigns, and message deliveries; send transactional email or broadcasts.
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.
Get a single campaign by id. App API: GET /v1/campaigns/{campaign_id}.
Campaign id.
Get a single campaign by id. App API: GET /v1/campaigns/{campaign_id}.
| Argument | Type | Description |
|---|---|---|
| campaign_id* | string | number | Campaign id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"campaign_id": {
"type": [
"string",
"number"
],
"description": "Campaign id."
}
}
}Get delivery/engagement metrics for a campaign over time. App API: GET /v1/campaigns/{campaign_id}/metrics.
| Argument | Type | Description |
|---|---|---|
| type | string | Metric type filter (e.g. email, push, sms). |
| steps | integer | Number of periods to return. |
| period | string | Bucket size. Default days. |
| campaign_id* | string | number | Campaign id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"type": {
"type": "string",
"description": "Metric type filter (e.g. email, push, sms)."
},
"steps": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Number of periods to return.",
"exclusiveMinimum": 0
},
"period": {
"enum": [
"hours",
"days",
"weeks",
"months"
],
"type": "string",
"description": "Bucket size. Default days."
},
"campaign_id": {
"type": [
"string",
"number"
],
"description": "Campaign id."
}
}
}Get a single person's attributes (profile fields). App API: GET /v1/customers/{customer_id}/attributes.
| Argument | Type | Description |
|---|---|---|
| customer_id* | string | The person's id (or cio_id / email, per your identifier setup). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customer_id"
],
"properties": {
"customer_id": {
"type": "string",
"description": "The person's id (or cio_id / email, per your identifier setup)."
}
}
}List messages (deliveries) sent to a single person. App API: GET /v1/customers/{customer_id}/messages.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max messages to return. |
| start | string | Pagination cursor from a previous response's `next`. |
| customer_id* | string | The person's id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customer_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Max messages to return.",
"exclusiveMinimum": 0
},
"start": {
"type": "string",
"description": "Pagination cursor from a previous response's `next`."
},
"customer_id": {
"type": "string",
"description": "The person's id."
}
}
}List the segments a single person belongs to. App API: GET /v1/customers/{customer_id}/segments.
| Argument | Type | Description |
|---|---|---|
| customer_id* | string | The person's id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customer_id"
],
"properties": {
"customer_id": {
"type": "string",
"description": "The person's id."
}
}
}List all campaigns in the workspace. App API: GET /v1/campaigns.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List reusable data collections in the workspace. App API: GET /v1/collections.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List data exports in the workspace. App API: GET /v1/exports.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List sent messages (deliveries) across the workspace, filterable by type/campaign/newsletter. App API: GET /v1/messages.
| Argument | Type | Description |
|---|---|---|
| type | string | Message type filter, e.g. email | push | sms | in_app | webhook | slack | twilio. |
| limit | integer | Max messages to return. |
| start | string | Pagination cursor from a previous response's `next`. |
| drafts | boolean | Include drafts. |
| campaign_id | string | number | Filter to a specific campaign. |
| newsletter_id | string | number | Filter to a specific newsletter. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"type": {
"type": "string",
"description": "Message type filter, e.g. email | push | sms | in_app | webhook | slack | twilio."
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Max messages to return.",
"exclusiveMinimum": 0
},
"start": {
"type": "string",
"description": "Pagination cursor from a previous response's `next`."
},
"drafts": {
"type": "boolean",
"description": "Include drafts."
},
"campaign_id": {
"type": [
"string",
"number"
],
"description": "Filter to a specific campaign."
},
"newsletter_id": {
"type": [
"string",
"number"
],
"description": "Filter to a specific newsletter."
}
}
}List all segments in the workspace (id + name + type). App API: GET /v1/segments.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Search/list people by a Customer.io filter (segment or attribute conditions). e.g. filter={"segment":{"id":7}} or {"and":[...]}. App API: POST /v1/customers.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max people to return. |
| start | string | Pagination cursor from a previous response's `next`. |
| filter* | object | Customer.io filter object, e.g. {"segment":{"id":7}} or {"and":[{"attribute":{"field":"email","operator":"exists"}}]}. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"filter"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Max people to return.",
"exclusiveMinimum": 0
},
"start": {
"type": "string",
"description": "Pagination cursor from a previous response's `next`."
},
"filter": {
"type": "object",
"description": "Customer.io filter object, e.g. {\"segment\":{\"id\":7}} or {\"and\":[{\"attribute\":{\"field\":\"email\",\"operator\":\"exists\"}}]}.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}⚠️ SENDS A REAL EMAIL. Send a transactional email using a transactional message template. Delivers immediately to the `to` recipient. App API: POST /v1/send/email.
| Argument | Type | Description |
|---|---|---|
| to* | string | Recipient email address. |
| body | string | Override the email body. |
| from | string | Override the sender address. |
| subject | string | Override the subject line. |
| identifiers* | object | Person identifiers, e.g. {"id":"..."} or {"email":"..."}. |
| message_data | object | Template variables (liquid) to interpolate into the message. |
| send_to_unsubscribed | boolean | If true, send even to unsubscribed recipients. |
| transactional_message_id* | string | number | The transactional message template id (or trigger name). |
⚠️ SENDS TO REAL RECIPIENTS. Trigger an API-triggered broadcast, delivering to the resolved recipient set. App API: POST /v1/send/broadcast (posts to /v1/campaigns/{broadcast_id}/triggers).
| Argument | Type | Description |
|---|---|---|
| data | object | Liquid variables available to the broadcast templates. |
| recipients | object | Recipient filter object (overrides the broadcast's configured audience). |
| broadcast_id* | string | number | The API-triggered broadcast id. |
| id_ignore_missing | boolean | Skip recipients missing an id instead of erroring. |
| email_add_duplicates | boolean | Allow duplicate email recipients. |
| email_ignore_missing | boolean | Skip recipients missing an email instead of erroring. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"broadcast_id"
],
"properties": {
"data": {
"type": "object",
"description": "Liquid variables available to the broadcast templates.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"recipients": {
"type": "object",
"description": "Recipient filter object (overrides the broadcast's configured audience).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"broadcast_id": {
"type": [
"string",
"number"
],
"description": "The API-triggered broadcast id."
},
"id_ignore_missing": {
"type": "boolean",
"description": "Skip recipients missing an id instead of erroring."
},
"email_add_duplicates": {
"type": "boolean",
"description": "Allow duplicate email recipients."
},
"email_ignore_missing": {
"type": "boolean",
"description": "Skip recipients missing an email instead of erroring."
}
}
}| disable_message_retention |
| boolean |
| If true, don't retain the message body. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"transactional_message_id",
"to",
"identifiers"
],
"properties": {
"to": {
"type": "string",
"description": "Recipient email address."
},
"body": {
"type": "string",
"description": "Override the email body."
},
"from": {
"type": "string",
"description": "Override the sender address."
},
"subject": {
"type": "string",
"description": "Override the subject line."
},
"identifiers": {
"type": "object",
"description": "Person identifiers, e.g. {\"id\":\"...\"} or {\"email\":\"...\"}.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"message_data": {
"type": "object",
"description": "Template variables (liquid) to interpolate into the message.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"send_to_unsubscribed": {
"type": "boolean",
"description": "If true, send even to unsubscribed recipients."
},
"transactional_message_id": {
"type": [
"string",
"number"
],
"description": "The transactional message template id (or trigger name)."
},
"disable_message_retention": {
"type": "boolean",
"description": "If true, don't retain the message body."
}
}
}