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개 이상의 회사(헬스케어, 테크, 금융 분야)

기능

  • ✅ AI 어시스턴트를 위한 MCP 호환 채용 검색 도구

  • ✅ 구성 기반 회사 지원(JSON 기반, 코드 변경 불필요)

  • ✅ 상세 채용 정보 추출: 제목, 설명, 요구사항, 마감일, 지원 링크

  • ✅ 지능형 오류 추적: 404, 타임아웃, 네트워크 오류, 파싱 오류 분류

  • ✅ 일괄 처리를 위한 CSV 보고서 생성

  • ✅ 외부 파싱 의존성 제로(순수 정규식 기반 추출)

  • ✅ 전체 유형 안전성을 갖춘 TypeScript strict 모드

  • ✅ 회사별 HTML 파서(Workday, Eightfold AI, Drupal 플랫폼)

  • /demo에서 수동 채용 검색을 위한 선택적 웹 데모

  • ✅ 포괄적인 테스트 스위트(전문 테스트 4개)

Related MCP server: trackly-cli

기술 스택

  • 프로토콜: Model Context Protocol (MCP) SDK (TypeScript)

  • 런타임: Node.js v18+ (LTS 권장: v18, v20, v22)

  • 언어: TypeScript 5.3+ (strict 모드)

  • 파싱: 정규식 기반 HTML 추출(Puppeteer, jsdom, Cheerio 불필요)

  • 빌드: TypeScript Compiler (tsc)

  • 선택적 웹 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

선택 사항: 수동 검색을 위한 웹 데모

포함된 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

선택 사항: 웹 데모

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은 프로젝트가 지원하는 회사에 대한 기준(source of truth)입니다.

현재: 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

목적: 채용 제목, 설명, 자격 요건 추출 검증 출력: 추출 성공률 및 필드 세부 정보 참고: test-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/개발 프로세스를 위한 지침이 포함되어 있습니다.

빌드 프로세스는 다음을 수행해야 합니다:

  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: 공식 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는 location, remote, full_time, job_type과 같은 파라미터에 대한 하드코딩된 가정을 포함해서는 안 됩니다.

파라미터는 해당 회사의 커리어 사이트가 실제로 지원하거나 구성에 필요한 정보를 노출하는 경우에만 해당 회사에 존재합니다.

목표

목표는 재사용 가능한 채용 검색 MCP를 만드는 것입니다. 회사 추가는 주로 검색 URL을 config.json에 추가하는 일이며, 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