Marketing

Smartlead MCP Server

Connect your account, then chat with AI to run tools.

Smartlead is an AI-powered email outreach and cold email automation platform designed for lead generation. Manage email campaigns, track engagement metrics, monitor replies, and optimize outreach strategies at scale with automated follow-ups and lead categorization.

Managed
33 tools
Agent guide included

Opens MCPBundles Studio with this server selected. After sign-in, chat and run tools from the same thread.

Browse all tools

AI Skill
SKILL.md

Domain knowledge for Smartlead — workflow patterns, data models, and gotchas for your AI agent.

Smartlead

Cold-email automation. Every send is anchored to a Campaign; sequences fire from attached sender (Email Account) inboxes to Leads enrolled in the campaign. All inbound replies land in one Master Inbox spanning every campaign and sender.

Resource hierarchy (top down)

  • Lead List → workspace-level staging bucket of contacts (independent of any campaign)
  • Campaign → Sequence (ordered email steps with delay) → Variant
  • Campaign → Lead (enrolled prospect) → Message history (sent + replies, threaded)
  • Campaign ↔ Email Account (many-to-many; senders attached to a campaign)
  • Email Account → Warmup settings + 7-day warmup stats
  • Lead Category (workspace-wide enum applied to a lead-in-campaign mapping)
  • Master Inbox → reply messages from any campaign / sender, each carrying an email_lead_map_id (== campaign_lead_map_id) used by every per-message verb

A campaign's leads are scoped to that campaign — the same email address enrolled in multiple campaigns is a separate lead row each time. The global lead listing is the workspace-wide rollup, independent of any specific Lead List.

Lead Lists (the pre-campaign staging surface)

A Lead List is a workspace-level bucket of contacts that exists independently of any campaign. The canonical sourcing flow is:

  1. Build / receive a list of contacts (CSV, ListKit export, manual entry).
  2. Stage them in a Lead List with import_leads_to_lead_list — reusable, taggable, and detached from any campaign.
  3. push_leads_to_campaign to promote staged leads into a campaign — action='copy' keeps the source intact, action='move' removes them from the source list. Source picker is mutually exclusive: list_id (whole list), lead_ids (1-10,000 explicit ids), or all_leads=true (the entire workspace pool). Target picker accepts either campaign_id (existing) or campaign_name (auto-creates the campaign if it does not exist).

Lead List attributes: id, list_name, leads_count, active_leads_count, tag_ids, timestamps. Only list_name is mutable on update — use tags via assign_tags_to_lead_lists for grouping. List filtering: paginated with limit (1-1000, default 10), offset (≥ 0), and tag_ids (filter by tag membership). The API does not expose a free-text name filter, a description / metadata field on the list itself, or a tag-listing surface for lead lists — discover tag ids in the Smartlead UI.

Imports require file_name (label only — does not need to match a real file), lead_list (array of contact objects, max 400 per call, email required per row), and optional settings flags to bypass the workspace-wide block / unsubscribe / community-bounce / duplicate checks. The response carries uploadedCount, duplicateCount, invalidCount, totalCount — duplicates are reported, not errored. Re-import is the canonical update path.

Push semantics: Smartlead's only move operation is "list → campaign" via push_leads_to_campaign with action='move'. There is no /lead-list/move-leads endpoint — list-to-list reorganisation is not exposed by the API. Tag-based grouping (assign_tags_to_lead_lists) is the workspace-level workaround.

assign_tags_to_lead_lists operates in batches: 1-10 lists per call, with tag_ids to attach and / or remove_tag_ids to detach (each 1-10 ids, at least one of the two must be non-empty).

ID formats

All ids are integers: campaign ids (e.g. 3090077), lead ids, email-account ids, sequence ids, category ids. The Master Inbox surfaces campaign_lead_map_id for each conversation — pass it as email_lead_map_id to read-status, category, and reply verbs. Single-resource fetches use /{collection}/{id}.

