Human-in-the-loop LinkedIn outreach and a built-in sales CRM for AI agents. Safety-gated, anti-spam.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
💡 Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
What is this?
linkedin-mcp-server-salesbotis a Model Context Protocol - MCP server for AI‑assisted LinkedIn relationship operations. It lets AI assistants — Claude Desktop, ChatGPT, Cursor — help you research and organize professional contacts, draft deeply personalized messages for your review and approval, sync inbox conversations, enrich profiles, and pull web context — all under your direction. It's built for hyper‑targeted, meaningful outreach (find 5 ideal contacts, read their recent posts, write 5 thoughtful notes), not bulk blasting. Every send is gated by human‑in‑the‑loop approval and enforced, server‑side daily/hourly safety thresholds that keep your LinkedIn account within safe limits.
It runs as a Supabase Edge Function (Deno + Hono + mcp-lite) exposing the MCP Streamable HTTP transport. LinkedIn actions go through a third‑party LinkedIn integration provider; LinkedIn credentials are never stored by the AI.
| Endpoint | https://app.salesbot.cz/api/mcp |
| Transport | MCP Streamable HTTP (POST + SSE) |
| Auth header | x-mcp-api-key: sb_mcp_… (a Supabase JWT in Authorization also works) |
| Tool count | 49 |
| License | MIT |
Add this to your MCP client config. Get the sb_mcp_… key in the Salesbot app under Settings → MCP.
Important: send the key in the
x-mcp-api-keyheader, notAuthorization: Bearer. The Supabase API gateway rejects unknown Bearer tokens before they reach the server.
sb_mcp_…) — long‑lived; generated in the Salesbot app, stored only as a SHA‑256 hash. Send in x-mcp-api-key.Authorization: Bearer.The AI can do it without leaving the chat:
get_linkedin_status — reports whether LinkedIn is connected/active/blocked.connect_linkedin — returns a white‑labeled https://auth.salesbot.cz/… link. The user opens it, completes LinkedIn login, done.Or connect in the app: Settings → LinkedIn → Connect.
Each tool returns text content; errors return { "ok": false, "code": "<CODE>", "error": "<message>" }.
search_google_xray saves the profiles it finds into a "Google X-Ray" contact list (deduplicated) and returns their contact_ids — ready to enrich, add to a campaign, or push into the CRM.
search_job_postings searches LinkedIn job postings via the connected account (Classic search, no Recruiter needed). Returns job offers with company info — great for finding companies actively hiring for a specific role. Combine with search_linkedin_people to find the hiring manager.
search_web is a general-purpose Google search (not restricted to LinkedIn). Use Google operators like site:jobs.cz, intitle:, OR to search job portals, company websites, or news. Results are NOT saved to contacts — this is a research/discovery tool.
get_job_posting_details takes a job_id from search_job_postings and returns the full posting — most importantly hiring_team, the recruiter or hiring manager who posted the role, with their LinkedIn id and whether a free InMail is available. Also returns applicants_counter / views_counter as urgency signals. Typical flow: search_job_postings → get_job_posting_details → enrich_contacts → campaign.
Company/account-list workflow: import_linkedin_company_list → list_companies → search_web / scrape_website → update_company_research → search_linkedin_people → upsert_linkedin_contact with the returned prospect_company_id. Companies are stored separately from people and can enter CRM before a decision-maker is known.
upsert_linkedin_contact is the idempotent path for an exact, already-known LinkedIn profile URL. It creates the contact in the CRM Imports list or returns the existing contact_id, so CRM integrations can safely call it before add_contacts_to_campaign without relying on Google search.
list_lead_lists returns each contact group's list_id, name, description and contact count. Pass a returned list_id to list_contacts.
Typical contact workflow: list_lead_lists → list_contacts → add_contacts_to_campaign. Contacts still belong to a lead list, but adding an existing contact to a campaign only requires its contact_id and the target campaign_id.
search_linkedin_people and search_linkedin_navigator return raw LinkedIn search results. They do not persist contacts; call upsert_linkedin_contact for each profile you want to save or add to a campaign.
enrich_contacts scrapes each contact's full LinkedIn profile via the connected account (headline, location, current company & position, full work history, education, skills) and saves it onto the contact. Great right after search_google_xray.
Factual signals from GitHub, npm, and our automated checks — not a rating.
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/linkedin-mcp-server-salesbot)<a href="https://allmcps.com/mcp/linkedin-mcp-server-salesbot"><img src="https://allmcps.com/api/badge/linkedin-mcp-server-salesbot?style=directory" alt="LinkedIn MCP Server (Salesbot) on AllMCPs" /></a>