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": {
        "Authorization": "Bearer <YOUR_MCP_API_KEY>",
        "Accept": "application/json, text/event-stream"
      }
    }
  }
}

Available tools

Search & Discovery

search_linkedin_peopleSearches LinkedIn profiles by keywords, job title, location or company. Results are saved straight to your contacts (with deduplication and blacklist check) and IDs are returned for the AI to use in other tools.
search_google_xrayGoogle X-Ray search via Serper — scans public LinkedIn profiles through Google operators (site:linkedin.com/in). Ideal when you don't want to burn LinkedIn limits. Paginates up to 15 pages of 100 results each, automatically filtering duplicates and blacklist.
search_linkedin_navigatorRuns a Sales Navigator search URL scrape. Pass a ready-made URL from Sales Navigator (filters already set) and Salesbot will walk it, save leads to contacts and return 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 via Unipile — 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 the connected profile. By default the post is saved as a 'draft' on the LinkedIn Posts page where the user reviews and publishes it. With auto_publish=true it is published directly — but only if MCP human-in-the-loop approval is not enabled; otherwise it stays as a draft. Before publishing there is a random 30–180 s delay (anti-detection). Image attachments can only be added in the post editor in the app.
get_daily_limitsChecks the profile's remaining daily limits — current usage vs. limits, ramp-up state, 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.

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