Skip to main content
Glama
TSS99
by TSS99

LinkedIn MCP

AIアシスタントがLinkedInの求人を検索し、LinkedInのプロフィールを読むことを可能にするMCPサーバーです。DevToolsプロトコルを介して実際のChromeウィンドウを操作します。

これは読み取り専用です。ここには接続、メッセージ送信、推薦、投稿、応募を行うツールはありません。それは設定の問題ではなく、そのためのコードが存在しないからです。これは意図的な線引きです。LinkedInは自動化された書き込みを自動化された読み取りよりもはるかに厳しく扱い、この2つを混在させるとアカウントが制限される原因になります。

ツール

ツール

戻り値

linkedin_search_jobs

タイトル、会社、場所、勤務形態、掲載時の給与、掲載からの経過日数、job_idを含む求人リスト。フィルター: 場所、掲載からの日数、経験レベル、雇用形態、勤務形態、Easy Apply、並び順。

linkedin_get_job

1件の求人を完全に取得 — 会社、場所、LinkedInの求人インサイト、および「See more」の折りたたみを展開した全文。

linkedin_get_profile

名前、見出し、場所、概要テキスト、職歴、学歴、スキル。

linkedin_check_session

保存されたブラウザセッションがまだサインインしているかどうか。

linkedin_close_session

Chromeから切り離し、ウィンドウとセッションをそのまま残す。

Related MCP server: LinkedIn Sales & Navigator MCP Server

インストール

Python 3.12以上、uv、Google Chromeが必要です。

git clone https://github.com/TSS99/linkedin-mcp.git
cd linkedin-mcp
uv sync

一度サインインします。これによりChromeウィンドウが開き、手動でログインするのを待ちます — 資格情報がスクリプトによって入力されることはありません。LinkedInがスクリプトによる資格情報入力を検出するためです:

uv run linkedin-mcp --login

セッションは~/.linkedin-mcp/chrome-profileに保持されます。uv run linkedin-mcp --checkでいつでも確認でき、uv run linkedin-mcp --logoutで消去できます。

操作するChromeプロファイル

デフォルトでは、サーバーは独自の使い捨てプロファイルを開きます。そのウィンドウは新品同様に見えます — ブックマークも拡張機能もなく、LinkedIn以外には何もサインインしていません。それがポイントです: サーバーはLinkedInしか見ることができません。

代わりに日常使いのChromeを操作させたい場合、つまり既存のLinkedInセッションを再利用し、見知らぬウィンドウを開かないようにするには、次のように設定します:

LINKEDIN_MCP_PROFILE_DIR=system

または、任意のプロファイルディレクトリを明示的に指定します。MCPクライアント設定では、envブロックに記述します:

{
  "mcpServers": {
    "linkedin": {
      "command": "uv",
      "args": ["--directory", "/path/to/linkedin-mcp", "run", "linkedin-mcp"],
      "env": { "LINKEDIN_MCP_PROFILE_DIR": "system" }
    }
  }
}

その前に、理解しておくべきことが2つあります:

Chromeを一度再起動する必要があります。 --remote-debugging-portは起動時にのみ有効で、既に実行中のプロセスに対して有効にすることはできません。つまり、現在開いているChromeには、プロファイル設定に関係なく接続できません。完全に終了し(ウィンドウを閉じるだけでなくCmd+Q)、サーバーに起動させるか、--loginが表示するコマンドで自分で起動してください。

デバッグポートはLinkedInに限定されません。 127.0.0.1:9224に到達できるものは、そのChromeのすべてのタブを操作し、すべてのセッションを読むことができます — メール、銀行、すべてです。LinkedInだけではありません。隔離されたプロファイルでは他に到達できるものはありません。日常使いのプロファイルではすべてに到達できます。信頼できるマシンでのみそのように実行し、デバッグ用Chromeは使い終わったら閉じてください。

--logoutは自分が作成したプロファイル以外を削除することを拒否するため、実際のChromeを指定してもブラウザの状態を消去することはありません。

設定

MCPクライアント設定に追加します(mcp-config.example.jsonを参照):

{
  "mcpServers": {
    "linkedin": {
      "command": "uv",
      "args": ["--directory", "/path/to/linkedin-mcp", "run", "linkedin-mcp"]
    }
  }
}