Operational order (do these in this sequence)

  1. Stage contacts in a Lead List (upsert_lead_list then import_leads_to_lead_list). Optional but recommended — gives a reusable, taggable bucket detached from any specific campaign.
  2. Create a campaign (name only is enough at this point).
  3. Attach one or more sender email accounts to the campaign — a campaign cannot send without at least one attached sender.
  4. Save the sequence steps (subject, email body, delay).
  5. Update the campaign's settings + schedule. The schedule update is atomic: timezone, days_of_the_week, start_hour, end_hour, min_time_btw_emails, and max_new_leads_per_day must all be supplied in the same call (the upstream endpoint rejects partial schedule patches).
  6. Promote leads into the campaign — either push_leads_to_campaign from a staged Lead List (recommended) or upsert_campaign_leads for a one-off direct enrollment.
  7. Set the campaign status. Status verbs accept exactly START / PAUSED / STOPPED (note the past-tense state values, not PAUSE/STOP).

Campaign status semantics

  • DRAFTED — newly created, never started.
  • ACTIVE — sending.
  • PAUSED — temporarily halted; resume with START.
  • STOPPED — terminated; further sends require recreating.
  • COMPLETED — all leads finished the sequence.

Sender accounts (managed inboxes)

Sender mailboxes are attached at the workspace level via the email-accounts surface, then linked to campaigns. The API does not expose an OAuth flow to connect Gmail / Outlook / SMTP credentials — that step happens in the Smartlead web UI. What the API does expose:

  • Workspace-wide sender list with per-account warmup state and 7-day warmup stats.
  • Save / update of an existing sender's metadata, signature, and per-account daily send limit.
  • Warmup configuration update (ramp-up, daily volume, weekend toggle, reply-rate target).
  • Hard delete of a sender from the workspace.
  • Many-to-many attach / detach to a specific campaign, plus the campaign's currently-attached senders.

A campaign with zero attached senders cannot be set to START.

Master Inbox (unified replies across all campaigns and senders)

Every inbound reply lands in one workspace-wide Master Inbox, regardless of which campaign or sender it came from. Three read views share one filter shape:

  • view=all — every reply (read + unread)
  • view=unread — only unread
  • view=important — only flagged

Filters: email_status (typically Replied), campaign_id (up to 5), email_account_id (up to 20 for all, up to 10 for unread/important), campaign_team_member_id, campaign_tag_id, client_id (each up to 10), category_ids_in / category_ids_not_in (each up to 10), category_assigned, reply_time_between ([start_iso, end_iso]), free-text search (max 30 chars), sort_by (REPLY_TIME_DESC default, or SENT_TIME_DESC). Pagination: offset ≥ 0, limit 1–20.

Set fetch_message_history=true only when the full thread is required — payload is roughly 10x the latest-message-only response.

Each inbox message exposes:

  • lead (email, name, company)
  • campaign (id + name)
  • email_account (sender id + email)
  • last_message (id, subject, body, received_at, sent_from, sent_to)
  • email_status, category ({id, name}), is_read, is_important, tags
  • campaign_lead_map_id — the value to pass as email_lead_map_id in every per-message verb
Per-message verbs
  • Read status — toggle a conversation read (read_status=true) or unread (read_status=false). Replaces the deprecated mark-unread endpoint; always use the boolean read_status form.
  • Lead category — assign a category_id to a (lead, campaign) mapping, or omit it / pass null to clear. Built-in ids: 1=Interested, 2=Meeting Request, 3=Not Interested, 4=Do Not Contact, 5=Information Request. Custom workspace categories use ids surfaced by the lead-categories read.
  • Reply to thread — send a reply into an existing conversation. Required: campaign_id, email_stats_id (from last_message.id), email_body. Optional: to / to_first_name / to_last_name (defaults to the lead), cc, bcc, add_signature (default true), attachments ([{file_name, url, file_type, file_size}]), and scheduled_time (ISO 8601) to queue instead of sending immediately. Threading is preserved.
Inbox limits (upstream-enforced)
  • limit ≤ 20 per page across all three views.
  • campaign_id array ≤ 5.
  • email_account_id array ≤ 20 for all, ≤ 10 for unread / important.
  • All other id-array filters ≤ 10.

Reply analytics (campaign-scoped, separate from the inbox)

Per-campaign reply counts live on the analytics endpoint. Per-reply rows live on statistics with email_status=replied (paginated). Full message thread lives on message-history keyed by (campaign_id, lead_id) — pull the lead id from the campaign's lead list, not from the global lead by email. The Master Inbox is the better entry point for cross-campaign reply triage; the campaign analytics surface is for per-campaign engagement reporting.

