Skip to main content
Glama

JD-PULL · JD 수집 · 분석 · MCP 도구

Python 3.10+ License: MIT MCP Tests

채용 JD 수집 + 규칙 분석 + 직무 군상(群像) + MCP 서버를 위한 오픈소스 도구입니다. 누구나 로컬에 clone하여 자신의 데이터를 수집·분석하고, MCP(Model Context Protocol)를 통해 Claude / DeepSeek agent / Pi agent / Cursor 등 MCP를 지원하는 모든 외부 AI에 데이터를 노출할 수 있습니다.

┌──────────────────────────┐      ┌──────────────────────────┐
│  外部 AI(任何 MCP 客户端) │ ───► │  本机 jd-mcp 服务器        │
│  Claude / DeepSeek / Pi  │  MCP  │  ┌────────────────────┐  │
│  / Cursor …              │       │  │ 只读查询 · 写操作     │  │
└──────────────────────────┘       │  └────────┬───────────┘  │
                                    └──────────┼───────────────┘
                                               │ 读写
                                    ┌──────────▼───────────────┐
                                    │  你的数据目录(JD_DATA_DIR)│
                                    │  本地文件夹 或 私有 git 仓库 │
                                    └──────────────────────────┘

수집 결과는 오직 사용자 로컬의 data/ 디렉터리 또는 직접 지정한 데이터 저장소에만 존재합니다.

특징

  • JD 수집: 51job(Playwright 실제 브라우저 구동, 기본 시스템 Edge) 저빈도 예의 있는 수집; Boss직초(直聘) / 라거우(拉勾) / Liepin(猎聘)은 예약 인터페이스(로그인/서명 필요, 이번 버전 미구현);

  • 규칙 분석: 분류 사전을 기반으로 JD를 직무 카테고리로 분류하고, 스킬·책임 고빈도 키워드 추출;

  • LLM 정밀 분석(선택, 멀티 벤더): Claude / OpenAI / Gemini / DeepSeek / Qwen / Ollama 6개 벤더, '능력 사다리'로 각 벤더의 구조화 출력에 자동 대응;

  • 직무 군상: 카테고리별 스킬 / 연봉 / 경력 / 학력 분포와 책임 고빈도 키워드 보고서 생성(JSON + Markdown);

  • MCP 서버: stdio 및 streamable-http 이중 전송, 읽기 전용 쿼리 도구는 항상 사용 가능, 쓰기 도구는 기본 활성화(--no-write-tools로 비활성화), HTTP는 선택적으로 Bearer token 인증 지원;

  • 데이터 완전 로컬: JD_DATA_DIR로 임의 디렉터리 또는 git 저장소 지정 가능; 데이터 디렉터리가 독립 git 저장소가 아닌 경우 sync가 자동으로 건너뛰어 데이터가 실수로 커밋되는 것을 방지.

Related MCP server: MCP Job Search Server

기술 스택

카테고리

기술

언어

Python ≥ 3.10

수집

httpx + BeautifulSoup4(정적 파싱); Playwright 실제 브라우저 구동(51job SPA, 기본 시스템 Edge channel=msedge, chromium 다운로드 불필요)

분석

jieba 형태소 분석 + 규칙 사전 분류; LLM 정밀 분석은 anthropic SDK / httpx 멀티 벤더 어댑터 사용

데이터

로컬 JSON 파일 저장; 지문 기반 중복 제거(dedup); 디렉터리 구조 raw → classified → reports → site

출력

정적 HTML 보고서 사이트(인라인 CSS, 프론트엔드 프레임워크 의존성 없음)

MCP

mcp>=1.26(FastMCP) · stdio + streamable-http 이중 전송 · Pydantic v2 데이터 검증

설정

YAML(PyYAML), 사이트/사전/LLM 모두 코드 수정 없이 설정 가능

테스트

pytest(51개 케이스)

사이트

51job(현재 활성화); Boss직초 / 라거우 / Liepin(예약, 미구현)

설치

요구 사항: Python ≥ 3.10.

git clone https://github.com/NaoYUN77/JD-PULL.git
cd JD-PULL
python -m venv .venv && .venv\Scripts\activate      # Windows;macOS/Linux 用 source .venv/bin/activate
pip install -e .[dev]
# 51job 爬取走真实浏览器(默认系统 Edge,无需额外下载 chromium)
# 若想用捆绑 chromium:删除 config/settings.yaml 中 crawl.browser.channel 一行后
#   playwright install chromium

빠른 시작(먼저 데이터 확보)

채용 사이트는 대부분 안티크롤링 리스크 관리가 있습니다. 저빈도, 실제 브라우저, 실제 필요에 따라 수집하세요; 차단되면 즉시 중단하고 우회를 시도하지 마세요.

# 1) 生成样本 JD(验证全链路;51job 被 WAF 拦截时用)
jdcollector seed

