mcpField
L
LinkedIn MCP Server (Salesbot)

LinkedIn MCP Server (Salesbot)

リモート
app.salesbot.czビジネス・マーケティング16 日前に更新
リポジトリ公式サイト

LinkedIn MCP Server (Salesbot) について

LinkedIn MCP Server (Salesbot) は、AI アシスタントによる LinkedIn の見込み客調査、CRM 管理、個別アプローチを支援するホスト型 MCP サーバーです。読み取りと書き込みを分け、送信には人の承認を求め、サーバー側の利用上限を適用します。

主な機能

  1. 01LinkedIn の見込み客・企業調査
  2. 02連絡先リストと CRM 管理
  3. 03キャンペーン、メッセージ、受信箱同期
  4. 04メールとプロフィール情報の補完
  5. 05人の承認と安全上限

活用シーン

  1. 01LinkedIn の見込み客を探して整理
  2. 02確認用の個別アプローチ文を作成
  3. 03見込み客、企業、営業タスクを管理
  4. 04AI クライアントで受信箱の会話を確認

MCP 対応

Streamable HTTP 経由で、LinkedIn 調査、CRM、メッセージ、メール操作など 82 個のツールを MCP クライアントに提供します。OAuth 2.1 または API キーで接続し、メッセージ送信には人の承認が必要です。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://app.salesbot.cz/api/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

すべてのエンドポイント
Streamable HTTPhttps://app.salesbot.cz/api/mcp認証が必要

ツール

詳細

CRM(Salesbot)対応 LinkedIn MCP サーバー

これは何ですか? linkedin-mcp-server-salesbot は、AI 支援による LinkedIn の人間関係管理のための Model Context Protocol(MCP)サーバーです。AI アシスタント(Claude Desktop、ChatGPT、Cursor)を活用して、プロフェッショナルな人脈を調査・整理したり、確認・承認用に相手に合わせたメッセージを丁寧に作成したり、受信トレイの会話を同期したり、プロフィール情報を充実させたり、ウェブ上のコンテキストを取得したりできます。すべての操作はユーザーの指示のもとで行われます。これは、ターゲットを絞った有意義なアプローチ(理想的な連絡先を5人見つけ、最近の投稿を読み、心のこもったメッセージを5通作成するなど)のために構築されており、大量送信を目的としたものではありません。送信には必ず人間による承認が必要で、サーバー側で適用される日次・時間ごとの安全上限によって、LinkedIn アカウントを安全な範囲内に保ちます。

ホスト型サービスとして app.salesbot.cz で稼働し、MCP のストリーミング可能な HTTPトランスポートを使用します。ユーザーは OAuth 2.1 でサインインするか、サインインに対応していないクライアントでは API キーを使用します。LinkedIn の操作はサードパーティの LinkedIn 統合プロバイダーを経由し、LinkedIn の認証情報が AI に保存されることはありません。

製品ページとドキュメント:https://salesbot.cz/en/mcp-server

  • キーワード: model context protocol、mcp server、linkedin api、linkedin automation、claude desktop、cursor、ai agents、sales automation。
  • 対応クライアント: Claude Desktop、Claude API/MCP、Cursor、MCP Streamable HTTP に対応するすべてのクライアント。

基本情報

エンドポイントhttps://app.salesbot.cz/api/mcp
トランスポートMCP Streamable HTTP(POST + SSE)
認証OAuth 2.1 でのサインイン、または x-mcp-api-key: sb_mcp_… ヘッダー
ツール数82
ライセンスMIT

サインイン(OAuth)で接続する:claude.ai、Cowork、Claude Code

このサーバーは OAuth 2.1 に対応しているため、キーをコピーする必要はありません。

  • claude.ai / Cowork: Customize → Connectors → + Add → Add custom connector の順に進み、名前に Salesbot、URL に https://app.salesbot.cz/api/mcp を入力して、Continue を選択します。認証で Sign in now を選択し(推奨される OAuth クライアントをそのまま使用します。サインインに失敗した場合は Register automatically を選択してください)、Add を選択します。Salesbot にサインインして同意ページでアクセスを許可した後、チャットの + → Connectors から Salesbot を有効にします。Team/Enterprise では、オーナーが最初に追加します(Organization settings → Connectors → Add → Custom → Web)。その後、メンバーが Connect をクリックします。
  • Claude Code プラグイン(接続機能に加えて、salesbot-outreach、salesbot-campaign、salesbot-email の3つのスキルを追加します):
