Skip to main content
Glama
Ballast - Cold Email

Ballast - Cold Email

Official

Ballast MCP Server

Ballast - Cold Email MCP server – quality and maintenance score on Glama Protocol License: MIT

Official Model Context Protocol (MCP) server implementation for Ballast — connect AI agents to manage cold email campaigns, deliverability warmup, lead lists, and inbox replies.

This repository contains the standalone MCP server package that runs locally via standard I/O (stdio) and connects AI assistants (Claude Desktop, Cursor, Claude Code, Zed, etc.) to your Ballast workspace.


Features

  • Deliverability & DNS Diagnostics: Inspect secondary domains for SPF, DKIM, DMARC alignment, MX configuration, and blacklist health.

  • Campaign & Sequence Management: Build multi-step outbound sequences, set A/B variants, configure sending delays, and verify launch checklists.

  • Automated Bounce Circuit Breakers: Monitor campaign placement rates and pause sends if bounce rate thresholds are crossed.

  • Unified Inbox (Unibox): Read and summarize customer email threads, check sentiment classification, and draft human-confirmed replies.

  • Safe by Default: Destructive operations (launching campaigns, sending emails, deleting data) require explicit two-step confirmation with a 10-minute HMAC token.


Related MCP server: Smartlead MCP Server

Installation & Setup

Requirements

You can run the server directly without manual installation:

BALLAST_API_KEY="bl_your_key_here" npx -y ballast-mcp

Install from Source

git clone https://github.com/useballast/ballast-mcp.git
cd ballast-mcp
npm install
npm start

Client Configuration

Claude Desktop

Add Ballast to your claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "ballast": {
      "command": "npx",
      "args": ["-y", "ballast-mcp"],
      "env": {
        "BALLAST_API_KEY": "bl_your_api_key_here"
      }
    }
  }
}

Cursor

