Manage lists, contacts and campaigns, and read campaign performance reports on EmailOctopus.
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.
CREATES a new contact in a list — this MODIFIES live data (adds a subscriber). `email_address` is required; optionally set `fields` (keyed by field tag), `tags`, and `status`. EmailOctopus: POST /lists/{list_id}/contacts. Returns the created contact.
The list's id to add the contact to.
The contact's email address.
Tags to apply to the contact, e.g. ["vip", "beta"].
Custom field values, keyed by the list's field tag (e.g. {"FirstName": "Ada"}).
Subscription status: subscribed, pending, or unsubscribed.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
CREATES a new contact in a list — this MODIFIES live data (adds a subscriber). `email_address` is required; optionally set `fields` (keyed by field tag), `tags`, and `status`. EmailOctopus: POST /lists/{list_id}/contacts. Returns the created contact.
| Argument | Type | Description |
|---|---|---|
| tags | array | Tags to apply to the contact, e.g. ["vip", "beta"]. |
| fields | object | Custom field values, keyed by the list's field tag (e.g. {"FirstName": "Ada"}). |
| status | string | Subscription status: subscribed, pending, or unsubscribed. |
| list_id* | string | The list's id to add the contact to. |
| email_address* | string | The contact's email address. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id",
"email_address"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags to apply to the contact, e.g. [\"vip\", \"beta\"]."
},
"fields": {
"type": "object",
"description": "Custom field values, keyed by the list's field tag (e.g. {\"FirstName\": \"Ada\"}).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"enum": [
"subscribed",
"pending",
"unsubscribed"
],
"type": "string",
"description": "Subscription status: subscribed, pending, or unsubscribed."
},
"list_id": {
"type": "string",
"description": "The list's id to add the contact to."
},
"email_address": {
"type": "string",
"description": "The contact's email address."
}
}
}CREATES a new list — this MODIFIES live data. Provide a `name`. EmailOctopus: POST /lists. Returns the created list.
| Argument | Type | Description |
|---|---|---|
| name* | string | Human-readable name for the new list. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Human-readable name for the new list."
}
}
}PERMANENTLY REMOVES a contact from a list — this MODIFIES live data and cannot be undone. `contact_id` is the MD5 hash of the lowercased email address, or the id from list_contacts. EmailOctopus: DELETE /lists/{list_id}/contacts/{contact_id}.
| Argument | Type | Description |
|---|---|---|
| list_id* | string | The list's id. |
| contact_id* | string | The contact's id to delete — the MD5 hash of the lowercased email address, or the id from list_contacts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id",
"contact_id"
],
"properties": {
"list_id": {
"type": "string",
"description": "The list's id."
},
"contact_id": {
"type": "string",
"description": "The contact's id to delete — the MD5 hash of the lowercased email address, or the id from list_contacts."
}
}
}Get a single campaign by its id. Returns the campaign's full state — name, status, subject, from, content, and created_at. EmailOctopus: GET /campaigns/{campaign_id}.
| Argument | Type | Description |
|---|---|---|
| campaign_id* | string | The campaign's id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"campaign_id": {
"type": "string",
"description": "The campaign's id."
}
}
}Get a campaign's per-link click report — for each link in the campaign, the URL and its click counts. EmailOctopus: GET /campaigns/{campaign_id}/reports/links.
| Argument | Type | Description |
|---|---|---|
| campaign_id* | string | The campaign's id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"campaign_id": {
"type": "string",
"description": "The campaign's id."
}
}
}Get a campaign's aggregate performance report — sent, opened, clicked, bounced, unsubscribed, complained, and related counts. EmailOctopus: GET /campaigns/{campaign_id}/reports/summary.
| Argument | Type | Description |
|---|---|---|
| campaign_id* | string | The campaign's id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"campaign_id": {
"type": "string",
"description": "The campaign's id."
}
}
}Get a single contact in a list. Returns email_address, fields, tags, status, and created_at. `contact_id` is the MD5 hash of the lowercased email address, or the `id` returned by emailoctopus_list_contacts. EmailOctopus: GET /lists/{list_id}/contacts/{contact_id}.
| Argument | Type | Description |
|---|---|---|
| list_id* | string | The list's id. |
| contact_id* | string | The contact's id — the MD5 hash of the lowercased email address, or the id from list_contacts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id",
"contact_id"
],
"properties": {
"list_id": {
"type": "string",
"description": "The list's id."
},
"contact_id": {
"type": "string",
"description": "The contact's id — the MD5 hash of the lowercased email address, or the id from list_contacts."
}
}
}Get a single list by its id. Returns the list's full state — name, contact counts by status, and created_at. EmailOctopus: GET /lists/{list_id}.
| Argument | Type | Description |
|---|---|---|
| list_id* | string | The list's id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"list_id": {
"type": "string",
"description": "The list's id."
}
}
}List all campaigns in the account. Returns {data:[...],paging:{...}} — each campaign's id, name, status, subject, and created_at. Paginate with `limit` (max 100) and `starting_after`. EmailOctopus: GET /campaigns.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max campaigns to return (1..100). |
| starting_after | string | Pagination cursor — the id to start after (from the previous page's paging). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Max campaigns to return (1..100)."
},
"starting_after": {
"type": "string",
"description": "Pagination cursor — the id to start after (from the previous page's paging)."
}
}
}List the contacts in a list. Returns {data:[...],paging:{...}} — each contact's id, email_address, fields, tags, status, and created_at. Paginate with `limit` (max 100) and `starting_after`. EmailOctopus: GET /lists/{list_id}/contacts.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max contacts to return (1..100). |
| list_id* | string | The list's id. |
| starting_after | string | Pagination cursor — the id to start after (from the previous page's paging). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Max contacts to return (1..100)."
},
"list_id": {
"type": "string",
"description": "The list's id."
},
"starting_after": {
"type": "string",
"description": "Pagination cursor — the id to start after (from the previous page's paging)."
}
}
}List all lists in the account. Returns {data:[...],paging:{...}} — each list's id, name, contact counts by status, and created_at. Paginate with `limit` (max 100) and `starting_after` (cursor from the previous page). EmailOctopus: GET /lists.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max lists to return (1..100). |
| starting_after | string | Pagination cursor — the id to start after (from the previous page's paging). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Max lists to return (1..100)."
},
"starting_after": {
"type": "string",
"description": "Pagination cursor — the id to start after (from the previous page's paging)."
}
}
}UPDATES an existing contact in a list — this MODIFIES live data. Send only the fields you want to change (email_address, fields, tags, status). `contact_id` is the MD5 hash of the lowercased email address, or the id from list_contacts. EmailOctopus: PUT /lists/{list_id}/contacts/{contact_id}. Returns the updated contact.
| Argument | Type | Description |
|---|---|---|
| tags | array | Tags to apply to the contact, e.g. ["vip", "beta"]. |
| fields | object | Custom field values, keyed by the list's field tag (e.g. {"FirstName": "Ada"}). |
| status | string | Subscription status: subscribed, pending, or unsubscribed. |
| list_id* | string | The list's id. |
| contact_id* | string | The contact's id — the MD5 hash of the lowercased email address, or the id from list_contacts. |
| email_address | string | The contact's email address. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id",
"contact_id"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags to apply to the contact, e.g. [\"vip\", \"beta\"]."
},
"fields": {
"type": "object",
"description": "Custom field values, keyed by the list's field tag (e.g. {\"FirstName\": \"Ada\"}).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"enum": [
"subscribed",
"pending",
"unsubscribed"
],
"type": "string",
"description": "Subscription status: subscribed, pending, or unsubscribed."
},
"list_id": {
"type": "string",
"description": "The list's id."
},
"contact_id": {
"type": "string",
"description": "The contact's id — the MD5 hash of the lowercased email address, or the id from list_contacts."
},
"email_address": {
"type": "string",
"description": "The contact's email address."
}
}
}UPDATES an existing list by id — this MODIFIES live data. Sets the list's `name`. EmailOctopus: PUT /lists/{list_id}. Returns the updated list.
| Argument | Type | Description |
|---|---|---|
| name* | string | The new name for the list. |
| list_id* | string | The list's id to update. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The new name for the list."
},
"list_id": {
"type": "string",
"description": "The list's id to update."
}
}
}