claude plugin marketplace add Kubis010/linkedin-mcp-server-salesbot
claude plugin install salesbot@salesbot

次に claude を起動して /mcp を実行し、Salesbot サーバーを選択してサインインします。

後で更新する場合は、まずマーケットプレイスを更新してください(更新しないと、古いバージョンが最新として表示されます)。

claude plugin marketplace update salesbot
claude plugin update salesbot@salesbot

Salesbot アプリの「Settings → MCP → Connected apps」から、接続済みアプリの確認や削除ができます。プラグインには、ローカルマシン上で実行されるコードは含まれていません。https://app.salesbot.cz/api/mcp と通信するだけです。

ChatGPT と Codex

ChatGPT にプライベート接続するには、chatgpt.com の「Plugins」(chatgpt.com/plugins)を開き、+ → Add custom MCP server の順に進みます。名前に Salesbot、サーバー URL に https://app.salesbot.cz/api/mcp を入力し、OAuth を選択します。警告を確認して Create as a plugin を選択し、ブラウザーで Salesbot の同意手続きを完了してプラグインをインストールした後、チャットで @Salesbot を使って呼び出します。利用可否は ChatGPT のプランとワークスペースの設定によって異なります。検出用エンドポイントは利用できますが、このリポジトリの準備状況チェックでは、ChatGPT のサインインをエンドツーエンドで検証できていません。

移植可能な OpenAI パッケージは plugin.json と mcp.json で定義され、Claude パッケージを変更せずに既存のワークフローとロゴを再利用します。これは申請候補であり、一般公開の承認済みリスティングではありません。テスト、レビュ​​ー用アカウントの要件、サードパーティ統合ポリシーの審査条件については、OpenAI readiness and submission checklist を参照してください。

サインインできないクライアントでは API キーを使用できます。以下を参照してください。

プラグインが実行・送信する内容

  • お使いのマシンでは何も実行しません。 プラグインは3つの Markdown スキルと1つのリモート MCP サーバーエントリーで構成されており、フック、スクリプト、バイナリはありません。
  • 1つのサーバーと通信します: https://app.salesbot.cz/api/mcp(Salesbot。Sales Robots s.r.o. が運営)。サインインには app.salesbot.cz の OAuth 2.1 を使用します。
  • Salesbot に送信される内容: Claude が呼び出すツールの引数(検索クエリ、連絡先 ID、送信を依頼したメッセージやメールのテキストなど)。その後、Salesbot は接続済みの LinkedIn アカウントとメールツールを、お客様の上限および承認設定の範囲内で操作します。会話やローカルファイルを読み取ることはありません。
  • データの取り扱い: プライバシーポリシーと利用規約をご覧ください。Salesbot アプリ → Settings → MCP → Connected apps から、いつでもアクセスを削除できます。

API キーで接続する(Cursor、Codex、Claude Desktop の設定)

MCP クライアントの設定に以下を追加します。Salesbot アプリの Settings → MCP から sb_mcp_… キーを取得してください。

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

重要: API キーは x-mcp-api-key ヘッダーで送信してください。Authorization: Bearer は使用しないでください。Authorization は OAuth アクセストークン用です。

認証

  • OAuth 2.1(認可コード+PKCE、動的クライアント登録)。認証情報なしのリクエストには、WWW-Authenticate: Bearer resource_metadata="https://app.salesbot.cz/.well-known/oauth-protected-resource" を含む 401 が返されます。クライアントはここから認可サーバーを検出します。アクセストークンは Authorization: Bearer で送信します。
  • MCP API キー(sb_mcp_…)— 有効期間は長く、Salesbot アプリで生成され、SHA-256 ハッシュとしてのみ保存されます。x-mcp-api-key で送信します。
  • 有効なサブスクリプションまたはトライアルが必要です。

LinkedIn の認証方法

AI はチャットから離れずに認証できます。

  1. get_linkedin_status を呼び出します — LinkedIn が接続済み/アクティブ/ブロック中かどうかを報告します。
  2. 未接続の場合は connect_linkedin を呼び出します — ホワイトラベルの https://auth.salesbot.cz/… リンクが返されます。ユーザーがリンクを開いて LinkedIn にログインすれば完了です。

または、アプリで接続します:Settings → LinkedIn → Connect。

ツール

各ツールはテキストコンテンツを返します。エラーの場合は { "ok": false, "code": "<CODE>", "error": "<message>" } を返します。