Add to ~/.cursor/mcp.json (or your project's .cursor/mcp.json):

{
  "mcpServers": {
    "ballast": {
      "command": "npx",
      "args": ["-y", "ballast-mcp"],
      "env": {
        "BALLAST_API_KEY": "bl_your_api_key_here"
      }
    }
  }
}

Claude Code

claude mcp add --transport stdio ballast -- npx -y ballast-mcp --key=bl_your_api_key_here

(Note: For clients that support remote Streamable HTTP directly, you can also use --transport http ballast https://ballast.to/api/mcp --header "Authorization: Bearer bl_...")


Tools Reference

The server implements 30 core tools organized by functional area:

Tool

Category

Description

whoami

Workspace

Get authenticated user, active workspace, and permission role.

get_overview

Workspace

Workspace-wide aggregate totals and trends across all campaigns (sends, replies, sentiment, bounces).

get_billing

Workspace

Plan details, sending allowances, dedicated IPs, and usage limits.

check_domain

Domains

Live DNS & deliverability diagnostics on any domain without adding it.

list_domains

Domains

List connected sending domains with deliverability scores and verification status.

add_domain

Domains

Connect and register a new sending domain to the workspace.

list_mailboxes

Mailboxes

List connected Google Workspace and Microsoft 365 mailboxes with daily limits.

add_mailbox

Mailboxes

Connect an external mailbox for outbound outreach.

list_leads

Leads

Search and filter contacts in your workspace.

import_leads

Leads

Import lead contacts with custom variables and tag assignment.

list_lead_lists

Leads

List organized lead segments and member counts.

add_suppressions

Leads

Add email addresses or root domains to workspace-wide do-not-contact lists.

list_campaigns

Campaigns

List outbound sequences with sending schedules and statuses.

create_campaign

Campaigns

Create a new cold email campaign.

get_campaign

Campaigns

Retrieve campaign settings, step variants, and assigned mailboxes.

update_campaign

Campaigns

Update campaign schedule, daily quotas, or track settings.

set_sequence

Campaigns

Configure sequence steps, delays, subject lines, and body copy.

write_sequence

Campaigns

Generate or polish multi-step sequence copy using AI.

add_leads_to_campaign

Campaigns

Enroll lead segments into an active sequence.

preview_campaign

Campaigns

Preview lead send distribution across mailboxes and first send timings.

get_launch_checklist

Campaigns

Check domain alignment, sender warmup, and lead hygiene before launch.

launch_campaign

Campaigns

Launch sequence sending (requires confirm token).

pause_campaign

Campaigns

Immediately pause sending for a campaign.

get_campaign_stats

Campaigns

Daily time-series email metrics for a campaign or all campaigns over time.

get_campaign_analytics

Campaigns

Granular performance breakdown across email providers (Google, Microsoft), mailboxes, and sentiment.

get_unibox_filters

Unibox

Retrieve unified inbox filter presets and label counts.

list_threads

Unibox

List incoming recipient replies and conversation threads.

get_thread

Unibox

Inspect full thread message history, headers, and lead details.

send_reply

Unibox

Send an email reply from the thread's assigned mailbox (requires confirm token).

label_thread

Unibox

Apply sentiment labels (Interested, Meeting Booked, Not Interested, Out of Office).


Safety: Two-Step Confirmations

To prevent inadvertent mass sends or data deletion:

  1. When calling launch_campaign, send_reply, or deletion tools without a confirm_token, the server generates a dry-run preview describing the exact outcome (e.g. "Will send 320 emails across 6 mailboxes") and issues an HMAC token.

  2. The AI presents the preview to the user.

  3. The action executes only when the user approves and the AI passes the confirm_token.


Development

git clone https://github.com/useballast/ballast-mcp.git
cd ballast-mcp
npm install
npm test # or npm start

License

MIT © Ballast

Available Tools

30 tools
add_domainAInspect

Connect a new sending domain to the workspace and verify DNS. Registers a new sending domain under the workspace, saves it, and immediately initiates DNS and deliverability verification (MX, SPF, DKIM, DMARC, blacklists). USE THIS when setting up a new custom domain to send cold emails from Ballast. DO NOT use to test an external or unverified domain without adding it to the workspace (use check_domain instead) or to list existing domains (use list_domains instead).

Inputs: domain (required).

add_leads_to_campaignBInspect

Add leads from lists (or by id) to a campaign Skips leads already in the campaign, unsubscribed, bounced or suppressed leads, and addresses verification found invalid.

Inputs: id (required), leadIds, listIds, allLeads.

add_mailboxAInspect

Connect a mailbox Tests SMTP and IMAP login first and saves only when both pass. Google needs an app password. Microsoft 365 connects with OAuth from the dashboard.

add_suppressionsAInspect

Suppress addresses or whole domains Up to 10,000 values per call: emails, or domains written as @acme.com. Matching leads are marked suppressed.

Inputs: values (required), reason.

check_domainAInspect

Inspect DNS and deliverability health of any domain without adding it. Performs a live, read-only diagnostic check on any domain name (MX, SPF, DKIM, DMARC records, blacklist status, and domain age) with actionable DNS fix instructions. Results are cached for 10 minutes. USE THIS to test or grade arbitrary prospect or candidate domains without saving or connecting them. DO NOT use to configure a domain for sending in Ballast (use add_domain instead) or to view already configured sending domains (use list_domains instead).

Inputs: domain (required), selector.

create_campaignAInspect

Create a draft campaign Starts with one empty email. Use set_sequence to write the emails, then add leads and mailboxes.

Inputs: name.

get_billingBInspect

Plan, subscription status, emails and AI drafts used this period

Inputs: no named parameters.

get_campaignBInspect

Get a campaign with its sequence, schedule and settings

Inputs: id (required).

get_campaign_analyticsAInspect

Multi-dimensional performance breakdown by provider, mailbox, and sentiment. Returns granular aggregate performance metrics broken down across email providers (Google Workspace, Microsoft 365, etc.), individual sending mailboxes, and reply sentiment classifications. USE THIS to diagnose deliverability issues across providers or compare mailbox performance. DO NOT use for day-by-day time-series data (use get_campaign_stats instead) or macro workspace KPI totals (use get_overview instead).

Inputs: days.

get_campaign_statsAInspect

Daily time-series email metrics for a campaign or all campaigns. Returns daily time-series counts (day-by-day sent, replied, opened, bounced, positive) for a specific campaign (pass campaignId) or all campaigns combined over the last N days. USE THIS to plot charts or view daily performance trends over time. DO NOT use for high-level workspace summary totals (use get_overview instead) or for multi-dimensional breakdowns by ESP provider, mailbox, or step (use get_campaign_analytics instead).

Inputs: days, campaignId.

get_launch_checklistCInspect

What has to be fixed before launch Required items block the launch; warnings are advice.

Inputs: id (required).

get_overviewAInspect

Workspace-wide aggregate email outreach totals and trends. Returns macro-level aggregate counts (total sends, replies, positive replies, bounces, won deals) across the entire workspace for the last 7, 30, or 90 days, comparing against the prior period for trend analysis. USE THIS for high-level workspace executive summaries. DO NOT use for a single campaign (use get_campaign_stats instead) or for provider/mailbox breakdowns (use get_campaign_analytics instead).

Inputs: days.

get_threadCInspect

A thread with every message, the campaign emails and the lead

Inputs: id (required).

get_unibox_filtersCInspect

Unibox counts by label, mailbox and campaign

Inputs: no named parameters.

import_leadsAInspect

Import leads in chunks Send up to 5,000 rows per call. The first call creates the import and returns its id; pass importId with every next chunk and final: true with the last. Addresses are deduped, suppressed ones skipped, invalid ones counted. ESP detection and verification run in the background after the final chunk.

Inputs: rows (required), list, final, verify, +5 more.

label_threadAInspect

Set or clear a thread's label The lead gets the label for the thread's campaign and the label's triggers run (suppress, stop in campaign, pause campaign, move to list). null clears it.

Inputs: id (required), labelId (required).

launch_campaignAInspect

Launch or resume a campaign Runs the launch checklist first and refuses when a required item fails. The worker then sends inside the schedule window.

Inputs: id (required).

list_campaignsCInspect

List campaigns Newest first, with lead counts by progress.

Inputs: status.

list_domainsAInspect

List all connected sending domains and their verification status. Returns all custom sending domains currently registered in the workspace, including their mailbox count, latest deliverability scores, and verification history. USE THIS to review existing sending infrastructure. DO NOT use to register a new domain (use add_domain instead) or to test an external domain without adding it (use check_domain instead).

Inputs: no named parameters.

list_lead_listsCInspect

Lead lists with counts

Inputs: no named parameters.

list_leadsBInspect

List leads Paged, newest first by default. Filter by list, label, status, verification and ESP, or search email, name and company.

Inputs: dir, esp, page, sort, +6 more.

list_mailboxesBInspect

List mailboxes Connected sending mailboxes with today's limit, ramp-up and the DNS health of their domain.

Inputs: no named parameters.

list_threadsBInspect

Reply threads, newest first Filter by unread, label, mailbox or campaign. Page with cursor from the previous answer.

Inputs: view, cursor, search, labelId, +2 more.

pause_campaignBInspect

Pause a running campaign Nothing more is sent until it is launched again. Emails already handed to the provider still arrive.

Inputs: id (required).

preview_campaignAInspect

Render every step and variant for one lead Shows the emails exactly as that lead would get them, with spintax resolved the way it will be for them. Defaults to the first lead in the campaign.

Inputs: id (required), leadId.

send_replyBInspect

Answer a thread Sends from the mailbox the conversation is on, in the same thread (In-Reply-To and References), to whoever wrote last. The previous message is quoted below.

Inputs: id (required), text (required).

set_sequenceAInspect

Replace the whole sequence Steps in order, each with 1 to 5 variants. Bodies may be plain text (blank lines split paragraphs) or simple HTML. Use {{first_name}} style variables, {{first_name|there}} for a fallback, {Hi|Hello} spintax, and put {{unsubscribe}} in the first email. Only drafts and paused campaigns.

Inputs: id (required), steps (required).

update_campaignCInspect

Rename a campaign or change its schedule, mailboxes and options

Inputs: id (required), days, name, endOn, +13 more.

whoamiAInspect

Who am I: the user, workspace and plan behind this key or session

Inputs: no named parameters.

write_sequenceAInspect

Write emails with AI from the offer profile. Drafts a whole sequence (mode sequence) or a new version of one variant (rewrite, shorter, angle), using only facts from the workspace offer profile and lead fields. Results are saved as new variants and never overwrite existing text; an empty campaign gets the drafted steps. Each email is checked against the content checklist; anything still failing comes back in problems. Requires that the workspace offer profile is configured in Ballast settings (or updated via update_offer_profile).

Inputs: id (required), mode, angle, steps, +2 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 30 tools

    Disambiguation4/5

    Tools are largely distinct and descriptions explicitly cross-reference siblings with USE THIS/DO NOT patterns (stats vs analytics vs overview, add/check/list domain). Minor overlap remains between set_sequence and write_sequence (both author sequences) and between get_campaign and get_campaign_stats, but boundaries are mostly clear.

    Naming Consistency5/5

    Nearly every tool follows a consistent snake_case verb_noun pattern (list_campaigns, add_domain, create_campaign, send_reply, update_campaign). The only deviation is the single 'whoami', which is idiomatic and harmless.

    Tool Count3/5

    30 tools is heavy and sits at the top of the acceptable range, but the surface spans genuinely broad sub-domains (domains, mailboxes, campaigns, sequences, leads, threads, analytics, billing). Each tool maps to a distinct area, though consolidation is possible.

    Completeness4/5

    Coverage is strong across the cold-email lifecycle: leads, campaigns, sequences, domains, mailboxes, analytics, threads, billing and suppressions. Gaps are the lack of delete/remove operations (campaign, mailbox, domain) and a referenced-but-absent update_offer_profile tool, which agents must work around.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      F
      maintenance
      A Model Context Protocol server that provides AI coding assistants (Claude, Cursor, etc.) with access to SmartLead's cold email automation platform through 116+ API endpoints for campaign management, lead tracking, and email delivery.
      1,133 npm
      20
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Mailgo Campaign Suite MCP Server AI-powered cold email campaign management through Model Context Protocol (MCP). Overview Mailgo Campaign Suite MCP Server connects your AI assistant directly to the Mailgo cold email platform. Through natural conversation, you can verify email addresses, claim pre-warmed mailboxes, launch campaigns, manage their lifecycle, and pull
      5
      -
    • A
      license
      A
      quality
      B
      maintenance
      A Model Context Protocol server for Plunk, the open-source self-hosted email platform. Provides 84 tools for transactional email, contacts, campaigns, segments, templates, workflows, events, and analytics through the Plunk API.
      94
      16 npm
      2
      MIT