Skip to main content
Glama
saurabhgayali

Job Search MCP

직업 검색 엔진

5대 주요 제약회사에서 빠르고 안정적인 직업 검색.

Amgen, Bayer, GSK, Novartis, Pfizer 채용 사이트에서 직접 직업을 검색하세요. 직무 제목, 설명, 요구사항, 지원 링크를 즉시 추출합니다.

데모: https://[your-vercel-app].vercel.app/

기능

  • ✅ 5개 회사에서 동시에 검색

  • ✅ 상세 직무 정보 추출 (제목, 설명, 요구사항, 마감일)

  • ✅ 오류 코드로 실패한 추출 추적 (404, 타임아웃 등)

  • ✅ 결과로 CSV 보고서 생성

  • ✅ 외부 의존성 제로, 빠른 정규식 기반 파싱

  • ✅ TypeScript + 엄격한 타입 안전성

  • ✅ 포괄적인 오류 처리 및 분류

  • ✅ 요금 제한 API (IP당 하루 5회 검색)

Related MCP server: trackly-cli

기술 스택

  • 프론트엔드: React + TypeScript + Tailwind CSS

  • 백엔드: Next.js + Node.js

  • 파싱: 정규식 기반 HTML 추출 (무거운 의존성 없음)

  • 런타임: Node.js (v18+)

  • 언어: TypeScript 5.3+

  • 빌드: TypeScript 컴파일러 (tsc)

  • 배포: Vercel (권장) 또는 AWS Lambda

빠른 시작

데모 사용해보기

방문: https://[your-vercel-app].vercel.app/

직업 검색 인터페이스로 리디렉션됩니다. 직무 제목을 입력하고 회사를 선택한 후 결과를 즉시 확인하세요.

로컬 개발

# Install dependencies
npm install

# Build TypeScript
npm run build

# Run a test
node dist/test/test-manager-jobs.js

# Start development server (requires Next.js setup)
npm run dev

프로덕션 배포

# Deploy to Vercel (recommended)
npm install -g vercel
vercel

# Or deploy to AWS
# See docs/DEPLOYMENT.md for AWS Lambda setup

프로젝트 아키텍처

User searches for jobs → Demo page (/app/demo/page.tsx)
                          ↓
                    React UI Component
                    - Search input
                    - Company multi-select
                    - Sortable results tables
                    ↓
                   REST API (/api/search-jobs)
                    ↓
    ┌───────────────┬────────────────┬────────────────┐
    │               │                │                │
  Amgen          Bayer            GSK           Novartis  Pfizer
(Workday)   (Eightfold AI)    (Workday)      (Drupal)   (Workday)
    │               │                │                │
    └───────────────┴────────────────┴────────────────┘
                    ↓
          Search Executor (src/search-executor.ts)
          - Fetches job URLs from each site
          - Parses HTML for job listings
          ↓
    Extractor Registry (src/extractors/)
    - Extracts job details from each URL
    - Company-specific parsers
    - Error tracking & classification
          ↓
    Extraction Helpers (src/extraction-helpers.ts)
    - CSV report generation
    - Error aggregation
          ↓
    REST API Response (JSON)
          ↓
    Demo Page displays results
    - Success table: Jobs with details
    - Error table: Failed extractions
    - Download CSV buttons

구성

src/config.json은 프로젝트가 지원하는 회사의 진실의 원천(source of truth)입니다.

예시:

{
  "projectname": "Job Search MCP",
  "sites": [
    {
      "name": "Amgen",
      "search_url": "https://amgen.wd1.myworkdayjobs.com/Careers?q=Engineer"
    },
    {
      "name": "Pfizer",
      "search_url": "..."
    }
  ]
}

새 회사를 추가할 때는 회사 이름과 사용 가능한 검색 URL만 제공하면 됩니다.

사이트 정의

각 회사는 sites/ 아래의 별도 파일로 표현됩니다.

예를 들어:

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를 만드는 것입니다. 회사 추가는 주로 config.json에 검색 URL을 추가하는 문제로, AI 빌드 프로세스가 사이트별 구성을 자동으로 발견하고 유지 관리할 수 있게 합니다.

Related MCP Connectors

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.
    258 npm
    3
    MIT
  • A
    license
    C
    quality
    C
    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.
    83
    42 npm
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    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