For developers & AI agents

LinkedIn MCP Server

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

  • Salesbot LinkedIn MCP server 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

LinkedIn MCP use cases

LinkedIn MCP for Claude

Connect the LinkedIn MCP server to Claude Desktop and let Claude search leads, read CRM context, prepare personalized messages and manage campaign steps through natural-language instructions. Sensitive actions can remain in Salesbot’s approval workflow.

LinkedIn MCP for Cursor

Use LinkedIn MCP for Cursor when you want an AI coding assistant to work with your Salesbot lead data and outreach workflow. Add the MCP endpoint and API key to Cursor’s MCP settings, then use the available tools from the chat.

LinkedIn MCP for ChatGPT

The Salesbot LinkedIn MCP server can connect ChatGPT to your lead search, campaigns, inbox and CRM context through an MCP-compatible setup. ChatGPT can prepare actions and drafts while Salesbot continues to enforce limits and approval controls.

Salesbot MCP for Sales Navigator search URLs

The Salesbot MCP workflow accepts a prepared LinkedIn Sales Navigator or regular LinkedIn search URL. Salesbot processes the results, saves contacts with deduplication and blacklist filtering, and returns lead IDs for enrichment or campaigns.

MCP safety and anti-loop guardrails

An MCP agent should operate as a controlled operator, not as a blind action loop. Limits and approvals are safeguards for a workflow; no tool can guarantee how LinkedIn will evaluate account activity.

  • Human approval blocks MCP from sending messages or connection requests until you approve the action in Salesbot.
  • Use 10 MCP actions per hour and 5 MCP messages per hour as conservative starting limits for one account.
  • Keep the first pilot below 100 total actions per day and roughly 30–50 messages per day; these are operating recommendations, not a guarantee against LinkedIn restrictions.
  • Before discovery or outbound, call get_linkedin_status and get_daily_limits. If the response says LINKEDIN_SEARCH_PROTECTED, quota_protection or retry_after_seconds, do not retry immediately and do not bypass the cooldown with job search.

How to set up your LinkedIn MCP server

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 LinkedIn by role, company, location or keywords. With connectionsOnly it uses the local connection cache without consuming the search limit. Results are not saved automatically: verify relevance, require a LinkedIn URL and persist an approved profile with upsert_linkedin_contact.
sync_linkedin_connectionsSyncs first-degree connections through Unipile relations into the local cache. Respects cooldowns and supports a continuation cursor.
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. Saves found profiles to the 'Google X-Ray' contact list (with deduplication) and returns IDs ready for campaigns or CRM.
search_linkedin_navigatorProcesses a prepared Sales Navigator or regular LinkedIn search URL and returns raw results. To persist a profile and receive a contact_id, follow with upsert_linkedin_contact.
search_job_postingsSearches LinkedIn job postings by keywords, location, seniority, employment type and other filters. Returns listings with company information — ideal for finding who is actively hiring for a target role.
search_webGeneral Google search across the web (not just LinkedIn). Useful for job boards, company research, news and other content. Results are not saved to contacts.
get_job_posting_detailsLoads a job posting's details, including the recruiting team — the recruiter or hiring manager who posted the role. Also shows applicant and view counts.

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.
upsert_linkedin_contactImports an exact, already-known LinkedIn profile URL. If the contact exists, returns its ID; otherwise creates it in the CRM Imports list. This is the idempotent integration path before add_contacts_to_campaign.
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.
list_lead_listsLists your contact groups with list ID, name, description and contact count. Use the list ID with list_contacts or add_contacts_to_list.
create_lead_listCreates a named contact list and returns list_id. Repeating the same name returns the existing list instead of creating a duplicate.
add_contacts_to_listMoves existing contacts by contact_id into the selected list_id. A contact belongs to one list; this does not create a copy.
enrich_contactsEnriches existing contacts with complete LinkedIn profiles through the connected account — headline, location, current company and role, work history, education and skills. Ideal after Google X-Ray search; max 8 contacts per call.

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.
list_campaign_queueReturns campaign contact state including campaign_contact_id, message generation and approval status, scheduled action and the recommended next MCP tool.
add_contacts_to_campaignAdds contacts by contact_id to a campaign and applies blacklist and deduplication, but does not send or schedule anything by itself. The response returns the next step, usually prepare_campaign_messages or start_campaign.
send_linkedin_messageSends a one-off LinkedIn message to a specific contact outside a campaign. A configured delay is applied before sending; 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).
prepare_campaign_messagesQueues up to 10 missing campaign drafts for generation and immediately returns control to the agent. Check the state later with list_campaign_queue or list_pending_approvals.
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 configured 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 only during your allowed hours. A configured delay is applied before sending, and the text is checked for prompt injection and unwanted links. Maximum 2 AI replies per thread; 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 configured delay is applied before the publish call. Image attachments must be added in the in-app post editor.
get_daily_limitsChecks hourly, daily and monthly usage, remaining quota, account type, ramp-up status, allowed hours and the recommended cooldown.
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.
save_lead_messageSaves generated outreach copy for a lead (email, email follow-up, LinkedIn message or LI follow-up) as persistent CRM context. Does not send it.
list_lead_messagesLists messages saved for a lead (email/LinkedIn drafts and follow-ups), newest first, so the AI can retrieve copy before sending it through the right channel.
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.

LinkedIn MCP FAQ

What is a LinkedIn MCP server?

A LinkedIn MCP server is a Model Context Protocol connection between an AI client and LinkedIn sales workflows. Salesbot’s LinkedIn MCP server lets compatible clients work with lead search, contacts, campaigns, inbox conversations and CRM context while Salesbot applies account limits, allowed hours and approval controls.

How do I connect LinkedIn MCP to Claude?

Create an MCP API key in Salesbot, add the Salesbot MCP endpoint and key to Claude Desktop’s MCP configuration, then restart Claude. The required endpoint and JSON example are shown above; keep the API key private and rotate it if it is exposed.

Does the LinkedIn MCP work with Cursor and ChatGPT?

Yes. Salesbot’s LinkedIn MCP server is designed for Claude, Cursor, ChatGPT and other clients that support the MCP protocol. The exact configuration screen depends on the client, but the endpoint and API key remain the same.

Is there a free LinkedIn MCP server?

Salesbot offers a 14-day free trial with access to the LinkedIn MCP server and the wider platform. It is a trial rather than an unlimited free plan, and no credit card is required to start.

What can Salesbot MCP do with a Sales Navigator search URL?

It can process a prepared Sales Navigator search URL, save matching leads into Salesbot, remove duplicates and apply blacklist filtering. The returned contacts can then be enriched, reviewed and added to campaigns through the MCP workflow.

Compare LinkedIn outreach tools

MCP is only one part of the decision. Compare campaign workflows, data, pricing and reply handling as well.

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