ツールが82個ある理由。 Salesbot は LinkedIn でのアプローチ、メール、CRM をカバーしており、各ツールはそれぞれ1つのことだけを実行します。ツールは以下の領域ごとにグループ化されており、クライアントが必要とするのは作業中の領域だけです(Claude は必要に応じてツールを読み込めます)。各ツールの説明は使用する状況から始まり、混同しやすいツールがある場合は、代わりに使用するツールも明記しています(例:search_linkedin_people と search_linkedin_navigator、または upsert_linkedin_contact と add_crm_contact)。読み取り専用ツールは書き込み・削除ツールと分けてあるため、クライアントは適切な読み取り専用・破壊的操作のヒントを表示し、必要な場合にのみ承認を求めることができます。salesbot_campaign_operator プロンプトにも同じ一覧が含まれています。

領域ツール数
接続と上限4
リードの発見(LinkedIn、Google、求人、ウェブ)7
連絡先とリードリスト11
キャンペーンとメッセージ16
LinkedIn での直接操作と受信トレイ7
メール5
CRM の担当者、タスク、メモ12
CRM の企業11
CRM の設定、エクスポート、ブラックリスト9
接続
{ "name": "get_linkedin_status", "input": { "profile_id": "uuid (optional)" } }
{ "name": "connect_linkedin",   "input": { "profile_id": "uuid (optional)", "reconnect": "boolean (optional)" } }
リードの発見
{ "name": "search_linkedin_people",    "input": { "title": "string (required)", "location": "string", "locationId": "string", "network": "['S'|'O']", "limit": "number 1-50" } }
{ "name": "search_google_xray",        "input": { "jobTitle": "string (required)", "location": "string", "keywords": "string[]", "excludeWords": "string[]", "limit": "number 1-100" } }
{ "name": "search_linkedin_navigator", "input": { "search_url": "string (required)", "limit": "number 1-100" } }
{ "name": "import_linkedin_company_list", "input": { "search_url": "string (required)", "list_name": "string (required)", "limit": "number", "cursor": "string", "save_to_crm": "boolean" } }
{ "name": "list_company_lists",          "input": {} }
{ "name": "list_companies",              "input": { "company_list_id": "uuid (required)", "limit": "number", "offset": "number", "query": "string" } }
{ "name": "update_company_research",     "input": { "prospect_company_id": "uuid (required)", "web_research": "string (required)", "website": "string", "domain": "string", "research_urls": "string[]" } }
{ "name": "search_job_postings",       "input": { "keywords": "string (required)", "location": "string", "locationId": "string", "seniority": "string[]", "job_type": "string[]", "presence": "string[]", "date_posted": "number", "easy_apply": "boolean", "limit": "number 1-50" } }
{ "name": "search_web",                "input": { "query": "string (required)", "limit": "number 1-30", "country": "string (default cz)", "language": "string (default cs)" } }
{ "name": "read_company_website",      "input": { "url": "string (required)", "extra_urls": "string[] (max 3, same domain)" } }
{ "name": "get_job_posting_details",   "input": { "job_id": "string (required)" } }

search_google_xray は見つかったプロフィールを「Google X-Ray」連絡先リストに重複なく保存し、その contact_id を返します。すぐに情報を充実させたり、キャンペーンに追加したり、CRM に送ったりできます。

search_job_postings は、接続済みアカウントを通じて LinkedIn の求人情報を検索します(Classic 検索のため、Recruiter は不要です)。企業情報付きの求人を返すため、特定の職種を積極的に募集している企業を見つけるのに適しています。search_linkedin_people と組み合わせると、採用担当者を見つけられます。

search_web は、LinkedIn に限定されない汎用的な Google 検索です。site:jobs.cz、intitle:、OR などの Google 検索演算子を使って、求人サイト、企業のウェブサイト、ニュースを検索できます。検索結果は連絡先に保存されません。調査や発見に使うツールです。

read_company_website は、企業が公開している自社ウェブサイトを読み取ります。同じホスト上のホームページと、最大 3 つの連絡先/会社概要/サービスページを対象とし、参照元 URL と一般的な企業メールアドレス(info@、sales@ など)を含む短い抜粋を返します。個人のメールアドレスと電話番号はマスキングされ、従業員リストは収集されません。SalesbotBot としてアクセスし、robots.txt を順守します(robots.txt を確認できないサイトは読み取りません)。noindex/noai と TDM の予約も尊重し、公開アドレスのみを読み取ります。ログイン画面、CAPTCHA、ペイウォールが表示された場合は停止します。また、1 アカウントにつき 1 日 60 回まで読み取りできます。データは保存されません。概要は update_company_research で保存してください。住所が見つかっても、連絡への同意を意味するものではありません。規則:salesbot.cz/en/terms#website-reading。

get_job_posting_details は search_job_postings の job_id を受け取り、求人情報の全文を返します。特に重要なのは、求人を掲載したリクルーターまたは採用担当者の hiring_team です。LinkedIn ID と、無料の InMail を利用できるかどうかも含まれます。また、緊急度の指標として applicants_counter/views_counter も返します。一般的なフローは次のとおりです:search_job_postings → get_job_posting_details → enrich_contacts → キャンペーン。

企業/アカウントリストのワークフロー:import_linkedin_company_list → list_companies → search_web → update_company_research → search_linkedin_people → 返された prospect_company_id を使って upsert_linkedin_contact。企業は個人とは別に保存され、意思決定者が特定される前に CRM に登録できます。

連絡先
{ "name": "upsert_linkedin_contact", "input": { "profile_url": "string (required)", "full_name": "string", "company": "string", "position": "string", "headline": "string", "prospect_company_id": "uuid" } }
{ "name": "get_contact_profile", "input": { "contact_id": "uuid (required)" } }
{ "name": "list_lead_lists",    "input": {} }
{ "name": "list_contacts",       "input": { "list_id": "uuid (required)", "limit": "number", "offset": "number" } }
{ "name": "enrich_contacts",     "input": { "contact_ids": "uuid[] (required, max 8)", "profile_id": "uuid (optional)" } }
{ "name": "create_lead_list",    "input": { "name": "string (required)", "description": "string" } }
{ "name": "add_contacts_to_list", "input": { "list_id": "uuid (required)", "contact_ids": "uuid[] (required)" } }
{ "name": "remove_contacts_from_list", "input": { "contact_ids": "uuid[] (required)", "list_id": "uuid" } }
{ "name": "sync_linkedin_connections", "input": { "cursor": "string", "sync_id": "string", "limit": "number ≤500" } }
{ "name": "list_blacklist",      "input": { "query": "string", "limit": "number", "offset": "number" } }
{ "name": "check_blacklist",     "input": { "contact_id": "uuid", "company": "string", "domain": "string" } }
{ "name": "delete_contacts",     "input": { "contact_ids": "uuid[] (required)", "confirm": "true (required)", "delete_crm_leads": "boolean", "force": "boolean" } }

すべての連絡先は、必ずいずれか1つのリストに登録されます。add_contacts_to_list は連絡先を別のリストへ移動し、remove_contacts_from_list は連絡先を CRM Imports に戻します(削除はされません)。sync_linkedin_connections は、あなたの1次つながりをページ単位で取得します(1ページあたり最大500件で、サーバーが間隔を調整します)。list_blacklist / check_blacklist は全社共通のブラックリストを参照します。

delete_contacts はキャンペーン履歴も含めて連絡先を完全に削除します。ユーザーから明示的な依頼があり、対象の連絡先を提示した後に限り、confirm: true を指定して呼び出してください。特定の相手へのアプローチを止める場合は、代わりに exclude_contacts_from_campaign を使用します。 upsert_linkedin_contact は、正確なURLがすでにわかっているLinkedInプロフィールに対して、冪等に処理する方法です。連絡先を CRM Imports リストに作成するか、既存の contact_id を返すため、CRM連携ではGoogle検索に依存せずに add_contacts_to_campaign の前に安全に呼び出せます。

list_lead_lists は、各連絡先グループの list_id、名前、説明、連絡先数を返します。返された list_id を list_contacts に渡してください。

一般的な連絡先のワークフロー:list_lead_lists → list_contacts → add_contacts_to_campaign。連絡先は引き続きリードリストに所属しますが、既存の連絡先をキャンペーンに追加するには、その contact_id と対象の campaign_id だけが必要です。

search_linkedin_people と search_linkedin_navigator は、LinkedInの検索結果をそのまま返します。連絡先は保存しないため、保存またはキャンペーンへの追加を希望するプロフィールごとに upsert_linkedin_contact を呼び出してください。

enrich_contacts は、接続済みアカウントを使って各連絡先のLinkedInプロフィールを読み取り、見出し、所在地、現在の会社名と役職を保存します。GDPRのデータ最小化に従い、Salesbotは写真、「自己紹介」文、学歴、スキル、過去の職歴、連絡先情報を保存しません。search_google_xray の直後に実行するのがおすすめです。

