Skip to main content
Glama
zvieli
by zvieli

유니버설 멀티소스 구인 검색 FastMCP 서버 (job-mcp)

Python 3.12+ FastMCP 2.0+ Tests Passing License: MIT

엔터프라이즈급, 프라이버시 우선 FastMCP 서버로, HireMeTech, Comeet ATS, AllJobs Israel 전반에 걸쳐 지능형 다중 소스 기술 구인 집계, 스마트 중복 제거, 동적 CV 스킬 추출, 요구 사항 충족도 점수 산정, 자동 구인 지원 워크플로우를 제공합니다.


아키텍처 개요

graph TD
    Client([MCP Client: Claude / Cursor / Gemini Spark / Antigravity]) --> Tools[FastMCP Server Layer]
    Tools --> Aggregator[JobAggregator]
    Aggregator --> Registry[SourceRegistry]

    subgraph Parallel Pluggable Sources Layer
        Registry --> S1[HireMeTechSource<br/>Direct REST API + Session Fallback]
        Registry --> S2[ComeetSource<br/>Direct ATS API + Concurrency Semaphore]
        Registry --> S3[AllJobsSource<br/>Category Feeds + Anti-Blocking Headers]
    end

    subgraph Processing & Normalization Engine
        S1 --> Dedup[Deduplication & Entity Merger]
        S2 --> Dedup
        S3 --> Dedup
        
        Dedup --> NormKey["Key = slug(title) + '@' + slug(company)"]
        NormKey --> Merge[Metadata & Links Merger]
        Merge --> Scorer[Unified CV / Skill Matcher]
    end

    subgraph Dynamic Candidate Engine
        CV["Candidate CV (.pdf / .docx / .txt)"] --> Extractor[Dynamic CV & Profile Extractor]
        Extractor --> Skills["Extracted Skills (40+ tokens)"]
        Extractor --> Seniority["Inferred Seniority & Exclusions"]
        Extractor --> Roles["Target Job Roles"]
        Skills --> Scorer
        Seniority --> Scorer
    end

    Scorer --> Cache[Unified JobCache - 1h TTL]
    Cache --> Tools

주요 기능

  1. 동적 CV 및 지원자 프로필 추출:

    • 다중 형식 수집: .pdf(pypdf 사용), .docx(python-docx 사용), .txt 파일을 지원합니다.

    • NLP 스킬 청킹 및 동적 어휘 사전: 취약한 하드코딩 없이 40개 이상의 기술 스킬을 발견하고 추출하며, FastAPI, LangGraph, PostgreSQL, Smart Contracts, GraphRAG 같은 복잡한 다중 단어 기술을 지원합니다.

    • 자동 시니어티 및 제외 감지: 지원자의 시니어티(주니어, 미드, 시니어, 리드, 프린시펄, 디렉터)를 정확히 추론하고, 부적합한 포지션을 걸러내기 위한 지능형 부정 키워드를 생성합니다.

    • 불용어 및 노이즈 필터링: 이력서 구조적 잔재, 날짜, 교육 관련 항목, 비기술 메타데이터를 엄격히 제거합니다.

  2. 스마트 요구 사항 충족도 점수 산정 (0–100):

    • 구인 요구 사항 충족 비율: 지원자의 스킬이 특정 구인의 기술 스택(matched_job_skills / total_job_skills)을 얼마나 포괄적으로 충족하는지 계산하여, 광범위한 이력서를 가진 지원자에게 불이익이 없도록 합니다.

    • 가중치 기반 구성 요소 점수:

      • 기술 스택 중복 및 충족도: 최대 40점

      • 전체 CV 키워드 관련성: 최대 25점

      • 근무 형태 및 위치 일치: 최대 20점

      • 급여 기대치: 최대 15점

      • 제외 페널티: 하드 시니어티/기술 자격 미달 시 -100점

    • 등급별 매칭 분류:

      • 최상위 매칭 ($\ge 85$): 자동 지원 / 우선 지원 후보

      • 강한 매칭 ($70 - 84$): 검토/북마크용으로 플래그된 높은 관심 목록

      • 자격 미달 ($< 50$): 자동 숨김 또는 제거

  3. 플러그형 다중 소스 아키텍처:

    • HireMeTech: 직접 REST API 통합(/api/jobs/search, /api/auth/me, /api/resume/profile) 및 자동 DOM 폴백 지원.

    • Comeet (직접 ATS): Comeet Careers API(/careers-api/2.0/company/{id}/positions)와 직접 통합, asyncio.Semaphore(5) 속도 제한, 기술 디렉터리 인덱싱, 회사별 TTL 캐싱.

    • AllJobs Israel: 실제 브라우저 헤더와 소스 수준 오류 격리를 갖춘 카테고리 피드 통합.

  4. 교차 소스 중복 제거 및 엔터티 병합:

    • 여러 구인 게시판에 동일한 목록이 나타날 때 중복을 제거합니다.

    • 소스 목록(sources: ["hiremetech", "comeet"])을 병합하고, 기술 스택을 통합하며, 가장 풍부한 설명을 보존하고, 직접 ATS 지원 링크를 우선시합니다.

  5. 자동 및 감독 운영 모드:

    • 감독 모드: 각 도구에 대해 표준 MCP 확인 절차를 수행합니다.

    • 자동 모드: 수동 프롬프트 없이 안전한 읽기/필터/북마크 체이닝을 수행하며, 지원 제출 시 2단계 안전 장치를 적용합니다.

  6. 관찰 가능성 및 복원력:

    • 토큰/자격 증명을 정리하는 구조화된 JSON 로깅(structlog)을 stderr에 기록합니다.

    • 모든 ToolResponse 페이로드에 자동 추적 ID를 부여합니다.


