For developers & AI agents

MCP Server for LinkedIn

The official MCP server for LinkedIn automation. Connect Claude, ChatGPT or Cursor to Salesbot and run lead search, campaigns and outreach in natural language.

  • The only LinkedIn MCP server with native support for Claude, ChatGPT and Cursor
  • Lead search, campaigns and AI draft approvals via natural language
  • Respects daily limits, allowed hours, blacklist and stop-on-reply

Quick setup in Claude Desktop / Cursor

Paste the following config into your MCP client settings. Generate the MCP API key in the Salesbot app under the MCP API section.

{
  "mcpServers": {
    "linkedin-automation": {
      "url": "https://app.salesbot.cz/api/mcp",
      "headers": {
        "x-mcp-api-key": "sb_mcp_<YOUR_API_KEY>",
        "Accept": "application/json, text/event-stream"
      }
    }
  }
}

Available tools

Search & Discovery

search_linkedin_peopleSearches people on LinkedIn by keywords, title, location or company. Results are saved straight into your contacts (with dedup and blacklist filtering) and the tool returns IDs that the AI uses in other tools.
search_google_xrayGoogle X-Ray search — queries public LinkedIn profiles through Google operators (site:linkedin.com/in). Useful when you don't want to burn LinkedIn limits. Paginates up to 15 pages of 100 results, auto-filters duplicates and the blacklist.
search_linkedin_navigatorRuns a Sales Navigator (or regular LinkedIn) search URL scrape. You pass a ready-made URL (filters already set) and Salesbot walks through it, saves leads into contacts and returns their IDs.

Contacts & Profiles

get_contact_profileReturns the complete contact profile from the database — name (with vocative), headline, company, role, location, language, campaign status, interaction history. Serves as AI context for writing personalized messages or deciding the next step.
list_contactsLists your contacts with ID, name, company and current status (e.g. invite_sent, connected, replied). Supports filtering by lead list or campaign. The AI picks IDs from this list for other tools.

Campaigns & Outreach

list_campaignsLists your campaigns with ID, name, status (draft/running/paused) and lead counts. The AI draws campaign_id from here when adding leads, generating messages or approving drafts.
add_contacts_to_campaignAdds selected contacts (by ID) to an existing campaign. Domain/company blacklist, duplicate check and manual exclusion are applied automatically. After adding, Salesbot schedules campaign steps (visit → connect → message) based on the template and daily limits.
send_linkedin_messageSends a one-off LinkedIn message to a specific contact outside a campaign. A random 30–180 s delay before sending for anti-detection. The action counts toward the daily message limit and is saved to the interaction history.
send_connection_requestSends a LinkedIn connection invitation. The message is always empty (no text) — this is the set policy to prevent account blocking, regardless of account type (free or premium). The action counts toward the daily invitation limit.

AI drafts & Approvals

generate_campaign_messageGenerates an AI message draft (Gemini) for a specific contact and campaign step based on the template and lead profile. The message is NOT sent — it is saved as a draft with 'pending_approval' status and waits for approval (e.g. via Claude/GPT or manually).
list_pending_approvalsReturns a list of all AI drafts waiting for approval — for each draft returns the contact's name, headline, company and generated text. Serves as input for bulk review by an AI assistant (Claude/GPT), which can go through the drafts and decide to approve/reject.
approve_messageApproves a draft and hands it to the executor for sending within a campaign (respecting daily limits and allowed hours). Text can optionally be edited before approval. Parameter skip_gpt_check=false additionally runs a second check via gpt-5-nano — if GPT rejects the message, the draft is automatically returned to Gemini for rework based on GPT feedback.
reject_messageRejects a draft with text feedback (e.g. 'too formal, cut to 2 sentences'). Salesbot marks the draft as rejected and Gemini generates a new version based on your feedback, which again waits for approval.

Campaign management

create_campaignCreates a NEW campaign (saved as 'draft', not started automatically). You provide a name, profile and ordered steps (connect/message/visit, delays, AI prompts). Returns campaign_id; leads are then added via add_contacts_to_campaign.
update_campaign_settingsUpdates settings of an existing campaign: name, description, daily limit, sender_context, auto-approve or status (paused/running). Only changes provided fields.
start_campaignStarts (activates) an existing campaign — schedules actions for its contacts and sets status 'running'. The campaign must have contacts and steps. Respects daily limits, allowed hours and anti-detection delays.
stop_campaignStops a running campaign — sets status 'stopped' and cancels pending scheduled actions. For a temporary pause use update_campaign_settings with status='paused'.

