
LinkedIn MCP Server (Salesbot)
cz.salesbot由 salesbot.cz 发布官方发布者v1.0.0更新于 Nov 2, 2026
Human-in-the-loop LinkedIn outreach and a built-in sales CRM for AI agents. Safety-gated, anti-spam.
概览
Salesbot 远程 MCP 服务器,让助手调研 LinkedIn 联系人、起草经人工审核的外联消息、发送邮件并管理内置销售 CRM。
- 可以做什么
- 通过 LinkedIn 人员与 Navigator 搜索、Google X-Ray、职位发布、网页搜索和公司官网阅读寻找线索
- 管理联系人与线索列表:写入资料、补全信息、同步人脉、检查黑名单
- 运行营销活动:创建、启动、停止、加入队列,并生成、批准或驳回 AI 撰写消息
- 直接操作 LinkedIn:发送好友请求、消息、发帖,以及处理收件箱会话
- 用自有邮箱发送并跟踪邮件,保存草稿与跟进内容
- 使用 CRM:公司、线索、阶段、自定义字段、备注、任务与导出
- 适用场景
- 适合招聘、销售和创业者,让助手进行小批量、精准的 LinkedIn 与邮件外联,并在发送前人工审核,同时把结果沉淀到 CRM。不适合群发式批量触达。
- 运行要求
- 远程端点 app.salesbot.cz,使用 streamable HTTP。认证方式为 OAuth 2.1 登录,或在 x-mcp-api-key 请求头中提供长期有效的 Salesbot MCP API 密钥(不要放在 Authorization 中)。需要有效的 Salesbot 订阅或试用,并需在应用内或通过 connect_linkedin 工具连接 LinkedIn 账号。
安装
在 SourceWeft 中
- 打开 控制台中的 LinkedIn MCP Server (Salesbot),将其添加到工作区。
- 连接 所需的 凭据。它们会被私密存储,绝不会在公开页面上展示。
- 为需要使用其工具的对话启用该服务。
Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。
交给智能体安装
把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。
阅读 https://sourceweft.com/mcp/cz.salesbot%2Flinkedin-mcp-server/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。其他 MCP 客户端
把它添加到你客户端的 mcpServers 配置中。 客户端会在首次连接时完成 OAuth 登录。
{
"mcpServers": {
"linkedin-salesbot": {
"type": "http",
"url": "https://app.salesbot.cz/api/mcp"
}
}
}README
LinkedIn MCP Server with CRM (Salesbot)
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 hosted service at app.salesbot.cz and speaks the MCP Streamable HTTP transport. Users sign in with OAuth 2.1 (or use an API key in clients that cannot sign in). LinkedIn actions go through a third‑party LinkedIn integration provider; LinkedIn credentials are never stored by the AI.
Product page and documentation: https://salesbot.cz/en/mcp-server
- Keywords: model context protocol, mcp server, linkedin api, linkedin automation, claude desktop, cursor, ai agents, sales automation.
- Compatible clients: Claude Desktop, Claude API/MCP, Cursor, any MCP Streamable‑HTTP client.
Quick facts
Connect with sign-in (OAuth): claude.ai, Cowork, Claude Code
The server supports OAuth 2.1, so no key needs to be copied:
- claude.ai / Cowork: Customize → Connectors → + Add → Add custom connector → name
Salesbot, URLhttps://app.salesbot.cz/api/mcp→ Continue → authentication Sign in now (keep the recommended OAuth client; if sign-in fails choose Register automatically) → Add. Sign in to Salesbot and allow access on the consent page, then switch Salesbot on under + → Connectors in a chat. On Team/Enterprise an owner adds it first (Organization settings → Connectors → Add → Custom → Web) and members click Connect. - Claude Code plugin (adds three skills on top of the connection:
salesbot-outreach,salesbot-campaignandsalesbot-email):
Then start claude, run /mcp, select the Salesbot server and sign in.
To update later, refresh the marketplace first (otherwise the old version is reported as current):
You can see and remove connected apps in the Salesbot app under Settings → MCP → Connected apps. The plugin contains no code that runs on your machine; it only talks to https://app.salesbot.cz/api/mcp.
ChatGPT and Codex
For a private ChatGPT connection, open Plugins on chatgpt.com (chatgpt.com/plugins) → + → Add custom MCP server, enter the name Salesbot, the server URL https://app.salesbot.cz/api/mcp and choose OAuth. Confirm the warning, choose Create as a plugin, complete Salesbot consent in the browser, install the plugin and call it in a chat with @Salesbot. Availability depends on your ChatGPT plan and workspace settings. The discovery endpoints are available, but end-to-end ChatGPT sign-in has not yet been verified by this repository's readiness check.
The portable OpenAI package is defined by plugin.json and mcp.json; it reuses the existing workflows and logo without changing the Claude package. It is a submission candidate, not an approved public listing. See the OpenAI readiness and submission checklist for tests, review-account requirements and the third-party integration policy gate.
Clients that cannot sign in can use an API key, see below.
What the plugin runs and sends
- Runs nothing on your machine. The plugin is three Markdown skills and one remote MCP server entry; there are no hooks, scripts or binaries.
- Talks to one server:
https://app.salesbot.cz/api/mcp(Salesbot, operated by Sales Robots s.r.o.). Sign-in uses OAuth 2.1 onapp.salesbot.cz. - What reaches Salesbot: the arguments of the tools Claude calls (for example a search query, a contact id, the text of a message or e-mail you asked to send). Salesbot then acts in your connected LinkedIn account and e-mail tools within your limits and approval settings. It does not read your conversation or local files.
- Data handling: see the privacy policy and terms. Remove access at any time in the Salesbot app → Settings → MCP → Connected apps.
Connect with an API key (Cursor, Codex, Claude Desktop config)
Add this to your MCP client config. Get the sb_mcp_… key in the Salesbot app under Settings → MCP.
Important: send the API key in the
x-mcp-api-keyheader, notAuthorization: Bearer;Authorizationis reserved for OAuth access tokens.
Authentication
- OAuth 2.1 (authorization code + PKCE, dynamic client registration). A request without credentials gets
401withWWW-Authenticate: Bearer resource_metadata="https://app.salesbot.cz/.well-known/oauth-protected-resource"; clients discover the authorization server from there. The access token goes inAuthorization: Bearer. - MCP API key (
sb_mcp_…) — long‑lived; generated in the Salesbot app, stored only as a SHA‑256 hash. Send inx-mcp-api-key. - An active subscription/trial is required.
How do I authenticate LinkedIn?
The AI can do it without leaving the chat:
- Call
get_linkedin_status— reports whether LinkedIn is connected/active/blocked. - If not connected, call
connect_linkedin— returns a white‑labeledhttps://auth.salesbot.cz/…link. The user opens it, completes LinkedIn login, done.
Or connect in the app: Settings → LinkedIn → Connect.
Tools
Each tool returns text content; errors return { "ok": false, "code": "<CODE>", "error": "<message>" }.
Why 82 tools. Salesbot covers LinkedIn outreach, e-mail and a CRM, and each tool does exactly one thing. The tools are grouped into the areas below, and a client only needs the area it is working in (Claude can load tools on demand). Every tool description starts with when to use it and names the tool to use instead where two are easy to confuse (for example search_linkedin_people vs search_linkedin_navigator, or upsert_linkedin_contact vs add_crm_contact). Read-only tools are kept separate from write and delete tools, so clients can show correct read-only and destructive hints and ask for approval only where it matters. The salesbot_campaign_operator prompt contains the same map.
Connection
Lead discovery
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.
read_company_website reads a company's own public website – the homepage plus up to 3 contact/about/services pages on the same host – and returns a short extract with source URLs and generic company e-mails (info@, sales@ …); personal e-mails and phone numbers are masked and no employee lists are collected. It identifies as SalesbotBot, honours robots.txt (and does not read a site whose robots.txt cannot be checked), noindex/noai and TDM reservations, reads only public addresses, stops at logins, CAPTCHAs and paywalls, and is limited to 60 reads per account per day. Nothing is stored; save the summary with update_company_research. A found address is not consent to contact. Rules: salesbot.cz/en/terms#website-reading.
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 → 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.
Contacts
Every contact lives in exactly one list: add_contacts_to_list moves contacts, remove_contacts_from_list moves them back to CRM Imports (nothing is deleted). sync_linkedin_connections pages through your own 1st-degree connections (max 500 per page, paced by the server). list_blacklist / check_blacklist read the company-wide blacklist.
delete_contacts deletes permanently, including campaign history. Call it only on the user's explicit request, after showing them the contacts, with confirm: true. To stop outreach to someone, use exclude_contacts_from_campaign instead.
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 reads each contact's LinkedIn profile via the connected account and saves the headline, location and current company & position. Following GDPR data minimisation, Salesbot does not store photos, the "About" text, education, skills, earlier jobs or contact details. Great right after search_google_xray.
Campaigns
message_mode decides how a message step uses its sample (ai_template): template sends the sample word for word and the AI only fills its fields (e.g. [Firma] → "Škoda Auto"); creative has the AI write a new message for each lead from ai_prompt, with the sample only as a style example. The campaign's sender_context ("About me") is used only where the prompt says {{o_mne}}. Links in the prompt or sample are kept as written.
exclude_contacts_from_campaign stops all further outreach to those contacts but keeps their history. list_campaign_queue shows each contact's state, invitation status and the next tool to call.
AI messaging (write → approve → send)
prepare_campaign_messages queues drafts for up to 10 pending contacts per call; repeat while remaining_pending > 0. When the campaign has AI approval on (auto_approve_messages), Salesbot checks each draft — the contact's name and gender, company, leftover placeholders, signature and grammar — and approves only what passes; the rest waits in list_pending_approvals. list_mcp_pending_actions lists one-off messages and invitations waiting for the user's approval (read-only).
E-mail (your own mailbox: Outlook or IMAP/SMTP)
send_email sends a personal e-mail to one person from your own mailbox: pass the mailbox_id from list_email_integrations. Salesbot sends it within your sending hours, a few minutes apart and capped per day. Smartlead and Instantly are no longer supported. Consent: in the Czech Republic a commercial e-mail needs the recipient's prior consent unless they are an existing customer (§ 7 of Act 480/2004 Coll.) — use LinkedIn for first contact with new people.
Every e-mail is checked before it is sent: the greeting (right name, and pane/paní by the contact's gender), the company, leftover placeholders such as {{company}}, Czech grammar, and no signature in the body when the mailbox adds its own. A failed check returns AI_CHECK_FAILED with the reason and nothing is sent; fix it and call again. A second failure goes to the user's manual approval. If approval is required, the e-mail waits as pending_approval. cancel_email withdraws an e-mail that has not gone out yet.
Direct LinkedIn actions
publish_linkedin_post has its own server-side safety limit of 1 published post per LinkedIn account in a rolling 60-minute window. This applies to both personal and organization posts and is reported as the posts quota by get_daily_limits. When the quota is exhausted, the tool returns HOURLY_LIMIT_REACHED and does not publish the post.
Inbox (real‑time)
CRM (pipeline, notes, tasks, message store)
The CRM is a persistent pipeline separate from contacts. A lead enters it when added to a campaign, or when any of these tools first touch it. It also acts as a durable store for generated outreach copy: save email / LinkedIn drafts and follow-ups with save_lead_message, read them back with list_lead_messages or get_lead_context, and send e-mails with send_email (see E-mail above).
Companies (accounts) are created automatically from lead company names and LinkedIn company imports:
delete_crm_leads, delete_crm_company and merge_crm_companies cannot be undone: use them only on the user's explicit request, after showing them what will change.
get_lead_context returns the full 360° context for a lead — profile, pipeline stage, custom fields, saved outreach messages, conversation summaries, open tasks, recent LinkedIn interactions and stage history.
CRM configuration (stages & custom fields)
Pipeline stages and custom fields are user-configurable.
Example call
Request (MCP tools/call):
Success result content (JSON inside the text part):
Error result content:
Error codes
Safety & responsible use
- GDPR by default: only the fields needed for B2B outreach are stored (name, headline, current role, location, profile link, source and date); people with no activity for 12 months are deleted automatically; anyone who objects goes on a person-level do-not-contact list and is never saved or contacted again. The user is the controller, Salesbot the processor (data processing agreement in the terms).
Built-in LinkedIn algorithmic protection and daily safety thresholds. This is a relationship tool, not a mass-mailer — it's designed to send a few highly personalized, human-approved messages, and the server actively prevents bulk abuse:
- Per‑account daily limits with gradual ramp‑up for new accounts; per‑hour MCP throttle; a general per‑user request rate limit.
- An independent per‑account post limit of 1 published LinkedIn post per rolling hour, including organization posts.
- Human‑in‑the‑loop approval queue for outbound actions (configurable).
- Allowed‑hours / days windows and randomized, human‑paced delays between actions.
- Prompt‑injection defense: untrusted CRM/inbox text is treated as data; outbound text is scanned before sending.
- Inbox: max 2 AI replies per conversation (anti‑overflow); replies are injection‑scanned.
- Account protection: on a LinkedIn block (provider 403) campaigns auto‑pause and the user is emailed.
FAQ
Which AI clients work? Any MCP Streamable‑HTTP client — claude.ai, Cowork, Claude Code, Claude Desktop, the Claude API, Cursor, Codex and similar.
Does the AI see my LinkedIn password? No. Authentication happens through a hosted provider flow (white‑labeled at auth.salesbot.cz); the MCP server only uses an account handle.
Can the AI send messages without me? Only if you disable approval. By default outbound actions are queued for human approval.
Is it safe for my LinkedIn account? Daily/hourly limits, ramp‑up, allowed‑hours, randomized delays, and auto‑pause on a detected block are all enforced server‑side.
License
MIT — see LICENSE.
来源:README.md,提交 e5ecf10
工具
0版本历史
1- v1.0.0最新Sep 16, 2026
评分
已满足适用检查项的 85%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通必需25 分
- 已声明认证方式必需10 分
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分