Salesbot MCP Server – Dokumentace

Salesbot LinkedIn MCP server implementuje Model Context Protocol (Streamable HTTP) a umožňuje AI agentům (Claude, ChatGPT, Cursor) ovládat váš Salesbot účet — hledat leady, plnit kampaně, generovat a schvalovat zprávy.

1. Endpoint

POST https://app.salesbot.cz/api/mcp
  • Protocol: MCP 2024-11-05 (Streamable HTTP, JSON-RPC 2.0)
  • Method: POST
  • Content-Type: application/json
  • Accept: application/json, text/event-stream (povinné)

2. Autentizace

Každý request musí obsahovat hlavičku x-mcp-api-key s vaším MCP API klíčem (formát sb_mcp_…). Klíč vygenerujete v aplikaci Salesbot pod Nastavení → API → MCP.

x-mcp-api-key: sb_mcp_<YOUR_API_KEY>

3. Konfigurace klienta

Vložte následující JSON do konfigurace svého MCP klienta (Claude Desktop, Cursor, ChatGPT Developer Mode atd.):

{
  "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"
      }
    }
  }
}

4. Inicializace (raw HTTP)

curl -X POST https://app.salesbot.cz/api/mcp \
  -H "x-mcp-api-key: sb_mcp_<YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {},
      "clientInfo": { "name": "my-client", "version": "1.0.0" }
    }
  }'

5. Seznam nástrojů (tools/list)

curl -X POST https://app.salesbot.cz/api/mcp \
  -H "x-mcp-api-key: sb_mcp_<YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/list" }'

6. Dostupné nástroje

Vyhledávání & Discovery

search_linkedin_people
Vyhledá lidi na LinkedIn podle pozice, firmy, lokace nebo klíčových slov. S parametrem connectionsOnly pracuje s lokální cache spojení bez spotřeby search limitu. Výsledky se neukládají automaticky: ověřte relevanci, vyžádejte LinkedIn URL a uložte schválený profil přes upsert_linkedin_contact.
sync_linkedin_connections
Synchronizuje spojení 1. stupně přes Unipile relations do lokální cache. Respektuje cooldown a podporuje pokračovací kurzor.
search_google_xray
Google X-Ray search – prohledá veřejné LinkedIn profily přes Google operátory (site:linkedin.com/in). Vhodné, když nechcete spotřebovávat LinkedIn limity. Nalezené profily uloží do kontaktního seznamu ‚Google X-Ray‘ (s deduplikací) a vrátí jejich ID, připravené k přidání do kampaně nebo CRM.
search_linkedin_navigator
Projde připravenou URL hledání ze Sales Navigatoru nebo běžného LinkedInu a vrátí surové výsledky. Pro uložení profilu a získání contact_id následně použijte upsert_linkedin_contact.
search_job_postings
Hledá pracovní nabídky na LinkedIn dle klíčových slov, lokace, seniority, typu úvazku a dalších filtrů. Vrátí inzeráty s informacemi o firmě – ideální pro zjištění, kdo aktivně nabírá na konkrétní pozici.
search_web
Obecné Google vyhledávání na celém webu (ne jen LinkedIn). Hodí se pro hledání pracovních nabídek na portálech, informací o firmách, novinek a dalšího obsahu. Výsledky se neukládají do kontaktů.
get_job_posting_details
Načte detail konkrétního inzerátu včetně náborového týmu – recruitera nebo hiring manažera, který pozici vypsal. Ukáže i počet uchazečů a zhlédnutí.

Kontakty & Profily

