LinkedIn MCP Server について
LinkedIn MCP Serverは、LinkedInのプロフィール閲覧、企業調査、求人検索、会話管理を行うエージェント向けのオープンソースサーバーです。ローカルブラウザーのセッションを使い、検索と一部のアカウント操作を提供します。
主な機能
- 01プロフィールと企業情報の閲覧
- 02人物、企業、求人の検索
- 03フィード投稿と会話の確認
- 04メッセージ送信とつながりリクエスト管理
- 05ローカルブラウザーのログインセッション再利用
活用シーン
- 01企業と従業員の調査
- 02人物や求人の検索
- 03LinkedIn受信箱の会話確認
- 04確認後のメッセージやつながりリクエスト送信
MCP 対応
MCPクライアントに、LinkedInのプロフィール、企業、求人、フィード、メッセージ用ツールを公開します。stdioとStreamable HTTPに対応し、ローカルブラウザーのセッションで認証します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
20掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| sections | any | いいえ | 読み取る追加セクションをカンマ区切りで指定します。 メインのプロフィールページは常に含まれます。 利用可能なセクション:experience、education、interests、honors、languages、certifications、skills、projects、contact_info、posts 例:"experience,education"、"contact_info"、"skills,projects"、"honors,languages"、"posts" デフォルト(None)ではメインのプロフィールページのみを読み取ります。 |
| max_scrolls | any | いいえ | 各セクションで追加コンテンツを読み込むための最大ページネーション試行回数。 詳細セクション(experience、certifications、skills など)では、"Show more" ボタンをクリックする最大回数です。アクティビティ/posts では、最下部までスクロールする最大反復回数です。この呼び出しのすべてのセクションに適用されます。デフォルト(None)は詳細セクションで 5 回、posts で 10 回です。セクション内の項目が多い場合(例:certifications が 30+ 件)は増やしてください(max_scrolls=20)。他のセクションの処理が遅くならないよう、負荷の高いセクションは別の呼び出しでリクエストしてください。 |
| linkedin_username | string | はい | LinkedIn のユーザー名(例:"stickerdaniel"、"williamhgates")。プロフィール URL 全体も指定でき、その場合はユーザー名が抽出されます。 |
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
LinkedIn 用 MCP サーバー
ご自身のブラウザーセッションを通じて、AI エージェントが LinkedIn にアクセスできるようにします。プロフィールの閲覧、企業の調査、求人の検索、会話やつながりリクエストの管理ができます。
これは独立したオープンソースプロジェクトであり、LinkedIn または Microsoft とは提携していません。LinkedIn は LinkedIn Corporation の商標であり、本ソフトウェアが連携するサービスを示す目的でのみ使用しています。
LinkedIn MCP のスポンサー
サーバーを実行したくない場合は、Cadenza が、ウェブ、デスクトップ、モバイルで利用できる、エージェント向けのホスト型 LinkedIn MCP サーバーです。LinkedIn Classic、Sales Navigator、Recruiter にわたる 100 以上のアクションに対応しています。リクエスト制限が組み込まれており、アクションごとに分単位および日単位の上限を細かく調整できます。
FOUNDING20 のコードを使うと、初年度が 20% 割引になります。Cadenza を試す →
この MCP サーバーは Unipile の支援を受けています。Unipile は開発者向けのフルマネージド型クラウドサービスです。Classic、Sales Navigator、Recruiter 向けのホスト型 LinkedIn API を提供し、認証、セッション、インフラストラクチャを代わりに管理します。
インストール方法 - LinkedIn MCP サーバー
| ツール | 説明 |
|---|---|
get_person_profile | 経験、学歴、スキル、プロジェクト、投稿などのプロフィール項目を読み取ります。 |
get_my_profile | 他のプロフィールと同じ項目選択で、自分のプロフィールを読み取ります。 |
connect_with_person | 任意のメッセージを添えてつながりリクエストを送信するか、届いたリクエストを承認します。 |
get_sidebar_profiles | 知り合いかもしれない人を含む、おすすめプロフィールへのリンクを検索します。 |
get_inbox | 最近の受信トレイの会話を一覧表示し、各スレッドを開くリンクを返します。 |
get_conversation | LinkedIn のユーザー名またはスレッド ID を使って、会話のメッセージを読み取ります。 |
search_conversations | キーワードでメッセージを検索し、一致する会話スレッドへのリンクを返します。 |
send_message | 確認後に送信します。プロフィールを宛先に指定すると、新しい DM が開くことがあります(#483)。 |
get_company_profile | 企業情報を読み取ります。投稿や募集中の求人などの項目を任意で指定できます。 |
get_company_posts | 企業のフィードから最近の投稿を読み取り、元の投稿へのリンクを返します。 |
search_companies | キーワードで企業を検索し、LinkedIn プロフィールへのリンクを返します。 |
get_company_employees | 企業の従業員を検索します。名前、役職、スキルで絞り込むこともできます。 |
search_jobs | キーワードと勤務地で求人情報を検索し、詳細を読み取るための求人 ID を返します。 |
get_saved_jobs | 保存した求人情報を一覧表示し、詳細を参照するための求人 ID を返します。 |
search_people | キーワード、勤務地、つながりの度合い、現在の勤務先で人物を検索します。 |
get_job_details | 求人情報の説明、応募条件、企業情報を読み取ります。 |
get_job_apply_url | 求人が「簡単応募」を使用しているか、雇用主の応募ページにリンクしているかを確認します。 |
get_feed | ホームフィードから最近の投稿を読み取り、元の投稿へのリンクを返します。 |
search_posts | キーワードで投稿を検索します。過去 1 日、1 週間、1 か月に限定することもできます。 |
close_session | 保存したログイン情報を削除せずに、共有ブラウザーセッションを閉じます。 |
uvx を使ったセットアップ(推奨)
前提条件: uv をインストールしてください。
インストール
MCP クライアントの mcpServers 設定に追加します
{
"mcpServers": {
"mcp-server-linkedin": {
"command": "uvx",
"args": ["mcp-server-linkedin@latest"],
"env": { "UV_HTTP_TIMEOUT": "300" }
}
}
}
@latest タグを付けると自動更新が有効になり、LinkedIn の現在のページ構造に合わせてサーバーが動作します。サーバーはすぐに起動し、共有 Patchright Chromium ブラウザーのキャッシュをバックグラウンドで ~/.linkedin-mcp/patchright-browsers に準備します。認証が必要な最初のツール呼び出し時に、ログイン済みのローカルブラウザーに LinkedIn のセッションがあればそれを再利用し、なければ LinkedIn のログイン用ブラウザーウィンドウを開きます。
AI エージェントですか?自動更新を有効にする前に、ユーザーにすばやく確認してください。
メモ
ブラウザーのセットアップまたはログインが完了するまでは、初期のツール呼び出しでセットアップ/認証の進行中を示すエラーが返ることがあります。明示的にセッションを作成する場合は、
uvx mcp-server-linkedin@latest --loginを実行してください。
セットアップのヘルプ
🔧 設定
トランスポートモード
- デフォルト(stdio):ローカル MCP サーバー向けの標準的な通信方式
- Streamable HTTP:ウェブベースの MCP サーバー向け
- トランスポートを指定しない場合、サーバーはデフォルトで
stdioを使用します - 対話型ターミナルでトランスポートを明示しない場合は、選択メニューが表示されます
CLI オプション
セッション:
- `--login` - ブラウザーを開いてサインインし、セッションを保存します - `--import-from-browser [BROWSER]` - ローカルでサインイン済みの Chromium 系ブラウザー(`chrome`、`chromium`、`brave`、`edge`、`arc`、`vivaldi`、`helium`、`yandex`、`whale`、`coccoc`、`opera`、`opera_gx`、`auto`)からセッションを再利用します。フラグを値なしで指定すると `auto` が選ばれ、LinkedIn のセッションが有効な直近使用のブラウザーが使用されます。 - `--auto-import` / `--no-auto-import` - セッションが必要な最初のツール呼び出し時に、手動ログインにフォールバックする前に、サインイン済みのローカルブラウザーからセッションをインポートします(デフォルト: オン)。Docker 内、プロキシ配下、および非ループバックの HTTP バインドではスキップされます。macOS ではキーチェーンが一度プロンプトを表示する場合があります。 - `--logout` - 保存されたセッションを消去します - `--login-viewer` - Docker 専用: `--login` のブラウザーを、トークンで保護された URL のポート 6080 で表示します([認証](#authentication)を参照) - `--user-data-dir PATH` - ブラウザープロファイルのディレクトリ(デフォルト: ~/.linkedin-mcp/profile)。セッションをローテーションまたは消去すると、このディレクトリ*とその親*が削除され、保存された Cookie と派生プロファイルも失われます。 - `--claim-profile-root` - サーバーが単独では取得しないプロファイルディレクトリ(親にすでに他のファイルがある場合など)を引き継ぎます。ディレクトリごとに一度だけ必要です。トランスポート:
--transport {stdio,streamable-http}- トランスポートモードを強制します(デフォルト: stdio)--host HOST/--port PORT/--path PATH- HTTP サーバーのアドレス(デフォルト: 127.0.0.1、8000、/mcp)
タイムアウト:
--timeout MS- 単一ページ操作のタイムアウト(デフォルト: 5000)--tool-timeout SECONDS- ツール呼び出し全体のタイムアウト(デフォルト: 180)。多くのページを読み取る呼び出し、低速なネットワーク、コールドスタートのブラウザーの場合はこれを引き上げてください。--login-timeout SECONDS- ログイン用ブラウザーがサインインの完了を待つ時間(デフォルト: 1800、0 = 無制限)。いずれの場合も--login-viewerは 30 分後にセッションを終了します。--login-inline-wait SECONDS- ツール呼び出しがログインの完了を待ち、モデルに再試行を指示するまでの時間(デフォルト: 25、最大 45、0 = 即座に戻る)
共有ブラウザー:
--browser-wait SECONDS- 別のサーバープロセスが共有ブラウザーを引き渡すまで待つ時間(デフォルト: 25、最大 45、0 = 即座にビジーを報告)。複数の MCP クライアントが同時に実行されている場合にのみ重要です。--browser-min-hold SECONDS- このプロセスが共有ブラウザーを引き渡す前に保持する最短時間(デフォルト: 20)。--browser-waitより 3 秒低い値に制限されるため、こちらを引き上げる際はそちらも合わせて引き上げてください。値を大きくするとブラウザーの再起動は減りますが、他のクライアントの待ち時間は長くなります。--browser-idle-timeout SECONDS- ツール呼び出しなしでこの時間が経過すると、アイドル状態のブラウザーを閉じてプロファイルを解放します(デフォルト: 600、0 = 開いたままにする)
ブラウザー:
--no-headless- ブラウザーウィンドウを表示します(デバッグに便利です)--chrome-path PATH- Chrome/Chromium 実行ファイルへのパス--proxy-server URL- ブラウザーのトラフィックをプロキシ経由でルーティングします(scheme://host:port形式)。--loginの前に設定してください。プロキシの使用を参照してください。
その他:
--log-level {DEBUG,INFO,WARNING,ERROR}- ログレベル(デフォルト: WARNING)
普段使っているブラウザーからセッションをインポートする
Chrome、Chromium、Brave、Edge、Arc、Vivaldi、Helium、Yandex、Naver Whale、Cốc Cốc、Opera、Opera GX のいずれかで LinkedIn にすでにサインインしている場合は、手動の --login 手順を省略して、そのセッションを再利用できます:
# Auto-pick the most recently used browser with a live LinkedIn session
uvx mcp-server-linkedin@latest --import-from-browser
# Or target a specific browser
uvx mcp-server-linkedin@latest --import-from-browser brave
これはブラウザーの LinkedIn Cookie を読み取り、フィードに対して検証し、--login が書き込むのと同じ場所である ~/.linkedin-mcp/profile/ に保存します。注意事項:
- 複数のブラウザーにサインインしている場合、最後に使用した有効な LinkedIn セッションから順に試します。LinkedIn がセッションを拒否した場合(取り消し済み、またはリモートからログアウト済みの場合)は、自動的に次に新しいセッションを試し、サーバーが最初に受け入れたセッションをインポートします。選択を求めるプロンプトは表示されません。特定のブラウザーを指定するには、ブラウザー名を渡してください。
- macOS では、OS のキーチェーンからブラウザーの Safe Storage へのアクセス許可を求められる場合があります。最も確実に読み取るには、先に元のブラウザーを閉じてください。
- Chrome 127 以降のアプリバインド暗号化(
v20)で保護された Cookie は、OS の昇格なしでは復号できません。その場合は、代わりに--loginを使用してください。 - インポートされる Cookie は、実際のログイン時にディスク上に保存される Cookie セットと一致します。ローカルサーバーは、保存済みのプロファイルから Cookie をすべて読み戻します。Docker ブリッジは、通常のセッションで使用するものと同じ最小限の認証用サブセットに絞り込みます。
HTTP モードとデバッグ
基本的な使用例:
# Run with debug logging
uvx mcp-server-linkedin@latest --log-level DEBUG
HTTP モードの例(Web ベースの MCP クライアント向け):
uvx mcp-server-linkedin@latest --transport streamable-http --host 127.0.0.1 --port 8080 --path /mcp
実行時のサーバーログは FastMCP/Uvicorn によって出力されます。
共有 LinkedIn ブラウザーセッションを保護するため、ツール呼び出しは、同じサーバープロセス内でも別々のプロセス間でもシリアル化されます。複数の MCP クライアントを同時に実行すると、それぞれが独自のサーバープロセスを起動します。ブラウザーを使用できるのは一度に 1 つのクライアントだけで、ほかのクライアントは短時間待機し、呼び出しが完了するとすぐに使用を引き継ぎます。待機時間が長すぎるクライアントには「browser is busy」メッセージが表示されますが、そのまま再試行できます。待機/取得/解放のログを確認するには、--log-level DEBUG を使用してください。
これは同じマシン上、かつ同じランタイム内で実行されるプロセスを対象とします。同じ ~/.linkedin-mcp ディレクトリを共有するホストと Docker コンテナー間には適用されないため、コンテナーの実行中にホストで --login または --logout を実行しないでください。
mcp inspector でテストする:
- mcp inspector
bunx @modelcontextprotocol/inspectorをインストールして実行します - 入力済みのトークン URL をクリックして、ブラウザーで inspector を開きます
Transport TypeとしてStreamable HTTPを選択しますURLにhttp://localhost:8080/mcpを設定します- 接続します
- ツールをテストします
❗ トラブルシューティング
インストールに関する問題
- uv がインストールされていることを確認します:
curl -LsSf https://astral.sh/uv/install.sh | sh - uv のバージョンを確認します:
uv --version(0.4.0 以降である必要があります) - 初回実行時に、
uvxがすべての Python 依存関係をダウンロードします。接続が遅い場合、uv のデフォルトの 30 秒の HTTP タイムアウトでは短すぎることがあります。上記の推奨設定では、これを避けるためにUV_HTTP_TIMEOUT=300(秒)がすでに設定されています。 - Windows で
DLL load failed while importing _greenletが発生する場合:greenlet 3.5.5 以降に更新してください。このバージョン以降では、公開されている Windows 用ホイールに C++ ランタイムが再び内包されています。新たにuvxを実行すれば自動的に解決します。依存関係のバージョンを固定している環境では、uv lock --upgrade-package greenletを実行してください。MSVCP140.dllが必要なのは greenlet 3.3.1 から 3.5.4 までのバージョンのみです。この DLL は python.org のインストーラーにもuv管理のビルドにも含まれていません。また、ソースからビルドした greenlet では、どのバージョンでも必要になることがあります。バージョンを変更できない場合は、Microsoft Visual C++ 再頒布可能パッケージ からその DLL を入手できます。greenlet#525 で報告され、greenlet#526 で修正されました。
セッションに関する問題
- ブラウザプロファイルは `~/.linkedin-mcp/profile/` に保存されます - 管理対象ブラウザのダウンロードは `~/.linkedin-mcp/patchright-browsers/` にキャッシュされます - *ブラウザキャッシュは増え続けます*: サーバーをアップグレードすると新しい Chromium リビジョンが導入されることがあり、Patchright はインストールされているいずれかのバージョンがそれを参照している限り、古いリビジョンを保持し続けます。`uvx` はこれまでに実行したバージョンごとに 1 つのアーカイブを保持するため、そのすべてがこのような参照を持つことになり、古いリビジョンが残り続けます。サーバーは、保持しているリビジョンとそれらが占める容量を示す警告をログに出力します。これを解放するには、すべての LinkedIn MCP サーバーインスタンスを停止し、`~/.linkedin-mcp/patchright-browsers/` を削除して、次回の起動時に現在のブラウザをダウンロードさせてください。ログインの問題
- 同時にアクティブな LinkedIn セッションを 1 つだけにしてください
- LinkedIn は
--loginのために LinkedIn モバイルアプリでのログイン確認を要求する場合があります - LinkedIn はログイン中に captcha チャレンジを表示する場合があります。
uvx mcp-server-linkedin@latest --loginを実行するとブラウザが開き、手動で解決できます。
タイムアウトの問題
- ページ操作の失敗 (要素が見つからない、ナビゲーションがハングする): ブラウザのページ操作タイムアウトを増やしてください:
--timeout 10000またはTIMEOUT=10000(ミリ秒、デフォルト 5000)。 - ツール呼び出し全体のタイムアウト (例: 複数セクションのプロフィール、Chromium のコールドスタート、低速なコンテナ): ツールごとの実行タイムアウトを増やしてください:
--tool-timeout 300またはTOOL_TIMEOUT=300(秒、デフォルト 180)。 - セッションなしでの最初のツール呼び出し: ローカルでログイン済みのブラウザに有効な LinkedIn セッションがある場合、サーバーは手動ログインを強制する代わりにそれを自動インポートします (
AUTO_IMPORT_FROM_BROWSER/--auto-importを参照)。macOS ではキーチェーンが Safe Storage アクセスを一度求める場合があります。インポート可能なブラウザセッションが存在しない場合は、ログインウィンドウを開く動作にフォールバックし、最大LOGIN_INLINE_WAIT秒 (デフォルト 25、最大 45、--login-inline-wait) 待機するため、すばやいサインインは 1 回の呼び出しで完了します。待機時間が経過すると、ツールは保留中シグナルを返し、モデルは約 30 秒後に再試行します。自動インポートもインライン待機も、Docker 環境下やサーバーが非ループバック HTTP ホストにバインドされている場合は適用されません。ホスト上で--loginを使用してセッションを作成するか、Docker 用の明示的な--login --login-viewerコマンドを使用してください。 - 低速な接続のユーザーは、いずれについてもより高い値が必要になる場合があります。
すでにホストで --login を実行したのに実行するよう言われた場合
- コンテナではないマシンでツール呼び出しが「No valid LinkedIn session is available in Docker」と応答する場合、ランタイムが誤検出されています。これは、無関係なサービス用に Docker デーモンを実行している Linux ホストで発生しました。
LINKEDIN_MCP_CONTAINER=falseを設定して検出を上書きしてください。trueを設定すると逆の動作を強制します。
カスタム Chrome パス
- Chrome が標準以外の場所にインストールされている場合は、`--chrome-path /path/to/chrome` を使用してください - 環境変数で設定することもできます:`CHROME_PATH=/path/to/chrome` - macOS と Linux では、ブラウザーはプロフィールを最後に開いたブラウザーと同じか、それより新しいバージョンである必要があります。それ以外の場合、サーバーは起動を拒否します。(Windows では該当しません。ブラウザーは起動せずにバージョンを確認できないため、このチェックは無効になっています。)古いブラウザーでは、新しいブラウザーが書き込んだストア(保存済みセッションを含む)が気付かないうちに削除されることがあり、その場合のエラーはログインの有効期限切れとまったく同じように見えます。メッセージには両方のバージョンが表示されます。新しい Chrome を一度実行した後に同梱の Chromium に戻すと、この問題がよく発生します。以前使用していた新しいブラウザーを再度実行するか、`--login` を実行してください。`--login` を実行すると、保存済みセッションを別の場所に移動して、現在使用しているブラウザーで新たにサインインします。`--logout` でもセッションを消去できますが、古いセッションは復元できない形で破棄されます。また、ターミナルで確認を求めるため、MCP クライアントが起動したサーバーからは使用できません。 - この比較の対象となるのは Chrome、Chromium、Chrome for Testing のみです。フォーク版はバージョン番号の付け方が異なります(Vivaldi は 7.x で、Edge のビルド番号は同じメジャーバージョンの Chrome よりかなり小さいです)。そのため、`CHROME_PATH` にフォーク版を指定すると、どのバージョンでも満たせない起動拒否が発生する代わりに、このチェックが無効になります。Claude Desktop MCP Bundle(旧称 DXT)
前提条件: Claude Desktop。
インストール
- リリースから最新の
.mcpbアーティファクトをダウンロードします - ダウンロードした
.mcpbファイルをクリックして、Claude Desktop にインストールします - LinkedIn の任意のツールを呼び出します
起動時に、MCP Bundle は共有 Patchright Chromium ブラウザーキャッシュをバックグラウンドで準備します。認証が必要な最初のツール呼び出し時に、サーバーはサインイン済みのローカルブラウザーから LinkedIn セッションを見つけた場合はそれを再利用し、見つからない場合は LinkedIn のログインブラウザーウィンドウを開きます。
メモ
ブラウザーのセットアップまたはログインが完了するまで、最初のツール呼び出しではセットアップ/認証の進行中を示すエラーが返される場合があります。ブラウザーのダウンロードまたはサインインが完了したら、ツール呼び出しを再試行してください。
セットアップのヘルプ
❗ トラブルシューティング
初回セットアップ時の動作
- Claude Desktop はバンドルをすぐに起動し、ブラウザーのセットアップはバックグラウンドで続行されます
- Patchright Chromium ブラウザーのダウンロードがまだ完了していない場合は、少し待ってからツールを再試行してください
- 管理対象のブラウザーのダウンロードは
~/.linkedin-mcp/patchright-browsers/に共有されます - ブラウザーのキャッシュが増え続けます:Patchright は、インストール済みのバージョンが参照している間、古い Chromium リビジョンを保持するため、アップグレード後に両方がディスク上に残ることがあります。サーバーは、保持している内容を示す警告をログに記録します。空き容量を確保するには、すべての LinkedIn MCP Server インスタンスを停止し、
~/.linkedin-mcp/patchright-browsers/を削除してから、次回の起動時に現在のブラウザーをダウンロードしてください。 - Windows でバンドルが終了し、
DLL load failed while importing _greenletと表示されます:Microsoft Visual C++ Redistributable をインストールするか、greenlet 3.5.5 以降を固定するバンドルを再インストールしてください。このバージョン以降では、公開されている Windows ホイールに C++ ランタイムが再び拡張機能内に含まれています。greenlet 3.3.1 から 3.5.4 を固定したバンドルでは、この再頒布可能パッケージのMSVCP140.dllが必要です。python.org のインストーラーにもuv管理のビルドにも含まれておらず、ソースからビルドした greenlet では、どのバージョンでも必要になる場合があります。サーバーは起動時にこの問題を自ら検出して表示しますが、これはローダーがその DLL を生成できないことを確認した後に限られます。greenlet#525 で報告され、greenlet#526 で修正されました。
ログインの問題
- LinkedIn のアクティブなセッションが一度に 1 つだけであることを確認してください
--loginの際、LinkedIn モバイルアプリでログイン確認を求められる場合があります- ログイン中に LinkedIn から CAPTCHA チャレンジが表示される場合があります。ブラウザーを開いて CAPTCHA を手動で解決できる
uvx mcp-server-linkedin@latest --loginを実行してください。前提条件については、uvx のセットアップをご覧ください。
タイムアウトの問題
- ページ操作に失敗する場合(要素が見つからない、ページ遷移が停止するなど):ブラウザーのページ操作タイムアウトを延長してください:
--timeout 10000またはTIMEOUT=10000(ミリ秒、デフォルトは 5000)。 - ツール呼び出し全体がタイムアウトする場合(複数セクションのプロフィール、Chromium のコールドスタート、低速なコンテナーなど):ツールごとの実行タイムアウトを延長してください:
--tool-timeout 300またはTOOL_TIMEOUT=300(秒、デフォルトは 180)。 - セッションがない状態での最初のツール呼び出し:ローカルでログイン済みのブラウザーに有効な LinkedIn セッションがある場合、サーバーは手動ログインを強制せず、自動的にセッションをインポートします(
AUTO_IMPORT_FROM_BROWSER/--auto-importを参照)。macOS では、Safe Storage へのアクセス許可をキーチェーンから一度求められる場合があります。インポート可能なブラウザーセッションがない場合は、代わりにログインウィンドウを開き、最大LOGIN_INLINE_WAIT秒(デフォルトは 25 秒、最大 45 秒、--login-inline-wait)待機します。すぐにサインインできれば、1 回の呼び出しで処理が完了します。待機時間が過ぎると、ツールは保留中のシグナルを返し、モデルは約 30 秒後に再試行します。自動インポートもインライン待機も、Docker の使用中、またはサーバーがループバック以外の HTTP ホストにバインドされている場合は適用されません。ホストで--loginを使ってセッションを作成するか、Docker では明示的に--login --login-viewerコマンドを使用してください。 - 接続が遅い場合は、どちらかの値を大きくする必要がある場合があります。
すでに実行したのに、ホスト上で --login を実行するよう求められる
- コンテナーではないマシンでツール呼び出しに「Docker で有効な LinkedIn セッションがありません」と返される場合、実行環境が誤って検出されています。無関係なサービス用に Docker デーモンを実行している Linux ホストで、この問題が発生したことがあります。検出を上書きするには
LINKEDIN_MCP_CONTAINER=falseを設定してください。trueを設定すると、反対の動作を強制します。
Codex Plugin
インストール
ターミナルで実行
codex plugin marketplace add stickerdaniel/linkedin-mcp-server
codex plugin add linkedin-mcp-server@linkedin-mcp-server
プラグインはサーバーのリリースを固定しており、Codex は起動時にバックグラウンドで新しいリリースを取得します。認証が必要なツールを初めて呼び出すとき、サーバーはサインイン済みのローカルブラウザーから LinkedIn セッションを再利用するか、ログインウィンドウを開きます。
メモ
ブラウザーのセットアップまたはログインが完了するまでは、初回のツール呼び出しでセットアップ/認証処理中のエラーが返されることがあります。ブラウザーのダウンロードまたはサインインが完了したら、ツールをもう一度呼び出してください。
Docker を使ったセットアップ
使い方は把握しています
前提条件: Docker がインストールされ、実行中であることを確認してください。
認証
一度ログインしてください。コンテナーによって LinkedIn のログイン用ブラウザーが開き、手元のブラウザータブから操作できます。
macOS / Linux:
# Create the directory first so the container can save your session into it
mkdir -p ~/.linkedin-mcp
docker run -it --rm \
-v ~/.linkedin-mcp:/home/pwuser/.linkedin-mcp \
-p 127.0.0.1:6080:6080 \
stickerdaniel/linkedin-mcp-server:latest \
--login --login-viewer
PowerShell(Windows):
$sessionDir = Join-Path $env:USERPROFILE ".linkedin-mcp"
New-Item -ItemType Directory -Force -Path $sessionDir | Out-Null
docker run -it --rm `
-v "${sessionDir}:/home/pwuser/.linkedin-mcp" `
-p 127.0.0.1:6080:6080 `
stickerdaniel/linkedin-mcp-server:latest `
--login --login-viewer
コマンドに表示される完全な URL(アクセストークンを含みます)を開いてサインインしてください。その後、ビューアーは自動的に閉じます。セッションを完全に保存できるよう、コマンドが自動で終了するまで待ってください。30 分経過するとタイムアウトします。
以降の docker run でも、同じホストディレクトリを /home/pwuser/.linkedin-mcp にマウントしてください。そうしないと、サーバーがセッションを見つけられません。
MCP クライアントの mcpServers 設定に追加します
macOS / Linux(JSON では絶対パスを指定):
{
"mcpServers": {
"mcp-server-linkedin": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/absolute/path/to/.linkedin-mcp:/home/pwuser/.linkedin-mcp",
"stickerdaniel/linkedin-mcp-server:latest"
]
}
}
}
最初のパスは省略せずに記述してください。クライアントはシェルを介さずに docker を直接実行するため、先頭の ~ は展開されないまま Docker に渡され、マウントが拒否されます。
PowerShell(Windows): JSON ではスラッシュ区切りのパスを使用してください。
C:\Users\Alice\.linkedin-mcp のようなバックスラッシュ区切りのパスは、
\U が無効なエスケープシーケンスであるため、JSON の解析に失敗します。
代わりに C:/Users/Alice/.linkedin-mcp を使用し、Alice はユーザー名に置き換えてください。
{
"mcpServers": {
"mcp-server-linkedin": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "C:/Users/Alice/.linkedin-mcp:/home/pwuser/.linkedin-mcp",
"stickerdaniel/linkedin-mcp-server:latest"
]
}
}
}
メモ
PowerShell では、複合形式の Docker
-v引数内で~は展開されません。C:/Users/<you>/.linkedin-mcpを使用するか、Docker に渡す前に$env:USERPROFILE\.linkedin-mcpを使ってパスを組み立ててください。
メモ
セッションは時間が経つと有効期限が切れます。ツールの呼び出し時に認証を求められるようになったら、上記のログインコマンドを再実行するか、ホストで
uvx mcp-server-linkedin@latest --loginを実行してください。
セットアップのヘルプ
🔧 設定
トランスポートモード
- デフォルト(stdio):ローカル MCP サーバー向けの標準的な通信方式
- Streamable HTTP:ウェブベースの MCP サーバー向け
- トランスポートを指定しない場合、サーバーはデフォルトで
stdioを使用します - 明示的なトランスポート指定がない状態で対話型ターミナルを使用すると、選択用のプロンプトが表示されます
CLI オプション
セッション:
--auto-import/--no-auto-import- 認証が必要なツールを初めて呼び出すとき、手動ログインに切り替える前に、サインイン済みのローカルブラウザーからセッションをインポートします(Docker では無視されます)。macOS では、キーチェーンの確認が一度表示される場合があります。--logout- 保存されたセッションと、それを元に作成されたすべてのプロファイルを消去します--login-viewer---loginと併用すると、トークンで保護されたポート 6080 の URL でログイン用ブラウザーを表示します。認証に記載されているプロファイルのマウントが必要です。--user-data-dir PATH- ブラウザープロファイルのディレクトリ(デフォルト:~/.linkedin-mcp/profile)。セッションをローテーションまたは消去すると、このディレクトリと、その親ディレクトリ(保存された Cookie と派生プロファイルを格納)も削除されます。--claim-profile-root- 親ディレクトリにほかのファイルがある場合など、サーバーが自動で使用権を取得しないプロファイルディレクトリを引き継ぎます。ディレクトリごとに一度実行する必要があります。
トランスポート:
--transport {stdio,streamable-http}- トランスポートモードを指定します(デフォルト:stdio)--host HOST/--port PORT/--path PATH- HTTP サーバーのアドレス(デフォルト:127.0.0.1、8000、/mcp)
タイムアウト:
--timeout MS- 単一ページ操作のタイムアウト (デフォルト: 5000)--tool-timeout SECONDS- ツール呼び出し全体のタイムアウト (デフォルト: 180)。多くのページを読み取る呼び出し、低速なネットワーク、コールドスタートのブラウザでは、これを引き上げてください。--login-timeout SECONDS- ログイン用ブラウザがサインインの完了を待つ時間 (デフォルト: 1800、0 = 無制限)。--login-viewerはどちらの場合でも 30 分後にセッションを終了します。--login-inline-wait SECONDS- ツール呼び出しがログインの完了を待ち、モデルに再試行を指示するまでの時間 (デフォルト: 25、最大 45、0 = すぐに戻る)
共有ブラウザ:
--browser-wait SECONDS- 別のサーバープロセスが共有ブラウザを引き渡すのを待つ時間 (デフォルト: 25、最大 45、0 = すぐにビジーを報告)。複数の MCP クライアントが同時に実行されている場合にのみ重要です。--browser-min-hold SECONDS- このプロセスが共有ブラウザを引き渡す前に保持する最短時間 (デフォルト: 20)。--browser-waitより 3 秒低い値に制限されるため、それを引き上げる際はこちらも一緒に引き上げてください。値を大きくするとブラウザの再起動は減りますが、他のクライアントの待ち時間は長くなります。--browser-idle-timeout SECONDS- ツール呼び出しがこの時間ない場合に、アイドル状態のブラウザを閉じてプロファイルを解放します (デフォルト: 600、0 = 開いたままにする)
ブラウザ:
--chrome-path PATH- Chrome/Chromium 実行ファイルへのパス (Docker ではほとんど不要)--proxy-server URL- ブラウザのトラフィックをscheme://host:port形式のプロキシ経由でルーティングします。--loginの前に設定してください。詳しくは プロキシの使用 を参照してください。
その他:
--log-level {DEBUG,INFO,WARNING,ERROR}- ログレベル (デフォルト: WARNING)
メモ
Docker では、素の
--loginには依然として表示ウィンドウがありません。ワンショットのログインコマンドに限り、--login-viewerを追加して127.0.0.1:6080:6080を公開してください。Docker はデフォルトですでにヘッド付きであるため、--no-headlessを指定しても何も変わりません。実験的な--daemonは、そのオーナーが仮想ディスプレイより長く存続する可能性があるため、Docker では無視されます。
HTTP モード
HTTP モードの例 (Web ベースの MCP クライアント向け):
Bash / macOS / Linux:
docker run -it --rm \
-v ~/.linkedin-mcp:/home/pwuser/.linkedin-mcp \
-p 127.0.0.1:8080:8080 \
stickerdaniel/linkedin-mcp-server:latest \
--transport streamable-http --host 0.0.0.0 --port 8080 --path /mcp
PowerShell (Windows):
$sessionDir = Join-Path $env:USERPROFILE ".linkedin-mcp"
docker run -it --rm `
-v "${sessionDir}:/home/pwuser/.linkedin-mcp" `
-p 127.0.0.1:8080:8080 `
stickerdaniel/linkedin-mcp-server:latest `
--transport streamable-http --host 0.0.0.0 --port 8080 --path /mcp
その両方が必要で、それぞれ異なる役割を果たします。--host 0.0.0.0
は、サーバーをコンテナの内部で到達可能にします。コンテナ内で
127.0.0.1 にバインドされたプロセスには、公開ポートを経由しても
まったく到達できません。-p の前にある 127.0.0.1: は、それを外部に
おいてこのマシンに限定するものです。この接頭辞を外すと、Docker はすべての
インターフェースで公開し、認証のないエンドポイントをネットワーク上に
さらすことになります。サーバーはこの 2 つを区別できないため、どちらの
場合でも警告を出します。
ループバック公開は、これをコンテナではなくマシンに限定します。同じホスト上の
他のコンテナは、その名前が解決される場所であれば host.docker.internal を
通じて依然として到達できます。これは Docker Desktop と OrbStack では
デフォルトですが、ネイティブ Linux の Docker ではそうではありません。
実行時のサーバーログは FastMCP/Uvicorn によって出力されます。
HTTP サーバーは、localhost または自身がバインドされているアドレス宛ての
リクエストに応答し、それ以外は 421 で拒否します。これにより、単に訪問した
だけの Web サイトがこのサーバーにドメインを向け、あなた自身のブラウザを
通じてあなたの LinkedIn セッションを利用することを防ぎます。
その他の名前でサーバーに到達しようとすると拒否されます。これにはネットワーク
上のマシン名や、リバースプロキシの前にある公開名も含まれます。プロキシで
アップストリームの Host をバックエンドアドレスに書き換えるか、サービスを
提供するホスト名を指定してください:
FASTMCP_HTTP_ALLOWED_HOSTS='["mcp.example"]'
これにより、まさにその名前だけが許可され、それ以外はすべて拒否され続けます。 このエンドポイントには依然として認証がないため、自分のマシンを超えて到達 できるものは、認証を提供する何かの背後に置くべきです。
mcp inspector でテストする:
- mcp inspector をインストールして実行します
bunx @modelcontextprotocol/inspector - 事前入力されたトークン URL をクリックして、ブラウザでインスペクターを開きます
Transport TypeとしてStreamable HTTPを選択しますURLをhttp://localhost:8080/mcpに設定します- 接続します
- ツールをテストします
❗ トラブルシューティング
Docker の問題
- Docker がインストールされていることを確認してください
- Docker が実行中か確認してください:
docker ps ~/.linkedin-mcpの権限エラー:以前に rootful Docker を実行した際に、ディレクトリが root の所有者として作成された可能性があります。sudo chown -R "$(id -u):$(id -g)" ~/.linkedin-mcpを実行して修正してください。
ログインの問題
- LinkedIn のアクティブなセッションが同時に 1 つだけであることを確認してください
--loginの実行時に、LinkedIn モバイルアプリでログイン確認が必要になる場合があります- ログイン中に LinkedIn の CAPTCHA チャレンジが表示される場合があります。ブラウザーを開いて CAPTCHA を手動で解決できる
uvx mcp-server-linkedin@latest --loginを実行してください。前提条件については、uvx のセットアップを参照してください。 - ホストで再ログインした後に Docker の認証情報が古くなった場合は、Docker を一度再起動してください。新しいソースセッションから改めてブリッジできるようになります。
タイムアウトの問題
- ページ操作が失敗する場合(要素が見つからない、ナビゲーションが停止する):ブラウザーのページ操作タイムアウトを増やしてください:
--timeout 10000またはTIMEOUT=10000(ミリ秒、デフォルトは 5000)。 - ツール呼び出し全体がタイムアウトする場合(例:複数セクションのプロフィール、Chromium のコールドスタート、コンテナーの動作が遅い):ツールごとの実行タイムアウトを増やしてください:
--tool-timeout 300またはTOOL_TIMEOUT=300(秒、デフォルトは 180)。 - セッションがない状態での最初のツール呼び出し:ローカルでログイン済みのブラウザーに有効な LinkedIn セッションがある場合、サーバーは手動ログインを要求せずに自動的にインポートします(
AUTO_IMPORT_FROM_BROWSER/--auto-importを参照)。macOS では、セーフストレージへのアクセス許可を求めるキーチェーンのプロンプトが一度表示される場合があります。インポート可能なブラウザーセッションがない場合は、ログインウィンドウを開き、LOGIN_INLINE_WAIT秒(デフォルトは 25、最大 45、--login-inline-wait)待機します。これにより、すぐにサインインすれば 1 回の呼び出しで完了します。待機時間を過ぎると、ツールは保留中のシグナルを返し、モデルは約 30 秒後に再試行します。Docker の使用時、またはサーバーがループバック以外の HTTP ホストにバインドされている場合は、自動インポートもインライン待機も適用されません。ホスト上で--loginを使ってセッションを作成するか、Docker 用の明示的な--login --login-viewerコマンドを使用してください。 - 接続速度が遅い場合は、いずれかの値を大きくする必要があります。
すでに実行したのに、ホストで --login を実行するよう求められる
- コンテナーではないマシンでツール呼び出しが「No valid LinkedIn session is available in Docker」と応答する場合、実行環境が誤って判定されています。無関係なサービス用に Docker デーモンを実行している Linux ホストで、この問題が発生したことがあります。判定を上書きするには
LINKEDIN_MCP_CONTAINER=falseを設定してください。trueを設定すると逆の判定が強制されます。
カスタム Chrome パス
- Chrome が標準以外の場所にインストールされている場合は、`--chrome-path /path/to/chrome` を使用します - 環境変数でも設定できます: `CHROME_PATH=/path/to/chrome` - macOS と Linux では、ブラウザーはプロファイルを最後に開いたものと少なくとも同じくらい新しい必要があり、そうでない場合サーバーは起動を拒否します。(Windows では異なります。そこではブラウザーを起動せずにバージョンを尋ねることができないため、このチェックは無効です。)古いブラウザーは、新しいブラウザーが書き込んだストアを、保存されたセッションも含めて、気づかないうちに破棄することがあり、その場合の失敗は期限切れのログインとまったく同じに見えます。メッセージには両方のバージョンが示されます。新しい Chrome を一度実行した後にバンドルされた Chromium に戻すことが、これに遭遇する典型的な経路です。その場合は、新しい方のブラウザーをもう一度実行するか(それがどちらであっても)、`--login` を実行してください。`--login` は保存されたセッションを脇に退けて、お使いのブラウザーで新規にサインインします。`--logout` もセッションを消去しますが、古いセッションを復元可能な形で保持せずに破棄し、ターミナルで確認を求めるため、MCP クライアントが起動したサーバーからは使用できません。 - この方法で比較されるのは Chrome、Chromium、Chrome for Testing のみです。フォークは独自の番号付けをしています(Vivaldi は 7.x、Edge のビルド番号は同じメジャーの下で Chrome よりはるかに小さい)ので、`CHROME_PATH` をそれらのいずれかに向けると、誰も満たせない拒否を生み出すのではなく、チェックが無効になります。 - ドキュメント化された Docker セットアップでは、このチェックは適用されません。コンテナーは `--login` で作成したプロファイルを決して開きません。コンテナーは Cookie から独自のプロファイルを導出し、デフォルトでは起動のたびにそれをゼロから再構築するため、古いイメージがダウングレードできるものは何もありません。`EXPERIMENTAL_PERSIST_DERIVED_RUNTIME` を指定すると導出されたプロファイルが保持され、その場合に逆方向に進むイメージタグはそれを破棄して再導出しますが、これもまたお客様側で何かする必要はありません。このチェックが重要になるのはホスト上で、サーバーがそのプロファイルを直接開く場合です。`--login` 自体の間はそうではありません。`--login` はブラウザーを起動する前に古いプロファイルを脇に退けるため、これを引っかけることは決してありません。## プロキシの使用
スポンサー提供のプロキシサービス
Swiftproxy は、スティッキーセッションと世界各地の地域ターゲティングに対応した住宅用プロキシを提供しています。専用の固定 ISP オプションには、AT&T、Sky UK、Rogers などのネットワークが含まれ、トラフィックは無制限で、アドレスは更新できます。
コード PROXY90 を使うと10%割引になります。Swiftproxy を試す →
RapidProxy は、LinkedIn の自動化やブラウザーのワークフロー向けに、世界中の9,000万以上の住宅用 IP アドレスを提供しています。スティッキーセッション、地域ターゲティング、高い同時接続数に対応しています。プランは1 GB あたり $0.55 からで、トラフィックに有効期限はありません。
コード RAPID10 を使うと10%割引になります。RapidProxy を無料で試す →
LinkedIn は、セッションのサインイン元アドレスを評価します。アカウントで通常使用している IP アドレスが安全なアドレスです。サーバーがそのアドレスを使用できない場合は、自国のプロキシを使用してください。たとえば、VPS、別の国、または最初のアカウントとアドレスを共有してはならない2つ目のアカウントを使用する場合です。
有料プロバイダーを利用する場合は、1つのアドレスを維持するスティッキーな住宅用セッションを使用してください(リクエストごとのローテーションは避けてください)。サーバーから通常の自宅アドレスを使用する必要がある場合は、自宅のネットワークに WireGuard のフルトンネルまたは Tailscale の出口ノードを設定できます。
設定のヘルプ
🔧 設定
--loginを実行する前にプロキシを設定してください。既存のセッションを新しいアドレスに移すと、LinkedIn のチェックポイントが発生します。実際のアドレスで作成された--import-from-browserのセッションも対象です。--proxy-server scheme://host:portまたはPROXY_SERVERを使用します。対応するスキームはhttp、https、socks4、socks5です。ルーティングされるのはブラウザーのトラフィックのみで、MCP のトランスポートは対象外です。- 認証情報は
PROXY_USERNAMEとPROXY_PASSWORDで渡すか、PROXY_SERVERにhttp://user:pass@host:portの形式で含めてください。この形式は--proxy-serverCLI オプションでは使用できません。 PROXY_BYPASS=localhost,127.0.0.1,::1を設定すると、ローカルのターゲットに直接アクセスできます。プロキシを設定すると、Chromium はlocalhostもプロキシ経由でルーティングします。
❗ トラブルシューティング
- Chromium は SOCKS プロキシで認証できないため、認証情報を使用するには
http(s)エンドポイントが必要です。プロバイダーが認証付き SOCKS5 しか提供していない場合は、認証情報を保持するローカルリレーを実行し、サーバーの接続先に設定してください。 - プロキシのパスワードが間違っていると、タイムアウトやサインイン失敗として現れます。Chromium がページのタイムアウトまで認証チャレンジを再試行するためです。プロキシの追加直後にセッションが機能しなくなった場合は、まずプロキシの認証情報を確認してください。
- プロキシが設定されている間は自動インポートがスキップされます。インポートしたセッションが実際のアドレスからプロキシに移ってしまうためです。
--loginを使用してください。 - コンテナー内の
127.0.0.1はそのコンテナー自体を指すため、ホスト上のリレーにはhost.docker.internalを使用します。ネイティブの Linux Docker では、--add-host=host.docker.internal:host-gatewayも必要です。
## ソースからセットアップ(開発と貢献)
貢献を歓迎します。アーキテクチャのガイドラインとチェックリストについては、CONTRIBUTING.md をご覧ください。まず既存の issue を検索し、新しい内容については issue フォーム を使用してください。AI エージェントは issue-packet スキルに従います。
インストール
ターミナルで実行
# 1. Clone repository
git clone https://github.com/stickerdaniel/linkedin-mcp-server
cd linkedin-mcp-server
# 2. Install UV package manager (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 3. Install dependencies
uv sync
uv sync --group dev
# 4. Install pre-commit hooks
uv run pre-commit install
# 5. Start the server
uv run -m linkedin_mcp_server
セットアップのヘルプ
🔧 設定
CLI オプション
セッション:
--login- ブラウザーを開いてサインインし、セッションを保存します--import-from-browser [BROWSER]- ローカルでサインイン済みの Chromium ブラウザー(chrome、chromium、brave、edge、arc、vivaldi、helium、yandex、whale、coccoc、opera、opera_gx、auto)からセッションを再利用します。引数なしで指定するとautoが選択され、LinkedIn の有効なセッションがあるブラウザーのうち、最後に使用したものを選びます。--auto-import/--no-auto-import- セッションが必要な最初のツール呼び出し時に、手動ログインにフォールバックする前に、サインイン済みのローカルブラウザーからセッションをインポートします(デフォルト:オン)。Docker 内、プロキシ経由、およびループバック以外の HTTP バインドではスキップされます。macOS ではキーチェーンから一度だけ確認を求められる場合があります。--status- 保存されたセッションが有効かどうかを確認して終了します--logout- 保存されたセッションを消去します--user-data-dir PATH- ブラウザープロファイルのディレクトリ(デフォルト:~/.linkedin-mcp/profile)。セッションをローテーションまたは消去すると、このディレクトリとその親ディレクトリが削除されます。親ディレクトリには、保存された Cookie と派生プロファイルが格納されています。--claim-profile-root- サーバーが自動では取得しないプロファイルディレクトリ(親にほかのファイルがあるディレクトリなど)を取得します。ディレクトリごとに一度だけ必要です。
トランスポート:
--transport {stdio,streamable-http}- トランスポートモードを強制します(デフォルト:stdio)--host HOST/--port PORT/--path PATH- HTTP サーバーのアドレス(デフォルト:127.0.0.1、8000、/mcp)
タイムアウト:
--timeout MS- 1 回のページ操作のタイムアウト(デフォルト:5000)--tool-timeout SECONDS- ツール呼び出し全体のタイムアウト(デフォルト:180)。多数のページを読み込む呼び出し、ネットワークが遅い場合、またはブラウザーのコールドスタート時は値を大きくしてください。--login-timeout SECONDS- サインインを完了するまでログインブラウザーが待機する時間(デフォルト:1800、0 = 無制限)。--login-viewerを使うと、いずれの場合も 30 分後にセッションが終了します。--login-inline-wait SECONDS- ログイン完了までツール呼び出しが待機してから、モデルに再試行を促す時間(デフォルト:25、最大 45、0 = すぐに返す)
共有ブラウザー:
--browser-wait SECONDS- 別のサーバープロセスから共有ブラウザーが引き渡されるまで待機する時間(デフォルト:25、最大 45、0 = 直ちに使用中と報告)。複数の MCP クライアントを同時に実行している場合にのみ関係します。--browser-min-hold SECONDS- このプロセスが共有ブラウザーを引き渡すまで保持する最短時間(デフォルト:20)。--browser-waitより 3 秒短い値に制限されるため、こちらの値も合わせて大きくしてください。値を大きくするとブラウザーの再起動は減りますが、ほかのクライアントの待ち時間が長くなります。--browser-idle-timeout SECONDS- ツール呼び出しがない状態がこの時間続くと、アイドル状態のブラウザーを閉じてプロファイルを解放します(デフォルト:600、0 = 開いたままにする)
ブラウザー:
--no-headless- ブラウザーウィンドウを表示します(デバッグに便利です)--slow-mo MS- ブラウザー操作間の遅延(デフォルト: 0、デバッグに便利です)--viewport WxH- ビューポートサイズ(デフォルト: 1280x720)。ウィンドウなしモードにのみ適用されます。ヘッド付き起動では実際のウィンドウサイズが使用されます。--chrome-path PATH- Chrome/Chromium 実行ファイルへのパス--installer-temp-dir PATH- ブラウザーインストールの一時ファイル用の既存ディレクトリ(環境変数:INSTALLER_TEMP_DIR)。--proxy-server URL- ブラウザーのトラフィックをプロキシ経由でルーティングします。形式はscheme://host:portです。--loginの前に設定してください。詳しくはプロキシの使用を参照してください。
その他:
--log-level {DEBUG,INFO,WARNING,ERROR}- ログレベル(デフォルト: WARNING)--help- ヘルプを表示します
Note: ほとんどの CLI オプションには同等の環境変数があります。詳細は
.env.exampleを参照してください。
HTTP モードと Claude Desktop
HTTP モードの例(Web ベースの MCP クライアント向け):
uv run -m linkedin_mcp_server --transport streamable-http --host 127.0.0.1 --port 8000 --path /mcp
Claude Desktop:
{
"mcpServers": {
"mcp-server-linkedin": {
"command": "uv",
"args": ["--directory", "/path/to/linkedin-mcp-server", "run", "-m", "linkedin_mcp_server"]
}
}
}
この設定ではデフォルトで stdio が使用されます。
❗ トラブルシューティング
ログインの問題
- LinkedIn のセッションは常に 1 つだけアクティブにしてください
--loginでは、LinkedIn モバイルアプリでのログイン確認が必要になる場合があります- ログイン時に LinkedIn が captcha チャレンジを表示することがあります。
--loginコマンドはブラウザーを開くので、そこで手動で解決できます。
ツールの問題
- ツールが誤ったデータや欠落したデータを返す場合は、
--no-headlessを使用してブラウザーを確認してください --log-level DEBUGを追加すると、より詳細なログを確認できます
セッションの問題
- ブラウザープロファイルは
~/.linkedin-mcp/profile/に保存されます - 管理対象ブラウザーのダウンロードは
~/.linkedin-mcp/patchright-browsers/にキャッシュされ、uvxおよび MCP Bundle のインストールと共有されます - ブラウザーキャッシュが増え続ける: Patchright は、インストールされているいずれかのバージョンが参照している限り、古い Chromium リビジョンを保持します。
uvアーカイブや 2 つ目のワークツリーもそのような参照です。サーバーは、保持しているものを特定する警告をログに記録します。領域を解放するには、すべての LinkedIn MCP サーバーインスタンスを停止し、~/.linkedin-mcp/patchright-browsers/を削除して、次回の起動で現在のブラウザーをダウンロードさせてください。 --logoutを使用すると、プロファイルを消去して新たに開始できます
Python/Patchright の問題
- Python のバージョンを確認してください:
python --version(3.12.4 以降である必要があります) - Patchright を再インストールしてください:
uv run patchright install chromium - 依存関係を再インストールしてください:
uv sync --reinstall
タイムアウトの問題
- ページ操作の失敗(要素が見つからない、ナビゲーションがハングする): ブラウザーのページ操作タイムアウトを増やしてください:
--timeout 10000またはTIMEOUT=10000(ミリ秒、デフォルト 5000)。 - ツール呼び出し全体がタイムアウトする(例: 複数セクションのプロファイル、Chromium のコールドスタート、低速なコンテナー): ツールごとの実行タイムアウトを増やしてください:
--tool-timeout 300またはTOOL_TIMEOUT=300(秒、デフォルト 180)。 - セッションがない状態での最初のツール呼び出し: ローカルでログイン済みのブラウザーに有効な LinkedIn セッションがある場合、サーバーは手動ログインを強制する代わりにそれを自動インポートします(
AUTO_IMPORT_FROM_BROWSER/--auto-importを参照)。macOS では、キーチェーンが Safe Storage アクセスについて一度プロンプトを表示することがあります。インポート可能なブラウザーセッションが存在しない場合は、ログインウィンドウを開く動作にフォールバックし、最大LOGIN_INLINE_WAIT秒(デフォルト 25、最大 45、--login-inline-wait)待機するため、素早くサインインすれば 1 回の呼び出しで解決します。待機時間が経過すると、ツールは保留シグナルを返し、モデルは約 30 秒後に再試行します。自動インポートもインライン待機も、Docker 環境下や、サーバーが非ループバック HTTP ホストにバインドされている場合は適用されません。ホスト上で--loginを使用してセッションを作成するか、Docker の明示的な--login --login-viewerコマンドを使用してください。 - 低速な接続のユーザーは、いずれかにより大きな値が必要になる場合があります。
すでに実行したのに、ホストで --login を実行するよう求められる
- コンテナではないマシンで、ツール呼び出しに「Docker 内に有効な LinkedIn セッションがありません」と応答される場合、ランタイムが誤って判定されています。これは、無関係なサービスのために Docker デーモンを実行している Linux ホストで発生しました。判定を上書きするには
LINKEDIN_MCP_CONTAINER=falseを設定してください。trueを設定すると、反対の判定が強制されます。
Chrome のカスタムパス
- Chrome が標準以外の場所にインストールされている場合は、
--chrome-path /path/to/chromeを使用してください。 - 環境変数で設定することもできます:
CHROME_PATH=/path/to/chrome - macOS と Linux では、ブラウザーはプロファイルを最後に開いたブラウザーと同じか、それより新しいバージョンである必要があります。そうでない場合、サーバーは起動を拒否します。(Windows では該当しません。ブラウザーを起動せずにバージョンを確認できないため、このチェックは無効です。)古いブラウザーでは、新しいブラウザーが書き込んだデータが保存セッションも含めて気付かないうちに削除されることがあり、その場合のエラーはログインの期限切れとまったく同じように見えます。メッセージには両方のバージョンが表示されます。新しい Chrome を一度実行した後に同梱の Chromium に戻した場合は、通常この状況になります。新しい方のブラウザーをもう一度実行するか、
--loginを実行してください。保存されたセッションを別の場所に移動し、現在使用中のブラウザーで新たにサインインします。--logoutでもセッションを消去できますが、古いセッションは復元可能な状態で保持されず、ターミナルで確認を求められるため、MCP クライアントが起動したサーバーからは使用できません。 - この方法で比較するのは Chrome、Chromium、Chrome for Testing のみです。派生ブラウザーではバージョン番号の付け方が異なります(Vivaldi は 7.x で、Edge のビルド番号は同じメジャーバージョンでも Chrome よりかなり小さいためです)。そのため、
CHROME_PATHに派生ブラウザーを指定すると、満たせないバージョン条件で起動を拒否するのではなく、チェックが無効になります。
重要
FAQ
これは安全に使用できますか?アカウントが禁止されることはありますか? このツールは実際のブラウザーセッションを操作します。非公開の API を悪用したり、認証を回避したりすることはありません。LinkedIn のユーザー契約では自動アクセスが禁止されており、自動化ツールを使用するアカウントは制限または禁止される場合があります。ご自身の責任で使用してください。アカウントの安全性は保証されません。問題が発生した場合は、ディスカッションでお知らせください。
エージェントがアクションを実行しすぎた場合はどうなりますか? ツール呼び出しはキューを通じて順番に実行されます。実行する自動化の量はご自身で管理し、控えめに使用するとともに、エージェントへのプロンプトを適切に設定してください。
コントリビューター
コード、バグ報告、修正を寄せてくださった皆さまに感謝します。
謝辞
FastMCP と Patchright を使用して構築されています。
LinkedIn のユーザー契約に従って使用してください。自動アクセスは LinkedIn の規約に違反し、アカウント制限につながる場合があります。このツールは個人利用のみを目的としており、いかなる種類の保証もありません。
ライセンス
このプロジェクトは Apache 2.0 ライセンスの下でライセンスされています。
このプロジェクトを基に構築することを歓迎します。条件についてはライセンスを、クレジット表記についてはNOTICEをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。