mcpField
L
LinkedIn

LinkedIn

ローカル
github.comソーシャルメディア411 週間前に更新

LinkedIn について

LinkedInは、実際のヘッドレスブラウザーとログイン済みセッションを使い、LinkedInのプロフィール、企業、求人、投稿、受信トレイを読み取るMCPサーバーです。メッセージ送信とつながり申請のツールも分けて備え、操作を直列化して頻度を制限します。

主な機能

  1. 01プロフィールと企業ページの閲覧
  2. 02人物、企業、求人、投稿の検索
  3. 03受信トレイと会話内容の確認
  4. 04メッセージとつながり申請の送信
  5. 05セッションCookieをOSのキーリングに保存

活用シーン

  1. 01メンバーや企業のプロフィールを確認
  2. 02キーワードと地域で求人を検索
  3. 03最近の受信スレッドを確認
  4. 04LinkedInでメッセージまたはつながり申請を送信

MCP 対応

LinkedInのブラウザー操作をMCPツールとして提供し、読み取りツール12個と書き込みツール2個を備えています。すべての呼び出しは単一の直列ブラウザーセッションを使います。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"johannsenlum-linkedin-api": {
"command": "uvx",
"args": [
"linkedin-api-mcp"
],
"env": {
"LINKEDIN_COOKIE": "<LINKEDIN_COOKIE>",
"LINKEDIN_HEADLESS": "<LINKEDIN_HEADLESS>",
"LINKEDIN_MIN_INTERVAL": "<LINKEDIN_MIN_INTERVAL>",
"LINKEDIN_MAX_PER_HOUR": "<LINKEDIN_MAX_PER_HOUR>"
}
}
}
}
起動コマンドuvx linkedin-api-mcp
設定が必要な環境変数
LINKEDIN_COOKIEシークレットYour LinkedIn li_at session cookie. Optional if you have already stored it in the OS keyring with `linkedin-api-mcp auth`, which is the recommended route: this cookie is equivalent to being logged in as you.
LINKEDIN_HEADLESSRun the browser headless. Defaults to true; set to 0 to watch what it does.
LINKEDIN_MIN_INTERVALMinimum seconds between LinkedIn actions. Defaults to 2.
LINKEDIN_MAX_PER_HOURHard ceiling on LinkedIn actions per rolling hour. Defaults to 120. The server refuses past this rather than sleeping, so an agent in a loop is told to stop.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypilinkedin-api-mcp1.0.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

linkedin-api-mcp

免責事項:これは独立したコミュニティプロジェクトです。LinkedIn Corporation または Microsoft との提携、認可、推奨、後援関係はありません。「LinkedIn」は LinkedIn Corporation の登録商標であり、このソフトウェアが連携するサードパーティサービスを説明する目的でのみ使用しています。

LinkedIn 用の MCP サーバーです。実際のヘッドレスブラウザー (patchright。Playwright の検出を回避するフォーク)を使用し、ご自身のログイン済み LinkedIn セッション Cookieを操作します。 スクレイピング API、認証情報の総当たり、不正な LinkedIn ログイン回避はありません。エージェントは 12 個の読み取りツール(プロフィール、企業、求人、投稿、ご自身の受信トレイ)と、意図的に分離された 2 個の書き込みツール(メッセージの送信とコネクションリクエストの送信)を利用できます。すべての操作は単一のブラウザーセッションを通じて、一度に 1 件ずつ実行され、ペースはご自身で設定した制限に従います。詳しくは、以下の安全性をご覧ください。

ドキュメント:mcp.johannsenlum.com/linkedin

PyPI Python 3.11+ License: MIT MCP Registry GitHub stars

linkedin-api-mcp のターミナルデモ:エージェントが search_people を呼び出してメンバーを検索し、次に send_message でメッセージを送信してから、会話を読み返してメッセージが実際に届いたことを確認します。ツール数 14、テスト数 68、MIT ライセンス。

