Emma MCP by usefulapi
Read audiences, groups, mailings and campaign results without sending email or changing contacts.
Should I use this
Quality & Safety
Findings (2)
- LOWin emma_get_member_mailings
- LOWin emma_list_mailing_links
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": {
"emma": {
"url": "https://emma.usefulapi.io/mcp"
}
}
}Remote endpoints
https://emma.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (19)
🟢emma_list_groups(group_types, start, limit)
List the member groups (audience lists) of the Emma account with their active, opted-out and error member counts. Defaults to normal groups; group_types can add test and hidden groups.
Input Schema
{
"type": "object",
"properties": {
"group_types": {
"description": "g = group (default), t = test, h = hidden.",
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"g",
"t",
"h"
]
}
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_get_group(group_id)
Get one member group with its member counts (active, opted-out, error).
Input Schema
{
"type": "object",
"properties": {
"group_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The group id (member_group_id from emma_list_groups)."
}
},
"required": [
"group_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_list_group_members(group_id, include_deleted, start, limit)
List the members of one group (email, status, custom fields). Paged: use next_start for more.
Input Schema
{
"type": "object",
"properties": {
"group_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The group id."
},
"include_deleted": {
"description": "Include archived (deleted) members.",
"type": "boolean"
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"group_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_list_members(include_deleted, deleted_only, exclude_fields, count_only, start, ...)
List the members (contacts) of the whole audience: id, email, status (a active, o opted out, e error), custom fields, bounce count. Paged: use next_start for more. With count_only the reply is just the number of members.
Input Schema
{
"type": "object",
"properties": {
"include_deleted": {
"description": "Also include archived (deleted) members.",
"type": "boolean"
},
"deleted_only": {
"description": "Only archived (deleted) members.",
"type": "boolean"
},
"exclude_fields": {
"description": "Return only the base attributes, without custom fields (smaller reply).",
"type": "boolean"
},
"count_only": {
"description": "Return only the number of members (count=true) instead of the list.",
"type": "boolean"
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_get_member(member_id, include_deleted)
Get one member by id, with all custom fields, status, SMS status and bounce count.
Input Schema
{
"type": "object",
"properties": {
"member_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The member id."
},
"include_deleted": {
"description": "Find the member even if archived.",
"type": "boolean"
}
},
"required": [
"member_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_find_member_by_email(email, include_deleted)
Find one member by email address, with all custom fields and status. A 404 means the address is not in the audience.
Input Schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"minLength": 3,
"maxLength": 254,
"pattern": "^[^\\s@/?#\\\\]+@[^\\s@/?#\\\\]+$",
"description": "The member's email address."
},
"include_deleted": {
"description": "Find the member even if archived.",
"type": "boolean"
}
},
"required": [
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_get_member_groups(member_id, start, limit)
List the groups one member belongs to.
Input Schema
{
"type": "object",
"properties": {
"member_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The member id."
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"member_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_get_member_mailings(member_id, start, limit)
The mailing history of one member: which mailings they were sent and what they did with them.
Input Schema
{
"type": "object",
"properties": {
"member_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The member id."
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"member_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_list_fields(include_deleted, start, limit)
List the custom member fields of the account (shortcut names, display names, types).
Input Schema
{
"type": "object",
"properties": {
"include_deleted": {
"description": "Also include deleted fields.",
"type": "boolean"
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_get_import(import_id, start, limit)
Status and results of one bulk member import (by import id), or, without an id, the list of all imports of the account.
Input Schema
{
"type": "object",
"properties": {
"import_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The import id."
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_list_mailings(mailing_types, mailing_statuses, include_archived, is_scheduled, start, ...)
List mailings (campaigns): id, name, subject, sender, status (p pending, a paused, i injecting, s sending, x canceled, c complete, w waiting, u unapproved, f failed), type, recipient count, scheduled time. Defaults to standard and test mailings in all statuses, newest first. Paged: use next_start.
Input Schema
{
"type": "object",
"properties": {
"mailing_types": {
"description": "m standard (default with t), t test, r trigger/automated, s subject-line split test, c content split test.",
"minItems": 1,
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"enum": [
"m",
"t",
"r",
"s",
"c"
]
}
},
"mailing_statuses": {
"description": "Only these statuses (default: all).",
"minItems": 1,
"maxItems": 9,
"type": "array",
"items": {
"type": "string",
"enum": [
"p",
"a",
"i",
"s",
"x",
"c",
"w",
"u",
"f"
]
}
},
"include_archived": {
"description": "Include archived mailings.",
"type": "boolean"
},
"is_scheduled": {
"description": "Only mailings that have a scheduled send time.",
"type": "boolean"
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_get_mailing(mailing_id, include_segment_names, include_subscription_names)
Get one mailing in full: content (HTML and plain text), recipients (groups, searches, segments), links, schedule, status.
Input Schema
{
"type": "object",
"properties": {
"mailing_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The mailing id (mailing_id from emma_list_mailings)."
},
"include_segment_names": {
"description": "Add the names of the recipient segments.",
"type": "boolean"
},
"include_subscription_names": {
"description": "Add the names of the recipient subscriptions.",
"type": "boolean"
}
},
"required": [
"mailing_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_list_mailing_members(mailing_id, start, limit)
List the individual members a mailing was sent to (not groups or searches). Paged: use next_start.
Input Schema
{
"type": "object",
"properties": {
"mailing_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The mailing id."
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"mailing_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_get_response_summary(range, include_deleted)
Month-by-month response statistics for the whole account: mailings, sent, delivered, bounced, opened, clicked, forwarded, opt-outs, sign-ups (test mailings excluded).
Input Schema
{
"type": "object",
"properties": {
"range": {
"description": "Date range YYYY-MM-DD~YYYY-MM-DD, for example 2026-01-01~2026-06-30; one side may be empty.",
"type": "string",
"pattern": "^(\\d{4}-\\d{2}-\\d{2})?(~(\\d{4}-\\d{2}-\\d{2})?)?$"
},
"include_deleted": {
"description": "Include archived mailings.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_get_mailing_response(mailing_id)
Response summary of one mailing: recipients, sent, delivered, bounced, opened, clicked (unique and total), forwarded, opt-outs, sign-ups.
Input Schema
{
"type": "object",
"properties": {
"mailing_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The mailing id."
}
},
"required": [
"mailing_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_list_mailing_links(mailing_id, start, limit)
The links of one mailing with their unique and total clicks.
Input Schema
{
"type": "object",
"properties": {
"mailing_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The mailing id."
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"mailing_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_list_mailing_activity(mailing_id, kind, delivery_type, link_id, member_id, ...)
Who did what with one mailing: members it was sent to (sends), still in the queue (in_progress), delivered or bounced (deliveries), opened (opens), clicked (clicks), forwarded, opted out (optouts) or signed up (signups). Each row has the member's email and timestamp. Paged: use next_start.
Input Schema
{
"type": "object",
"properties": {
"mailing_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The mailing id."
},
"kind": {
"type": "string",
"enum": [
"sends",
"in_progress",
"deliveries",
"opens",
"clicks",
"forwards",
"optouts",
"signups"
],
"description": "Which activity to list."
},
"delivery_type": {
"description": "Only for kind=deliveries: filter by delivery outcome (default all).",
"type": "string",
"enum": [
"all",
"delivered",
"bounced",
"hard",
"soft"
]
},
"link_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "Only for kind=clicks: limit to one link (link_id from emma_list_mailing_links)."
},
"member_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "Only for kind=clicks: limit to one member."
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"mailing_id",
"kind"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_list_searches(include_deleted, start, limit)
List the saved searches (dynamic segments) of the account, with their criteria.
Input Schema
{
"type": "object",
"properties": {
"include_deleted": {
"description": "Also include deleted searches.",
"type": "boolean"
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢emma_get_search_members(search_id, start, limit)
The members that currently match a saved search. Paged: use next_start.
Input Schema
{
"type": "object",
"properties": {
"search_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The saved search id (from emma_list_searches)."
},
"start": {
"description": "Offset of the first result (default 0). Use next_start from the previous reply.",
"type": "integer",
"minimum": 0,
"maximum": 100000000
},
"limit": {
"description": "Results per page, 1-500 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"search_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence