# Sender MCP MCP Server

> **Sender MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to Sender MCP.
>
> MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows,
> token refresh, and production-grade auto-scaling — so your AI agents can connect to
> third-party services and run freely without you managing any MCP server yourself.
>
> Server page:  https://mewcp.com/mcp/sender-mcp
> MewCP docs:   https://docs.mewcp.com
> All servers:  https://mewcp.com/servers (JSON: https://mewcp.com/api/servers)
> About MewCP:  https://mewcp.com/llms.txt

---

## About

Sender is an email marketing platform built to help you create, automate, and send emails that people want to read – without complicated setup or high costs.

---

## Details

- Server ID: `sender-mcp`
- Version: 1.0.0
- Tools: 43
- Authentication: OAuth, managed by MewCP
- Transport: http

---

## Access

The gateway URL below serves your **entire MewCP toolset**, not this server on its
own. Pasting a config snippet is not enough — Sender MCP has to be in the toolset
first. In order:

1. Add Sender MCP to your toolset at https://mewcp.com/mcp/sender-mcp
2. Connect your Sender MCP account (OAuth); MewCP stores the credential and attaches it to each call
3. Add the gateway URL to your client (see Connect below). It signs in with OAuth
   the first time it connects, so there is no key to copy.

Once connected, an agent does **not** see this server's tools as top-level tools.
It sees four meta-tools and reaches everything through them:

- `search(query)` — find tools by keyword across the toolset
- `get_schema(tools)` — full description and arguments for the tools you picked
- `list_accounts(provider)` — only when one app has several connected accounts
- `call_tool(server_maskedId, tool_name, args)` — execute

So the list below is what `search` can return for this server, not a set of
callable tool names on their own.

---

## Tools (43)

Descriptions are truncated to 160 characters; call `get_schema`
for the full text and the argument schema. Where a tool is annotated, its type
is shown — treat `destructive` as irreversible.