キャンペーン
{ "name": "list_campaigns",           "input": { "status": "draft|running|paused|completed|stopped (optional)" } }
{ "name": "create_campaign",          "input": { "name": "string (required)", "profile_id": "uuid (required)", "description": "string", "daily_limit": "number", "sender_context": "string", "steps": "[{ action: 'connect'|'message'|'visit', delay_hours, use_ai, ai_prompt, ai_template, message_mode: 'template'|'creative', send_without_message }] (required)" } }
{ "name": "update_campaign_settings", "input": { "campaign_id": "uuid (required)", "name": "string", "description": "string", "daily_limit": "number", "sender_context": "string", "auto_approve_messages": "boolean", "status": "running|paused|draft|stopped" } }
{ "name": "start_campaign",           "input": { "campaign_id": "uuid (required)" } }
{ "name": "stop_campaign",            "input": { "campaign_id": "uuid (required)" } }
{ "name": "add_contacts_to_campaign", "input": { "campaign_id": "uuid (required)", "contact_ids": "uuid[] (required)" } }
{ "name": "exclude_contacts_from_campaign", "input": { "campaign_id": "uuid (required)", "contact_ids": "uuid[] (required)", "reason": "string" } }
{ "name": "list_campaign_queue",      "input": { "campaign_id": "uuid (required)", "limit": "number" } }

message_mode は、メッセージのステップでサンプル(ai_template)をどのように使うかを決定します。template はサンプルを一字一句そのまま送信し、AIはそのフィールドのみを埋めます(例:[Firma] → "Škoda Auto")。creative は、サンプルをスタイルの例としてのみ使い、AIが ai_prompt をもとにリードごとに新しいメッセージを作成します。キャンペーンの sender_context(「自己紹介」)は、プロンプトに {{o_mne}} と記載されている箇所でのみ使用されます。プロンプトまたはサンプル内のリンクは、記載されたとおりに保持されます。

exclude_contacts_from_campaign は対象の連絡先への以降のアプローチをすべて停止しますが、履歴は保持されます。list_campaign_queue は、各連絡先の状態、招待状況、次に呼び出すツールを表示します。

AIメッセージ(作成 → 承認 → 送信)
{ "name": "prepare_campaign_messages", "input": { "campaign_id": "uuid (required)", "limit": "number ≤10" } }
{ "name": "generate_campaign_message", "input": { "campaign_contact_id": "uuid (required)", "step_id": "uuid (required)", "custom_instructions": "string" } }
{ "name": "list_pending_approvals",    "input": { "campaign_id": "uuid", "limit": "number" } }
{ "name": "approve_message",           "input": { "campaign_contact_id": "uuid (required)", "edited_messages": "[{step_id, message}]", "skip_gpt_check": "boolean" } }
{ "name": "reject_message",            "input": { "campaign_contact_id": "uuid (required)", "reason": "string (required)" } }
{ "name": "list_mcp_pending_actions",  "input": { "action_type": "string", "limit": "number" } }

prepare_campaign_messages は、呼び出し1回につき保留中の連絡先を最大10件まで下書きとしてキューに追加します。remaining_pending が0より大きい間は、繰り返し実行してください。キャンペーンでAI承認が有効(auto_approve_messages)になっている場合、Salesbotは各下書きの連絡先の名前と性別、会社名、残っているプレースホルダー、署名、文法を確認し、条件を満たしたものだけを承認します。それ以外は list_pending_approvals で保留されます。list_mcp_pending_actions は、ユーザーの承認待ちの単発メッセージと招待を一覧表示します(読み取り専用)。

Eメール(ご自身のメールボックス:Outlook または IMAP/SMTP)
{ "name": "list_email_integrations", "input": {} }
{ "name": "send_email",              "input": { "provider_campaign_id": "mailbox_id (required)", "body": "string (required)", "subject": "string", "provider": "mailbox", "crm_lead_id": "uuid", "contact_id": "uuid", "email": "string" } }
{ "name": "list_email_outreach",     "input": { "status": "string", "crm_lead_id": "uuid", "contact_id": "uuid", "limit": "number" } }
{ "name": "get_email_status",        "input": { "outreach_id": "uuid (required)" } }
{ "name": "cancel_email",            "input": { "outreach_id": "uuid (required)", "reason": "string" } }

