Moosend MCP by usefulapi
Inspect Moosend lists, subscribers, segments and campaign stats, and add or unsubscribe subscribers.
Should I use this
Quality & Safety
Findings (4)
- LOWin moosend_get_subscriber_by_email
- LOWin moosend_list_segment_subscribers
- LOWin moosend_get_campaign_link_activity
- LOWin moosend_get_campaign_activity_by_location
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"moosend": {
"url": "https://moosend.usefulapi.io/mcp"
}
}
}Remote endpoints
https://moosend.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (20)
🟢moosend_list_mailing_lists(page, page_size, sort_by, sort_method)
List the active email (mailing) lists in the account with member counts (active, bounced, removed, unsubscribed), custom field definitions and preferences, plus paging info. A cheap way to confirm the API key works and to find list IDs. Moosend: GET /lists/{Page}/{PageSize}.json.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "Page number, starting at 1. Default 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page, 1-1000.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"sort_by": {
"description": "Property to sort by. Default CreatedOn.",
"type": "string",
"enum": [
"Name",
"Subject",
"Status",
"DeliveredOn",
"CreatedOn"
]
},
"sort_method": {
"description": "Sort direction. Default ASC.",
"type": "string",
"enum": [
"ASC",
"DESC"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_get_mailing_list(mailing_list_id, with_statistics)
Get one mailing list: name, member counts, status, custom field definitions (id, name, type, required), preferences and the latest import operation. Moosend: GET /lists/{MailingListID}/details.json.
Input Schema
{
"type": "object",
"properties": {
"mailing_list_id": {
"type": "string",
"minLength": 1,
"description": "Mailing list ID (a GUID, from moosend_list_mailing_lists)."
},
"with_statistics": {
"description": "Include subscriber statistics. Default true.",
"type": "boolean"
}
},
"required": [
"mailing_list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_list_subscribers(mailing_list_id, status, page, page_size)
List the subscribers of one mailing list filtered by status (Subscribed, Unsubscribed, Bounced or Removed), with name, email, custom fields, tags, preferences and dates. Paged. Moosend: GET /lists/{MailingListID}/subscribers/{Status}.json.
Input Schema
{
"type": "object",
"properties": {
"mailing_list_id": {
"type": "string",
"minLength": 1,
"description": "Mailing list ID (a GUID, from moosend_list_mailing_lists)."
},
"status": {
"description": "Subscriber status to return. Default Subscribed.",
"type": "string",
"enum": [
"Subscribed",
"Unsubscribed",
"Bounced",
"Removed"
]
},
"page": {
"description": "Page number, starting at 1. Default 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page, 1-1000.",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"required": [
"mailing_list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_get_subscriber_by_email(mailing_list_id, email)
Look up a subscriber in one mailing list by email address: ID, name, status (SubscribeType 1 subscribed, 2 unsubscribed, 3 bounced, 4 removed), custom fields, tags and preferences. Moosend: GET /subscribers/{MailingListID}/view.json?Email=.
Input Schema
{
"type": "object",
"properties": {
"mailing_list_id": {
"type": "string",
"minLength": 1,
"description": "Mailing list ID (a GUID, from moosend_list_mailing_lists)."
},
"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,}$",
"description": "Subscriber email address."
}
},
"required": [
"mailing_list_id",
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_get_subscriber(mailing_list_id, subscriber_id)
Get one subscriber in a mailing list by subscriber ID. Moosend: GET /subscribers/{MailingListID}/find/{SubscriberID}.json.
Input Schema
{
"type": "object",
"properties": {
"mailing_list_id": {
"type": "string",
"minLength": 1,
"description": "Mailing list ID (a GUID, from moosend_list_mailing_lists)."
},
"subscriber_id": {
"type": "string",
"minLength": 1,
"description": "Subscriber ID (a GUID)."
}
},
"required": [
"mailing_list_id",
"subscriber_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_list_segments(mailing_list_id)
List the segments of one mailing list, including their criteria, match type (0 all / 1 any) and a readable description. Moosend: GET /lists/{MailingListID}/segments.json.
Input Schema
{
"type": "object",
"properties": {
"mailing_list_id": {
"type": "string",
"minLength": 1,
"description": "Mailing list ID (a GUID, from moosend_list_mailing_lists)."
}
},
"required": [
"mailing_list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_get_segment(mailing_list_id, segment_id)
Get one segment's details and criteria (not its members). Moosend: GET /lists/{MailingListID}/segments/{SegmentID}/details.json.
Input Schema
{
"type": "object",
"properties": {
"mailing_list_id": {
"type": "string",
"minLength": 1,
"description": "Mailing list ID (a GUID, from moosend_list_mailing_lists)."
},
"segment_id": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Segment ID (an integer, from moosend_list_segments)."
}
},
"required": [
"mailing_list_id",
"segment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_list_segment_subscribers(mailing_list_id, segment_id)
List the subscribers that currently match one segment's criteria. Moosend: GET /lists/{MailingListID}/segments/{SegmentID}/members.json.
Input Schema
{
"type": "object",
"properties": {
"mailing_list_id": {
"type": "string",
"minLength": 1,
"description": "Mailing list ID (a GUID, from moosend_list_mailing_lists)."
},
"segment_id": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Segment ID (an integer, from moosend_list_segments)."
}
},
"required": [
"mailing_list_id",
"segment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_list_campaigns(page, page_size, sort_by, sort_method)
List campaigns with status (0 draft, 1 queued, 3 sent, 5 awaiting delivery, 6 sending, ...), delivery/schedule dates, target lists and headline stats (sent, opens, clicks, bounces, unsubscribes, complaints). Paged, up to 1000 per page. Moosend: GET /campaigns/{Page}/{PageSize}.json.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "Page number, starting at 1. Default 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page, 1-1000.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"sort_by": {
"description": "Property to sort by. Default CreatedOn.",
"type": "string",
"enum": [
"Name",
"Subject",
"Status",
"DeliveredOn",
"CreatedOn"
]
},
"sort_method": {
"description": "Sort direction. Default ASC.",
"type": "string",
"enum": [
"ASC",
"DESC"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_get_campaign(campaign_id)
Get one campaign's details: subject, sender and reply-to, HTML and plain content, target lists/segments, schedule, status and A/B data. No statistics (use moosend_get_campaign_summary). Moosend: GET /campaigns/{CampaignID}/view.json.
Input Schema
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"description": "Campaign ID (a GUID, from moosend_list_campaigns)."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_get_campaign_summary(campaign_id)
Get a sent campaign's results to date: sent, total/unique opens, total/unique link clicks, bounces, complaints, forwards and unsubscribes. Moosend: GET /campaigns/{CampaignID}/view_summary.json.
Input Schema
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"description": "Campaign ID (a GUID, from moosend_list_campaigns)."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_get_campaign_activity(campaign_id, type, page, page_size, from, ...)
Per-recipient activity for a campaign by type: Sent, Opened, LinkClicked, Unsubscribed, Bounced, Complained, or Activity (all). Paged (default 50, max 1000) and filterable by date. NOTE: Moosend rate-limits this endpoint to 2 calls per 60 seconds per API key. Moosend: GET /campaigns/{CampaignID}/stats/{Type}.json.
Input Schema
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"description": "Campaign ID (a GUID, from moosend_list_campaigns)."
},
"type": {
"description": "Activity type. Default Sent.",
"type": "string",
"enum": [
"Sent",
"Opened",
"LinkClicked",
"Unsubscribed",
"Bounced",
"Complained",
"Activity"
]
},
"page": {
"description": "Page number, starting at 1. Default 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page, 1-1000.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"from": {
"description": "Start date, DD-MM-YYYY. Default: the send date.",
"type": "string",
"pattern": "^\\d{2}-\\d{2}-\\d{4}$"
},
"to": {
"description": "End date, DD-MM-YYYY. Default: today.",
"type": "string",
"pattern": "^\\d{2}-\\d{2}-\\d{4}$"
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_get_campaign_link_activity(campaign_id)
List every link in a campaign with its total and unique click counts. Moosend: GET /campaigns/{CampaignID}/stats/links.json.
Input Schema
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"description": "Campaign ID (a GUID, from moosend_list_campaigns)."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_get_campaign_activity_by_location(campaign_id)
A campaign's total and unique opens broken down by country code. Moosend: GET /campaigns/{CampaignID}/stats/countries.json.
Input Schema
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"description": "Campaign ID (a GUID, from moosend_list_campaigns)."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢moosend_list_senders
List the account's campaign senders (name, email, enabled, SPF/DKIM verification). A draft campaign's sender and reply-to must be one of these. Moosend: GET /senders/find_all.json.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴moosend_create_mailing_list(name, confirmation_page, redirect_after_unsubscribe_page, preferences)
WRITE: create a new, empty mailing list. Returns the new list's ID. Moosend: POST /lists/create.json.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "List name."
},
"confirmation_page": {
"description": "URL shown at the end of the subscription process.",
"type": "string"
},
"redirect_after_unsubscribe_page": {
"description": "URL subscribers are redirected to after unsubscribing.",
"type": "string"
},
"preferences": {
"description": "Optional preference field for the list. Omit for none.",
"type": "object",
"properties": {
"select_type": {
"type": "string",
"enum": [
"SingleSelect",
"MultiSelect"
],
"description": "Single- or multi-select."
},
"options": {
"maxItems": 10,
"type": "array",
"items": {
"type": "string"
},
"description": "Up to 10 preference options."
},
"is_required": {
"description": "Whether a choice is required. Default false.",
"type": "boolean"
}
},
"required": [
"select_type",
"options"
]
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴moosend_add_subscriber(mailing_list_id, email, name, has_external_double_opt_in, custom_fields, ...)
WRITE: add one subscriber to a mailing list. If the email already exists in the list, that subscriber is UPDATED instead (and custom fields you omit are cleared). A previously unsubscribed address is re-subscribed. Rate limit 10 calls / 10 s. Moosend: POST /subscribers/{MailingListID}/subscribe.json.
Input Schema
{
"type": "object",
"properties": {
"mailing_list_id": {
"type": "string",
"minLength": 1,
"description": "Mailing list ID (a GUID, from moosend_list_mailing_lists)."
},
"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,}$",
"description": "Subscriber email address."
},
"name": {
"description": "Subscriber name.",
"type": "string"
},
"has_external_double_opt_in": {
"description": "True if the subscriber already gave consent by other means.",
"type": "boolean"
},
"custom_fields": {
"description": "Custom field values by field name, e.g. {\"City\":\"Athens\",\"Age\":25}. Sent to Moosend as \"Name=Value\" pairs. WARNING: on an existing subscriber, any custom field NOT included is cleared — include every field you want to keep.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
},
"tags": {
"description": "Subscriber tags.",
"type": "array",
"items": {
"type": "string"
}
},
"preferences": {
"description": "Preference option values chosen by the subscriber (must match the list's preference options).",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"mailing_list_id",
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴moosend_update_subscriber(mailing_list_id, subscriber_id, email, name, has_external_double_opt_in, ...)
WRITE: update one subscriber (by ID) in a mailing list — email, name, custom fields, tags, preferences. Include every custom field you want to keep. Moosend: POST /subscribers/{MailingListID}/update/{SubscriberID}.json.
Input Schema
{
"type": "object",
"properties": {
"mailing_list_id": {
"type": "string",
"minLength": 1,
"description": "Mailing list ID (a GUID, from moosend_list_mailing_lists)."
},
"subscriber_id": {
"type": "string",
"minLength": 1,
"description": "Subscriber ID (a GUID)."
},
"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,}$",
"description": "The subscriber's email address (required by Moosend)."
},
"name": {
"description": "Subscriber name.",
"type": "string"
},
"has_external_double_opt_in": {
"description": "True if the subscriber already gave consent by other means.",
"type": "boolean"
},
"custom_fields": {
"description": "Custom field values by field name, e.g. {\"City\":\"Athens\",\"Age\":25}. Sent to Moosend as \"Name=Value\" pairs. WARNING: on an existing subscriber, any custom field NOT included is cleared — include every field you want to keep.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
},
"tags": {
"description": "Subscriber tags.",
"type": "array",
"items": {
"type": "string"
}
},
"preferences": {
"description": "Preference option values chosen by the subscriber (must match the list's preference options).",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"mailing_list_id",
"subscriber_id",
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴moosend_unsubscribe_subscriber(mailing_list_id, email)
WRITE: unsubscribe one email address from one mailing list (not account-wide). Undo by adding the subscriber again with moosend_add_subscriber. Moosend: POST /subscribers/{MailingListID}/unsubscribe.json.
Input Schema
{
"type": "object",
"properties": {
"mailing_list_id": {
"type": "string",
"minLength": 1,
"description": "Mailing list ID (a GUID, from moosend_list_mailing_lists)."
},
"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,}$",
"description": "Email address to unsubscribe."
}
},
"required": [
"mailing_list_id",
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴moosend_create_draft_campaign(name, subject, sender_email, reply_to_email, confirmation_to_email, ...)
WRITE: create a regular (non-A/B) DRAFT campaign. It is NOT sent — sending stays a human action in Moosend. Give the content as html_content or a web_location URL. sender_email and reply_to_email must be senders in the account (see moosend_list_senders). Returns the new campaign's ID. Moosend: POST /campaigns/create.json.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Campaign name."
},
"subject": {
"type": "string",
"minLength": 1,
"description": "Subject line."
},
"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,}$",
"description": "Sender email — must be one of the account's senders."
},
"reply_to_email": {
"description": "Reply-to email — must be one of the account's senders. Default: 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,}$"
},
"confirmation_to_email": {
"description": "Where to send the 'campaign sent' confirmation. Default: 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,}$"
},
"html_content": {
"description": "Complete HTML body of the campaign.",
"type": "string"
},
"web_location": {
"description": "URL Moosend fetches the HTML from (CSS is inlined automatically).",
"type": "string",
"format": "uri"
},
"mailing_lists": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"mailing_list_id": {
"type": "string",
"minLength": 1,
"description": "Mailing list ID."
},
"segment_id": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Segment ID (an integer, from moosend_list_segments)."
}
},
"required": [
"mailing_list_id"
]
},
"description": "Target lists, each optionally narrowed to one segment."
},
"track_in_google_analytics": {
"description": "Enable Google Analytics tracking (requires GA on your site).",
"type": "boolean"
}
},
"required": [
"name",
"subject",
"sender_email",
"mailing_lists"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence