Lemlist MCP connector
OAuth 2.1/DCRMarketingCRM & SalesConnect to Lemlist MCP. Manage outbound sales campaigns, leads, email sequences, and LinkedIn outreach from your AI workflows.
Lemlist MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'lemlistmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Lemlist MCP:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'lemlistmcp_check_domain_health',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "lemlistmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Lemlist MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="lemlistmcp_check_domain_health",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Readiness validate campaign — Validate that a campaign is ready to launch by checking step content, sender configuration, DNS health, and daily limits
- Update settings, sequence step, lead variables — Update settings for a campaign or warmup mailbox entity
- Account test email, disconnect email, connect email — Test SMTP/IMAP connectivity of an email account
- State set campaign — Start, pause, archive, or unarchive a campaign to change its running state
- Senders set campaign — Assign team members as senders for a campaign’s outreach messages
- Send message — Send a message to a contact or lead via email, LinkedIn, WhatsApp, or SMS from the Lemlist inbox
Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
lemlistmcp_add_contacts_to_list#Add existing CRM contacts to a contact list by list ID.2 params
Add existing CRM contacts to a contact list by list ID.
contactIdsarrayrequiredContact IDs to add to the list (max 1,000)listIdstringrequiredTarget contact list ID in clt_xxx format. Get valid IDs from get_contact_lists.lemlistmcp_add_leads_to_campaign#Add one or more leads (max 100) to a campaign. Each lead requires at least one identifying field such as email, first name, last name, or company name.7 params
Add one or more leads (max 100) to a campaign. Each lead requires at least one identifying field such as email, first name, last name, or company name.
campaignIdstringrequiredThe campaign ID (starts with cam_)leadsarrayrequiredLeads to add (1..100). Each lead must have at least one identifying field.deduplicatebooleanoptionalAvoid duplicates across campaigns (default: false). When true, existing leads in OTHER campaigns are reported as outcome="skippedDuplicateCrossCampaign".findEmailbooleanoptional⚠️ COSTS CREDITS per lead: Find email address from other lead data (LinkedIn, name, company)findPhonebooleanoptional⚠️ COSTS CREDITS per lead: Find phone number from other lead datalinkedinEnrichmentbooleanoptional⚠️ COSTS CREDITS per lead: Enrich each lead with LinkedIn profile data (job title, company info, etc.)verifyEmailbooleanoptional⚠️ COSTS CREDITS per lead: Verify if the email address is valid and deliverablelemlistmcp_add_sequence_step#Add a step to an existing campaign sequence. Use only for modifying already-created campaigns — not for initial campaign creation.19 params
Add a step to an existing campaign sequence. Use only for modifying already-created campaigns — not for initial campaign creation.
campaignIdstringrequiredCampaign ID (cam_xxx)delaynumberrequiredDays to wait after previous step. Must be 0 for "sendToAnotherCampaign" (the lemlist API does not accept a delay for this type, transfer is immediate).sequenceIdstringrequiredSequence ID (seq_xxx)userConfirmedbooleanrequiredMust be true after user confirmsaltMessagestringoptionalAlternative message variation for "linkedinSend" steps (used as second-attempt content when applicable).conditionKeystringoptionalCondition to check (REQUIRED when type is "conditional"). E.g. emailsOpened, linkedinInviteAccepted.delayTypestringoptionalREQUIRED for all conditional steps. "within" = must happen within delay days, "waitUntil" = wait indefinitely. For field-check conditions (hasEmailAddress, hasLinkedinUrl, etc.), use "within" with delay 0.emailStatusFilterarrayoptionalOnly for hasEmailAddress condition. Filter by email verification status. E.g. ["deliverable"] to only match leads with deliverable email. Omit to check if any email exists.indexnumberoptionalZero-based position where to insert the step (0 = first). Omit to append at the end. Use to insert warm-up steps before an existing step (e.g. Like + Comment before an Invite).messagestringoptionalMessage content (REQUIRED when type is "email", "linkedinSend", "whatsappMessage" or "sms"; OPTIONAL but recommended for "linkedinInvite"). For emails: the HTML body. For LinkedIn/WhatsApp/SMS/tasks: the message text.methodstringoptionalREQUIRED when type="api". HTTP method (GET or POST) used by the webhook call. Limited to GET/POST to stay iso with the lemlist UI editor.recordModestringoptionallinkedinVoiceNote only: "ai" generates audio from text via ElevenLabs (user adds the text after); "manual" (default) requires user-recorded audio after step creation.scoreComparatorstringoptionalOnly for hasScore condition. "$gte" = score is above or equal to threshold, "$lt" = score is below threshold. Defaults to "$gte".scoreThresholdnumberoptionalOnly for hasScore condition. Score threshold value (0-100). Defaults to 80.subjectstringoptionalEmail subject line. Required for the first email; omit for follow-ups to send as reply thread. Supports Liquid syntax: {{ firstName }}, {% if condition %}...{% endif %}targetCampaignIdstringoptionalREQUIRED when type is "sendToAnotherCampaign". Target campaign ID (cam_xxx) the lead is moved to. Must belong to the same team as the parent campaign and not be archived. Avoid cycles (A -> B -> A).titlestringoptionalTask title (for manual/phone steps). Short label displayed in the review UI.typestringoptionalType of step. Use "conditional" for branching based on lead behavior, "sendToAnotherCampaign" to move a lead to another campaign, "api" to fire an outbound HTTP webhook (provide method and url).urlstringoptionalREQUIRED when type="api". Webhook URL fired during sequence execution. Supports Liquid templating against lead variables (e.g. https://example.com/leads/{{ _id }}). For POST, the request body is automatically the lead data; custom bodies and custom headers are not supported.lemlistmcp_add_unsubscribe#Add email to unsubscribe blocklist. Blocks all future campaign sends. Use delete_unsubscribe to reverse.1 param
Add email to unsubscribe blocklist. Blocks all future campaign sends. Use delete_unsubscribe to reverse.
emailstringrequiredThe email address to add to the unsubscribe listlemlistmcp_bulk_enrich_data#Enrich up to 500 contacts with additional data in a single call. Returns a dataRef for polling results asynchronously.1 param
Enrich up to 500 contacts with additional data in a single call. Returns a dataRef for polling results asynchronously.
itemsarrayrequiredArray of enrichment items (max 500)lemlistmcp_bulk_get_enrichment_results#Poll the results of one or more enrichment jobs. Provide a dataRef from bulk_enrich_data or a nextPollRef from a previous poll.2 params
Poll the results of one or more enrichment jobs. Provide a dataRef from bulk_enrich_data or a nextPollRef from a previous poll.
dataRefstringoptionaldataRef from bulk_enrich_data (first poll) OR nextPollRef from a previous poll result (subsequent polls). Mutually exclusive with enrichmentIds.enrichmentIdsarrayoptionalArray of enrichment IDs to poll (1-500, enr_xxx format). Mutually exclusive with dataRef.lemlistmcp_call_api#Make a direct call to the Lemlist API using a specified endpoint and method. Requires load_skill('api-reference') to be called first in the session.4 params
Make a direct call to the Lemlist API using a specified endpoint and method. Requires load_skill('api-reference') to be called first in the session.
endpointstringrequiredAPI endpoint path starting with /api/methodstringrequiredHTTP methodbodyobjectoptionalRequest body for POST/PUT/PATCH (optional)confirmedbooleanoptionalSet to true after user confirms a write/delete actionlemlistmcp_check_domain_health#Check DNS health for email sending domains (MX, SPF, DMARC, blacklists). Returns score (0-100), per-check status, and DNS fix records.3 params
Check DNS health for email sending domains (MX, SPF, DMARC, blacklists). Returns score (0-100), per-check status, and DNS fix records.
domainstringoptionalDomain to check (e.g. example.com). If omitted, checks domains from team members.mailboxIdstringoptionalMailbox ID to check DNS for.scopestringoptionalCheck scope: user (current user) or team (all members). Default: team.lemlistmcp_connect_email_account#Connect a custom SMTP/IMAP email account for sending and receiving emails in Lemlist campaigns.12 params
Connect a custom SMTP/IMAP email account for sending and receiving emails in Lemlist campaigns.
imap_hoststringrequiredIMAP server hostname (e.g., "imap.company.com")imap_loginstringrequiredIMAP authentication login (usually the email address)imap_passwordstringrequiredIMAP authentication password or app passwordimap_portnumberrequiredIMAP server port (typically 993 for TLS)sender_emailstringrequiredEmail address to send from (e.g., "john@company.com")sender_namestringrequiredDisplay name for the sender (e.g., "John Doe")smtp_hoststringrequiredSMTP server hostname (e.g., "smtp.company.com")smtp_loginstringrequiredSMTP authentication login (usually the email address)smtp_passwordstringrequiredSMTP authentication password or app passwordsmtp_portnumberrequiredSMTP server port (typically 587 for TLS or 465 for SSL)imap_securebooleanoptionalOptional: Use TLS for IMAP connection (default: true)smtp_securebooleanoptionalOptional: Use TLS for SMTP connection (default: true)lemlistmcp_create_campaign_from_proposal#Create a campaign from a previously validated sequence proposal. Requires a proposal ID generated by propose_sequence.5 params
Create a campaign from a previously validated sequence proposal. Requires a proposal ID generated by propose_sequence.
sequenceItemIdstringrequiredWorkspace item id of the validated sequence (from propose_sequence)userConfirmedbooleanrequiredMust be true after the user explicitly approves campaign creationemojistringoptionalOptional emoji for the campaignnamestringoptionalCampaign name (defaults to the sequence proposal name)timezonestringoptionalTimezone for the campaign (e.g. Europe/Paris)lemlistmcp_create_campaign_with_sequence#Create campaign. If subject AND body are provided, creates the first email step. If omitted, creates an empty sequence (use add_sequence_step to add a condition or any step type as the first step). Call add_sequence_step for each additional step. Supports Liquid syntax.5 params
Create campaign. If subject AND body are provided, creates the first email step. If omitted, creates an empty sequence (use add_sequence_step to add a condition or any step type as the first step). Call add_sequence_step for each additional step. Supports Liquid syntax.
namestringrequiredThe name of the campaignbodystringoptionalEmail body content for the first email (supports Liquid syntax). Omit both subject and body to create campaign without a first step.emojistringoptionalOptional emoji for the campaign (e.g., 🚀, 💎, 🔥)subjectstringoptionalSubject line for the first email (supports Liquid syntax). Omit both subject and body to create campaign without a first step (e.g. when first step is a condition).timezonestringoptionalTimezone for the campaign (e.g., Europe/Paris, America/New_York)lemlistmcp_create_contact_list#Create a new static contact list in the CRM to organize and group contacts.1 param
Create a new static contact list in the CRM to organize and group contacts.
namestringrequiredName of the contact list to create (max 200 characters)lemlistmcp_create_or_update_company#Create a new company in the user's Lemlist company database, or update an existing one (upsert). Requires both a name AND a domain. If a company with the same domain, LinkedIn URL, or Sales Navigator URL already exists, it will be updated instead of creating a duplicate. Returns the company data and whether it was created or updated.8 params
Create a new company in the user's Lemlist company database, or update an existing one (upsert). Requires both a name AND a domain. If a company with the same domain, LinkedIn URL, or Sales Navigator URL already exists, it will be updated instead of creating a duplicate. Returns the company data and whether it was created or updated.
domainstringrequiredCompany domain (required)namestringrequiredCompany name (required)companyOwnerstringoptionalCompany owner email or user ID (usr_xxx format)industrystringoptionalCompany industrylinkedinUrlstringoptionalCompany LinkedIn profile URLlinkedinUrlSalesNavstringoptionalCompany LinkedIn Sales Navigator URL (used as an additional matching key for upsert)locationstringoptionalCompany location or addresspicturestringoptionalCompany logo URLlemlistmcp_create_or_update_contact#Create a new contact in the user's Lemlist contact database, or update an existing one (upsert). Requires at least an email OR linkedinUrl as identifier. If a contact with the same email or LinkedIn URL already exists, it will be updated instead of creating a duplicate. Returns the contact data and whether it was created or updated. Use search_contacts first to check if the contact already exists.14 params
Create a new contact in the user's Lemlist contact database, or update an existing one (upsert). Requires at least an email OR linkedinUrl as identifier. If a contact with the same email or LinkedIn URL already exists, it will be updated instead of creating a duplicate. Returns the contact data and whether it was created or updated. Use search_contacts first to check if the contact already exists.
companyDomainstringoptionalCompany domain to link the contact to a company (alternative to companyId)companyIdstringoptionalCompany ID to associate the contact withcompanyLinkedinUrlstringoptionalCompany LinkedIn URL to link the contact to a company (alternative to companyId)contactOwnerstringoptionalContact owner email or user ID (usr_xxx format)emailstringoptionalContact email address (required if linkedinUrl is not provided)firstNamestringoptionalContact first namejobDescriptionstringoptionalContact job descriptionjobTitlestringoptionalContact job titlelastNamestringoptionalContact last namelinkedinUrlstringoptionalContact LinkedIn profile URL (required if email is not provided)phonestringoptionalContact phone numberpicturestringoptionalContact profile picture URLsalesnavUrlstringoptionalContact LinkedIn Sales Navigator URL (used as an additional matching key for upsert)timezonestringoptionalContact timezonelemlistmcp_create_webhook#Create a webhook for real-time campaign activity notifications. Max 200 per account, no duplicate URLs. Filter by activity type (emailsSent, emailsOpened, emailsReplied, etc.) and/or campaignId.5 params
Create a webhook for real-time campaign activity notifications. Max 200 per account, no duplicate URLs. Filter by activity type (emailsSent, emailsOpened, emailsReplied, etc.) and/or campaignId.
targetUrlstringrequiredThe webhook URL to call (must start with http:// or https://)campaignIdstringoptionalOptional: Filter to call webhook only for specific campaign (e.g., "cam_xxx")isFirstbooleanoptionalOptional: Call webhook only for first activity of this typetypestringoptionalOptional: Filter to call webhook only for specific activity types (e.g., "emailsReplied", "emailsSent")zapIdstringoptionalOptional: Zapier integration IDlemlistmcp_delete_company#Permanently delete a company record from Lemlist. Only removes the Lemlist record — does not affect any connected CRM.3 params
Permanently delete a company record from Lemlist. Only removes the Lemlist record — does not affect any connected CRM.
companyIdstringrequiredLemlist company ID to delete (cpn_xxx).userConfirmedbooleanrequiredREQUIRED: Must be true. Confirms user explicitly approved this deletion. Only set to true after user says yes.forcebooleanoptionalWhen true, detaches any attached contacts (unsets their companyId) before deleting the company.lemlistmcp_delete_memory#Delete a stored memory entry by topic so it is no longer recalled in future conversations.2 params
Delete a stored memory entry by topic so it is no longer recalled in future conversations.
topicstringrequiredThe topic key to delete (e.g. "preferred_tone")scopestringoptionalScope: "user" (default) or "team"lemlistmcp_delete_sequence_step#Delete a step from a campaign sequence. Use only when removing a step added by mistake — requires user confirmation.4 params
Delete a step from a campaign sequence. Use only when removing a step added by mistake — requires user confirmation.
campaignIdstringrequiredThe campaign ID (required for status verification)sequenceIdstringrequiredThe sequence ID (starts with seq_)stepIdstringrequiredThe step ID to delete (starts with stp_)userConfirmedbooleanrequiredREQUIRED: Must be true. Confirms user explicitly approved this deletion. Only set to true after user says yes.lemlistmcp_delete_unsubscribe#Remove an email address from the unsubscribe list, allowing it to be contacted again in future campaigns.2 params
Remove an email address from the unsubscribe list, allowing it to be contacted again in future campaigns.
emailstringrequiredThe email address to remove from the unsubscribe listconfirmedbooleanoptionalNEVER set this to true on first call. Only set to true after the user has explicitly confirmed the action (e.g. via ask_question).lemlistmcp_delete_watch_list#Delete a watch list and immediately stop processing signals for it.2 params
Delete a watch list and immediately stop processing signals for it.
watchListIdstringrequiredThe watch list ID to delete (wat_xxx format)confirmedbooleanoptionalSet to true only after the user has explicitly confirmed the deletion (e.g. via ask_question).lemlistmcp_delete_webhook#Delete a webhook from your Lemlist account, stopping all notifications to that endpoint immediately.2 params
Delete a webhook from your Lemlist account, stopping all notifications to that endpoint immediately.
webhookIdstringrequiredThe webhook ID to delete (starts with hoo_)confirmedbooleanoptionalSet to true only after the user has explicitly confirmed the deletion (e.g. via ask_question).lemlistmcp_disconnect_email_account#Disconnect email account. Stops sending immediately. Cannot be undone. Use get_user_channels to find account ID.2 params
Disconnect email account. Stops sending immediately. Cannot be undone. Use get_user_channels to find account ID.
emailAccountIdstringrequiredThe email account ID to disconnect (starts with usm_)confirmedbooleanoptionalSet to true only after the user has explicitly confirmed the disconnection (e.g. via ask_question).lemlistmcp_enrich_lead#Enrich existing campaign lead. ASYNC — poll with bulk_get_enrichment_results (pass enrichmentIds: [id]). For non-campaign contacts use bulk_enrich_data. ALL options COST CREDITS.5 params
Enrich existing campaign lead. ASYNC — poll with bulk_get_enrichment_results (pass enrichmentIds: [id]). For non-campaign contacts use bulk_enrich_data. ALL options COST CREDITS.
leadIdstringrequiredThe lead ID to enrich (starts with lea_)findEmailbooleanoptional⚠️ COSTS CREDITS: Find email from lead datafindPhonebooleanoptional⚠️ COSTS CREDITS: Find phone numberlinkedinEnrichmentbooleanoptional⚠️ COSTS CREDITS: Enrich with LinkedIn dataverifyEmailbooleanoptional⚠️ COSTS CREDITS: Verify lead emaillemlistmcp_get_campaign_details#Get configuration and settings for ONE campaign (timezone, emoji, labels, senders, sequences). For metrics use get_campaigns_stats, for email content use get_campaign_sequences.1 param
Get configuration and settings for ONE campaign (timezone, emoji, labels, senders, sequences). For metrics use get_campaigns_stats, for email content use get_campaign_sequences.
campaignIdstringrequiredThe campaign ID (cam_xxx format)lemlistmcp_get_campaign_sequences#Get the email sequences and their content (subject, body) for a specific campaign. Useful for reviewing copywriting and email flow.1 param
Get the email sequences and their content (subject, body) for a specific campaign. Useful for reviewing copywriting and email flow.
campaignIdstringrequiredThe campaign ID (cam_xxx format)lemlistmcp_get_campaigns#List campaigns with optional search, filtering by labels, and sorting.7 params
List campaigns with optional search, filtering by labels, and sorting.
createdBystringoptionalFilter by creator user ID (usr_xxx format). Use your own user ID from Context to find campaigns you created.labelsarrayoptionalFilter by labels/tags. OR semantics: returns campaigns matching at least one. Accepts label names ("q2") or IDs ("lab_xxx") — both can be mixed.limitnumberoptionalMaximum number of campaigns to return (default: 20)offsetnumberoptionalNumber of campaigns to skip for pagination (default: 0). Use with limit to paginate through all campaigns.searchstringoptionalSearch campaigns by name (case-insensitive)sortOrderstringoptionalSort by creation date (default: newest first)statusstringoptionalFilter by status. OMIT this parameter to get ALL campaigns regardless of status.lemlistmcp_get_campaigns_reports#Get lifetime stats for MULTIPLE campaigns in one call. Returns metadata, sender info, and 65+ metrics per campaign. No date filtering - for time-based analysis use get_campaigns_stats.1 param
Get lifetime stats for MULTIPLE campaigns in one call. Returns metadata, sender info, and 65+ metrics per campaign. No date filtering - for time-based analysis use get_campaigns_stats.
campaignIdsarrayrequiredArray of campaign IDs to get reports for (e.g., ["cam_xxx", "cam_yyy"])lemlistmcp_get_campaigns_stats#Get detailed stats for one or more campaigns including lead funnel metrics, message counts, and per-step breakdowns.7 params
Get detailed stats for one or more campaigns including lead funnel metrics, message counts, and per-step breakdowns.
campaignIdsarrayrequiredArray of campaign IDs (cam_xxx format)ABSelectedstringoptionalOptional: Filter by A/B test variantchannelsarrayoptionalOptional: Filter stats by channels (mirrors the UI dropdown filter). When provided, both top-level totals and messageMetrics.perChannel are restricted to the requested channels. Omit to get the full breakdown across all 5 channels.endDatestringoptionalEnd date. Either a calendar day "YYYY-MM-DD" (interpreted as end-of-day in the resolved timezone) or a full ISO 8601 datetime with offset (used as-is). Omit for all-time stats.sendUserstringoptionalOptional: Filter by send user (format: usr_xxx|email@example.com)startDatestringoptionalStart date. Either a calendar day "YYYY-MM-DD" (interpreted as start-of-day in the resolved timezone) or a full ISO 8601 datetime with offset like "2026-04-01T00:00:00+05:30" / "2026-04-01T00:00:00Z" (used as-is, the timezone arg is ignored for that bound). Omit for all-time stats.timezonestringoptionalIANA timezone (e.g. "Asia/Kolkata", "America/New_York") used to interpret startDate/endDate ONLY when they are calendar days (YYYY-MM-DD). Ignored for full ISO 8601 datetimes. If omitted, falls back to the calling user's profile.timezone (if set), then to Europe/Paris. To exactly mirror what the Lemlist UI displays, prefer passing the same ISO 8601 strings the UI uses (capture from the campaignReportsTimePeriod session).lemlistmcp_get_contact_lists#Retrieve available CRM contact lists with optional search filtering.1 param
Retrieve available CRM contact lists with optional search filtering.
searchstringoptionalFilter lists by name (case-insensitive)lemlistmcp_get_inbox_conversation#Get the full conversation thread for a specific contact across all channels (email, LinkedIn, WhatsApp, SMS).4 params
Get the full conversation thread for a specific contact across all channels (email, LinkedIn, WhatsApp, SMS).
contactIdstringrequiredThe contact ID (ctc_xxx format) to get the conversation thread for. Do not use leadId or any other ID type.limitnumberoptionalNumber of activities per page (default: 20, max: 50)markAsReadbooleanoptionalWhether to mark the conversation as read (default: false). Note: this mutates state.pagenumberoptionalPage number for pagination (default: 1)lemlistmcp_get_inbox_conversations#List inbox conversations with contact info and last message preview, with optional filtering by list type.5 params
List inbox conversations with contact info and last message preview, with optional filtering by list type.
limitnumberoptionalNumber of conversations per page (default: 20, max: 50)listIdstringoptionalWhich inbox list to fetch: myConversations (default), unRead, favorites, snoozed, archived, sentOnly, teamConversationspagenumberoptionalPage number for pagination (default: 1)searchstringoptionalSearch query to filter conversations by contact name or emailuserIdstringoptionalThe user ID (usr_xxx format). Optional — defaults to the current authenticated user if omitted.lemlistmcp_get_lemleads_filters#Get available filters for People Database searches. Call this FIRST before lemleads_search or display_leads/display_companies. Returns filter IDs with valid values.0 params
Get available filters for People Database searches. Call this FIRST before lemleads_search or display_leads/display_companies. Returns filter IDs with valid values.
lemlistmcp_get_settings#Retrieve settings for a campaign or warmup mailbox entity.2 params
Retrieve settings for a campaign or warmup mailbox entity.
typestringrequiredThe type of settings to retrieve.idstringoptionalEntity ID. Required for "campaign" (cam_xxx) and "lemwarm" (usm_xxx). Ignored for "sending" and "team".lemlistmcp_get_statistics#Retrieve statistics for one or more entities of the same type (lemwarm, campaign, lead, etc.).3 params
Retrieve statistics for one or more entities of the same type (lemwarm, campaign, lead, etc.).
idsarrayrequiredFor "lemwarm": mailbox IDs (usm_xxx) — same ids used with get_settings type="lemwarm". 1-20 items.typestringrequiredThe type of statistics to retrieve. Only "lemwarm" is supported for now.daysnumberoptionalLookback window in days (1-60). Defaults to 30. Applied to every id.lemlistmcp_get_team_info#Get basic team info (ID, name, plan, credits remaining) and minimal identity of the caller (current user id + email). For full user details call get_users with userIds: ["me"] for the caller, userIds: ["all"] for the full member list, or userIds: ["usr_xxx", ...] for one or more team members.0 params
Get basic team info (ID, name, plan, credits remaining) and minimal identity of the caller (current user id + email). For full user details call get_users with userIds: ["me"] for the caller, userIds: ["all"] for the full member list, or userIds: ["usr_xxx", ...] for one or more team members.
lemlistmcp_get_team_overview#Account summary: campaign count by status. Use get_campaigns for the full list with names and details.0 params
Account summary: campaign count by status. Use get_campaigns for the full list with names and details.
lemlistmcp_get_unsubscribes#List unsubscribed emails with pagination. Use delete_unsubscribe to re-enable.2 params
List unsubscribed emails with pagination. Use delete_unsubscribe to re-enable.
limitnumberoptionalMaximum number of unsubscribes to returnoffsetnumberoptionalNumber of unsubscribes to skip (for pagination)lemlistmcp_get_user_channels#Check connected sending channels (email, LinkedIn, WhatsApp). Returns connection status, plan availability, and accounts. WhatsApp requires separate addon purchase. Use show_connect_channel to guide setup (one channel at a time).0 params
Check connected sending channels (email, LinkedIn, WhatsApp). Returns connection status, plan availability, and accounts. WhatsApp requires separate addon purchase. Use show_connect_channel to guide setup (one channel at a time).
lemlistmcp_get_users#Retrieve team member details by user IDs, or pass 'all' to fetch all team members.1 param
Retrieve team member details by user IDs, or pass 'all' to fetch all team members.
userIdsarrayrequiredList of userIds to fetch. Each item is "all" (every team member, lightweight), "me" (caller, full profile), or a usr_xxx id (full profile). 1-20 items.lemlistmcp_get_webhooks#List all configured webhooks. Returns array with _id, targetUrl, createdAt, type, campaignId, isFirst.0 params
List all configured webhooks. Returns array with _id, targetUrl, createdAt, type, campaignId, isFirst.
lemlistmcp_lemleads_search#Search the People Database (450M+ B2B contacts) by people or company. Returns results with total count and pagination.8 params
Search the People Database (450M+ B2B contacts) by people or company. Returns results with total count and pagination.
filtersarrayrequiredArray of filter objects from get_lemleads_filters. Each filter MUST have filterId, in (array), and out (array).modestringrequiredMUST be "people" for contacts or "companies" for organizations. Do NOT use "leads".descriptionstringoptionalProse describing the target company as if you were writing ITS "About us" section (companies mode only, max 1000 chars per string). MUST be 2-4 full sentences each, NOT a keyword list. The embedding index was built on real company descriptions, so keyword-stacked strings ("SaaS treasury cash management tool") score poorly. Write complete sentences: who they are, who they serve, what they do, how. GOOD: "We build treasury management software for mid-market finance teams. Our platform helps CFOs and treasurers automate cash forecasting, consolidate bank accounts, and optimize liquidity across entities." BAD: "SaaS software solution for treasury management cash management". Accepts (a) a single string for the simple case, or (b) an array of up to 3 strings covering different angles (e.g. anchor + product + customer/problem). Multi-angle triggers parallel vector searches with RRF fusion — recommended for niche verticals where one phrasing risks missing matches. Combine with keywords (grouped) and country/headcount filters for narrowing.excludesarrayoptionalFields to exclude from resultskeywordsstringoptionalOptional hybrid BM25 + vector terms (companies mode only). Pass as GROUPS whenever possible — each group is a category of signal, and the document must match at least one term per group (AND-of-ORs). Grouping is how you force "editor, not consultancy": one group for the domain, one for the product-type marker. Example for "French SaaS treasury editors": [["treasury management", "cash forecasting", "gestion de trésorerie", "prévisions de trésorerie"], ["software", "SaaS", "logiciel", "platform", "plateforme"]]. A flat string[] is still accepted as a single implicit group (all terms OR-matched, any one hit passes). Keep groups small (2-5 terms each), max 5 groups.pagenumberoptional1-based page index (default: 1)seedstringoptionalRandom seed for consistent ordering. Must be a STRING like "abc123", not a number.sizenumberoptionalResults per page (default: 10, max: 100)lemlistmcp_list_watch_lists#List watch lists for the current team with optional type, status, and pagination filters.4 params
List watch lists for the current team with optional type, status, and pagination filters.
limitintegeroptionalMax watch lists per page (default 50, max 100)pageintegeroptionalPage number (1-based, default 1)statusstringoptionalComma-separated list of statuses to filter. Accepted values: active, inactive, draft, insufficient_credits, empty_crm_lists, error. Excludes soft-deleted by default.typestringoptionalComma-separated list of watch list types (e.g. "companyIsHiring,jobChange")lemlistmcp_load_skill#Load specialized guidance for a specific domain (e.g. campaign-builder, api-reference) to assist with complex tasks.2 params
Load specialized guidance for a specific domain (e.g. campaign-builder, api-reference) to assist with complex tasks.
skillNamestringrequiredName of the skill to loadsectionstringoptionalOptional: specific reference section to loadlemlistmcp_preview_sequence_update#SAFE READ-ONLY: Preview what would change in an email sequence step before applying modifications. Shows current vs proposed content and campaign status. Must call this before update_sequence_step.5 params
SAFE READ-ONLY: Preview what would change in an email sequence step before applying modifications. Shows current vs proposed content and campaign status. Must call this before update_sequence_step.
campaignIdstringrequiredCampaign ID (cam_xxx)sequenceIdstringrequiredSequence ID (seq_xxx)stepIdstringrequiredStep ID (stp_xxx)newMessagestringoptionalProposed new message bodynewSubjectstringoptionalProposed new subject linelemlistmcp_push_leads_to_contacts#Push leads from the People Database into your CRM contacts, optionally adding them to a contact list.3 params
Push leads from the People Database into your CRM contacts, optionally adding them to a contact list.
profileIdsarrayrequiredPeople Database lead IDs to push to contacts (max 1,000)enrichFeaturesarrayoptional⚠️ COSTS CREDITS: Enrichment features to apply when pushing leadslistIdstringoptionalTarget contact list ID in clt_xxx format. Omit to push to "all contacts". Get valid IDs from get_contact_lists — never invent or pass aliases like "all".lemlistmcp_recall_memory#Retrieve stored memories from previous conversations to restore context about user preferences or past decisions.1 param
Retrieve stored memories from previous conversations to restore context about user preferences or past decisions.
topicstringoptionalExact topic key to retrieve (e.g. "preferred_tone"). Omit to retrieve all memories.lemlistmcp_report_unsupported_case#Report a feature request or unsupported use case to the product team. Use this ONLY when the user's request is something lemlist should support but the copilot cannot do yet, AND the user has agreed to have their feedback reported. Do NOT use for off-topic requests unrelated to lemlist. Always provide inputs in English, translate if needed.2 params
Report a feature request or unsupported use case to the product team. Use this ONLY when the user's request is something lemlist should support but the copilot cannot do yet, AND the user has agreed to have their feedback reported. Do NOT use for off-topic requests unrelated to lemlist. Always provide inputs in English, translate if needed.
descriptionstringrequiredWhat the user asked for that is not supported yet (MUST be in English)conversationContextstringoptionalBrief summary of the conversation context leading to this request (MUST be in English)lemlistmcp_save_business_context#Save the user business context for future conversations. Use this after collecting company information from the user to remember it across conversations.9 params
Save the user business context for future conversations. Use this after collecting company information from the user to remember it across conversations.
companyNamestringrequiredCompany namemainActivitystringoptionalWhat the company doespainPointsSolvedarrayoptionalPain points the company solves for customersshortDescriptionstringoptionalCompany and offering summarytargetCompanySizesarrayoptionalTarget sizes (1-10, 11-50, etc.)targetIndustriesarrayoptionalTarget industriestargetJobTitlesarrayoptionalTarget job titlesvaluePropositionstringoptionalMain value proposition of the companywebsiteUrlstringoptionalWebsite URLlemlistmcp_save_memory#Save a piece of information to persistent memory so it can be recalled in future conversations.3 params
Save a piece of information to persistent memory so it can be recalled in future conversations.
contentstringrequiredThe information to remember (max 5000 chars, in the user language)topicstringrequiredUnique topic key in snake_case english (e.g. "preferred_tone", "icp_details", "campaign_naming")scopestringoptionalScope: "user" (default, personal) or "team" (shared with all team members)lemlistmcp_search_campaign_leads#Find leads in your campaigns by email, lead ID, or by listing all leads in a campaign.5 params
Find leads in your campaigns by email, lead ID, or by listing all leads in a campaign.
campaignIdstringoptionalCampaign ID. Required when listing all leads (no email/id). Optional filter when searching by email/id.emailstringoptionalLead email address to search foridstringoptionalLead ID to search for (alternative to email)limitnumberoptionalMax leads to return (default: 50, max: 100).offsetnumberoptionalPagination offset (default: 0). Use nextOffset from a previous result to load more.lemlistmcp_search_companies#Search your team's Lemlist companies. Returns a paginated list with each company's id, domain, name, owner, and a curated `crmSync` block describing how the record is synced to your active CRM (Hubspot, Salesforce, or Pipedrive). Use the `crmSyncStatus` filter to find companies in a specific sync state — most notably `unique_index_error_company` to list lemlist companies blocked from syncing because another lemlist company already occupies their CRM record. For each result in that state, look at `crmSync.errors[].metadata.alreadyExistingCompanyId` — that is the canonical lemlist company you should remap contacts to before deleting the duplicate (see `search_contacts` with companyId, then `delete_company`).6 params
Search your team's Lemlist companies. Returns a paginated list with each company's id, domain, name, owner, and a curated `crmSync` block describing how the record is synced to your active CRM (Hubspot, Salesforce, or Pipedrive). Use the `crmSyncStatus` filter to find companies in a specific sync state — most notably `unique_index_error_company` to list lemlist companies blocked from syncing because another lemlist company already occupies their CRM record. For each result in that state, look at `crmSync.errors[].metadata.alreadyExistingCompanyId` — that is the canonical lemlist company you should remap contacts to before deleting the duplicate (see `search_contacts` with companyId, then `delete_company`).
crmSyncStatusstringoptionalFilter by CRM sync status. Requires a CRM (Hubspot, Salesforce, Pipedrive) to be connected on the team — otherwise the call returns NO_CRM_CONNECTED.limitnumberoptionalMax companies per page (1-100, default 100).pagenumberoptionalPage number (1-based, default 1).searchstringoptionalFree-text search on the company name (case insensitive, accent insensitive).sortBystringoptionalSort field (default `createdAt`).sortOrderstringoptionalSort direction (default `desc`).lemlistmcp_search_contacts#Search or list your team's Lemlist contacts by name, email, contact list, or attached company. Returns matching contacts with their details (ID, name, email, phone, job title, company, campaign count). All filters are optional — calling the tool without any filter returns the paginated list of all contacts of the team (useful for discovery, e.g. obtaining a Record ID before associating it with another resource). Use this to find if a contact already exists in Lemlist before creating a new one. You can filter by a specific contact list using listId (get valid IDs from get_contact_lists first). Use notInAnyCampaign=true to find contacts that are not part of any campaign (orphan contacts). To list contacts attached to a given company, use companyId (cpn_xxx) or one of companyDomain / companyLinkedinUrl / companySalesnavUrl — only one company* filter at a time. URL/domain filters return an empty list if no company matches. For searching leads WITHIN campaigns, use search_campaign_leads instead. For prospecting NEW leads from the People Database, use lemleads_search instead.10 params
Search or list your team's Lemlist contacts by name, email, contact list, or attached company. Returns matching contacts with their details (ID, name, email, phone, job title, company, campaign count). All filters are optional — calling the tool without any filter returns the paginated list of all contacts of the team (useful for discovery, e.g. obtaining a Record ID before associating it with another resource). Use this to find if a contact already exists in Lemlist before creating a new one. You can filter by a specific contact list using listId (get valid IDs from get_contact_lists first). Use notInAnyCampaign=true to find contacts that are not part of any campaign (orphan contacts). To list contacts attached to a given company, use companyId (cpn_xxx) or one of companyDomain / companyLinkedinUrl / companySalesnavUrl — only one company* filter at a time. URL/domain filters return an empty list if no company matches. For searching leads WITHIN campaigns, use search_campaign_leads instead. For prospecting NEW leads from the People Database, use lemleads_search instead.
companyDomainstringoptionalFilter contacts by their company's website domain (resolved to a companyId). Empty list if no company matches.companyIdstringoptionalFilter contacts by attached lemlist company ID (cpn_xxx). Mutually exclusive with companyDomain/companyLinkedinUrl/companySalesnavUrl.companyLinkedinUrlstringoptionalFilter contacts by their company's LinkedIn URL (resolved to a companyId). Empty list if no company matches.companySalesnavUrlstringoptionalFilter contacts by their company's LinkedIn Sales Navigator URL (resolved to a companyId). Empty list if no company matches.emailstringoptionalExact email address to search for (takes priority over search parameter)limitnumberoptionalMaximum number of contacts to return (1-100, default: 20)listIdstringoptionalFilter by contact list ID (clt_xxx format). Can be combined with search/email, or used alone to list all contacts in a list. Get valid IDs from get_contact_lists.notInAnyCampaignbooleanoptionalWhen true, only returns contacts that are not part of any campaign. Can be used alone or combined with other filters.offsetnumberoptionalNumber of contacts to skip for pagination (default: 0)searchstringoptionalFree-text search: matches against contact full name or email address (min 2 chars, case-insensitive)lemlistmcp_search_help_center#Search the lemlist help center for official documentation and guides. Use this when you need to provide guidance on how to do something in lemlist that you cannot do directly via tools. Returns relevant help center articles with content excerpts and links. Do NOT use this for questions you can answer from context or tools.1 param
Search the lemlist help center for official documentation and guides. Use this when you need to provide guidance on how to do something in lemlist that you cannot do directly via tools. Returns relevant help center articles with content excerpts and links. Do NOT use this for questions you can answer from context or tools.
querystringrequiredSearch query in English using 1-3 keywords (e.g., "inbox rotation", "email provider", "signals")lemlistmcp_send_message#Send a message to a contact or lead via email, LinkedIn, WhatsApp, or SMS from the Lemlist inbox.11 params
Send a message to a contact or lead via email, LinkedIn, WhatsApp, or SMS from the Lemlist inbox.
channelstringrequiredChannel to send through.messagestringrequiredMessage content (channel-specific format).sendUserIdstringrequiredUser ID sending the message (usr_xxx format).ccarrayoptionalchannel="email": optional list of CC email addresses.contactIdstringoptionalContact ID to send to. Required if leadId is not provided.fromstringoptionalchannel="sms": sender phone number.leadIdstringoptionalLead ID to send to. Alternative to contactId.sendUserEmailstringoptionalchannel="email": email address to send from.sendUserMailboxIdstringoptionalchannel="email": mailbox ID (usm_xxx) to use for sending.sendUserWhatsappAccountIdstringoptionalchannel="whatsapp": WhatsApp account ID (uwa_xxx) to use for sending.subjectstringoptionalchannel="email": email subject line.lemlistmcp_set_campaign_senders#Assign team members as senders for a campaign's outreach messages.2 params
Assign team members as senders for a campaign's outreach messages.
campaignIdstringrequiredCampaign ID (cam_xxx format)senderIdsarrayrequiredArray of user IDs (usr_xxx format) to assign as senders. Get IDs from get_users (userIds: ["all"]).lemlistmcp_set_campaign_state#Start, pause, archive, or unarchive a campaign to change its running state.3 params
Start, pause, archive, or unarchive a campaign to change its running state.
actionstringrequired"start" to launch the campaign, "pause" to pause a running campaign, "archive" to archive a campaign, "unarchive" to restore an archived campaigncampaignIdstringrequiredThe campaign ID (cam_xxx format)userConfirmedbooleanoptionalREQUIRED for action="start" and action="archive": Must be true. Confirms user explicitly approved the action. Not required for pause or unarchive.lemlistmcp_test_email_account#Test SMTP/IMAP connectivity of an email account. No actual email sent. Use get_user_channels to find account ID.1 param
Test SMTP/IMAP connectivity of an email account. No actual email sent. Use get_user_channels to find account ID.
emailAccountIdstringrequiredThe email account ID to test (starts with usm_)lemlistmcp_update_lead#Update standard fields on an existing lead (firstName, lastName, jobTitle, companyName, email, phone, linkedinUrl, picture, timezone, jobDescription, companyDomain). Requires leadId + at least one field to update. For custom variables, use update_lead_variables instead.12 params
Update standard fields on an existing lead (firstName, lastName, jobTitle, companyName, email, phone, linkedinUrl, picture, timezone, jobDescription, companyDomain). Requires leadId + at least one field to update. For custom variables, use update_lead_variables instead.
leadIdstringrequiredThe lead ID (starts with lea_)companyDomainstringoptionalLead company domaincompanyNamestringoptionalLead company nameemailstringoptionalLead email addressfirstNamestringoptionalLead first namejobDescriptionstringoptionalLead job descriptionjobTitlestringoptionalLead job titlelastNamestringoptionalLead last namelinkedinUrlstringoptionalLead LinkedIn profile URLphonestringoptionalLead phone numberpicturestringoptionalLead profile picture URLtimezonestringoptionalLead timezonelemlistmcp_update_lead_variables#Set custom variables on an existing lead (upsert). Requires leadId + variables (key-value pairs of non-empty strings). Automatically handles both updating existing variables and adding new ones. IMPORTANT: Do NOT pass standard lead fields as variables — the following keys are FORBIDDEN and will be rejected: email, firstName, lastName, picture, phone, linkedinUrl, timezone, jobTitle, jobDescription, companyName, companyDomain. To update these fields, use the update_lead tool instead. Empty string values are rejected — omit the variable instead.2 params
Set custom variables on an existing lead (upsert). Requires leadId + variables (key-value pairs of non-empty strings). Automatically handles both updating existing variables and adding new ones. IMPORTANT: Do NOT pass standard lead fields as variables — the following keys are FORBIDDEN and will be rejected: email, firstName, lastName, picture, phone, linkedinUrl, timezone, jobTitle, jobDescription, companyName, companyDomain. To update these fields, use the update_lead tool instead. Empty string values are rejected — omit the variable instead.
leadIdstringrequiredThe lead ID (starts with lea_)variablesobjectrequiredCustom variables as key-value pairs to set (e.g., {"comicFrame": "panel_3", "tone": "friendly"}). Values must be non-empty strings — omit the variable rather than passing an empty string.lemlistmcp_update_sequence_step#Update a step in an existing campaign sequence. Requires user confirmation for email or content step changes.15 params
Update a step in an existing campaign sequence. Requires user confirmation for email or content step changes.
campaignIdstringrequiredThe campaign ID (required for status verification)sequenceIdstringrequiredThe sequence ID (starts with seq_)stepIdstringrequiredThe step ID to update (starts with stp_)userConfirmedbooleanrequiredREQUIRED: Must be true. Confirms user explicitly approved this change after seeing the preview. Only set to true after user says yes.conditionKeystringoptionalNew condition key (for conditional steps only)delaynumberoptionalNew delay value in daysdelayTypestringoptionalNew delay type for conditional steps. "within" = must happen within delay days, "waitUntil" = wait indefinitely. For field-check conditions, use "within" with delay 0.emailStatusFilterarrayoptionalOnly for hasEmailAddress condition. Filter by email status: ["deliverable","risky","undeliverable","unverified"].messagestringoptionalNew email body content (for email steps, supports Liquid syntax)methodstringoptionalNew HTTP method for "api" (webhook) steps. Limited to GET/POST to stay iso with the lemlist UI editor. Ignored on non-api steps.scoreComparatorstringoptionalOnly for hasScore condition. "$gte" = score above or equal, "$lt" = score below.scoreThresholdnumberoptionalOnly for hasScore condition. Score threshold (0-100).subjectstringoptionalNew subject line (supports Liquid syntax: {{ firstName }}, {% if condition %}...{% endif %})titlestringoptionalNew task title (for manual/phone steps). Short label displayed in the review UI.urlstringoptionalNew webhook URL for "api" steps. Supports Liquid templating against lead variables (e.g. https://example.com/leads/{{ _id }}). Ignored on non-api steps.lemlistmcp_update_settings#Update settings for a campaign or warmup mailbox entity.7 params
Update settings for a campaign or warmup mailbox entity.
idstringrequiredEntity ID. For "lemwarm": the mailbox ID (usm_xxx) — the same id used with get_settings type="lemwarm".typestringrequiredThe type of settings to update. Only "lemwarm" is supported for now.actionstringoptionalOptional state change. "start" activates warmup, "pause" stops it. Omit when only updating settings.internalCommunicationPercentnumberoptionalPercentage of warmup emails sent to internal participants (0-100). Only applied when the team has the lemwarmInternalCommunication beta.userConfirmedbooleanoptionalREQUIRED when action="start": must be true after user confirms activating warmup.warmEmailMaxnumberoptionalDaily warmup email target (0-40). Server enforces 1-40 unless the team has the lemwarm0limit beta.warmEmailRampupnumberoptionalRamp-up increment per day (0-40). Server enforces 1-40 unless the team has the lemwarm0limit beta.lemlistmcp_validate_campaign_readiness#Validate that a campaign is ready to launch by checking step content, sender configuration, DNS health, and daily limits.2 params
Validate that a campaign is ready to launch by checking step content, sender configuration, DNS health, and daily limits.
campaignIdstringoptionalCampaign ID (cam_xxx format). Provide this or campaignName.campaignNamestringoptionalCampaign name to search for. Provide this or campaignId.