send_email は、ご自身のメールボックスから 1 人に個人メールを送信します。list_email_integrations で取得した mailbox_id を渡してください。Salesbot は送信可能時間内に、数分間隔で、1 日あたりの上限を守って送信します。Smartlead と Instantly はサポートを終了しました。同意: チェコ共和国では、既存顧客を除き、商用メールの送信には受信者の事前の同意が必要です(法律 480/2004 Coll. 第 7 条)。新しい相手への初回連絡には LinkedIn を使用してください。

送信前に、すべてのメールをチェックします。挨拶(名前が正しいこと、連絡先の性別に応じて pane/paní を使っていること)、会社名、{{company}} などの置換されていないプレースホルダー、チェコ語の文法、メールボックスが署名を追加する場合に本文に署名が含まれていないことを確認します。チェックに失敗すると、理由とともに AI_CHECK_FAILED が返され、メールは送信されません。内容を修正して再度呼び出してください。2 回目も失敗すると、ユーザーによる手動承認に回されます。承認が必要な場合、メールは pending_approval の状態で保留されます。cancel_email は、まだ送信されていないメールを取り消します。

LinkedIn への直接アクション
{ "name": "send_connection_request", "input": { "linkedin_id": "string (required)", "profile_id": "uuid (required)", "contact_id": "uuid" } }
{ "name": "send_linkedin_message",   "input": { "linkedin_id": "string (required)", "message": "string ≤5000 (required)", "profile_id": "uuid (required)" } }
{ "name": "publish_linkedin_post",   "input": { "profile_id": "uuid (required)", "text": "string ≤3000 (required)", "external_link": "string", "as_organization": "string", "auto_publish": "boolean" } }
{ "name": "get_daily_limits",        "input": { "profile_id": "uuid (optional)" } }

publish_linkedin_post には、サーバー側で独自に適用される安全制限があり、ローリング 60 分間に LinkedIn アカウントごとに公開できる投稿は 1 件 です。これは個人の投稿と組織の投稿の両方に適用され、get_daily_limits の posts クォータとして報告されます。クォータを使い切ると、このツールは HOURLY_LIMIT_REACHED を返し、投稿を公開しません。

受信トレイ(リアルタイム)
{ "name": "list_inbox_chats",  "input": { "profile_id": "uuid (optional)", "limit": "number 1-50", "cursor": "string" } }
{ "name": "get_chat_messages", "input": { "chat_id": "string (required)", "profile_id": "uuid (optional)", "limit": "number 1-50", "cursor": "string" } }
{ "name": "reply_to_chat",     "input": { "chat_id": "string (required)", "message": "string ≤5000 (required)", "profile_id": "uuid (optional)" } }
{ "name": "mark_chat_read",    "input": { "chat_id": "string (required)", "profile_id": "uuid (optional)" } }
CRM(パイプライン、メモ、タスク、メッセージストア)

CRM は、連絡先とは別の永続的なパイプラインです。リードは、キャンペーンに追加されたとき、または以下のツールのいずれかが初めてリードにアクセスしたときに、CRM に登録されます。また、生成したアウトリーチ文面の永続的な保存先としても機能します。save_lead_message でメール/LinkedIn の下書きやフォローアップを保存し、list_lead_messages または get_lead_context で読み返し、send_email でメールを送信できます(上記の「Eメール」を参照)。