Claude Codeの場合: claude mcp add linkedin -- uv --directory /path/to/linkedin-mcp run linkedin-mcp

仕組みとその理由

起動したブラウザではなく、実際のChromeプロファイルに対するCDP。 Playwright独自のChromiumは、LinkedInがチェックする多くの方法で自身を宣伝します。自分でログインした実際のChromeに接続することで、フィンガープリントとCookieの整合性が保たれます。サーバーはデバッグポート9224で実行されるため、9222/9223の他のブラウザ駆動MCPサーバーと共存できます。

ナビゲーションはペース調整されます。 LinkedInは量だけでなく頻度でもレート制限を行うため、gotoはジッター付きの最小間隔を強制します。長時間のリサーチ実行は意図的に遅くなります。

LinkedInのDOM内のすべての文字列は2回表示されます — 1回は表示され、もう1回はスクリーンリーダー用のvisually-hiddenスパン内に表示されます — そのため、生のinnerTextは「Acme Corp\nAcme Corp」と読み取られます。dedupe_linesは連続する繰り返しを折りたたみます。これがないと、解析されたすべてのフィールドが2倍になって出力されます。

セレクタは順序付きフォールバックリストです。 LinkedInのクラス名は難読化され、頻繁に変更されます。可能な場合、パーサーはクラスの変更を生き延びたものにアンカーします — data-occludable-job-id属性、安定したdiv#experienceアンカーIDなど — そして、フィールドごとのフックに頼るのではなく、カードテキストの行順序の解析にフォールバックします。

壊れたスクレイピングが空の結果を返すことはありません。 すべてのツールは、アンカーが見つからない場合に{"status": "error", "error_type": "stale_selector", ...}としてセレクタとURLを返すようにラップされています。LLMが[]を受け取ると「求人が見つかりません」と完全な自信を持って報告します。これにより、ツールの破損と本当の空を区別できます。

テスト

uv run pytest

テストは、LinkedInのDOMが実際に生成する形状のフィクスチャに対して、純粋なパーサー — URL/フィルター構築、カード解析、プロフィールエントリ解析、行の重複排除 — をカバーします。ブラウザもネットワークも必要ありません。

壊れたとき

壊れます。LinkedInはマークアップの変更を常に配信しており、スクレイパーは他人のHTMLに対する推測です。いずれstale_selectorエラーが発生することを想定してください。修正は通常、tools/jobs.pyまたはtools/profiles.pyのセレクタリストに1つ追加し、tests/test_parsers.pyにフィクスチャを追加することです。

checkpoint URL付きのauth_requiredが発生した場合、LinkedInは人間を求めています: Chromeウィンドウを開き、チャレンジをクリアして再試行してください。

利用規約について

実装がどれほど慎重であっても、自動アクセスはLinkedInのユーザー契約に違反しており、LinkedInはそのためにアカウントを制限することがあります。これは個人のリサーチツールです。読み取り専用の設計とペース調整されたリクエストはリスクを減らしますが、排除するものではありません。そして、そのリスクを負うのは、あなたが指定したアカウントです。ご自身の判断で使用してください。

ライセンス

Apache-2.0

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    A
    quality
    Not graded
    maintenance
    Enables AI assistants to interact with LinkedIn and LinkedIn Sales Navigator for searching profiles, managing leads, and handling messaging via cookie-based authentication. It supports professional networking tasks such as sending connection requests and retrieving account details through the Model Context Protocol.
    22
    1
  • A
    license
    A
    quality
    D
    maintenance
    Enables searching and scraping of LinkedIn for structured data on people, companies, and job listings. It allows AI clients to retrieve detailed profiles, experience, and activity sections using browser automation.
    7
    175
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to search, filter, and extract job listings from LinkedIn using an automated headless browser with semantic AI filtering and deduplication.
    15
    MIT

View all related MCP servers

Related MCP Connectors

  • Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.

  • Live LinkedIn data for AI agents: profiles, companies, jobs, posts, email finding. No account risk.

  • Run LinkedIn outreach from your AI chat: find leads, launch campaigns, send, and reply.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TSS99/linkedin-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server