# 2) 真实爬取(按 config/sites.yaml 的关键词/城市;51job 需本机有 Edge 且有头窗口)
jdcollector crawl

# 3) 规则分析(可选加 LLM 精分,见下文「LLM 多供应商精分」)
jdcollector analyze

# 4) 岗位群像报告
jdcollector portrait

# 5) 静态 HTML 报告站(输出到数据目录 site/)
jdcollector view

데이터는 기본적으로 저장소 루트 data/에 저장됩니다(.gitignore에 포함되어 커밋되지 않음).

MCP 서버로 사용

시작 후 외부 AI가 MCP를 통해 사용자의 데이터를 호출할 수 있습니다.

# stdio(默认,给本地桌面客户端用)
jd-mcp

# 只读模式(只暴露查询,不暴露爬取/分析等写工具)
jd-mcp --no-write-tools

# HTTP(streamable-http,给远程客户端 / 其它进程用,可带 Bearer token)
jd-mcp --transport http --host 0.0.0.0 --port 8000 --token 你的token

Claude Desktop

claude_desktop_config.json 편집:

{
  "mcpServers": {
    "jdcollector": {
      "command": "jd-mcp",
      "args": ["--transport", "stdio"]
    }
  }
}

Claude Code

claude mcp add jdcollector -- jd-mcp --transport stdio
claude mcp list   # 验证已连接

Cursor

Settings → MCP → + Add global MCP server, command 입력:

jd-mcp --transport stdio

MCP 도구 목록

유형

도구

설명

읽기 전용

get_stats

데이터 요약 통계(총계 / 카테고리별 개수)

읽기 전용

list_categories

직무 카테고리 및 샘플 수 나열

읽기 전용

search_jobs

키워드 / 카테고리 / 도시 / 회사로 JD 검색(제목, 연봉, 스킬 등 반환)

읽기 전용

get_job

job_id로 단일 JD 전체 레코드 조회

읽기 전용

get_portrait

특정 카테고리 군상 보고서(JSON)

읽기 전용

get_portrait_markdown

특정 카테고리 군상 보고서(Markdown)

쓰기

crawl_jobs

로컬 JD 수집(Playwright / 브라우저 필요); 구조화 결과 {added, elapsed_s, per_site, warnings} 반환, _meta.progressToken 전달 시 작업별 진행 알림 수신 가능

쓰기

run_analysis

규칙 분석(선택적 LLM 정밀 분석)

쓰기

run_portrait

각 카테고리 군상 보고서 생성

쓰기

build_site

정적 HTML 보고서 사이트 생성

쓰기

sync_data

데이터 디렉터리를 해당 git 저장소에 커밋 / 푸시

추가로 읽기 전용 resources 등록: jd://stats, jd://portrait/{category}.

HTTP 배포 및 인증

jd-mcp --transport http --host 0.0.0.0 --port 8000 --token 你的token
# 环境变量亦可:JD_MCP_TRANSPORT / JD_MCP_HOST / JD_MCP_PORT / JD_MCP_TOKEN

클라이언트는 http://127.0.0.1:8000/mcp에 연결하고, 요청 헤더에 Authorization: Bearer 사용자토큰을 포함합니다. 프로덕션 환경에서는 리버스 프록시(Nginx / Caddy) 뒤에 배치하고 TLS를 활성화하는 것을 권장합니다; 공개 인터넷에 평문 포트를 직접 노출하지 마세요.

데이터 디렉터리와 git 동기화

데이터 루트 디렉터리는 환경 변수 JD_DATA_DIR로 지정하며, 기본값은 <저장소 루트>/data(gitignored)입니다:

환경 변수

역할

JD_DATA_DIR

데이터 루트 디렉터리; 일반 폴더 또는 독립 git 저장소일 수 있음

JD_DATA_REPO

sync/push 대상 저장소 URL 덮어쓰기(미입력 시 데이터 저장소의 origin 사용)

JD_GIT_TOKEN

HTTPS 내장 token, 이번 push에만 사용(git 설정에 기록되지 않음)

sync_data / jdcollector sync 판단 로직:

  • 데이터 디렉터리가 git 저장소가 아님 → 로컬 저장만 수행, git 건너뜀;

  • 데이터 디렉터리가 다른 저장소에 포함됨(예: 도구 저장소 자체의 ./data) → git 건너뜀, 데이터가 공개 저장소에 커밋되는 것 방지;

  • 데이터 디렉터리가 독립 git 저장소 → add → commit → pull --rebase → push.

예시: 데이터를 비공개 GitHub 저장소에 저장

set JD_DATA_DIR=D:\jd-data
cd D:\jd-data && git init && git remote add origin git@github.com:you/jd-data.git
# 推送时可用
set JD_GIT_TOKEN=ghp_xxx

LLM 멀티 벤더 정밀 분석

config/settings.yaml의 llm: 섹션:

llm:
  enabled: true        # 关闭即纯规则分析
  provider: deepseek   # 选供应商