Date filters

Campaign analytics accept start_date / end_date in YYYY-MM-DD. Both must be supplied together; the date-filtered endpoint diverges from the cumulative one. Inbox reply_time_between uses ISO 8601 datetimes (["2025-01-01T00:00:00Z","2025-01-31T23:59:59Z"]).

Sender warmup

Newly added sender accounts default to warmup-enabled. Warmup volume should ramp before campaigns send through the account at full volume. The warmup-stats endpoint returns a 7-day rolling window only.

Deliverability defaults that work

Track-open and track-click pixels degrade deliverability for cold outreach. Plain-text bodies outperform HTML for first-touch. Caps of ~30 new leads per day per sender, business-hours-only sending, and stop_lead_settings = REPLY_TO_AN_EMAIL are the conservative starting point.

Tools in this Server (33)

Smartlead Assign Tags To Lead Lists

Attach or detach tags on up to 10 Lead Lists in one call. Pass the target ``list_ids`` (1-10), then ``tag_ids`` to attach and / or ``remove_tag_ids`` ...

Smartlead Delete Campaign

Permanently delete a campaign by id. Removes the campaign, its sequences, and its lead enrollments. Sender email accounts attached to the campaign are...

Smartlead Delete Campaign Email Accounts

Detach sender email accounts from a campaign. Does not delete the email accounts themselves. Send an array of account ids — one DELETE call detaches a...

Smartlead Delete Campaign Lead

Remove one lead from a specific campaign. Does not delete the lead from the workspace — the same email may still be enrolled in other campaigns. Retur...

Smartlead Delete Email Account

Permanently delete a sender email account. Removes the account from any campaigns it was attached to. Cannot be undone.

Smartlead Delete Lead List

Delete a Lead List by id. Hard delete — removes the list and its lead memberships. Leads already pushed into a campaign before the delete remain in th...

Smartlead Get Campaign Analytics

Aggregate analytics for one campaign: sent_count, open_count, click_count, reply_count, bounce_count, block_count, unsubscribe_count, sequence_count, ...

Smartlead Get Campaign Email Accounts

List the sender email accounts currently attached to one campaign. A campaign cannot send before at least one sender is attached.

Smartlead Get Campaign Leads

List leads enrolled in one campaign (paginated). Returns lead id, contact details, custom fields, and per-lead campaign status. Use the lead id from t...

Smartlead Get Campaigns

