# Send16 (remote · mcp.send16.com)

Email, SMS and marketing automation: campaigns, contacts, automations and stats from Claude.

- Trust score: 34/100 (low)
- Change this week: −39
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `mcp.send16.com`: 34/100 (this document), [markdown](https://verifymcp.io/servers/com-send16-send16/mcp.md), [page](https://verifymcp.io/servers/com-send16-send16/mcp)

## Channel facts

- Endpoint: `https://mcp.send16.com`
- Transports: `streamable-http`
- Auth: `required`
- Version: `0.5.15`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 86/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - The endpoint enforces authorisation, advertised via RFC 9728 protected-resource metadata.
  - HTTPS enforcement could not be verified: the plaintext port answered with HTTP 401, which proves neither a plaintext path nor enforcement.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server supports Client ID Metadata Documents, the current MCP client-registration mechanism.
- **Transport & Reachability**: 0/100
  - Transport blocked by authentication: the endpoint requires auth we don't have to verify streamable-http.
- **Schema Quality & AI Usability**: 0/100
  - Schema blocked by authentication: the endpoint requires auth we don't have to read it.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage blocked by authentication: the endpoint requires auth we don't have to read its tools.
- **Tool Safety**: 0/100
  - Tool safety blocked by authentication: the endpoint requires auth we don't have to read its tools.
- **Capabilities**: 0/100
  - Capabilities blocked by authentication: the endpoint requires auth we don't have to read them.

**Unverified: 6 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the Send16 MCP server?

Send16 is a hosted endpoint at https://mcp.send16.com/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-send16-send16 'https://mcp.send16.com/'
```

### Cursor

```json
{
  "mcpServers": {
    "com-send16-send16": {
      "url": "https://mcp.send16.com/"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-send16-send16": {
      "type": "http",
      "url": "https://mcp.send16.com/"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-send16-send16]
url = "https://mcp.send16.com/"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-send16-send16": {
      "type": "remote",
      "url": "https://mcp.send16.com/",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-send16-send16 --url 'https://mcp.send16.com/' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-send16-send16:
    url: "https://mcp.send16.com/"
```

### Netclaw

```json
{
  "McpServers": {
    "com-send16-send16": {
      "Transport": "http",
      "Url": "https://mcp.send16.com/"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-send16-send16 -t streamable-http -u 'https://mcp.send16.com/'
```

### Other

```json
{
  "mcpServers": {
    "com-send16-send16": {
      "type": "http",
      "url": "https://mcp.send16.com/"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-30 (score 34, −39)

- [security regression] Endpoint reachability: reachable → behind authorisation
- [security regression] Tool safety: pass → unverified
- [security regression] Transport: pass → unverified
- [security regression] Stability: 0.03 → unverified
- [security improvement] Authorization: fail → pass
- [security] First check of Authorization: pass
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-10-29 (score 73, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-28 (score 73)

First indexed and scored.

## MCP tools (87)

### `whoami` (~78 tokens)

Check account

Verify the API key and return the authenticated workspace: name, plan, email quota (used/limit), and owner. Call this first to confirm the key works before sending. Pair with list_domains to see which `from` addresses are allowed.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `send_email` (~501 tokens)

Send email

Send a transactional email through Send16. Provide `html`, `text`, or both (text-only is fine for OTPs/receipts/alerts). `from_email` must belong to a domain that is verified in the workspace; call `whoami` for the account and `list_domains` to see which senders are allowed; a send from an unverified domain returns a clear error, not a silent failure. For a zero-setup first send, use from_email `onboarding@send16.com`; the sandbox sender delivers with no DNS, but only to your own account email. Before calling, confirm with the user: show them the recipients (or the recipient count), the sender and the subject, and wait for a clear yes. Send16 can refuse a send. 429 SEND_RAMP_LIMIT: new and free workspaces have hourly and daily sending limits while they build reputation; the error details give the window, the limit and how many remain. Tell the user how many can go now and that the rest can go once the window resets (or after upgrading), and do not split the send or retry in a loop to get around it. 403 SENDING_PAUSED: sending from the workspace is paused while the Send16 team reviews it. Nothing was sent. Tell the user to check the workspace owner's email or contact support, and do not retry. 422 MESSAGE_NEEDS_REVIEW: the content looked like it might be impersonating a government agency, bank, toll operator or delivery company, so it was held and not sent. Tell the user it is held for review and they can contact support if it is legitimate. Do not reword it and try again; repeated flags pause the workspace.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `from_email` (string): Sender email address (must be from a verified domain)
- `from_name` (string): Sender display name (e.g. "Acme Co")
- `html` (string): HTML body content
- `reply_to` (string): Reply-to email address
- `subject` (string, required): Email subject line
- `template` (string): Transactional template slug to use instead of inline content
- `text` (string): Plain text body content
- `to` (required): Recipient email address or array of addresses (max 50)
- `variables` (object): Template variables for merge tags

### `send_campaign_test` (~114 tokens)

Send campaign test

Send a test email for an existing campaign to preview how it will look in recipients' inboxes. Confirm the test address with the user first. Can be refused with 403 SENDING_PAUSED (workspace under review, nothing was sent, tell the user to contact support).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `campaignId` (string, required): Campaign ID to send test for
- `testEmail` (string, required): Email address to send the test to

### `create_campaign` (~252 tokens)

Create draft campaign

Create a new email campaign as a draft: optionally with full HTML content and recipients (exactly ONE of audienceIds / segmentId / contactIds / tagIds / sendToAll) so it's ready to test and send. Nothing is sent until schedule_campaign.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `audienceIds` (array): Target these audience IDs (see list_audiences)
- `contactIds` (array): Target these specific contact IDs
- `fromEmail` (string, required): Sender email (must be from a verified domain)
- `fromName` (string, required): Sender display name
- `html` (string): Full HTML body for the email (skip to design later)
- `name` (string, required): Campaign name (internal label)
- `previewText` (string): Preview text shown in inbox alongside subject
- `replyTo` (string): Reply-to email address
- `segmentId` (string): Target this segment (see list_segments)
- `sendToAll` (boolean): Target all subscribed contacts in the workspace
- `subject` (string, required): Email subject line
- `tagIds` (array): Target contacts with these tag IDs

### `design_email_template` (~161 tokens)

Design email with AI

Use AI to generate a complete email HTML template based on a description. Returns ready-to-use HTML that can be sent or used in campaigns.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `brandColor` (string): Primary brand color as hex code (e.g. "#4F46E5")
- `companyName` (string): Company or brand name to include in the template
- `description` (string, required): Detailed description of the email content and purpose (e.g. 'Welcome email for a SaaS product with feature highlights and CTA to start trial')
- `style` (string, required): Visual style/aesthetic for the template
- `type` (string, required): Type of email template to generate

### `list_campaigns` (~135 tokens)

List campaigns

List email campaigns, newest first. Use `search` to find a past campaign the user describes vaguely ('the invite one', 'that July newsletter'); it matches name and subject case-insensitively; try distinctive words from their description and broaden if no hits.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `page` (integer): Page number
- `pageSize` (integer): Results per page (max 100)
- `search` (string): Case-insensitive substring match on campaign name or subject
- `status` (string): Filter campaigns by status

### `create_contact` (~167 tokens)

Add contact

Add a single new contact, optionally straight into audiences and/or with tags; e.g. 'add this person from my email into the newsletter list'. Contacts are subscribed by default. For more than a handful of people, use import_contacts instead.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `audienceIds` (array): Add the contact to these audience IDs (see list_audiences)
- `customFields` (object): Custom field key-value pairs
- `email` (string, required): Contact email address
- `firstName` (string): Contact first name
- `lastName` (string): Contact last name
- `tags` (array): Tag NAMES to assign; matched case-insensitively, created if missing

### `search_contacts` (~90 tokens)

Search contacts

Search contacts by email address or name. Returns matching contacts with their tags and subscription status.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `page` (integer): Page number
- `pageSize` (integer): Results per page (max 100)
- `query` (string, required): Search query (matches against email, first name, last name)

### `list_contacts` (~91 tokens)

List contacts

List all contacts with optional filtering by subscription status and tag. Supports pagination.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `page` (integer): Page number
- `pageSize` (integer): Results per page (max 100)
- `subscribed` (string): Filter by subscription status
- `tagId` (string): Filter by tag ID

### `import_contacts` (~268 tokens)

Import contacts

Bulk import contacts from CSV data (min column: email), optionally straight into audiences and/or with tags. This is the tool for cross-app flows; e.g. pulling people out of Gmail, a CRM, or a spreadsheet and landing them in a Send16 audience in one call. Set updateExisting for upsert semantics (safe to re-run). Requires consentConfirmed: true, so confirm with the user that everyone on the list opted in before calling.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `audienceIds` (array): Add all imported contacts to these audience IDs (see list_audiences / create_audience)
- `consentConfirmed` (boolean): Required, must be true. Set it only after the user has confirmed every person on this list opted in to hear from them. Never set it for bought, rented or scraped lists. If you haven't asked, ask firs…
- `csvData` (string, required): CSV string with headers. Required column: "email". Optional: "firstName", "lastName"
- `tags` (array): Tag NAMES to apply to all imported contacts; matched case-insensitively, created if missing
- `updateExisting` (boolean): Whether to update contacts that already exist

### `list_domains` (~48 tokens)

List sending domains

List all sending domains configured in your Send16 workspace, including their verification status and DNS records.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `check_domain_health` (~75 tokens)

Check domain DNS

Check the DNS health of a specific domain, including DKIM, SPF, DMARC, and MX record verification status. Triggers a fresh DNS lookup.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `domainId` (string, required): Domain ID to check health for

### `get_campaign_stats` (~66 tokens)

Get campaign stats

Get detailed performance statistics for a specific campaign including open rate, click rate, bounce rate, and delivery metrics.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `campaignId` (string, required): Campaign ID to get stats for

### `get_deliverability_status` (~62 tokens)

Get deliverability status

Get your workspace's deliverability summary: sending reputation, domain authentication status, and recent bounce/complaint health. (Deliverability Hub plan feature.)

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `list_automations` (~50 tokens)

List automations

List all automations in the workspace, including draft/active/paused status and trigger types.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `get_automation` (~57 tokens)

Get automation

Get a single automation by ID, including its trigger, steps, and current status.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `automationId` (string, required): Automation ID

### `enroll_in_automation` (~108 tokens)

Enroll contact in automation

Manually enroll a contact in an active automation. The automation must be in 'active' status. Use send_event for event-driven enrollment. Confirm with the user first: the automation can start emailing the contact straight away.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `automationId` (string, required): Automation ID to enroll into
- `contactId` (string, required): Contact UUID (use search_contacts to look up by email first)

### `send_event` (~180 tokens)

Fire contact event

Fire a custom event for a contact. Automations whose trigger is `{type:'custom_event', eventName:'<name>'}` will enroll the contact and start running. Payload is exposed to condition steps as `event.<key>`. Confirm with the user first if the event could start an automation that emails the contact.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `contactEmail` (string): Contact email (provide either this or contactId)
- `contactId` (string): Contact UUID (provide either this or contactEmail)
- `name` (string, required): Event name (e.g. 'trial_started', 'order.placed')
- `occurredAt` (string): ISO-8601 timestamp; defaults to now
- `payload` (object): Arbitrary JSON metadata available to automation conditions

### `list_templates` (~39 tokens)

List starter templates

List starter-gallery email templates available to every workspace.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `save_template` (~359 tokens)

Save template

Save an email design as a reusable template in the user's Send16 workspace. Use this when the user has designed an email (for example in a Claude artifact) and wants it in Send16. Pass the complete email HTML. Send16 hosts every image (remote URLs and inline data: images), converts merge tags like {{first_name}} to Send16's format, and stores the HTML exactly as designed. For best results across Gmail, Outlook and Apple Mail the HTML should be email-safe: table-based layout around 600px wide, inline styles, PNG/JPG/GIF images in <img> tags (not SVG or CSS backgrounds), web-safe font fallbacks, and alt text on images. Returns the template id; follow up with send_template_test to send a preview.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `category` (string): Library category, e.g. newsletter, onboarding, announcement, ecommerce, transactional. Defaults to custom.
- `convertMergeTags` (boolean): Convert common merge tags ({{first_name}}, *|FNAME|*) to Send16 tags (default true)
- `description` (string): Short description shown in the template library
- `hostImages` (boolean): Copy every image onto Send16 hosting so it can't break later (default true)
- `html` (string, required): The complete email HTML (a full <html> document or a body fragment)
- `mode` (string): hybrid (default): keep the exact HTML, convertible to editable blocks later. html: exact HTML only. blocks: convert to editable builder blocks now (lossy for complex designs).
- `name` (string, required): Template name, e.g. 'October newsletter'

### `list_workspace_templates` (~62 tokens)

List saved templates

List the templates saved in the user's own Send16 workspace (their template library, including ones saved with save_template). For the shared starter gallery use list_templates.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `send_template_test` (~159 tokens)

Send template test

Send a preview of a saved workspace template to one email address, so the user can see it in a real inbox. It arrives from noreply@send16.com with a small 'Template test preview' banner and uses sample merge values (first name 'Test'). Only send to the user's own address unless they ask otherwise. Confirm the test address with the user first. Can be refused with 403 SENDING_PAUSED (workspace under review, nothing was sent, tell the user to contact support).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `email` (string, required): Where to send the preview
- `templateId` (string, required): Template id from save_template or list_workspace_templates

### `get_template` (~55 tokens)

Get starter template

Get a single starter template by ID, including its EmailContent JSON.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `templateId` (string, required): Template ID (slug)

### `render_email_content` (~108 tokens)

Render email HTML

Compile an EmailContent JSON object (the shape used by the Send16 builder + templates) into HTML using the platform's authoritative renderer. Returns the exact HTML the API would send. Useful for previews and post-processing.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `content` (object, required): EmailContent JSON (from get_template or the builder)
- `variables` (object): Variable replacements (e.g. {firstName:'Alice'})

### `add_domain` (~79 tokens)

Add sending domain

Register a new sending domain. Returns the DNS records the user must add to their DNS provider, after which they should call check_domain_health to verify.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `domain` (string, required): FQDN to register (e.g. 'mail.example.com')

### `pre_send_review` (~101 tokens)

Review email before sending

Run an AI pre-send review on an email's HTML before sending. Surfaces tone issues, broken links, missing alt text, spam triggers, and accessibility problems.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `audience` (string): Short description of the audience (helps tone analysis)
- `html` (string, required): Full HTML body to review
- `subject` (string, required): Email subject line

### `generate_email_from_url` (~104 tokens)

Draft email from a web page

Scrape a URL (e.g. a launch blog post or product page) and generate an email draft from its content. Returns subject, preview text, and HTML body.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `instructions` (string): Additional guidance; e.g. 'announcement style, focus on the new feature'
- `url` (string, required): Public URL to scrape and turn into an email

### `list_messages` (~153 tokens)

List sent messages

List messages from the unified send log (transactional + campaign). Filter by recipient, sender, status, date range, or source.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `created_after` (string): ISO-8601 timestamp lower bound
- `created_before` (string): ISO-8601 timestamp upper bound
- `from_email` (string): Sender email filter
- `limit` (integer): Page size (default 50)
- `offset` (integer): Page offset
- `source` (string): Restrict to one message source
- `status` (string): Delivery status filter
- `to_email` (string): Recipient email filter

### `get_message` (~60 tokens)

Get message

Fetch a single message with its full event timeline (created → sent → delivered → opened → clicked → ...).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `id` (string, required): Message ID

### `get_message_events` (~55 tokens)

Get message events

Get just the delivery event timeline for a message: no body or recipient details.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `id` (string, required): Message ID

### `list_convos` (~132 tokens)

List inbox conversations

List inbox conversations. Filter by state, mailbox, label, screener status, or full-text search. Send16's unified inbox combines transactional reply threading with team-managed shared inboxes.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `label` (string): Filter by label slug (comma-separate for multiple)
- `limit` (integer): Page size (default 50)
- `mailboxId` (string): Filter to one mailbox
- `search` (string): Full-text search across subject + body
- `state` (string): Conversation status

### `get_convo` (~54 tokens)

Get conversation

Get a single conversation with its full thread of posts (incoming + outgoing).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `id` (string, required): Conversation ID

### `send_reply` (~145 tokens)

Send inbox reply

Reply to an inbox conversation. The reply is sent from the original recipient address (the alias the convo arrived on) and threaded back to the contact. Show the user the reply text and get a clear yes first: it goes to a real person and cannot be unsent. Can be refused with 403 SENDING_PAUSED (workspace under review, nothing was sent, tell the user to contact support).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `convoId` (string, required): Conversation ID
- `html` (string): HTML body of the reply
- `text` (string): Plain text body of the reply

### `mark_convo_read` (~51 tokens)

Mark conversation read

Mark a conversation as read for the current viewer.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `convoId` (string, required): Conversation ID

### `update_convo` (~88 tokens)

Update conversation

Update conversation status (open/closed/archived/snoozed) or assignee.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `assigneeId` (string|null): Workspace member user ID, or null to unassign
- `convoId` (string, required): Conversation ID
- `state` (string): New status

### `add_convo_note` (~70 tokens)

Add internal note

Add a private internal note on a conversation. Notes are visible only to workspace members.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `body` (string, required): Note body (markdown supported)
- `convoId` (string, required): Conversation ID

### `screener_decide` (~83 tokens)

Decide screened sender

Decide a pending screener conversation (first-time sender). 'allow' lets future emails through, 'reject' blocks, 'cold' marks as cold outreach.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `convoId` (string, required): Conversation ID
- `decision` (string, required): Screener decision

### `list_inbox_counts` (~57 tokens)

Get inbox counts

Get unread/total counts per category and label for the inbox sidebar (newsletter, transactional, marketing, calendar, social, cold).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `list_topics` (~70 tokens)

List subscription topics

List subscription topics. Topics are granular categories contacts can subscribe to (e.g. 'product-updates', 'weekly-digest'). Campaigns and automations can be gated to subscribers of a specific topic.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `create_topic` (~103 tokens)

Create subscription topic

Create a new subscription topic. Contacts opt into topics individually via the preference center.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `description` (string): Description shown in the preference center
- `isDefault` (boolean): Auto-subscribe new contacts to this topic
- `name` (string, required): Display name shown to contacts
- `slug` (string): URL-safe slug (auto-derived from name if omitted)

### `update_topic` (~72 tokens)

Update subscription topic

Update a subscription topic (name, description, default).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `description` (string)
- `isDefault` (boolean)
- `name` (string)
- `topicId` (string, required): Topic ID

### `delete_topic` (~50 tokens)

Delete subscription topic

Delete a subscription topic. All subscribers will be detached.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `topicId` (string, required): Topic ID

### `list_actions` (~59 tokens)

List actions

List Actions. Actions fire a transactional template when a custom event arrives: simple 'event_name → template' pairings, lighter than full automations.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `get_action` (~51 tokens)

Get action

Get a single Action with its trigger config and template binding.

Input parameters:

- `actionId` (string, required): Action ID
- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `create_action` (~134 tokens)

Create action

Create an Action that maps an event name to a transactional template. Each matching event sends one email to the contact.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `delaySeconds` (integer): Delay before sending
- `enabled` (boolean)
- `eventName` (string, required): Event name to match (e.g. 'order.placed')
- `name` (string, required): Display name
- `sendOnce` (boolean): Only send once per contact regardless of how many times the event fires
- `templateSlug` (string, required): Transactional template slug to send

### `update_action` (~99 tokens)

Update action

Update an Action (toggle enabled, change template, change event name).

Input parameters:

- `actionId` (string, required): Action ID
- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `delaySeconds` (integer)
- `enabled` (boolean)
- `eventName` (string)
- `name` (string)
- `sendOnce` (boolean)
- `templateSlug` (string)

### `delete_action` (~43 tokens)

Delete action

Delete an Action.

Input parameters:

- `actionId` (string, required): Action ID
- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `list_audiences` (~48 tokens)

List audiences

List audiences (lists). An audience is a static, manually-managed group of contacts.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `create_audience` (~49 tokens)

Create audience

Create a new audience.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `description` (string)
- `name` (string, required)

### `add_contacts_to_audience` (~64 tokens)

Add contacts to audience

Add contacts (by ID) to an audience.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `audienceId` (string, required): Audience ID
- `contactIds` (array, required): Contact IDs to add

### `remove_contact_from_audience` (~59 tokens)

Remove contact from audience

Remove a contact from an audience.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `audienceId` (string, required): Audience ID
- `contactId` (string, required): Contact ID

### `delete_audience` (~60 tokens)

Delete audience

Delete an audience (list). Contacts are not deleted; only the list and its memberships are removed.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `audienceId` (string, required): Audience ID

### `list_segments` (~46 tokens)

List segments

List dynamic segments. Segments compute their members from a filter expression at send time.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `preview_segment` (~49 tokens)

Preview segment

Preview the contacts that match a segment without sending.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `segmentId` (string, required): Segment ID

### `list_events` (~70 tokens)

List events

List the workspace's events (meetups, workshops, conferences) with registered, attended and no-show counts and each event's public registration page.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `scope` (string): Which events (default all)

### `get_event_insights` (~116 tokens)

Event attendance insights

Who registered and who came for one event: counts, no-show rate, where people came from (city and state), first-timers vs returning, organisations and registrations over time. Without an eventId, returns insights across every event: regulars and their attendance streaks, cohort retention and the regions growing fastest.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `eventId` (string): Event ID (see list_events). Leave out for insights across all events.

### `list_event_registrations` (~97 tokens)

List event registrations

List the people registered for an event, with status (registered, waitlisted, attended, no_show, cancelled), company, city and check-in time.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `eventId` (string, required): Event ID (see list_events)
- `q` (string): Search name, email or company
- `status` (string)

### `register_for_event` (~153 tokens)

Register someone for an event

Register someone for an event. They get the event's confirmation email with their QR ticket unless the organiser switched it off, so confirm the person and the event with the user first. Registering doesn't subscribe them to marketing unless marketingOptIn is true because they asked.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `city` (string)
- `company` (string)
- `email` (string, required)
- `eventId` (string, required): Event ID (see list_events)
- `firstName` (string)
- `lastName` (string)
- `marketingOptIn` (boolean): Only when the person asked to hear about future events

### `check_in_attendee` (~89 tokens)

Check in an attendee

Check a registrant in at the door (or undo it). Use the registration ID from list_event_registrations.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `eventId` (string, required): Event ID
- `registrationId` (string, required): Registration ID
- `undo` (boolean): Undo a check-in made by mistake

### `update_contact` (~84 tokens)

Update contact

Update a contact's profile fields, custom fields, or subscription state.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `contactId` (string, required): Contact ID
- `customFields` (object)
- `firstName` (string)
- `lastName` (string)
- `subscribed` (boolean)

### `delete_contact` (~51 tokens)

Delete contact

Delete a contact and all associated events. Irreversible.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `contactId` (string, required): Contact ID

### `get_contact_timeline` (~84 tokens)

Get contact timeline

Get a contact's full activity timeline: emails received, events fired, opens, clicks, automation enrollments, topic changes.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `contactId` (string, required): Contact ID
- `cursor` (string): Pagination cursor
- `limit` (integer): Page size

### `get_contact_health_score` (~62 tokens)

Get contact health score

Get a contact's 0-100 health score based on recent engagement (opens, clicks, replies).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `contactId` (string, required): Contact ID

### `send_broadcast` (~447 tokens)

Send broadcast

One-shot broadcast: create a campaign and immediately schedule it to send, in a single call. Pass either an audienceId, segmentId, topicId, or fully-qualified filter. Provide html OR templateSlug. Before calling, confirm with the user: show them the recipients (or the recipient count), the sender and the subject, and wait for a clear yes. Send16 can refuse a send. 429 SEND_RAMP_LIMIT: new and free workspaces have hourly and daily sending limits while they build reputation; the error details give the window, the limit and how many remain. Tell the user how many can go now and that the rest can go once the window resets (or after upgrading), and do not split the send or retry in a loop to get around it. 403 SENDING_PAUSED: sending from the workspace is paused while the Send16 team reviews it. Nothing was sent. Tell the user to check the workspace owner's email or contact support, and do not retry. 422 MESSAGE_NEEDS_REVIEW: the content looked like it might be impersonating a government agency, bank, toll operator or delivery company, so it was held and not sent. Tell the user it is held for review and they can contact support if it is legitimate. Do not reword it and try again; repeated flags pause the workspace.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `audienceId` (string): Send to all contacts in this audience
- `fromEmail` (string, required): Must be a verified domain
- `fromName` (string, required)
- `html` (string): Full HTML body (one of html/templateSlug required)
- `name` (string, required): Internal campaign name
- `previewText` (string)
- `replyTo` (string)
- `scheduleAt` (string): ISO-8601 future datetime; omit to send immediately
- `segmentId` (string): Send to all contacts matching this segment
- `subject` (string, required)
- `templateSlug` (string): Workspace template slug to use
- `topicId` (string): Send to all subscribers of this topic

### `schedule_campaign` (~326 tokens)

Schedule or send campaign

Schedule (or send immediately) an existing draft campaign to an audience/segment/topic. Before calling, confirm with the user: show them the recipients (or the recipient count), the sender and the subject, and wait for a clear yes. Send16 can refuse a send. 429 SEND_RAMP_LIMIT: new and free workspaces have hourly and daily sending limits while they build reputation; the error details give the window, the limit and how many remain. Tell the user how many can go now and that the rest can go once the window resets (or after upgrading), and do not split the send or retry in a loop to get around it. 403 SENDING_PAUSED: sending from the workspace is paused while the Send16 team reviews it. Nothing was sent. Tell the user to check the workspace owner's email or contact support, and do not retry. 422 MESSAGE_NEEDS_REVIEW: the content looked like it might be impersonating a government agency, bank, toll operator or delivery company, so it was held and not sent. Tell the user it is held for review and they can contact support if it is legitimate. Do not reword it and try again; repeated flags pause the workspace.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `audienceId` (string)
- `campaignId` (string, required): Campaign ID
- `scheduleAt` (string): ISO-8601 future datetime; omit to send immediately
- `segmentId` (string)
- `topicId` (string)

### `update_campaign` (~250 tokens)

Update draft campaign

Update a draft campaign: name, subject, preview text, sender info, HTML content, and/or recipients. Retarget with exactly ONE of audienceIds / segmentId / contactIds / tagIds / sendToAll, then verify with preview_campaign_recipients before sending. Only drafts can be edited.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `audienceIds` (array): Retarget to these audience IDs (see list_audiences). Sets recipient type 'lists'.
- `campaignId` (string, required): Campaign ID
- `contactIds` (array): Retarget to these specific contact IDs
- `fromEmail` (string)
- `fromName` (string)
- `html` (string)
- `name` (string): Campaign name (internal label)
- `previewText` (string)
- `replyTo` (string)
- `segmentId` (string): Retarget to this segment (see list_segments)
- `sendToAll` (boolean): Retarget to all subscribed contacts in the workspace
- `subject` (string)
- `tagIds` (array): Retarget to contacts with these tag IDs

### `pause_campaign` (~55 tokens)

Pause campaign

Pause a sending campaign. Already-sent messages are unaffected; remaining sends halt.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `campaignId` (string, required): Campaign ID

### `resume_campaign` (~72 tokens)

Resume campaign

Resume a paused campaign. Confirm with the user first: the remaining recipients start receiving the campaign straight away. The sending limits and pauses described on schedule_campaign still apply.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `campaignId` (string, required): Campaign ID

### `duplicate_campaign` (~238 tokens)

Duplicate campaign

Duplicate a campaign (template, content, and settings) as a new draft; works on sent campaigns too, so this is the way to re-use a past campaign's design. Optionally rename and retarget in the same call (exactly ONE of audienceIds / segmentId / contactIds / tagIds / sendToAll). NOTE: without retargeting, the copy keeps the ORIGINAL campaign's recipients.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `audienceIds` (array): Retarget the new draft to these audience IDs (see list_audiences)
- `campaignId` (string, required): Campaign ID to duplicate
- `contactIds` (array): Retarget the new draft to these contact IDs
- `name` (string): Name for the new draft (default: original name + ' (Copy)')
- `segmentId` (string): Retarget the new draft to this segment
- `sendToAll` (boolean): Retarget the new draft to all subscribed contacts
- `tagIds` (array): Retarget the new draft to contacts with these tag IDs

### `delete_campaign` (~53 tokens)

Delete draft campaign

Delete a draft campaign. Sent campaigns cannot be deleted (only archived).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `campaignId` (string, required): Campaign ID

### `preview_campaign_recipients` (~58 tokens)

Preview campaign recipients

Preview the recipient set for a campaign before sending. Returns count + sample list.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `campaignId` (string, required): Campaign ID

### `activate_automation` (~70 tokens)

Activate automation

Activate an automation. New events matching its triggers will start enrolling contacts. Confirm with the user first: once active it can start emailing contacts straight away.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `automationId` (string, required): Automation ID

### `pause_automation` (~56 tokens)

Pause automation

Pause an automation. Existing enrollments freeze in place; no new contacts enroll.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `automationId` (string, required): Automation ID

### `get_automation_stats` (~63 tokens)

Get automation stats

Get aggregate analytics for an automation: total enrollments, completed, exited, open/click rates per step.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `automationId` (string, required): Automation ID

### `list_automation_enrollments` (~84 tokens)

List automation enrollments

List active and historical enrollments for an automation.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `automationId` (string, required): Automation ID
- `page` (integer): Page number
- `pageSize` (integer): Results per page (max 100)
- `state` (string)

### `list_workspaces` (~44 tokens)

List workspaces

List workspaces the authenticated user has access to (owner or member).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `get_workspace` (~42 tokens)

Get workspace

Get the current workspace (the one the API key belongs to).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `get_brand` (~53 tokens)

Get brand settings

Get the workspace's brand settings: colors, logo, fonts, and the DESIGN.md spec injected into AI generation prompts.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `update_brand` (~212 tokens)

Update brand settings

Update workspace brand settings. The designSpec field is a Markdown DESIGN.md document fed into AI generation system prompts; use it to encode voice, do/don't lists, and visual rules. companyName/websiteUrl/companyAddress also fill the matching merge tags in templates.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `companyAddress` (string): Physical postal address. Fills {{companyAddress}} and is appended to the unsubscribe footer on campaigns lacking one; required by anti-spam law in several markets.
- `companyName` (string): Fills {{companyName}}
- `designSpec` (string): Markdown DESIGN.md spec for AI generation
- `fontFamily` (string): Body font family
- `logoUrl` (string)
- `primaryColor` (string): Hex color (e.g. '#4F46E5')
- `secondaryColor` (string): Hex color
- `websiteUrl` (string): Fills {{websiteUrl}}

### `get_workspace_usage` (~44 tokens)

Get usage

Get the current month's send count, contact count, and plan limits.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `list_suppressions` (~68 tokens)

List suppressions

List suppressed email addresses (bounces, complaints, unsubscribes, manual).

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `limit` (integer)
- `offset` (integer)
- `reason` (string)

### `add_suppression` (~69 tokens)

Suppress address

Add an email to the suppression list. Future sends to this address will be blocked.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `email` (string, required)
- `notes` (string)
- `reason` (string)

### `remove_suppression` (~59 tokens)

Remove suppression

Remove an email from the suppression list. Use only when you've confirmed the recipient wants to receive mail again.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `email` (string, required)

### `list_webhooks` (~56 tokens)

List webhooks

List configured outgoing webhooks (your endpoints that Send16 POSTs delivery events to). Outgoing webhooks are a plan feature.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)

### `create_webhook` (~114 tokens)

Create webhook

Register an outgoing webhook endpoint. Send16 POSTs event JSON to this URL with an HMAC-SHA256 signature. Outgoing webhooks are a plan feature.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `enabled` (boolean): Whether the endpoint is active (default true)
- `events` (array, required): Event types to subscribe to
- `name` (string, required): A label for this endpoint
- `url` (string, required): HTTPS endpoint to receive events

### `delete_webhook` (~47 tokens)

Delete webhook

Delete an outgoing webhook endpoint.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `webhookId` (string, required): Webhook ID

### `regenerate_webhook_secret` (~60 tokens)

Rotate webhook secret

Rotate the HMAC signing secret for an outgoing webhook endpoint. Returns the new secret once.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `webhookId` (string, required): Webhook ID

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-send16-send16/mcp#diagnostics

## Score history

- 2026-11-05: 34
- 2026-11-04: 34
- 2026-11-03: 34
- 2026-11-02: 34
- 2026-11-01: 34
- 2026-10-31: 34
- 2026-10-30: 34
- 2026-10-29: 73
- 2026-10-28: 73

## Common questions

### What is the Send16 MCP server?

Send16 is an MCP server listed in the public MCP registry as com.send16/send16. Email, SMS and marketing automation: campaigns, contacts, automations and stats from Claude. This page covers its hosted endpoint (https://mcp.send16.com).

### Is the Send16 MCP server safe to use?

Send16 scores 34 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Send16 MCP server expose?

Send16 exposes 87 tools: whoami, send_email, send_campaign_test, create_campaign, design_email_template, and 82 more. Their descriptions and schemas cost roughly 9,019 tokens of context every time the server is loaded.

### Does the Send16 MCP server require authentication?

Yes. Send16 asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Send16 MCP server still maintained?

Send16 is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the Send16 MCP server?

VerifyMCP ran 4 checks on Send16, covering TLS certificate, Authorization, HSTS header and DNSSEC. 7 items could not be completed, a gap on our side rather than a finding about Send16: HTTPS, Transport, Schema quality, Stability and 3 more. 6 categories score 0 for that reason, because we only credit what we can confirm. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://mcp.send16.com/
- Authorisation metadata: https://mcp.send16.com/.well-known/oauth-protected-resource
- Website: https://send16.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-send16-send16/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-send16-send16/mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/com-send16-send16/mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-send16-send16/mcp
