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 저장소addcommitpull --rebasepush.

예시: 데이터를 비공개 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.yamlllm: 섹션:

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

A
license - permissive license
Not graded
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 Servers

  • A
    license
    A
    quality
    B
    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
    73
    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
    A
    maintenance
    Enables job search and scraping across multiple job boards (LinkedIn, Indeed, Glassdoor, etc.) with advanced filtering, directly from Claude Desktop or other MCP clients.
    5
    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.
    564
    3
    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/NaoYUN77/JD-PULL'

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