linkedin-mcp
LinkedIn MCP
AIアシスタントがLinkedInの求人を検索し、LinkedInのプロフィールを読むことを可能にするMCPサーバーです。DevToolsプロトコルを介して実際のChromeウィンドウを操作します。
これは読み取り専用です。ここには接続、メッセージ送信、推薦、投稿、応募を行うツールはありません。それは設定の問題ではなく、そのためのコードが存在しないからです。これは意図的な線引きです。LinkedInは自動化された書き込みを自動化された読み取りよりもはるかに厳しく扱い、この2つを混在させるとアカウントが制限される原因になります。
ツール
ツール | 戻り値 |
| タイトル、会社、場所、勤務形態、掲載時の給与、掲載からの経過日数、 |
| 1件の求人を完全に取得 — 会社、場所、LinkedInの求人インサイト、および「See more」の折りたたみを展開した全文。 |
| 名前、見出し、場所、概要テキスト、職歴、学歴、スキル。 |
| 保存されたブラウザセッションがまだサインインしているかどうか。 |
| 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
Maintenance
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
- AlicenseAqualityAmaintenanceEnables AI assistants to interact with LinkedIn by scraping profiles, companies, job postings, and getting personalized job recommendations using authenticated browser automation.173,204Apache 2.0
- FlicenseAqualityNot gradedmaintenanceEnables 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.221
- AlicenseAqualityDmaintenanceEnables 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.7175MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to search, filter, and extract job listings from LinkedIn using an automated headless browser with semantic AI filtering and deduplication.15MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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