벤더

provider

환경 변수

기본 모델

능력 등급

Anthropic Claude

claude

ANTHROPIC_API_KEY

claude-sonnet-5

L3 schema 엄격

OpenAI

openai

OPENAI_API_KEY

gpt-4o

L3 schema 엄격

Google Gemini

gemini

GEMINI_API_KEY

gemini-2.5-flash

L3 schema 엄격

DeepSeek

deepseek

DEEPSEEK_API_KEY

deepseek-chat

L2 JSON 모드

통의천문(通义千问)

qwen

DASHSCOPE_API_KEY

qwen-plus

L2 JSON 모드

Ollama(로컬)

ollama

없음

qwen2.5:7b

L2 JSON 모드

능력 사다리: 통일된 LlmClient 추상화로 벤더 능력에 따라 구조화 출력 형태를 자동 선택 — L3는 각 벤더의 네이티브 schema 엄격 모드(Claude output_config / OpenAI response_format.json_schema / Gemini response_schema), L2는 JSON 모드(DeepSeek / Qwen의 response_format.json_object, Ollama의 format:"json"), L1은 순수 prompt 폴백; 현재 등급 실패 시 자동 다운그레이드. 출력은 통일적으로 Pydantic 검증을 거치며, 누락 / 비정상 시 오류 피드백과 함께 1회 재시도, 그래도 실패하면 규칙 결과로 폴백하여 프로세스를 중단하지 않습니다.

provider: claude인 경우 최상위 model / api_key_env가 여전히 하위 호환 방식으로 사전 설정을 덮어씁니다; 다른 벤더는 llm.providers.<name> 아래에서 설정하세요(각 필드 의미는 파일 내 주석 참조).

프로젝트 구조

config/            # YAML 配置:settings / sites / categories / skills
src/jdcollector/
  crawler/         # 各站点爬虫
  analysis/        # 规则分类 + llm_client 能力梯子 + llm 精分
  portrait/        # 岗位群像报告
  view/            # 静态 HTML 报告站
  mcp_server.py    # MCP 服务器(工具注册 + CLI 入口)
  sync_github.py   # 数据目录 git 同步(独立仓库保护)
tests/             # pytest 单元测试

면책 조항(Disclaimer)

⚠️ 본 프로젝트를 사용하기 전에 반드시 다음 조항을 읽어 주세요.

  1. 용도 제한: 본 프로젝트는 개인 학습, 데이터 분석 및 기술 교류에만 사용되며, 상업적 용도나 구직 / 채용 결정의 근거가 되지 않습니다.

  2. 데이터는 사용자가 직접 준비하고 책임을 집니다: 수집 행위는 사용자 자신의 기기에서 발생하며, 모든 데이터 컴플라이언스 책임은 사용자에게 있습니다. 대상 웹사이트의 서비스 약관과 robots.txt, 그리고 현지 법률(예: 《개인정보보호법》《데이터안전법》《반부정당경쟁법》)을 준수하세요.

  3. 수집 경계: 공개 페이지만 수집합니다; 로그인이 필요한 비공개 개인정보는 수집하지 않습니다; 캡차를 해독하지 않고, WAF / 차단을 우회하지 않으며, 프록시 풀이나 대규모 수집을 사용하지 않고, 어떤 방식으로도 대상 웹사이트의 정상적인 서비스를 방해하지 않습니다. 차단되면 즉시 중단하고 절대 대응 수단을 격상하지 않습니다.

  4. 데이터 정확성: JD 내용은 사이트의 공개 정보로, 만료되었거나 부정확할 수 있으며, 저자는 그 진실성, 완전성, 유용성을 보장하지 않습니다; 내장 seed 샘플 데이터는 전체 파이프라인 검증용일 뿐, 실제 채용 정보를 나타내지 않습니다.

  5. AI 출력은 참고용일 뿐: LLM 정밀 분석 / 군상 결론은 제3자 모델에 의해 생성되며 편향이 있을 수 있으므로, 인적 검토 후 사용하세요.

  6. 위험 부담: 본 프로젝트는 MIT License로 오픈소스 제공되며, 저자는 본 프로젝트 사용으로 인해 발생하는 직간접적 손실, 데이터 유출 또는 법적 위험에 대해 책임을 지지 않습니다.

License

MIT © 2026 NaoYun777

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables searching over 1 million enriched job listings from 20,000+ companies directly from MCP-compatible AI tools. Provides tools for job search, company profiles, and AI-powered similar job recommendations with real-time data updates.
    4
    118 npm
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to scrape job offers and filter them based on user-defined criteria, using MCP resources, prompts, and tools.
    -
  • A
    license
    Not graded
    quality
    B
    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.
    774 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI clients to serve as a personal career analyst by searching, matching, and explaining job recommendations, managing job applications, and syncing public job boards through standardized MCP tools.
    MIT