インストール(ワンクリック)

ディープリンクに対応しているのは Cursor と VS Code のみです。他のクライアントには、インストールリンクの形式がドキュメント化されていません。これらのリンクでは以下のコマンドがあらかじめ入力されます。Cookie は環境変数ではなく OS のキーチェーンに保存されるため、それ以外に入力するものはありません。

Add to Cursor Add to VS Code

すべてのクライアント
クライアントディープリンク?
Claude Codeいいえ、1 行のコマンド
Claude Desktopいいえ
Cursorはい、上記を参照
VS Codeはい、上記を参照
Codex CLIいいえ
Zedいいえ
Windsurfいいえ(Windsurf は独自のレジストリにあるサーバーのみを解決します)

Claude Code
claude mcp add linkedin -- uvx linkedin-api-mcp

Claude Desktop: claude_desktop_config.json

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

Claude Desktop にはワンクリックインストールの方法はありません(ディープリンクではなく .mcpb バンドルをインストールします)。Settings → Developer → Edit Config から、この JSON をコピーして貼り付けてください。

{
  "mcpServers": {
    "linkedin": {
      "command": "uvx",
      "args": ["linkedin-api-mcp"]
    }
  }
}

Cursor: ~/.cursor/mcp.json

上のボタンの代替手段として、または直接貼り付けたい場合に使用してください。

{
  "mcpServers": {
    "linkedin": {
      "command": "uvx",
      "args": ["linkedin-api-mcp"]
    }
  }
}

VS Code: .vscode/mcp.json

上のボタンの代替手段として、または直接貼り付けたい場合に使用してください。VS Code では mcpServers ではなく servers キーを使用します。

{
  "servers": {
    "linkedin": {
      "type": "stdio",
      "command": "uvx",
      "args": ["linkedin-api-mcp"]
    }
  }
}

Codex CLI: ~/.codex/config.toml
[mcp_servers.linkedin]
command = "uvx"
args = ["linkedin-api-mcp"]

Codex CLI の設定スキーマはバージョンによって変更されており、この設定ブロックは実際のインストール環境で個別に検証されていません。読み込めない場合は、uvx linkedin-api-mcp を自分で実行し、Codex が現在想定している stdio サーバー設定を指定するのが確実です。

Zed: settings.json

Zed にはディープリンクがありません。Zed の設定で context_servers の下に追加してください。

{
  "context_servers": {
    "linkedin": {
      "source": "custom",
      "command": "uvx",
      "args": ["linkedin-api-mcp"]
    }
  }
}

Windsurf: ~/.codeium/windsurf/mcp_config.json

Windsurf にはディープリンクがありません。独自のレジストリからサーバーを解決するため、Windsurf Settings → MCP Servers → Edit raw config から手動で貼り付ける必要があります。

{
  "mcpServers": {
    "linkedin": {
      "command": "uvx",
      "args": ["linkedin-api-mcp"]
    }
  }
}

特定のクライアントでキーチェーンに頼りたくない場合(サンドボックス環境や CI など)は、auth を実行せずに Cookie を直接渡してください。

{
  "mcpServers": {
    "linkedin": {
      "command": "uvx",
      "args": ["linkedin-api-mcp"],
      "env": { "LINKEDIN_COOKIE": "your-li_at-value" }
    }
  }
}

この方法を使う場合は、設定ファイルを Cookie 自体と同じように慎重に扱ってください。コミットせず、アクセス権限を制限してください。

セッション Cookie の取得

LinkedIn はこの種のアクセス用の API キーを提供していないため、サーバーはブラウザーにすでに保存されているものと同じセッション Cookie を使用します。

  1. 初回のみ:サーバーが操作する Chromium ビルドをインストールします。
    uvx --from linkedin-api-mcp patchright install chromium
    
  2. 通常のブラウザーで linkedin.com にログインします。
  3. DevTools(F12 または Cmd+Opt+I)を開き、Application → Cookies → https://www.linkedin.com の順に選択します。
  4. li_at という名前の行を見つけて、Value をコピーします。

