Skip to main content
Glama
saurabhgayali

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統合)

  1. インストール&ビルド:

npm install
npm run build
  1. MCP サーバーを起動:

npm start
# Server runs on stdio (ready for Claude Desktop, Cursor, or other MCP clients)
  1. Claude Desktop で設定~/.claude/claude_desktop_config.json):

{
  "mcpServers": {
    "job-search": {
      "command": "node",
      "args": ["path/to/dist/server.js"]
    }
  }
}
  1. 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
workerSubType

MCP は、すべての企業が同じパラメータをサポートしていることを前提にすべきではありません。

求人エクストラクタ

このプロジェクトには、個々の求人投稿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 は、個々の企業ファイルの期待される構造を定義します。

これは企業ディレクトリではなく、スキーマの例・テンプレートです。

現在の例では、locationtimeTypeLocationCountryjobFamilyGroupworkerSubType などのパラメータを使用しています。

BUILD.md

BUILD.md には、企業設定からMCPを構築するAI・開発プロセス向けの手順が記載されています。

ビルドプロセスでは以下を行う必要があります:

  1. src/config.json を読み取ります。

  2. sites にリストされているすべての企業を処理します。

  3. 提供された検索URLにアクセス・解析します。

  4. 企業の実際のキャリア・検索構造を確認します。

  5. 利用可能な検索パラメータとその値を発見します。

  6. 対応する sites/<company>.json を生成・更新します。

  7. 生成されたファイルが test/sample.json で定義された構造に従っていることを確認します。

  8. 共通MCP実装をビルド・更新します。

  9. 設定されているすべてのサイトが検索できることを検証します。

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 configuration

MCP には、locationremotefull_timejob_type などのパラメータに関するハードコードな前提を含めるべきではありません。

パラメータがその企業に存在するのは、その企業のキャリアサイトが実際にサポートしているか、設定が必要とする情報を公開している場合のみです。

目標

再利用可能な求人検索MCPを作成することが目標です。企業の追加は、主に config.json に検索URLを追加するだけで済み、AI ビルドプロセスがサイト固有の設定を自動的に発見・維持できるようにすることが目的です。

A
license - permissive license
Not graded
quality - not tested
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

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that exposes job search data from multiple boards, enabling clients to query and manage job listings via natural language.
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP 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,093
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    33
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    A 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

View all related MCP servers

Related MCP Connectors

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/saurabhgayali/JobSearchMCP'

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