- `get_account_details` _(read)_ — Get the currently authenticated Sender account: id, name, timezone, country, status, active plan, and the calling user. All identifiers are hashed strings;…
- `list_email_campaigns` _(read)_ — List email campaigns in the authenticated Sender account. Supports filtering by status and a subject search. Returns a paginated envelope {items, page,…
- `get_email_campaign` _(read)_ — Fetch a single email campaign by its hashed id. Returns campaign metadata (subject, sender, status, schedule, recipient count, follow-up settings), its groups…
- `get_email_campaign_report` _(read)_ — Fetch the performance report for a single sent email campaign by its hashed id. Returns total_sent, raw counts (opens, clicks, unsubscribes, spam_reports,…
- `create_email_campaign` — Create a DRAFT email campaign in the authenticated Sender account. Set the subject, from_name, from_email (must be an address on a VERIFIED sending domain —…
- `update_email_campaign_content` — Set the body of a DRAFT email campaign. content_type "html" takes a full raw HTML email you design yourself. content_type "text" is NOT literal plain text — it…
- `list_workflows` _(read)_ — List automations (workflows) in the authenticated Sender account. Supports filtering by status (active, draft, paused) and a title search. Each item includes…
- `get_workflow` _(read)_ — Fetch a single automation (workflow) by its id. Returns the workflow metadata (title, status, description), a per-email engagement report, and the full…
- `get_workflow_report` _(read)_ — Fetch the performance report for a single automation (workflow) by its id. Returns completed_count, subscribers_in_workflow, total_emails_sent, and average…
- `create_workflow` — Create an automation (workflow) as a draft: the whole graph in one call — a trigger plus a nested steps tree. Linear steps run in array order; a condition step…
- `validate_workflow` _(read)_ — Dry-run validation — creates and changes nothing. Two modes: pass `trigger` + `steps` (the same document create_workflow accepts) to check it before creating —…
- `rename_workflow` — Rename a workflow. Everything else is edited elsewhere: the trigger and steps with update_workflow_step / add_workflow_steps / delete_workflow_step, message…
- `add_workflow_steps` — Insert steps into an existing workflow — after any step, including mid-graph. `steps` is a list in the same nested shape create_workflow accepts (conditions…
- `update_workflow_step` — Reconfigure one workflow step in place, addressed by its id from get_workflow. What you can set depends on the step's type (which is immutable): email — the…
- `delete_workflow_step` _(destructive)_ — Delete one workflow step. By default the step is spliced out — its children take its place. When the step branches (condition/split), pass keep_branch…
- `activate_workflow` — Turn a workflow live. Runs the full pre-flight checklist first (the same one validate_workflow reports) — if anything blocks activation, NOTHING goes live and…
- `deactivate_workflow` — Stop an active workflow: its status returns to draft, no new subscribers enter, and no further steps run. Nothing is lost — subscribers mid-journey keep their…
- `get_workflow_step_content` _(read)_ — Fetch the message content of one workflow step. For an email step: the envelope (subject, from_name, from_email, preheader), the body (`content`), and its…
- `update_workflow_email_content` — Set the body of a workflow email step. content_type "html" takes a full raw HTML email you design yourself. content_type "text" is NOT literal plain text — it…
- `update_workflow_sms_content` — Set the message and sending phone number of a workflow SMS step. The content is stored exactly as passed — use Liquid syntax for personalization ({{ firstname…
- `list_phone_numbers` _(read)_ — List the account's SMS sending phone numbers: id, the number, type (TOLLFREE / SHORTCODE / 10DLC / ALPHANUMERIC), purpose (TRANSACTIONAL / BROADCAST), and…
- `list_domains` _(read)_ — List the account's email sending domains with their authentication status: verified plus the SPF, DKIM and DMARC DNS checks, and ready_to_send — true when all…
- `list_groups` _(read)_ — List subscriber groups in the authenticated Sender account. Supports a case-insensitive title search. Returns a paginated envelope {items, page, per_page,…
- `get_group` _(read)_ — Fetch a single subscriber group by its id. Returns the group title and subscriber counts (recipients, active, unsubscribed, bounced, phone). All identifiers…
- `list_segments` _(read)_ — List segments (dynamic subscriber filters) in the authenticated Sender account. Supports a case-insensitive name search. Each item carries its conditions as…
- `get_segment` _(read)_ — Fetch a single segment (dynamic subscriber filter) by its id. Returns the segment name, subscriber counts (recipients, active, unsubscribed, bounced, phone),…
- `create_segment` — Create a segment: a saved set of conditions that dynamically selects subscribers in the authenticated Sender account. Conditions are organised in two levels.…
- `update_segment` — Rename a segment and/or replace its conditions. Provide `name`, `condition_sets`, or both; anything omitted is left unchanged. Conditions are replaced…
- `list_subscribers` _(read)_ — List subscribers in the authenticated Sender account. Optionally filter by channel status (status + channel), by group id, or by an email substring search.…
- `get_subscriber` _(read)_ — Fetch a single subscriber in the authenticated Sender account by id, email address, or phone number. Returns the subscriber with channel statuses, groups,…
- `create_subscriber` — Create a new subscriber in the authenticated Sender account. Provide an email and/or a phone number (at least one is required), optional firstname/lastname,…
- `update_subscriber` — Update an existing subscriber in the authenticated Sender account, identified by id, email address, or phone number. Only the provided attributes are changed…
- `subscribe_subscribers` — Subscribe (reactivate) one or more subscribers on the given channels in the authenticated Sender account. Each subscriber is identified by id, email address,…
- `unsubscribe_subscribers` — Unsubscribe one or more subscribers from the given channels in the authenticated Sender account. Each subscriber is identified by id, email address, or phone…
- `list_image_categories` _(read)_ — List the image folders (categories) in the authenticated Sender account. Returns {items: [{id, title, editable}]}; the id is a string to pass as the "category"…
- `upload_image_from_file` — Upload an image into the authenticated Sender account's image library from base64-encoded file bytes. Provide file_base64 (the raw image bytes, base64-encoded)…
- `upload_image_from_url` — Upload an image into the authenticated Sender account's image library by fetching it from a public https URL. The URL must be https, contain no credentials,…
- `get_event_types` _(read)_ — List the custom event types available to the authenticated Sender account (both account-specific and public/built-in types). Supports a name search. Returns a…
- `get_events` _(read)_ — List custom event instances for a single event type in the authenticated Sender account, newest first. Requires event_type_id (from get_event_types).…
- `create_event_type` — Create a custom event type in the authenticated Sender account so it can be referenced before any event of that type has been sent (for example in a workflow…
- `get_fields` _(read)_ — List the custom fields of the authenticated Sender account, plus the shared system fields (First name, Last name; is_system true). Supports a title search and…
- `create_field` — Create a custom field in the authenticated Sender account. Provide a title and a type (text, number, date, datetime or dropdown). A dropdown needs options (a…
- `list_stores` _(read)_ — List the ecommerce stores connected to the authenticated Sender account, with their platform and domain. Use this to resolve the store_id required by the…

---

## Connect

- URL: https://gateway.mewcp.com/personal/mcp
- Transport: Streamable HTTP (remote). Nothing to install.
- Sign-in: OAuth. On first connect the client opens a browser window to sign in
  to MewCP and approve access. No API key.
- Headless clients (SDKs, servers without a browser) send an API key instead:
  `Authorization: Bearer <API_KEY>`, key from https://mewcp.com/dashboard/api-keys

Agents setting themselves up: follow https://mewcp.com/SKILL.md

Step-by-step guide per client:

- Claude Desktop: https://mewcp.com/mcp/sender-mcp/connect/claude
- ChatGPT: https://mewcp.com/mcp/sender-mcp/connect/chatgpt
- VS Code: https://mewcp.com/mcp/sender-mcp/connect/vscode
- Cursor: https://mewcp.com/mcp/sender-mcp/connect/cursor
- Codex: https://mewcp.com/mcp/sender-mcp/connect/codex
- Claude Code: https://mewcp.com/mcp/sender-mcp/connect/claude-code
- OpenCode: https://mewcp.com/mcp/sender-mcp/connect/opencode
- OpenClaw: https://mewcp.com/mcp/sender-mcp/connect/openclaw
- Antigravity: https://mewcp.com/mcp/sender-mcp/connect/antigravity
- Hermes: https://mewcp.com/mcp/sender-mcp/connect/hermes
- DeepSeek Harness: https://mewcp.com/mcp/sender-mcp/connect/dsh
- Python: https://mewcp.com/mcp/sender-mcp/connect/python
- TypeScript: https://mewcp.com/mcp/sender-mcp/connect/typescript