{ "name": "add_companies_to_crm", "input": { "prospect_company_ids": "uuid[] (max 100)", "companies": "[{ name, website?, industry?, location?, headcount?, linkedin_url?, notes? }] (max 50; no LinkedIn needed)" } }
{ "name": "add_crm_contact", "input": { "full_name": "string (required)", "email": "string?", "phone": "string?", "company": "string?", "position": "string?", "website": "string?", "crm_company_id": "uuid?", "notes": "string?" } }
{ "name": "enrich_crm_company_ares", "input": { "crm_company_id": "uuid (required)", "ico": "string? (Czech company ID; otherwise matched by name)", "include_people": "boolean? (registry officers: name, role, source only)" } }
{ "name": "add_contacts_to_crm", "input": { "contact_ids": "uuid[] (required)" } }
{ "name": "search_crm_leads",   "input": { "query": "string", "stage": "string", "campaign_id": "uuid", "list_id": "uuid", "crm_company_id": "uuid", "sort_by": "string", "sort_direction": "asc|desc", "limit": "number", "offset": "number" } }
{ "name": "update_crm_lead",    "input": { "contact_id": "uuid", "crm_lead_id": "uuid", "stage": "string", "deal_value": "number", "clear_deal_value": "boolean", "email": "string", "company": "string", "note": "string" } }
{ "name": "set_deal_stage",     "input": { "contact_id": "uuid (required)", "stage": "string (required)", "note": "string" } }
{ "name": "log_crm_note",       "input": { "contact_id": "uuid (required)", "summary": "string (required)", "pain_points": "string[]", "sentiment": "positive|neutral|negative" } }
{ "name": "save_lead_message",  "input": { "contact_id": "uuid (required)", "body": "string (required)", "channel": "email|linkedin", "kind": "string e.g. initial|followup", "subject": "string", "status": "draft|queued|sent", "message_id": "uuid (update existing)" } }
{ "name": "list_lead_messages", "input": { "contact_id": "uuid (required)", "channel": "email|linkedin", "kind": "string", "limit": "number" } }
{ "name": "create_task",        "input": { "title": "string (required)", "contact_id": "uuid", "due_at": "ISO 8601", "details": "string" } }
{ "name": "list_tasks",         "input": { "status": "open|done|cancelled|all", "contact_id": "uuid", "limit": "number" } }
{ "name": "complete_task",      "input": { "task_id": "uuid (required)", "status": "done|open|cancelled" } }
{ "name": "get_lead_context",   "input": { "contact_id": "uuid (required)", "notes_limit": "number" } }
{ "name": "update_contact",     "input": { "contact_id": "uuid (required)", "email": "string", "phone": "string", "location": "string", "company": "string", "position": "string", "headline": "string", "company_info": "string (max 400 chars)", "web_research": "string (max 4000 chars)" } }
{ "name": "set_lead_fields",    "input": { "contact_id": "uuid (required)", "fields": "object { field_key: value }" } }
{ "name": "export_crm",         "input": { "limit": "number (default 5000, max 20000)" } }
{ "name": "delete_crm_leads",   "input": { "crm_lead_ids": "uuid[] (required)", "confirm": "true (required)" } }

リードの会社名と LinkedIn からの会社インポートをもとに、会社(アカウント)が自動的に作成されます。

{ "name": "list_crm_companies",  "input": { "query": "string", "stage": "string", "limit": "number", "offset": "number" } }
{ "name": "get_crm_company",     "input": { "crm_company_id": "uuid (required)" } }
{ "name": "update_crm_company",  "input": { "crm_company_id": "uuid (required)", "notes": "string", "append_notes": "boolean", "name": "string", "website": "string", "industry": "string", "location": "string", "headcount": "string" } }
{ "name": "merge_crm_companies", "input": { "keep_crm_company_id": "uuid (required)", "merge_crm_company_id": "uuid (required)" } }
{ "name": "delete_crm_company",  "input": { "crm_company_id": "uuid (required)", "confirm": "true (required)", "delete_leads": "boolean" } }

delete_crm_leads、delete_crm_company、merge_crm_companies は元に戻せません。ユーザーから明示的に依頼された場合に限り、変更内容をユーザーに示したうえで使用してください。

get_lead_context は、リードの 360° 全体コンテキスト(プロフィール、パイプラインのステージ、カスタムフィールド、保存済みのアウトリーチメッセージ、会話の要約、未完了のタスク、最近の LinkedIn でのやり取り、ステージの履歴)を返します。

CRM の設定(ステージとカスタムフィールド)

パイプラインのステージとカスタムフィールドは、ユーザーが設定できます。

{ "name": "list_crm_stages",  "input": {} }
{ "name": "add_crm_stage",    "input": { "label": "string (required)", "color": "hex string" } }
{ "name": "rename_crm_stage", "input": { "key": "string (required)", "label": "string", "color": "hex string" } }
{ "name": "delete_crm_stage", "input": { "key": "string (required)", "reassign_to": "string" } }
{ "name": "list_crm_fields",  "input": {} }
{ "name": "add_crm_field",    "input": { "label": "string (required)", "type": "text|number|date|url" } }
{ "name": "delete_crm_field", "input": { "key": "string (required)" } }

呼び出し例

リクエスト(MCP tools/call):

{ "jsonrpc": "2.0", "id": 1, "method": "tools/call",
  "params": { "name": "get_daily_limits", "arguments": {} } }

成功時の結果コンテンツ(text 部分内の JSON):

{ "profile_active": true,
  "limits": { "connections": { "used": 0, "limit": 30, "effective_limit": 30 },
              "messages": { "used": 0, "limit": 40, "effective_limit": 40 },
              "posts": { "used": 0, "limit": 1, "effective_limit": 1, "window": "hour" } } }

エラー時の結果コンテンツ:

{ "ok": false, "code": "ACCOUNT_NOT_CONNECTED", "error": "Profile has no connected LinkedIn account." }