Inbox & Replies

list_inbox_chatsLists recent LinkedIn conversations (inbox) in real time — returns chat ID, the other party, unread count and time of the last message.
get_chat_messagesLoads messages of a single LinkedIn conversation in real time (newest at the bottom). is_sender=true marks messages sent by you. Serves as context before writing a reply.
reply_to_chatSends a reply to an existing conversation (by chat_id). Sent immediately, but the text is first checked for prompt-injection and unwanted links (the incoming message is untrusted). Maximum 2 AI replies per thread (overload protection) and counts toward the daily message limit.
mark_chat_readMarks a LinkedIn conversation as read (by chat_id) — so the thread doesn't reappear as unread after the AI processed it.

Posts, limits & web

publish_linkedin_postCreates a LinkedIn post on behalf of a connected profile. By default the post is saved as a 'draft' on the LinkedIn Posts page where the user can review and publish it. With auto_publish=true the post is published immediately — but only when MCP human-in-the-loop approval is OFF; otherwise it stays as a draft and the user publishes it from the app. A random 30–180 s anti-detection delay is applied before the publish call. Image attachments must be added in the in-app post editor.
get_daily_limitsCheck a profile's remaining daily quota — current usage vs limits, ramp-up status, allowed hours and whether actions are currently allowed.
scrape_websiteLoads readable text from a public web page so the AI can use it as context when writing/editing messages (e.g. a prospect's website). Returns plain text (no HTML, truncated) and contact emails found (emails_found, incl. mailto links). Weekly limit on the number of sites; internal/private addresses are rejected.

LinkedIn account

get_linkedin_statusChecks whether your LinkedIn account is connected and active, and if not, how to fix it. The AI calls this first when another tool reports the account isn't connected.
connect_linkedinGenerates a secure link with a custom domain that you open to connect (or reconnect) your LinkedIn account — no need to leave the chat.

CRM

set_deal_stageMoves a lead through your CRM pipeline (stages are configurable — default: Prospect → Contacted → Demo → Won → Lost) and records the change in history. The AI uses it when you confirm a real-world event ('they booked a demo').
log_crm_noteSaves a structured summary of a conversation to the lead's CRM record — a concise recap, the prospect's pain points and overall sentiment — so future follow-ups stay personalized.
create_taskCreates a follow-up task, optionally linked to a lead and with a due date (Pro plan). Turns 'remind me to send pricing on Thursday' into a tracked task.
get_lead_contextReturns the full CRM context for a lead before writing a pitch: profile, current pipeline stage, recent conversation summaries, open tasks, recent LinkedIn interactions and stage history.
export_crmExports your entire CRM (leads with pipeline stage and key fields) as CSV so you can back it up or open it in Excel.
update_contactUpdates a lead's contact details – email, phone, location, company, role or headline. Use it to enrich a lead (e.g. saving a found email). Only fields you provide are changed.
list_tasksLists your CRM tasks – filter by status (open/done/cancelled) and/or a specific lead. Returns id, name, due date, status and the linked lead's name so the AI can see open follow-ups.
complete_taskMarks a CRM task as done (or reopens/cancels it) by task_id. Use after finishing a follow-up.
list_crm_stagesLists CRM pipeline stages (key, label, colour) and how many leads are in each. Stages are configurable.
add_crm_stageAdds a new pipeline stage (e.g. 'Negotiation') with an optional colour. Appended to the end of the pipeline.
rename_crm_stageRenames a stage label and/or changes its colour by key. The stage key and leads in it remain unchanged.
delete_crm_stageDeletes a pipeline stage; its leads are moved to another stage (reassign_to or the first remaining one).
list_crm_fieldsLists custom fields defined on CRM leads (key, label, type).
add_crm_fieldAdds a custom field to CRM leads (e.g. 'Budget' of type number). Types: text, number, date, url.
delete_crm_fieldRemoves a custom field definition by key.
set_lead_fieldsSets values of custom fields on a lead (by contact_id) – e.g. budget, renewal date. Only defined keys are accepted.

Try the MCP server for free

14 days free, no credit card. Full access to the MCP server and the entire platform.

Start 14-day free trial