警告

**この Cookie は LinkedIn へのログイン情報そのものです。**これを持っている人は誰でも、あなたになりすまして操作できます。 パスワードがなくても、メッセージの閲覧やつながりへのメッセージ送信など、あなたのアカウントから見えるすべての情報にアクセスできます。パスワードを変更しても有効なままで、LinkedIn に表示されるセッション一覧から取り消すこともできません。linkedin-api-mcp auth 以外の場所、たとえばチャット、コミット、イシュー、スクリーンショットなどに絶対に貼り付けないでください。

  1. 保存します。
    uvx linkedin-api-mcp auth
    
    プロンプトが表示されたら値を貼り付けてください。ターミナルには入力内容が表示されません。デフォルトでは OS のキーチェーン(Keychain、Windows Credential Manager、Linux の Secret Service)に保存され、設定ファイルには書き込まれません。
  2. クライアントを接続する前に、LinkedIn が Cookie を受け付けることを確認します。
    uvx linkedin-api-mcp --test
    
    サーバーの設定を一部伏せて表示し、セッションが有効であることを確認します。Cookie 自体は表示されません。

ツール

ツール説明
get_profileURL または公開識別子からメンバーのプロフィール(見出し、自己紹介、職歴、学歴、スキル)を取得します。
get_my_profileこのサーバーがログインしているアカウントのプロフィールを取得します。
search_peopleキーワードで LinkedIn メンバーを検索します。
get_inbox最近のメッセージスレッドのプレビューを一覧表示します。
get_conversationID を指定して、1 つのスレッドのメッセージ履歴全体を取得します。
search_conversations参加者またはキーワードでメッセージスレッドを検索します。
send_message ✏️書き込み。 アカウントから別のメンバーへ実際のメッセージを送信します。
connect ✏️書き込み。 アカウントから別のメンバーへ実際のつながりリクエストを送信します。
get_company企業ページ(概要、規模、業種、最近の投稿)を取得します。
search_companiesキーワードで LinkedIn の企業を検索します。
search_jobsキーワードと任意の勤務地で求人情報を検索します。
get_job求人情報を 1 件、全体取得します。
search_postsキーワードで LinkedIn フィードの投稿を検索します。
linkedin_status安全性に記載されたレート制限に照らして、セッションの有効性と現在の使用状況を確認します。

14 個のツール:読み取り専用 12 個、書き込み 2 個。send_message と connect のみが変更を加えます。また、どちらも実行した瞬間に実在する別の人物から見える状態になります。下書き、プレビュー、取り消しの手順はありません。それ以外のツールは、アカウントからすでに閲覧できる情報を読み取るだけです。68 件のテストで確認済みです。

検証済みの内容と未検証の内容

これはまだ開発から数日しか経っていないプロジェクトです。すべてが動作すると主張するのではなく、実際のアカウントで確認した内容と、まだ確認していない内容を以下に示します。

状態ツール/動作備考
実環境で検証済みget_my_profile、get_profile、search_people、get_company、search_companies、search_jobs、search_posts、get_inbox実際のアカウントで呼び出し、実データが返されました。
実環境で検証済みsend_message ✏️実際にメッセージを送信し、届いたことを確認するためにスレッドを読み返しました。
未検証connect ✏️、get_conversation、search_conversations、get_job、linkedin_status実装およびテスト済みですが、実際のアカウントで手動実行しての確認はまだ行っていません。
既知の制約get_inbox の conversation_idnull が返されます。LinkedIn は受信トレイの行を URL ではなくメモリ内の JS オブジェクトにひも付けているため、ページから ID を読み取ることができません。
既知の制約search_posts のリアクション数とコメント数null が返されます。
既知の制約get_profile の experience と educationLinkedIn はスクロールしたときにのみこれらのセクションを読み込むため、現在は空で返されます。