エラーコード

コード意味
AUTH_MISSING / AUTH_INVALID / AUTH_EXPIREDキーがない/誤っている/期限切れ
SUBSCRIPTION_REQUIREDトライアルの期限切れ、または有効なプランがありません
RATE_LIMITEDMCP リクエストが多すぎます。速度を落としてください
ACCOUNT_NOT_CONNECTEDプロフィールに LinkedIn が接続されていません(connect_linkedin を呼び出してください)
ACCOUNT_BLOCKEDLinkedIn がアカウントを制限しました(キャンペーンは自動的に一時停止されます)
PROFILE_INACTIVE / PROFILE_NOT_FOUND / ACCESS_DENIEDプロフィール/所有権
DAILY_LIMIT_REACHED / HOURLY_LIMIT_REACHEDクォータに達しました
OUTSIDE_ALLOWED_HOURSアカウントの送信可能時間外です
BLACKLISTED対象の会社/ドメインがブラックリストに登録されています
APPROVAL_REQUIRED送信前の人による承認待ちです
AI_CHECK_FAILEDメールが Salesbot のチェックに合格しませんでした。エラーの指示に従って修正し、再送してください
NO_EMAIL / INVALID_EMAIL / DUPLICATE_OUTREACHメールアドレスがない/無効なメールアドレス/すでに該当するメールキャンペーンでキューに追加済み
SAFETY_BLOCKEDテキストがプロンプトインジェクションまたは未要求の URL のように見えます
REPLY_LIMIT_REACHEDこの会話では、すでに AI が 2 回返信しています
VALIDATION_ERROR / NOT_FOUND / UPSTREAM_ERROR入力が不正/見つかりません/上流でのエラー

安全性と責任ある利用

  • デフォルトでGDPRに準拠: B2Bの営業活動に必要な項目(氏名、見出し、現在の役職、所在地、プロフィールリンク、情報源、日付)のみを保存します。12か月間活動のない人のデータは自動的に削除されます。異議を申し立てた人は個人単位の連絡禁止リストに登録され、以後データを保存したり連絡したりすることはありません。ユーザーが管理者、Salesbotが処理者です(利用規約にデータ処理契約があります)。

LinkedInのアルゴリズムに対する保護機能と、日次の安全しきい値を組み込み済みです。 これは人間関係を築くためのツールであり、一斉メール送信ツールではありません。人間が承認した、少数の高度にパーソナライズされたメッセージを送るよう設計されており、サーバーは大量送信による不正利用を積極的に防ぎます。

  • アカウントごとの日次上限を設定し、新規アカウントには段階的に上限を引き上げます。MCPの時間あたりのスロットリングと、ユーザーごとの一般的なリクエスト頻度制限も設けています。
  • 組織の投稿も含め、アカウントごとに独立した投稿上限を設け、ローリング時間あたりのLinkedIn投稿を1件までに制限します。
  • 送信アクションの人間参加型承認キュー(設定可能)。
  • 許可する時間帯/曜日を設定し、アクション間には人間のペースに合わせたランダムな遅延を設けます。
  • プロンプトインジェクション対策: 信頼できないCRM/受信トレイのテキストはデータとして扱い、送信テキストは送信前にスキャンします。
  • 受信トレイ: 会話ごとのAI返信は最大2件(過剰な送信を防止)とし、返信はインジェクション検査を行います。
  • アカウント保護: LinkedInによるブロック(プロバイダーの403)が発生すると、キャンペーンは自動的に一時停止し、ユーザーにメールで通知されます。

FAQ

どのAIクライアントが使えますか? MCP Streamable‑HTTPクライアントであれば利用できます。claude.ai、Cowork、Claude Code、Claude Desktop、Claude API、Cursor、Codexなどに対応しています。

AIにLinkedInのパスワードが見られますか? いいえ。認証はホスト型プロバイダーフロー(auth.salesbot.czでホワイトラベル化)を通じて行われます。MCPサーバーが使用するのはアカウントハンドルのみです。

AIは私の承認なしにメッセージを送信できますか? 承認を無効にした場合に限り可能です。デフォルトでは、送信アクションは人間の承認待ちキューに入ります。

LinkedInアカウントにとって安全ですか? 日次/時間あたりの上限、段階的な上限引き上げ、許可する時間帯、ランダムな遅延、ブロック検出時の自動一時停止は、すべてサーバー側で適用されます。

ライセンス

MIT — LICENSEを参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。