# io.github.spruikco/send16-mcp (npm · send16-mcp)

Email for AI agents: send mail, manage contacts, automations & webhooks. Zero-DNS first send.

- Trust score: 65/100 (medium)
- Change this week: +19
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

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

## Channel facts

- Registry: `npm`
- Package: `send16-mcp`
- Version: `0.5.8`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, 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-08-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 2 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 77/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 6299 tokens (~79/item across 79 items; 79 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 95/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 84% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add spruikco-send16-mcp -- npx -y send16-mcp
```

### Codex

```bash
codex mcp add spruikco-send16-mcp -- npx -y send16-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "spruikco-send16-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "send16-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add spruikco-send16-mcp --command npx --arg -y --arg send16-mcp
```

### Hermes

```yaml
mcp_servers:
  spruikco-send16-mcp:
    command: "npx"
    args: ["-y", "send16-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "spruikco-send16-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "send16-mcp"
      ]
    }
  }
}
```

## 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-08-02 (score 65, +12)

- [security improvement] Malware scan: unverified → pass

### 2026-08-01 (score 53, +32)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional] Licence: MIT

### 2026-07-31 (score 21, −7)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 28, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (79)

### `whoami` (~78 tokens)

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` (~275 tokens)

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.

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` (~79 tokens)

Send a test email for an existing campaign to preview how it will look in recipients' inboxes.

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` (~129 tokens)

Create a new email campaign in Send16. The campaign is created in draft status and can be edited before sending.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `fromEmail` (string, required): Sender email (must be from a verified domain)
- `fromName` (string, required): Sender display name
- `name` (string, required): Campaign name (internal label)
- `previewText` (string): Preview text shown in inbox alongside subject
- `replyTo` (string): Reply-to email address
- `subject` (string, required): Email subject line

### `design_email_template` (~161 tokens)

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` (~75 tokens)

List email campaigns with optional status filtering and 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)
- `status` (string): Filter campaigns by status

### `create_contact` (~106 tokens)

Add a new contact to your Send16 audience. Contacts are automatically subscribed to receive emails.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `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 to this contact

### `search_contacts` (~90 tokens)

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 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` (~122 tokens)

Bulk import contacts from CSV data. Each row should have at minimum an email column. Tags can be applied to all imported contacts.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `csvData` (string, required): CSV string with headers. Required column: "email". Optional: "firstName", "lastName", "tags" (comma-separated within quotes)
- `tags` (array): Tag names to apply to all imported contacts
- `updateExisting` (boolean): Whether to update contacts that already exist

### `list_domains` (~48 tokens)

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 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 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 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 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 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` (~92 tokens)

Manually enroll a contact in an active automation. The automation must be in 'active' status. Use send_event for event-driven enrollment.

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` (~163 tokens)

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>`.

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-gallery email templates available to every workspace.

Input parameters:

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

### `get_template` (~55 tokens)

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)

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)

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)

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)

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 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)

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 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` (~148 tokens)

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
- `limit` (integer): Page size (default 50)
- `mailboxId` (string): Filter to one mailbox
- `offset` (integer): Page offset
- `screener_status` (string): Screener gate status
- `search` (string): Full-text search across subject + body
- `state` (string): Conversation state

### `get_convo` (~54 tokens)

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` (~94 tokens)

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.

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 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` (~97 tokens)

Update conversation state (open/closed/snoozed/spam/trash), star, or assignee.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `assigneeId`: Workspace member ID, or null to unassign
- `convoId` (string, required): Conversation ID
- `starred` (boolean): Star/unstar
- `state` (string): New state

### `add_convo_note` (~70 tokens)

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 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 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. 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 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 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 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` (~61 tokens)

List Actions. Actions fire a transactional template when a custom event arrives — Plunk-style 'event_name → template' pairings, simpler than full automations.

Input parameters:

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

### `get_action` (~51 tokens)

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 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 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 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 (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 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 (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 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 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 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 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

### `update_contact` (~84 tokens)

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 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 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 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` (~224 tokens)

One-shot broadcast: create a campaign and immediately schedule it to send. Mirrors Resend's one-call broadcast API. Pass either an audienceId, segmentId, topicId, or fully-qualified filter. Provide html OR templateSlug.

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` (~99 tokens)

Schedule (or send immediately) an existing draft campaign to an audience/segment/topic.

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` (~109 tokens)

Update a draft campaign's content, subject, preview text, or sender info.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `campaignId` (string, required): Campaign ID
- `fromEmail` (string)
- `fromName` (string)
- `html` (string)
- `previewText` (string)
- `replyTo` (string)
- `subject` (string)
- `templateSlug` (string)

### `pause_campaign` (~55 tokens)

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` (~44 tokens)

Resume a paused campaign.

Input parameters:

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

### `duplicate_campaign` (~60 tokens)

Duplicate a campaign as a new draft. Useful for A/B variants or re-using a successful template.

Input parameters:

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

### `delete_campaign` (~53 tokens)

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 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` (~54 tokens)

Activate an automation. New events matching its triggers will start enrolling contacts.

Input parameters:

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

### `pause_automation` (~56 tokens)

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 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` (~74 tokens)

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
- `cursor` (string)
- `limit` (integer)
- `state` (string)

### `list_workspaces` (~44 tokens)

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 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 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` (~128 tokens)

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.

Input parameters:

- `apiKey` (string): Send16 API key (overrides SEND16_API_KEY env var)
- `designSpec` (string): Markdown DESIGN.md spec for AI generation
- `fontFamily` (string)
- `logoUrl` (string)
- `primaryColor` (string): Hex color (e.g. '#4F46E5')
- `secondaryColor` (string): Hex color

### `get_workspace_usage` (~44 tokens)

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 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)

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 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 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)

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 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 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: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/spruikco-send16-mcp/send16-mcp#diagnostics

## Score history

- 2026-08-03: 65
- 2026-08-02: 65
- 2026-08-01: 53
- 2026-07-31: 21
- 2026-07-30: 28
- 2026-07-28: 46
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/send16-mcp
- Socket report: https://socket.dev/npm/package/send16-mcp
- Repository: https://github.com/spruikco/send16-mcp
- Website: https://send16.com/
- Changelog RSS feed: https://verifymcp.io/servers/spruikco-send16-mcp/send16-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/spruikco-send16-mcp/send16-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/spruikco-send16-mcp/send16-mcp
