LinkedIn Model Context Protocol (MCP) Server について
LinkedIn MCP Server は、公式 MCP Python SDK(FastMCP)で構築された MCP サーバーで、AI アシスタントから求人検索、プロフィールと企業情報の参照、履歴書とカバーレターの生成、応募管理を行えます。求職者を主な対象とし、AI 機能は任意です。
主な機能
- 01複数のフィルターによる求人検索
- 02プロフィールと企業情報の取得
- 03AI を用いた履歴書とカバーレターの生成
- 04ローカルでの応募ステータス管理
- 05HTML、Markdown、PDF 形式の出力
活用シーン
- 01キーワードと勤務地でリモート求人を検索する
- 02特定の求人に合わせて履歴書を調整する
- 03役職ごとに個別化されたカバーレターを作成する
- 04各ステージの応募状況を追跡する
MCP 対応
本プロジェクトは MCP サーバーであり、LinkedIn の求人、プロフィール、ドキュメント生成、応募追跡に関するツールとリソース計 13 件を MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
LinkedIn MCP サーバー
AI アシスタントに LinkedIn へのフルアクセスを提供する MCP サーバーです。求人検索、プロフィールや企業の閲覧、AI による履歴書とカバーレターの生成、応募のトラッキングが可能です。公式 MCP Python SDK(FastMCP)で構築されています。
できること
| カテゴリ | 機能 |
|---|---|
| 求人検索 | フィルター(キーワード、勤務地、職種、経験レベル、リモート、掲載日)を使った検索、求人詳細の取得、おすすめの取得 |
| プロフィールと企業 | 任意の LinkedIn プロフィールや企業ページの取得、最適化の提案を含む AI によるプロフィール分析 |
| 履歴書生成 | LinkedIn プロフィールからの履歴書生成、特定の求人に合わせた履歴書のカスタマイズ、3 つの組み込みテンプレート |
| カバーレター | 各求人に合わせてパーソナライズされた AI 生成のカバーレター、2 つの組み込みテンプレート |
| 応募トラッキング | ステータスのワークフロー(interested → applied → interviewing → offered/rejected/withdrawn)で応募をローカルに管理 |
| 出力形式 | HTML、Markdown、PDF(WeasyPrint 経由) |
クイックスタート
1. インストール
# Core installation
pip install -e .
# With AI features (resume/cover letter generation, profile analysis)
pip install -e ".[ai]"
# With PDF export
pip install -e ".[pdf]"
# Everything
pip install -e ".[all]"
2. 設定
cp .env.example .env
.env に認証情報を記入してください:
[email protected]
LINKEDIN_PASSWORD=your_password
ANTHROPIC_API_KEY=sk-ant-... # Optional — enables AI features
3. 実行
スタンドアロン:
linkedin-mcp
Claude Desktop の場合 — claude_desktop_config.json に追加します:
{
"mcpServers": {
"linkedin": {
"command": "linkedin-mcp"
}
}
}
Claude Code の場合 — .mcp.json に追加します:
{
"linkedin": {
"command": "linkedin-mcp"
}
}
ツールリファレンス
求人ツール(3)
| ツール | パラメータ | 説明 |
|---|---|---|
search_jobs | keywords, location, job_type, experience_level, remote, date_posted, page, count | 豊富なフィルターで LinkedIn の求人を検索します |
get_job_details | job_id | 求人情報の詳細な説明、スキル、メタデータを取得します |
get_recommended_jobs | count | パーソナライズされた求人のおすすめを取得します |
プロフィールツール(3)
| ツール | パラメータ | 説明 |
|---|---|---|
get_profile | profile_id | LinkedIn プロフィールを取得します(自分の場合は "me")— 職歴、学歴、スキル |
get_company | company_id | 企業情報を取得します — 概要、規模、本社所在地、専門分野 |
analyze_profile | profile_id | 実行可能な最適化の提案を含む AI によるプロフィールレビュー |
ドキュメント生成ツール(4)
| ツール | パラメータ | 説明 |
|---|---|---|
generate_resume | profile_id, template, output_format | LinkedIn プロフィールから履歴書を生成します |
tailor_resume | profile_id, job_id, template, output_format | 特定の求人に合わせてカスタマイズした履歴書を生成します |
generate_cover_letter | profile_id, job_id, template, output_format | 求人に合わせてパーソナライズされたカバーレターを作成します |
list_templates | template_type | 利用可能なテンプレートを一覧表示します(resume、cover_letter、または all) |
テンプレート: modern · professional · minimal(履歴書)| professional · concise(カバーレター)
形式: html · md · pdf
応募トラッキングツール(3)
| ツール | パラメータ | 説明 |
|---|---|---|
track_application | job_id, job_title, company, status, notes, url | 求人への応募のトラッキングを開始します |
list_applications | status | トラッキング中の応募をすべて一覧表示します。任意でステータスによる絞り込みが可能です |
update_application_status | job_id, status, notes | 応募のステータスを更新します |
ステータス値: interested · applied · interviewing · offered · rejected · withdrawn
アーキテクチャ
src/linkedin_mcp/
├── server.py # FastMCP entry point — 13 tools, 1 resource
├── config.py # Settings from .env (frozen dataclass)
├── exceptions.py # 7-class exception hierarchy
├── models/
│ ├── linkedin.py # Profile, Job, Company models (Pydantic v2)
│ ├── resume.py # Resume & cover letter content models
│ └── tracking.py # Application tracking model
├── services/
│ ├── linkedin_client.py # LinkedIn API wrapper (async via asyncio.to_thread)
│ ├── job_search.py # Job search with TTL caching
│ ├── profile.py # Profile/company access with caching
│ ├── resume_generator.py # AI-enhanced resume generation
│ ├── cover_letter_generator.py
│ ├── application_tracker.py # Local JSON-based application tracking
│ ├── cache.py # Unified JSON file cache with TTL
│ ├── template_manager.py # Jinja2 sandboxed template engine
│ └── format_converter.py # HTML → PDF/Markdown conversion
├── ai/
│ ├── base.py # Abstract AI provider interface
│ └── claude_provider.py # Anthropic Claude implementation
└── templates/
├── resume/ # modern.j2, professional.j2, minimal.j2
└── cover_letter/ # professional.j2, concise.j2
主要な設計上の決定
- 公式 MCP SDK — 独自のプロトコル実装ではなく、
@mcp.tool()デコレーターを備えたFastMCPを使用 - 全体を通じて非同期 — すべての同期 LinkedIn API 呼び出しを
asyncio.to_thread()でラップし、ブロッキングを回避 - レイヤードアーキテクチャ — ツール → サービス → クライアント、サービス層でのキャッシュを伴う
- AI はオプション — コアの LinkedIn 機能は Anthropic API キーなしで動作します。AI は履歴書・カバーレターの生成を強化します
- セキュリティ強化 — Jinja2
SandboxedEnvironment、WeasyPrint の SSRF 保護、パストラバーサルガード、認証情報の秘匿化、入力検証
設定
すべての設定は環境変数から読み込まれます(.env ファイルをサポート):
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
LINKEDIN_USERNAME | はい | — | あなたの LinkedIn メールアドレス |
LINKEDIN_PASSWORD | はい | — | あなたの LinkedIn パスワード |
ANTHROPIC_API_KEY | いいえ | — | AI 機能(履歴書・カバーレターの生成、プロフィール分析)を有効化します |
AI_MODEL | いいえ | claude-sonnet-4-20250514 | 使用する Claude モデル |
DATA_DIR | いいえ | ~/.linkedin_mcp/data | キャッシュ、トラッキングデータ、生成ファイル用のディレクトリ |
CACHE_TTL_HOURS | いいえ | 24 | LinkedIn API レスポンスをキャッシュする期間 |
LOG_LEVEL | いいえ | INFO | ログレベル(DEBUG、INFO、WARNING、ERROR) |
開発
# Install with all dependencies
pip install -e ".[all,dev]"
# Run tests (82 tests)
pytest
# Run with coverage
pytest --cov=linkedin_mcp
# Lint
ruff check src/ tests/
テストカバレッジ
テストはすべてのレイヤーをカバーしています:設定、モデル、サービス(キャッシュ、トラッカー、求人検索、プロフィール、履歴書・カバーレターの生成、LinkedIn クライアントフォーマッター、フォーマットコンバーター)、AI プロバイダー、および MCP ツールハンドラーです。
使用例
接続したら、AI アシスタントに次のように尋ねてください:
「米国にあるリモートの Python 開発者求人を検索して」
「satyanadella のプロフィールを見せて」
「求人 3847291056 に合わせて、私の LinkedIn プロフィールから履歴書を生成して」
「簡潔なテンプレートを使って、求人 3847291056 のカバーレターを作成して」
「Google のシニアエンジニア職への応募をトラッキングして — ステータス:応募済み」
「面接段階にあるすべての応募を一覧表示して」
「私の LinkedIn プロフィールを分析して、改善点を提案して」
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。