安全性

  • シリアル化されたアクションキュー。 linkedin_status を含むすべてのツール呼び出しは、ブラウザーにアクセスする前に同じキューを通ります。一度に実行されるアクションは1つだけで、並列実行はされません。

  • 最小間隔と1時間あたりの上限を強制します。 設定されていると主張するだけではありません。

    設定デフォルト環境変数効果
    アクション間の最小間隔2 秒LINKEDIN_MIN_INTERVAL直前の呼び出しから間隔を空けて実行し、連続して実行しません。
    1時間あたりのアクション数120LINKEDIN_MAX_PER_HOUR上限に達すると、キューに追加したり待機したりせず、以降の呼び出しは rate_limited エラーですぐに失敗します。

    この上限はこのサーバー内でのみ適用されます。ループするエージェントが LinkedIn へのアクセスを急増させないためのものであり、LinkedIn からこの数値を指定されたわけではありません。値を下げるのは常に安全です。値を上げる場合は、デフォルトで想定されている以上のリスクを受け入れる判断をすることになります。

  • 取得したすべての自由形式テキストにプロンプトインジェクション対策を適用します。 LinkedIn ページから読み取った内容(見出し、自己紹介、メッセージなど)は、エージェントにデータとして渡されます。エージェントに渡す前にフェンスで保護するため、プロフィールやメッセージ内のテキストが指示を装うことはできません。

  • Cookie はデフォルトで設定ファイルではなく、OS のキーリングに保存されます。 セッション Cookie の取得を参照してください。

  • send_message は成功を報告する前に送信を確認します。 送信したテキストが実際に表示されるまで会話を確認し、表示されない場合は {"sent": true} と誤って報告するのではなく、send_unconfirmed を返します。

サーバーが読み取るその他の環境変数:LINKEDIN_COOKIE(キーリングの値を上書きします)、LINKEDIN_HEADLESS(デフォルトは true)、LINKEDIN_NAV_TIMEOUT_MS(デフォルトは 30000)。

よくある質問

安全に使えますか?アカウントを停止されませんか?

このツールは実際のブラウザーセッションを操作します。非公開の API を悪用したり、認証を回避したりすることはありません。LinkedIn のユーザー契約では自動アクセスが禁止されており、自動化ツールを使用するアカウントは制限または停止される可能性があります。ご自身の責任でご利用ください。アカウントの安全性は保証されません。問題が発生した場合は、Discussions でお知らせください。

エージェントがアクションを実行しすぎた場合はどうなりますか?

ツール呼び出しはキューを通じて順次実行されます。実行する自動化の量はご自身で管理し、控えめに使用するとともに、エージェントには適切なプロンプトを与えてください。

ライセンス

MIT © 2026 Johannsen Lum.

自由に使用、変更、再配布したり、商用のものを作成したりできます。唯一の条件は、著作権表示とライセンス文を保持することです。いかなる種類の保証もありません。

コントリビューションには同じライセンスが適用されます。

コントリビューション

イシューやプルリクエストを歓迎します: github.com/JohannsenLum/linkedin-api-mcp。 変更内容は CHANGELOG.md に記録されています。

テストの実行

開発用依存関係をインストールし、リポジトリのルートから pytest を実行します。

pip install -e ".[dev]"
python -m pytest -q

デフォルトのテストスイートでは、Chromium、LinkedIn アカウント、LINKEDIN_COOKIE、ネットワークアクセスは必要ありません。ブラウザー操作は tests/fakes.py のテスト用ダブルに置き換えられています。テスト用ダブルは用意された HTML を解析し、ツールが使用する Playwright の小規模なインターフェースを提供します。解析テストの例については、tests/test_people_parsing.py を参照してください。

このプロジェクトは独立したものであり、LinkedIn Corporation とは提携していません。このドキュメントの冒頭にある免責事項を参照してください。

コメント

MCP は初めてですか?

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

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