WarmySender MCP Server — Connect Your AI to Cold Email, LinkedIn Outreach, and Warmup
Run WarmySender from Claude Desktop, Claude Code, Cursor, Windsurf, or Zed via the Model Context Protocol. Account safety stays enforced by our scheduler regardless of the caller.
What this is
WarmySender is a B2B outreach platform covering all four pillars of modern outreach: cold emailing, email warmup, LinkedIn outreach, and multichannel sequences. Our public MCP server lets any Model Context Protocol-compatible AI client drive your workspace with natural language.
Point a supported client (Claude Desktop, Claude Code, Cursor, Windsurf, Zed, and anything else that speaks MCP 2025-11 Streamable HTTP) at https://warmysender.com/mcp with a Bearer API key, and your assistant can list campaigns, enroll prospects, check mailbox and LinkedIn account health, pause or resume campaigns, and update suppression lists — all through the same safety-checked scheduler that our web UI uses.
Why connect your AI assistant?
Ask your assistant questions like:
“List every email campaign that's running and show me reply rates for the last 7 days.”
“Which of my mailboxes have a warmup score below 70?”
“Enroll these 30 prospects into the Q2 Partnerships campaign.”
“Pause the LinkedIn campaign for the Acme audience — the reply rate dropped this week.”
“What's my remaining LinkedIn invite budget on each account today?”
“Add john@acme.com and all of acme.com to my suppression list.”
Every action runs through the same scheduler-first path as the web UI. Rate limits, warmup ramps, LinkedIn daily/weekly caps, and domain-level protections all apply identically. MCP is a protocol adapter, not a parallel implementation.
Quick start in 3 steps
Create an API key. In WarmySender, go to Settings → API Keys, click Create, and pick the scopes you want to expose. Available scopes are campaigns:read, campaigns:write, prospects:read, prospects:write, mailboxes:read, warmup:read, warmup:write, linkedin:read, linkedin:write, enrollments:write, suppressions:read, suppressions:write, and jobs:read. Save the key value — you'll only see it once.
Paste the snippet into your client. Pick your AI client below, copy the install snippet, and replace ws_YOUR_API_KEY_HERE with your real key.
Ask your assistant to use WarmySender. Try “List my campaigns” or “What's my LinkedIn account health?” — the client discovers MCP tools automatically.
Install snippets
Server URL: https://warmysender.com/mcp. Transport: Streamable HTTP (MCP spec 2025-11-25). Replace ws_YOUR_API_KEY_HERE with your API key.
Claude Desktop
Paste into your claude_desktop_config.json. File: claude_desktop_config.json.
MCP tools are gated by the scopes on your API key. If a call returns insufficient_scope, add the missing scope in Settings → API Keys and create a new key. Every write tool accepts an optional idempotency_key argument so retries are safe. Destructive tools (pause_*, unenroll_*, add_to_suppression_list) set destructiveHint: true so MCP clients prompt the user for confirmation before calling.
Read tools
Query workspace state without side effects. Safe for LLMs to call freely. All tools are workspace-scoped — your key only sees data from its own workspace.
Rate limit: 120 calls / minute / workspace
Tool
Description
Required scopes
list_campaigns
List email campaigns, optionally filtered by status. Cursor-paginated.
campaigns:read
get_campaign
Fetch a single campaign with full step definitions, pacing config, and stats.
campaigns:read
list_prospects
List prospects in the workspace, with filters for status, list membership, and campaign enrollment.
prospects:read
get_prospect
Fetch a single prospect with history, custom fields, and enrollment state.
prospects:read
list_mailboxes
List connected email mailboxes with provider, warmup status, and daily pacing.
List workspace suppression entries (emails, domains, LinkedIn profiles) with reason and source.
suppressions:read
get_job_status
Check the status of an asynchronous job (bulk prospect import, audience enrichment, etc).
jobs:read
get_workspace_info
Smoke-test tool. Returns workspace ID, plan, active scopes on the current key, and server time. No scope required.
(none)
Write tools — email & prospects
Modify email campaigns, prospects, and suppressions. All writes are idempotent when an optional idempotency_key is passed. Destructive tools (pause, archive, unenroll) set destructiveHint so MCP clients prompt the user for confirmation first.
Update warmup settings across multiple mailboxes at once. Returns a job id.
warmup:write
Safety & account protection
WarmySender's MCP server is designed so that a compromised or confused AI cannot burn your sending reputation or ban your LinkedIn accounts. Five guardrails always apply:
Workspace scoping on every call. Your API key resolves to exactly one workspace. Every query is filtered by that workspace id — there is no path to read or mutate another tenant's data.
Scheduler-first execution. LinkedIn invite/message/view calls never happen inline from MCP. The scheduler owns the rate limits, ramp schedule, and per-account safety caps. Enrolling 1,000 prospects at once still sends at the safe rate.
LinkedIn daily/weekly limits & 4-week ramp are non-negotiable. A new account starts at ~10 invites/day and grows over 4 weeks to safe maximums (50 invites/day, 150 messages/day). MCP cannot raise these — account safety always wins over speed.
Per-mailbox sending pacer and warmup [ref: XXXX] tag stay intact. MCP does not expose any tool that modifies or removes the warmup subject-line identifier or bypasses per-mailbox daily caps.
No account connect / disconnect / delete tools. Connecting and disconnecting email or LinkedIn accounts stays in the UI. No delete_campaign, delete_mailbox, or delete_account tools exist in V1 — soft-cancel via pause/archive only.
Limits are per-workspace, sliding 60-second window, backed by Upstash Redis. These are in addition to — not replacing — the scheduler's hard LinkedIn/Unipile caps.
Exceeding a budget returns a rate_limited error with a retry_after_seconds field so your assistant knows when to retry.
Error codes
MCP tools use JSON-RPC error codes. The WarmySender server reserves the -32000…-32099 range for protocol-specific errors on top of the standard JSON-RPC codes.
Code
Name
Meaning
-32001
insufficient_scope
The tool requires a scope your API key doesn't have. error.data.missing lists the missing scopes.
-32002
rate_limited
Per-workspace per-minute budget exceeded. error.data.retry_after_seconds tells you when to retry.
-32003
idempotency_conflict
The same idempotency_key was reused with different arguments. Change the key or the args.
-32004
unauthorized
Bearer token missing, invalid, revoked, or the session expired.
-32602
invalid_params
Tool arguments failed Zod validation. error.data.issues shows which fields failed and why.
-32603
internal_error
Anything else thrown by the handler. Stack trace is in server logs; the response includes a request_id to quote in support.
Frequently asked questions
Which MCP clients work with WarmySender?
Anything that speaks the Model Context Protocol 2025-11 Streamable HTTP spec. We've tested Claude Desktop, Claude Code, Cursor, Windsurf, and Zed. Continue, Cline, Goose, and other MCP clients should also work — just point them at https://warmysender.com/mcp with your Bearer token. Older stdio-only clients (early Claude Desktop builds) can use the npx mcp-remote bridge shown in the snippets above.
Is there an OAuth option instead of an API key?
Not yet. V1 uses Bearer authentication with WarmySender API keys (the same ws_ keys you use for our REST API). OAuth 2.1 + Client ID Metadata Documents — the MCP spec's recommended flow — is on the roadmap. API keys ship today with zero new infrastructure and cover the same scopes.
Can I expose this to other AI tools — ChatGPT, Gemini, custom agents?
Yes. MCP is a transport-neutral protocol. Any client that implements Streamable HTTP with Bearer auth can connect. For bespoke integrations, use the official @modelcontextprotocol/sdk in Node/Python and pass the Authorization header in each request.
Does connecting via MCP cost anything extra?
No. MCP usage is included in all paid plans (Pro, Business, Enterprise, and the Starter legacy plan). The only cost is the subscription you're already paying. LinkedIn add-on seats ($9/seat/month) still apply if you call LinkedIn tools.
How do I revoke access?
Revoke the API key in Settings > API Keys. Revocation is instant; the next MCP call from any client using that key gets an unauthorized error. You can also narrow the scopes on a key to tighten what the AI can do without fully revoking access.
Can the AI accidentally ban my LinkedIn account or burn my sending reputation?
No. Every LinkedIn action routes through our scheduler, which enforces Unipile/LinkedIn per-account daily and weekly limits plus the 4-week ramp schedule. Every email send respects the per-mailbox pacer, domain caps, and warmup ramp. MCP cannot bypass any of these — if your AI asks to enroll 500 prospects at once, the scheduler still sends at the safe rate. Connecting and disconnecting accounts stays in the UI for the same reason.