Read campaigns owned by the workspace. Omit id to list every campaign (returns id, name, status, schedule, tracking config). Pass id (numeric, from th...

Smartlead Get Campaign Sequences

Read every sequence step on a campaign: subject, email_body, seq_number, seq_delay_details (delay in days from previous step), and variants. Use this ...

Smartlead Get Campaign Statistics

Per-message records for one campaign (paginated). Each row carries lead_email, sent_time, reply_time (when status is 'replied'), email_subject, sequen...

Smartlead Get Email Accounts

Read sender email accounts in the workspace. Omit id to list every account (returns id, from_email, type, smtp_host, warmup_enabled, daily caps). Pass...

Smartlead Get Email Account Warmup Stats

7-day rolling warmup performance for one sender: emails sent, spam count, delivery rates, opens, replies. The endpoint returns at most the last 7 days...

Smartlead Get Global Leads

List leads across the entire workspace (paginated). Returns data, skip, limit, hasMore. Use created_at_gt and email for filtering. For a single email ...

Smartlead Get Inbox Replies

Read replies from the Smartlead Master Inbox — the unified inbox across every campaign and sender account. Pick view='all' (every reply), 'unread' (on...

Smartlead Get Lead

Look up one lead by email address. Returns the lead's workspace-wide id, contact details, custom fields, and the list of campaigns the email is enroll...

Smartlead Get Lead Categories

List every lead category defined in the workspace. Each row is {id, name}. Categories are workspace-wide and apply to leads in any campaign — useful f...

Smartlead Get Lead Lists

Read Lead Lists — workspace-level lead staging buckets that exist independently of any campaign. Pass ``id`` to fetch one list (returns name, owner, t...

Smartlead Get Lead Message History

Read the full message thread for one lead in one campaign: every sent step (SENT) and every reply (REPLY) in chrono order, each with subject, email_bo...

Smartlead Import Leads To Lead List

Import contacts into a Lead List. Body: ``file_name`` (label, required), ``lead_list`` (array of contacts, max 400 per call, ``email`` required per ro...

Smartlead Push Leads To Campaign

Promote staged leads into a campaign. Specify the target with ``campaign_id`` (or ``campaign_name`` to auto-create). Pick exactly one source: ``list_i...

Smartlead Reply To Thread

Send a reply into an existing Master Inbox email thread. Threading is preserved — the reply lands in the same conversation the original lead reply ope...

Smartlead Set Campaign Status

Transition a campaign's lifecycle status. START / PAUSED / STOPPED only — not the same surface as creating or editing a campaign. Smartlead mixes a ve...

Smartlead Set Inbox Read Status

Mark an inbox conversation as read (read_status=true) or unread (read_status=false). Use the campaign_lead_map_id from get_inbox_replies as the email_...

Smartlead Set Lead Category

Assign or clear the category on a lead-campaign mapping. Pass category_id to assign, omit it (or pass null) to clear. This is the same surface the Mas...

Smartlead Upsert Campaign

Create or update a campaign. Omit id to create — only ``name`` (and optional ``client_id``) is read on the create branch; settings + schedule fields a...

Smartlead Upsert Campaign Email Accounts

Attach one or more sender email accounts to a campaign. email_account_ids is an array of numeric account ids (from get_email_accounts). The relation i...

Smartlead Upsert Campaign Leads

Enroll leads in a campaign. lead_list is an array of objects; each lead requires ``email`` and may include first_name, last_name, company_name, phone_...

Smartlead Upsert Campaign Sequences

Save the full sequence list for a campaign — this is a replace, not a partial merge. Each sequence step needs seq_number (1-indexed), seq_delay_detail...

Smartlead Upsert Email Account

Create or update a sender email account. Omit id to create (POST email-accounts/save) — every SMTP/IMAP field is required because Smartlead validates ...

Smartlead Upsert Email Account Warmup

Update the warmup configuration for one sender account. Always an update — there is no separate create endpoint. warmup_enabled is the only required f...

Smartlead Upsert Lead List

Create a new Lead List (omit ``id``) or rename an existing one (pass ``id``). ``list_name`` is required on create and is the only mutable field on upd...

Frequently Asked Questions

What is the Smartlead MCP server?

Smartlead is an AI-powered email outreach and cold email automation platform designed for lead generation. Manage email campaigns, track engagement metrics, monitor replies, and optimize outreach strategies at scale with automated follow-ups and lead categorization. It provides 33 tools that AI agents can use through the Model Context Protocol (MCP).

How do I connect Smartlead to my AI agent?

Add the MCPBundles server URL to your MCP client configuration (Claude Desktop, Cursor, VS Code, etc.). The URL format is: https://mcp.mcpbundles.com/bundle/smartlead. Authentication is handled automatically.

How many tools does Smartlead provide?

Smartlead provides 33 tools that can be called by AI agents, along with a SKILL.md that gives your AI agent domain knowledge about when and how to use them.

What authentication does Smartlead require?

Smartlead uses API Key or One-click sign in. Smartlead requires credentials. Connect via MCPBundles and authentication is handled automatically.

Setup Instructions

Connect Smartlead to any MCP client in minutes

MCP URLhttps://mcp.mcpbundles.com/bundle/smartlead

One-click install:

The link prefills the Add custom connector dialog — you still review the values and click Add, then Connect to complete OAuth.

Or add manually

  1. Open claude.ai → Settings → Connectors.
  2. Click the + button and choose Add custom connector.
  3. Set Name to Smartlead and paste the MCP URL into Remote MCP server URL.
  4. Click Add. Smartlead will appear under Not connected — select it and click Connect to complete OAuth.
Name: Smartlead
Remote MCP server URL: https://mcp.mcpbundles.com/bundle/smartlead
Authentication: OAuth

Custom connectors at claude.ai require a paid Claude plan (Pro, Max, Team, or Enterprise).

Ready to use Smartlead?

Sign in to connect your credentials and start running tools from the chat.

Smartlead MCP Server & Skill — 33 Tools