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 통합용)
설치 및 빌드:
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선택 사항: 수동 검색을 위한 웹 데모
포함된 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
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목적: 채용 제목, 설명, 자격 요건 추출 검증 출력: 추출 성공률 및 필드 세부 정보 참고: 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/개발 프로세스를 위한 지침이 포함되어 있습니다.
빌드 프로세스는 다음을 수행해야 합니다:
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: 공식 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를 만드는 것입니다. 회사 추가는 주로 검색 URL을 config.json에 추가하는 일이며, 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