get_contact_profile
Vrátí kompletní profil kontaktu z databáze – jméno (s vokativem), headline, firma, pozice, lokace, jazyk, status v kampaních, historie interakcí. Slouží AI jako kontext pro psaní personalizovaných zpráv nebo rozhodování o dalším kroku.
upsert_linkedin_contact
Importuje přesnou, již známou URL LinkedIn profilu. Pokud kontakt existuje, vrátí jeho ID; jinak jej vytvoří v seznamu CRM Imports. Jde o idempotentní cestu pro integrace před add_contacts_to_campaign.
list_contacts
Vypíše vaše kontakty s ID, jménem, firmou a aktuálním statusem (např. invite_sent, connected, replied). Podporuje filtrování podle lead_listu nebo kampaně. AI z tohoto výpisu vybírá ID pro další nástroje.
list_lead_lists
Vypíše skupiny kontaktů s ID seznamu, názvem, popisem a počtem kontaktů. ID seznamu použijte s list_contacts nebo add_contacts_to_list.
create_lead_list
Vytvoří pojmenovaný seznam kontaktů a vrátí list_id. Opakované volání se stejným názvem vrátí existující seznam místo duplicity.
add_contacts_to_list
Přesune existující kontakty podle contact_id do zvoleného list_id. Kontakt patří právě do jednoho seznamu, nejde o kopii.
enrich_contacts
Obohatí existující kontakty o kompletní LinkedIn profil přes připojený účet – headline, lokalitu, firmu, pozici, pracovní historii, vzdělání a dovednosti. Ideální po Google X-Ray vyhledávání; max. 8 kontaktů na volání.

Kampaně & Outreach

list_campaigns
Vypíše vaše kampaně s ID, názvem, statusem (draft/running/paused) a počty leadů. AI z toho čerpá campaign_id při přidávání leadů, generování zpráv nebo schvalování draftů.
list_campaign_queue
Vrátí stav kontaktů v kampani včetně campaign_contact_id, generování a schválení zpráv, naplánované akce a doporučeného dalšího MCP nástroje.
add_contacts_to_campaign
Přidá kontakty podle contact_id do kampaně, aplikuje blacklist a deduplikaci, ale nic samo neodešle ani nenaplánuje. Odpověď vrátí další krok, obvykle prepare_campaign_messages nebo start_campaign.
send_linkedin_message
Odešle jednorázovou LinkedIn zprávu konkrétnímu kontaktu mimo kampaň. Před odesláním je náhodné zpoždění 30–180 s kvůli anti-detekci. Akce se započítává do denního limitu zpráv a uloží se do historie interakcí.
send_connection_request
Odešle pozvánku ke spojení na LinkedIn. Zpráva je vždy prázdná (bez textu) – tak je nastavená politika, aby nedošlo k blokaci účtu, a to bez ohledu na typ účtu (free i premium). Akce se započítává do denního limitu invitations.

AI drafty & Schvalování

generate_campaign_message
Vygeneruje AI draft zprávy (Gemini) pro konkrétní kontakt a krok kampaně podle šablony a profilu leadu. Zpráva se NEodešle – uloží se jako návrh se stavem 'pending_approval' a čeká na schválení (např. přes Claude/GPT nebo ručně).
prepare_campaign_messages
Hromadně zařadí do generování až 10 chybějících draftů v kampani a ihned vrátí řízení agentovi. Stav pak kontrolujte přes list_campaign_queue nebo list_pending_approvals.
list_pending_approvals
Vrátí seznam všech AI draftů, které čekají na schválení – pro každý draft vrátí jméno kontaktu, headline, firmu a vygenerovaný text. Slouží jako vstup pro hromadnou kontrolu AI asistentem (Claude/GPT), který může drafty projít a rozhodnout schválit/zamítnout.
approve_message
Schválí draft a předá ho executoru k odeslání v rámci kampaně (s respektováním denních limitů a povolených hodin). Volitelně lze upravit text před schválením. Parametr skip_gpt_check=false navíc spustí druhou kontrolu přes gpt-5-nano – pokud GPT zprávu odmítne, draft se automaticky vrátí Gemini k přepracování podle GPT feedbacku.
reject_message
Zamítne draft s textovým feedbackem (např. 'příliš formální, zkrať na 2 věty'). Salesbot draft označí jako rejected a Gemini vygeneruje novou verzi podle vaší zpětné vazby, která opět čeká na schválení.

Správa kampaní

