Job Search MCP
Job Search MCP
設定駆動型の Model Context Protocol(MCP) サーバーです。企業のキャリアサイトから直接求人を検索できます。
AIアシスタント(Claude、ChatGPT)が 5社の製薬会社 の求人情報を検索・抽出でき、無制限に企業を追加できる拡張可能なアーキテクチャを備えています。
現在の対応企業: Amgen, Bayer, GSK, Novartis, Pfizer
拡張可能: 250社以上(ヘルスケア、テック、金融セクター)
機能
✅ MCP対応のAIアシスタント向け求人検索ツール
✅ 設定駆動の企業サポート(JSONベース、コード変更不要)
✅ 求人詳細情報の抽出:タイトル、説明、要件、応募期限、応募リンク
✅ インテリジェントなエラー追跡:404、タイムアウト、ネットワークエラー、解析エラーを分類
✅ バッチ処理用CSVレポートの生成
✅ 外部解析依存ゼロ(純粋な正規表現ベースの抽出)
✅ TypeScript strict modeによる完全な型安全性
✅ 企業固有のHTMLパーサー(Workday、Eightfold AI、Drupalプラットフォーム)
✅ 手動求人検索用のオプションWebデモ(
/demo)✅ 包括的なテストスイート(4つのプロフェッショナルテスト)
Related MCP server: trackly-cli
技術スタック
プロトコル: Model Context Protocol (MCP) SDK (TypeScript)
ランタイム: Node.js v18+ (推奨LTS: v18, v20, v22)
言語: TypeScript 5.3+ (strict mode)
パース: 正規表現ベースのHTML抽出(Puppeteer、jsdom、Cheerio 不使用)
ビルド: TypeScript Compiler (tsc)
オプションのWeb UI: React + Next.js + Tailwind CSS(手動検索用)
テスト: ネイティブNode.js(jest/mocha 不要)
クイックスタート
MCP サーバーとして(AI統合)
インストール&ビルド:
npm install
npm run buildMCP サーバーを起動:
npm start
# Server runs on stdio (ready for Claude Desktop, Cursor, or other MCP clients)Claude Desktop で設定(
~/.claude/claude_desktop_config.json):
{
"mcpServers": {
"job-search": {
"command": "node",
"args": ["path/to/dist/server.js"]
}
}
}Claude で使用:
User: "Find me senior manager jobs at Amgen and Pfizer"
Claude: (uses MCP search tool)
Claude: "I found 12 senior manager positions with details..."ローカルCLIツールとして
# Install dependencies
npm install
# Build TypeScript
npm run build
# Run job search tests
npm run test
node dist/test/test-manager-jobs.jsオプション:手動ブラウジング用 Web デモ
同梱の React デモを Vercel にデプロイします(オプション):
# Deploy demo at https://[your-app].vercel.app/
vercel deployプロジェクトアーキテクチャ
MCP サーバーとして(主要)
Claude / AI Assistant
↓
MCP Client Protocol (stdio)
↓
MCP Server (src/server.ts)
↓
Search Tool Handler
↓
┌──────────────────────────────────────┐
│ SearchExecutor (src/search-executor.ts)
│ - Orchestrates job searches
│ - Fetches from career site URLs
│ - Parses HTML for job listings
└──────────────────────────────────────┘
↓
┌──────────┬──────────┬──────────┬──────────┬──────────┐
│ │ │ │ │ │
Amgen Bayer GSK Novartis Pfizer
│ │ │ │ │
└──────────┴──────────┴──────────┴──────────┴──────────┘
↓
ExtractorRegistry (src/extractors/)
- 5 Company-specific parsers
- Extract: jobTitle, description, requirements, applyLink
- Track errors with classification
↓
Return JSON to AI Assistantオプション:Web デモ
User → Web Browser
↓
React Component (app/demo/page.tsx)
↓
Next.js API Route (app/api/search-jobs/route.ts)
↓
SearchExecutor (same as MCP uses)
↓
Results + CSV reports設定
src/config.json は、プロジェクトがサポートする企業のソース・オブ・トゥルース(真の情報源)です。
現在: 5社(Amgen、Bayer、GSK、Novartis、Pfizer)
拡張: JSON設定による企業の無制限追加が可能(コード変更不要)
例:
{
"projectname": "Job Search MCP",
"sites": [
{
"name": "Amgen",
"search_url": "https://amgen.wd1.myworkdayjobs.com/Careers?q={SEARCH_TERM}"
},
{
"name": "Bayer",
"search_url": "https://bayer.eightfold.ai/careers?query={SEARCH_TERM}"
}
]
}"name": "Pfizer", "search_url": "..." } ] }
Only the company name and a usable search URL need to be supplied when adding a new company.
## Site Definitions
Each company is represented by a separate file under `sites/`.
For example:
```text
sites/amgen.json構造は test/sample.json に従う必要があります。
サイト定義には、以下の項目が含まれます:
企業名
キャリアURL
検索URL
対応する検索パラメータ
パラメータのラベル
パラメータの型
利用可能なパラメータ値
パラメータ構造は、固定のJSONキーではなく、意図的に配列として設計されています。これは、キャリアサイトによって公開される検索パラメータが異なるためです。
たとえば、あるサイトでは次のようなパラメータを公開しています:
location
country
jobType一方、別のサイトでは次のようなパラメータを公開している場合もあります:
location
timeType
LocationCountry
jobFamilyGroup
workerSubTypeMCP は、すべての企業が同じパラメータをサポートしていることを前提にすべきではありません。
求人エクストラクタ
このプロジェクトには、個々の求人投稿URLを解析し、詳細情報を抽出する サイト固有の求人エクストラクタ が含まれています。
抽出されるデータ
各エクストラクタは以下を取得します:
求人タイトル:役職名
求人内容 - 完全な求人説明・職責(ヘッダー/フッターを除く)
応募資格 - 要件、資格、スキル
応募期限 - 応募締切日(YYYY-MM-DD形式、利用できない場合は空白)
応募リンク - 応募用の直接URL(求人投稿URLとは異なる場合があります)
利用可能なエクストラクタ
src/extractors/
├── types.ts # JobExtractor interface & types
├── amgen.ts # Amgen (Workday-based)
├── pfizer.ts # Pfizer (Workday-based)
├── bayer.ts # Bayer (Eightfold AI)
├── gsk.ts # GSK (Workday-based)
├── novartis.ts # Novartis (Drupal)
└── index.ts # ExtractorRegistry使用例
import { ExtractorRegistry } from './src/extractors/index.js';
const registry = new ExtractorRegistry();
const amgenExtractor = registry.getExtractor('amgen');
const result = await amgenExtractor?.extract(
'https://amgen.wd1.myworkdayjobs.com/job/India---Hyderabad/Assoc-Director---Data-Product-Mgmt_R-219150'
);
if (result?.success && result.data) {
console.log(result.data.jobTitle);
console.log(result.data.jobDescription);
console.log(result.data.eligibility);
}テスト
検索・抽出機能を検証するための包括的なテストスイートが含まれています。
テストスイート概要
すべてのテストは自己完結型のTypeScriptファイルで、独立して実行できます:
npm run build
node dist/test/[test-name].js利用可能なテスト
1. test-config.ts - 設定ロードテスト
企業設定が src/config.json から正しく読み込まれることをテストします。
node dist/test/test-config.js目的: 設定構造と企業の検出を検証 出力: 利用可能な企業とその検索URLの一覧
2. test-search.ts - 求人検索テスト
全社の検索機能をテストします。
node dist/test/test-search.js目的: 検索が有効な求人URLを返すことを検証 出力: 各社の「Manager」求人検索結果 注意: 実際のキャリアサイトへのインターネット接続が必要です
3. test-extractors.ts - 求人抽出テスト
各企業の求人URLで求人詳細の抽出が機能することをテストします。
node dist/test/test-extractors.js目的: 求人タイトル、説明、応募資格の抽出が機能することを検証 出力: 抽出成功率と項目の詳細 注意: search-search.ts の出力から実際の求人URLが必要です
4. test-manager-jobs.ts - エンドツーエンド統合テスト
完全なパイプラインテスト:求人検索→詳細抽出→レポート生成
node dist/test/test-manager-jobs.js目的: エラートラッキングとCSVレポート生成を含む完全な統合テスト
出力:
test/manager-jobs-success.csv- 正常に抽出された求人データtest/manager-jobs-errors.csv- 抽出エラー(404、タイムアウトなど)成功率とエラー内訳を示すコンソールのサマリー
すべてのテストを実行
npm run build
node dist/test/test-config.js
node dist/test/test-search.js
node dist/test/test-extractors.js
node dist/test/test-manager-jobs.jsテスト出力ファイル
生成されたCSVレポートは test/ フォルダに保存されます:
manager-jobs-success.csv- 成功した求人の抽出結果manager-jobs-errors.csv- エラーコードとともに失敗した抽出の試行結果デバッグ用のサンプルHTMLファイル
これらのファイルはテスト実行中に生成され、安全に削除できます。.gitignore に含まれています。
test/sample.json
test/sample.json は、個々の企業ファイルの期待される構造を定義します。
これは企業ディレクトリではなく、スキーマの例・テンプレートです。
現在の例では、location、timeType、LocationCountry、jobFamilyGroup、workerSubType などのパラメータを使用しています。
BUILD.md
BUILD.md には、企業設定からMCPを構築するAI・開発プロセス向けの手順が記載されています。
ビルドプロセスでは以下を行う必要があります:
src/config.jsonを読み取ります。sitesにリストされているすべての企業を処理します。提供された検索URLにアクセス・解析します。
企業の実際のキャリア・検索構造を確認します。
利用可能な検索パラメータとその値を発見します。
対応する
sites/<company>.jsonを生成・更新します。生成されたファイルが
test/sample.jsonで定義された構造に従っていることを確認します。共通MCP実装をビルド・更新します。
設定されているすべてのサイトが検索できることを検証します。
UPDATE.md
新しいリリース作成時にプロジェクトを再構築する手順は ai/UPDATE.md を参照してください。
src/config.json が変更された場合、AI は新規追加のみではなく すべての 企業定義を再構築する必要があります。
これは意図的な仕様です。
既存のキャリアサイトは、以下の内容が変更される場合があります:
検索URL
検索クエリパラメータ
フィルタ名
フィルタ値
キャリアサイトの構造
ATS実装
そのため、各リリースで既存の sites/*.json を、現在のライブキャリアサイトと照合して再チェックする必要があります。
src/config.json updated
│
▼
Rebuild ALL sites
│
├── New company → create site JSON
│
└── Existing company → re-analyze and update
│
▼
Rebuild common MCP
│
▼
Validate
プロジェクト構造
JobSearchMCP/
├── src/ # Source code & configs
│ ├── server.ts # MCP server entry point
│ ├── search-executor.ts # Search execution & parsing
│ ├── config-loader.ts # Configuration loader
│ ├── types.ts # TypeScript types
│ ├── config.json # Company registry
│ ├── site_configurations.json
│ └── site_analysis.json
├── sites/ # Company-specific configs
│ ├── amgen.json
│ ├── pfizer.json
│ ├── novartis.json
│ ├── bayer.json
│ └── gsk.json
├── test/ # Tests & test data
│ ├── test-*.js # Test scripts
│ ├── sample.json # Configuration template
│ └── *.html # Sample HTML files
├── ai/ # AI development notes (Gitignored)
│ ├── AI.md
│ └── UPDATE.md
├── reports/ # Documentation
│ ├── IMPLEMENTATION.md
│ ├── ANALYSIS_GUIDE.md
│ ├── MCP_USAGE.md
│ └── MIGRATION.md
├── dist/ # Compiled JavaScript
├── package.json # Dependencies & scripts
├── tsconfig.json # TypeScript config
└── README.md # This fileテクノロジー
ランタイム:Node.js
言語:TypeScript
MCP SDK:Official Model Context Protocol TypeScript SDK
設定:JSON
設計原則
プロジェクトは、サイト固有の知識と共通のMCPロジックを分離しています。
sites/*.json
= How a particular company career site works
MCP implementation
= How to search any configured company
AI
= Understand the user's request and select/use the appropriate
company search configurationMCP には、location、remote、full_time、job_type などのパラメータに関するハードコードな前提を含めるべきではありません。
パラメータがその企業に存在するのは、その企業のキャリアサイトが実際にサポートしているか、設定が必要とする情報を公開している場合のみです。
目標
再利用可能な求人検索MCPを作成することが目標です。企業の追加は、主に config.json に検索URLを追加するだけで済み、AI ビルドプロセスがサイト固有の設定を自動的に発見・維持できるようにすることが目的です。
This server cannot be installed
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
- AlicenseNot gradedqualityAmaintenanceMCP server that exposes job search data from multiple boards, enabling clients to query and manage job listings via natural language.7MIT

trackly-cliofficial
AlicenseNot gradedqualityAmaintenanceMCP server for job search and application tracking, enabling AI agents to search jobs, get details, manage applications, and find contacts across 128K+ jobs and 1,900+ companies.1,0932MIT- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI-assisted job search workflows including job discovery, application tracking, resume evaluation, and cover letter generation, with support for multiple job sources and scheduled scraping.331AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceA custom MCP server that exposes a jobs database to any MCP-compatible LLM client, allowing users to ask in plain English to search, filter, and match job openings.MIT
Related MCP Connectors
GetJobzi MCP server for job search, application tracking, and career forecasting.
AI job search MCP — fact-checked jobs, application tracker, alerts. ChatGPT, Claude, Cursor.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
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/saurabhgayali/JobSearchMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server