도구 참조 (9개 도구)

도구 이름

매개변수

설명

list_job_sources

없음

등록된 모든 구인 소스(hiremetech, comeet, alljobs), 기능, 실시간 상태를 나열합니다.

get_job_matches

sources: list[str] = None, force_refresh: bool = False

중복 제거를 적용하여 전체 또는 지정된 플랫폼에서 매칭 목록을 가져옵니다.

filter_jobs_by_preferences

tech_stack: list[str], work_mode: str, location: str, min_salary: int, keywords: list[str], exclude_keywords: list[str], cv_path: str

지원자 CV 및 선호도에 따라 집계된 구인을 점수화하고 필터링합니다.

bookmark_job

job_id: str

원본 플랫폼에 구인 목록을 저장/즐겨찾기합니다.

delete_job

job_id: str

구인 목록을 보기에서 숨기고 캐시에서 제거합니다.

auto_apply_job

job_id: str

1단계: 지원 모달을 검사하고, 미리보기를 준비하며, 경고를 보고합니다.

confirm_auto_apply

job_id: str

2단계: 지원 제출을 실행합니다. 항상 명시적 확인이 필요합니다.

calibrate_selectors

없음

자가 치유 휴리스틱으로 라이브 페이지에 대한 DOM 선택자를 발견하고 보정합니다.

set_operation_mode

mode: 'supervised' | 'autonomous'

서버 실행 모드를 감독 모드와 자동 모드 사이에서 전환합니다.


빠른 시작 및 설정

1. 저장소 클론 및 의존성 설치

git clone https://github.com/zvieli/hireme_mcp.git
cd hireme_mcp

# Using uv (recommended)
uv venv .venv
uv pip install -e ".[dev]"
playwright install chromium

2. 지원자 프로필 및 CV 구성

루트 디렉터리에 이력서(cv.pdf, cv.docx, 또는 cv.txt)를 배치합니다:

cp /path/to/your/resume.pdf ./cv.pdf
cp .env.example .env

.env를 편집하여 기본 CV 경로와 연락처 정보를 구성합니다:

DEFAULT_CV_PATH=./cv.pdf
CANDIDATE_EMAIL=your.email@example.com
CANDIDATE_NAME="Your Name"

3. (선택 사항) HireMeTech 최초 인증 설정

Comeet과 AllJobs는 로그인 없이 자동으로 작동합니다. 직접 API 액세스 및 자동 지원을 위해 HireMeTech 계정을 인증하려면:

.venv/bin/python -m job_mcp.setup
  1. Chromium 브라우저 창이 열립니다.

  2. 자격 증명으로 로그인합니다.

  3. 터미널로 돌아와 [Enter]를 눌러 세션을 ./browser_profile에 저장합니다.


서버 실행

옵션 A: Docker 사용 (권장)

# Build and run in background
docker compose up -d

# View live multi-source aggregation logs
docker compose logs -f hireme-mcp

옵션 B: 로컬 실행

# Streamable HTTP (Default for Web & Cloud Clients)
.venv/bin/python -m job_mcp --transport http --host 0.0.0.0 --port 8000

# Stdio (Default for Desktop Clients)
.venv/bin/python -m job_mcp --transport stdio

시각적 CLI 파이프라인 실행기

터미널에서 풍부한 시각적 출력으로 전체 자동 탐색, 점수 산정, 지원 드라이런을 실행하려면:

# Run with auto-extracted skills from your CV:
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf

# Run with explicit stack override and remote filter:
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf --stack "Python,FastAPI,LangGraph" --work-mode remote --location "Tel Aviv"

# Execute live application submissions (disabled by default in dry-run):
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf --auto-apply

MCP 클라이언트 구성

1. Claude Desktop (claude_desktop_config.json)

Linux: ~/.config/Claude/claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "job-search-mcp": {
      "command": "/absolute/path/to/hireme_mcp/.venv/bin/python",
      "args": ["-m", "job_mcp", "--transport", "stdio"],
      "env": {
        "BROWSER_HEADLESS": "true",
        "DEFAULT_CV_PATH": "/absolute/path/to/hireme_mcp/cv.pdf",
        "CANDIDATE_EMAIL": "candidate@example.com",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

2. Gemini Spark / 웹 MCP 클라이언트

  • 엔드포인트 URL: https://<your-host-or-devtunnel-id>/mcp

  • 전송 방식: Streamable HTTP

  • 인증: 없음 / 인증 없음


환경 변수

변수

기본값

설명

DEFAULT_CV_PATH

./cv.pdf

동적 지원자 스킬 추출을 위한 기본 CV 파일 경로.

CANDIDATE_EMAIL

candidate@example.com

자동 지원 모달에 사용되는 지원자 이메일.

CANDIDATE_NAME

""

지원 양식에 사용되는 지원자 전체 이름.

MCP_TRANSPORT

http

전송 프로토콜 (http, sse, stdio).

MCP_HOST

0.0.0.0

HTTP/SSE 전송을 위한 호스트 바인딩.

MCP_PORT

8000

HTTP/SSE 전송을 위한 포트.

BROWSER_HEADLESS

true

브라우저를 헤드리스 모드로 실행 (true/false).

BROWSER_PROFILE_DIR

./browser_profile

영구 Chromium 세션 저장 디렉터리.

CACHE_TTL_MINUTES

60

메모리 내 중복 제거 구인 캐시 TTL(분).

LOG_LEVEL

INFO

구조화 로깅 수준 (DEBUG, INFO, WARNING, ERROR).


테스트 실행

전체 자동화 테스트 스위트(542개 테스트)를 실행합니다:

.venv/bin/pytest tests/ -v

라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.

-
license - not tested
-
quality - not tested
B
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 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/zvieli/TechJobMCP'

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