create_campaign
Založí NOVOU kampaň (uloží se jako 'draft', sama se nespustí). Zadáte název, profil a seřazené kroky (connect/message/visit, zpoždění, AI prompty). Vrátí campaign_id; leady pak přidáte přes add_contacts_to_campaign.
update_campaign_settings
Upraví nastavení existující kampaně: název, popis, denní limit, sender_context, auto-approve nebo status (paused/running). Mění jen zadaná pole.
start_campaign
Spustí (aktivuje) existující kampaň – naplánuje akce pro její kontakty a nastaví status 'running'. Kampaň musí mít kontakty a kroky. Respektuje denní limity, povolené hodiny a anti-detekční zpoždění.
stop_campaign
Zastaví běžící kampaň – nastaví status 'stopped' a zruší čekající naplánované akce. Pro dočasné pozastavení použijte update_campaign_settings se status='paused'.

Inbox & Odpovědi

list_inbox_chats
Vypíše poslední LinkedIn konverzace (inbox) v reálném čase – vrací chat ID, druhou stranu, počet nepřečtených a čas poslední zprávy.
get_chat_messages
Načte zprávy jedné LinkedIn konverzace v reálném čase (nejnovější dole). is_sender=true označuje zprávy odeslané vámi. Slouží jako kontext před napsáním odpovědi.
reply_to_chat
Odešle odpověď do existující konverzace pouze v povolených hodinách. Před odesláním se aplikuje náhodné lidské zpoždění přibližně 20–45 s a kontrola prompt-injection i nevyžádaných odkazů. Maximálně 2 AI odpovědi na vlákno a započítává se do denního limitu zpráv.
mark_chat_read
Označí LinkedIn konverzaci jako přečtenou (podle chat_id) – aby se vlákno po zpracování AI neobjevovalo znovu jako nepřečtené.

Posty & Limity & Web

publish_linkedin_post
Vytvoří LinkedIn příspěvek za připojený profil. Standardně se příspěvek uloží jako 'draft' na stránce LinkedIn Posts, kde ho uživatel zkontroluje a publikuje. Při auto_publish=true se publikuje rovnou – ale jen pokud MCP human-in-the-loop schvalování není zapnuté; jinak zůstane jako draft a uživatel ho publikuje v aplikaci. Před samotným publikováním je náhodné zpoždění 30–180 s (anti-detekce). Obrázkové přílohy lze přidat pouze v editoru příspěvků v aplikaci.
get_daily_limits
Zkontroluje hodinové, denní a měsíční využití, zbývající kvótu, typ účtu, stav ramp-up, povolené hodiny a doporučený cooldown.
scrape_website
Načte čitelný text veřejné webové stránky, aby ho AI mohla použít jako kontext při psaní/úpravě zpráv (např. web prospekta). Vrací prostý text (bez HTML, zkrácený) a nalezené kontaktní emaily (emails_found, vč. mailto odkazů). Týdenní limit počtu webů; interní/privátní adresy jsou odmítnuty.

LinkedIn účet

get_linkedin_status
Zkontroluje, zda je váš LinkedIn účet připojený a aktivní, a pokud ne, jak to napravit. AI tento nástroj volá jako první, když jiný nástroj hlásí, že účet není připojený.
connect_linkedin
Vygeneruje zabezpečený odkaz s vlastní doménou, který otevřete pro připojení (nebo opětovné připojení) LinkedIn účtu – bez nutnosti opustit chat.

CRM

set_deal_stage
Posune lead vaším CRM pipeline (fáze jsou konfigurovatelné – výchozí: Prospekt → Kontaktován → Demo → Vyhráno → Prohráno) a zaznamená změnu do historie. AI ho použije, když potvrdíte reálnou událost ('domluvili si demo').
log_crm_note
Uloží strukturované shrnutí konverzace ke kontaktu v CRM – stručný souhrn, pain pointy prospekta a celkový sentiment – aby další follow-upy zůstaly personalizované.
save_lead_message
Uloží vygenerovaný text oslovení k leadu (email, email follow-up, LinkedIn zpráva nebo LI follow-up) jako trvalý kontext v CRM. Neodesílá ho.
list_lead_messages
Vypíše zprávy uložené u leadu (email/LI drafty a follow-upy), od nejnovějších, abyste text mohli znovu použít před odesláním.
create_task
Vytvoří follow-up úkol, volitelně navázaný na lead a s termínem (plán Pro). Promění 'připomeň mi poslat ceník ve čtvrtek' ve sledovaný úkol.
get_lead_context
Vrátí kompletní CRM kontext leadu před psaním pitche: profil, aktuální fázi pipeline, poslední shrnutí konverzací, otevřené úkoly, poslední LinkedIn interakce a historii fází.
export_crm
Exportuje celé vaše CRM (leady s fází pipeline a klíčovými poli) jako CSV pro zálohu nebo otevření v Excelu.
update_contact
Aktualizuje kontaktní údaje leadu – email, telefon, lokalitu, firmu, pozici nebo headline. Použijte pro obohacení leadu (např. uložení nalezeného emailu). Změní se jen pole, která předáte.
list_tasks
Vypíše vaše CRM úkoly – filtr podle stavu (open/done/cancelled) a/nebo konkrétního leadu. Vrací id, název, termín, stav a jméno navázaného leadu, takže AI vidí otevřené follow-upy.
complete_task
Označí CRM úkol jako hotový (nebo ho znovu otevře/zruší) podle task_id. Použijte po vyřízení follow-upu.
list_crm_stages
Vypíše fáze CRM pipeline (key, label, barva) a kolik leadů je v každé. Fáze jsou konfigurovatelné.
add_crm_stage
Přidá novou fázi pipeline (např. 'Vyjednávání') s volitelnou barvou. Přidá se na konec pipeline.
rename_crm_stage
Přejmenuje label fáze a/nebo změní barvu podle key. Key fáze i leady v ní zůstávají.
delete_crm_stage
Smaže fázi pipeline; její leady se přesunou do jiné fáze (reassign_to nebo první zbývající).
list_crm_fields
Vypíše vlastní pole definovaná na CRM leadech (key, label, typ).
add_crm_field
Přidá vlastní pole k CRM leadům (např. 'Rozpočet' typu number). Typy: text, number, date, url.
delete_crm_field
Odebere definici vlastního pole podle key.
set_lead_fields
Nastaví hodnoty vlastních polí na leadu (podle contact_id) – např. rozpočet, datum obnovy. Přijímají se jen definované keys.

7. Limity & bezpečnost

  • MCP server respektuje denní limity, povolené hodiny, blacklist domén/firem a stop-on-reply pravidla nastavená ve vašem účtu.
  • Connection requesty se odesílají vždy bez zprávy (anti-block politika).
  • Před odesláním zpráv se používá nastavené zpoždění v rámci provozní kadence.
  • Human-in-the-loop schválení blokuje odeslání zprávy nebo pozvánky, dokud akci nepotvrdíte v aplikaci.
  • Konzervativní výchozí nastavení pro MCP je 10 akcí za hodinu a 5 zpráv za hodinu na účet; první pilot držte pod 100 akcemi denně a přibližně 30–50 zprávami denně.
  • Při LINKEDIN_SEARCH_PROTECTED, quota_protection nebo retry_after_seconds se nesmí požadavek ihned opakovat ani obcházet přes jiný LinkedIn search nástroj.

8. Doporučený prompt pro AI agenta

Tento prompt vložte do systémových instrukcí agenta, Cursor Skill nebo souboru AGENTS.md. Upravte jej podle vlastního schvalovacího workflow, ale neodstraňujte bezpečnostní kroky.

Jsi Salesbot Campaign Operator. Chraň LinkedIn účet. Před vyhledáváním nebo outboundem zavolej get_linkedin_status a get_daily_limits. Pokud nástroj vrátí LINKEDIN_SEARCH_PROTECTED, quota_protection nebo retry_after_seconds, neopakuj požadavek ihned a cooldown neobcházej jiným LinkedIn vyhledáváním. Použij search_google_xray, cache spojení, nebo skonči do uvedeného času.

Workflow: list_campaigns a list_lead_lists → ověř kontakty a případně upsert_linkedin_contact → add_contacts_to_campaign → list_campaign_queue → prepare_campaign_messages → list_pending_approvals → každý draft zkontroluj a approve_message nebo reject_message s feedbackem → start_campaign až po potvrzení kontaktů a zpráv. Nikdy nevypínej human-in-the-loop kvůli rychlosti. Při nejasném stavu nejdřív čti stav a neopakuj write akci. Používej přesná ID profile_id, list_id, campaign_id, contact_id, campaign_contact_id a step_id vrácená Salesbotem.