jd-mcp
JD-PULL · JD 爬取 · 分析 · MCP 工具
Ein Open-Source-Tool für JD-Crawling + Regelanalyse + Stellenprofile + MCP-Server. Jeder kann es lokal klonen, eigene Daten crawlen und analysieren und die Daten über MCP (Model Context Protocol) an jede MCP-fähige externe KI wie Claude / DeepSeek agent / Pi agent / Cursor usw. bereitstellen.
┌──────────────────────────┐ ┌──────────────────────────┐
│ 外部 AI(任何 MCP 客户端) │ ───► │ 本机 jd-mcp 服务器 │
│ Claude / DeepSeek / Pi │ MCP │ ┌────────────────────┐ │
│ / Cursor … │ │ │ 只读查询 · 写操作 │ │
└──────────────────────────┘ │ └────────┬───────────┘ │
└──────────┼───────────────┘
│ 读写
┌──────────▼───────────────┐
│ 你的数据目录(JD_DATA_DIR)│
│ 本地文件夹 或 私有 git 仓库 │
└──────────────────────────┘Die Crawl-Ergebnisse existieren nur in deinem lokalen data/-Verzeichnis oder in einem von dir selbst festgelegten Daten-Repository.
Funktionen
JD-Crawling: 51job (Playwright mit echtem Browser, standardmäßig systemeigenes Edge) mit niedriger Frequenz und höflichem Abruf; Boss直聘 / 拉勾 / 猎聘 reservierte Schnittstellen (Login/Signatur erforderlich, in dieser Version nicht implementiert);
Regelanalyse: Einordnung von JDs in Stellenkategorien anhand von Klassifikationswörterbüchern, Extraktion von häufigen Skill- und Verantwortungsbegriffen;
LLM-Feinanalyse (optional, Multi-Anbieter): Claude / OpenAI / Gemini / DeepSeek / Qwen / Ollama – sechs Anbieter, automatische Anpassung an die strukturierte Ausgabe der jeweiligen Anbieter über eine „Fähigkeitsleiter";
Stellenprofile: Generierung von Skill-/Gehalts-/Erfahrungs-/Bildungsverteilungen und Berichten zu häufigen Verantwortungsbegriffen pro Kategorie (JSON + Markdown);
MCP-Server: stdio- und streamable-http-Dualtransport, schreibgeschützte Abfragetools immer verfügbar, Schreib-Tools standardmäßig aktiviert (
--no-write-toolsdeaktiviert), HTTP optional mit Bearer-Token-Authentifizierung;Daten vollständig lokal:
JD_DATA_DIRkann auf ein beliebiges Verzeichnis oder Git-Repository zeigen; wenn das Datenverzeichnis kein eigenständiges Git-Repository ist, wirdsyncautomatisch übersprungen, um zu verhindern, dass Daten versehentlich committet werden.
Related MCP server: MCP Job Search Server
Technologie-Stack
Kategorie | Technologie |
Sprache | Python ≥ 3.10 |
Crawling | httpx + BeautifulSoup4 (statisches Parsing); Playwright mit echtem Browser (51job SPA, standardmäßig systemeigenes Edge |
Analyse | jieba-Tokenisierung + Regelwörterbuch-Klassifikation; LLM-Feinanalyse über anthropic SDK / httpx Multi-Anbieter-Adapter |
Daten | Lokale JSON-Dateispeicherung; Fingerabdruck-Deduplizierung ( |
Ausgabe | Statische HTML-Berichtsseite (Inline-CSS, keine Frontend-Framework-Abhängigkeit) |
MCP |
|
Konfiguration | YAML (PyYAML), Sites/Wörterbücher/LLM vollständig konfigurierbar ohne Codeänderung |
Tests | pytest (51 Testfälle) |
Sites | 51job (aktuell aktiviert); Boss直聘 / 拉勾 / 猎聘 (reserviert, nicht implementiert) |
Installation
Erfordert 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 chromiumSchnellstart (erst Daten haben)
Jobbörsen haben üblicherweise Anti-Crawling-Schutzmaßnahmen. Bitte halte die Frequenz niedrig, verwende einen echten Browser und crawle nur nach tatsächlichem Bedarf; stoppe, wenn du blockiert wirst, und versuche nicht, die Schutzmaßnahmen zu umgehen.
# 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 viewDaten werden standardmäßig im Repository-Stammverzeichnis data/ geschrieben (durch .gitignore ausgeschlossen, wird nicht ins Repository committet).
Verwendung als MCP-Server
Nach dem Start kann externe KI über MCP auf deine Daten zugreifen.
# 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 你的tokenClaude Desktop
Bearbeite 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 ausfüllen:
jd-mcp --transport stdioMCP-Toolübersicht
Typ | Tool | Beschreibung |
Schreibgeschützt |
| Datenzusammenfassung (Gesamtzahl / Kategoriezählung) |
Schreibgeschützt |
| Stellenkategorien und deren Stichprobenanzahl auflisten |
Schreibgeschützt |
| JDs nach Schlüsselwort / Kategorie / Stadt / Unternehmen durchsuchen (gibt Titel, Gehalt, Skills usw. zurück) |
Schreibgeschützt |
| Einzelnen vollständigen JD-Datensatz per job_id abrufen |
Schreibgeschützt |
| Profilbericht einer Kategorie (JSON) |
Schreibgeschützt |
| Profilbericht einer Kategorie (Markdown) |
Schreiben |
| Lokal JDs crawlen (erfordert Playwright / Browser); gibt strukturiertes Ergebnis |
Schreiben |
| Regelanalyse (optional mit LLM-Feinanalyse) |
Schreiben |
| Profilberichte für alle Kategorien generieren |
Schreiben |
| Statische HTML-Berichtsseite generieren |
Schreiben |
| Datenverzeichnis in dessen Git-Repository committen / pushen |
Zusätzlich registrierte schreibgeschützte Resources: jd://stats, jd://portrait/{category}.
HTTP-Bereitstellung und Authentifizierung
jd-mcp --transport http --host 0.0.0.0 --port 8000 --token 你的token
# 环境变量亦可:JD_MCP_TRANSPORT / JD_MCP_HOST / JD_MCP_PORT / JD_MCP_TOKENClient verbindet sich mit http://127.0.0.1:8000/mcp, Request-Header mit Authorization: Bearer deinToken.
Für die Produktion empfiehlt sich die Bereitstellung hinter einem Reverse-Proxy (Nginx / Caddy) mit aktiviertem TLS; den öffentlichen Klartext-Port nicht direkt freigeben.
Datenverzeichnis und Git-Synchronisierung
Das Datenwurzelverzeichnis wird über die Umgebungsvariable JD_DATA_DIR festgelegt, Standard: <Repository-Stamm>/data (gitignored):
Umgebungsvariable | Funktion |
| Datenwurzelverzeichnis; kann ein normaler Ordner oder ein eigenständiges Git-Repository sein |
| Überschreibt die Ziel-Repository-URL für sync/push (wenn nicht angegeben, wird |
| HTTPS-eingebettetes Token, nur für diesen push verwendet (wird nicht in die Git-Konfiguration geschrieben) |
Logik von sync_data / jdcollector sync:
Datenverzeichnis kein Git-Repository → nur lokal speichern, Git überspringen;
Datenverzeichnis in einem anderen Repository eingebettet (z. B.
./dataim Tool-Repository selbst) → Git überspringen, um zu verhindern, dass Daten in ein öffentliches Repository committet werden;Datenverzeichnis ist ein eigenständiges Git-Repository →
add→commit→pull --rebase→push.
Beispiel: Daten in privatem GitHub-Repository
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_xxxLLM-Multi-Anbieter-Feinanalyse
llm:-Abschnitt in config/settings.yaml:
llm:
enabled: true # 关闭即纯规则分析
provider: deepseek # 选供应商Anbieter |
| Umgebungsvariable | Standardmodell | Fähigkeitsstufe |
Anthropic Claude |
|
|
| L3 Schema strikt |
OpenAI |
|
|
| L3 Schema strikt |
Google Gemini |
|
|
| L3 Schema strikt |
DeepSeek |
|
|
| L2 JSON-Modus |
通义千问 |
|
|
| L2 JSON-Modus |
Ollama (lokal) |
| keine |
| L2 JSON-Modus |
Fähigkeitsleiter: Einheitliche LlmClient-Abstraktion, automatische Auswahl der strukturierten Ausgabeform basierend auf den Fähigkeiten des Anbieters – L3 verwendet den nativen Schema-Strict-Modus des jeweiligen Anbieters (Claude output_config / OpenAI response_format.json_schema / Gemini response_schema), L2 verwendet den JSON-Modus (DeepSeek / Qwen response_format.json_object, Ollama format:"json"), L1 reiner Prompt als Fallback; bei Fehlschlag der aktuellen Stufe automatische Herabstufung. Die Ausgabe wird einheitlich über Pydantic validiert, bei fehlenden / ungültigen Werten wird mit Fehlerfeedback einmal wiederholt, bei erneutem Fehlschlag Rückfall auf Regel-Ergebnisse, ohne den Prozess zu unterbrechen.
Bei provider: claude überschreiben die Top-Level-model / api_key_env weiterhin abwärtskompatibel die Voreinstellungen; für andere Anbieter bitte unter llm.providers.<name> konfigurieren (Bedeutung der Felder siehe Kommentare in der Datei).
Projektstruktur
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 单元测试Haftungsausschluss (Disclaimer)
⚠️ Bitte lies die folgenden Bedingungen vor der Verwendung dieses Projekts sorgfältig.
Nutzungsbeschränkung: Dieses Projekt dient ausschließlich dem persönlichen Lernen, der Datenanalyse und dem technischen Austausch, stellt keine kommerzielle Nutzung dar und ist keine Grundlage für Bewerbungs- / Einstellungsentscheidungen.
Daten werden vom Nutzer selbst bereitgestellt und verantwortet: Das Crawling erfolgt auf deinem eigenen Rechner, die volle Verantwortung für die Datenkonformität liegt beim Nutzer. Bitte beachte die Nutzungsbedingungen und robots.txt der Ziel-Websites sowie die lokalen Gesetze und Vorschriften (z. B. das chinesische Gesetz zum Schutz personenbezogener Informationen, das Datensicherheitsgesetz, das Gesetz gegen unlauteren Wettbewerb).
Crawling-Grenzen: Es werden nur öffentliche Seiten gecrawlt; keine Login-pflichtigen, nicht-öffentlichen personenbezogenen Daten; keine Captchas umgehen, kein WAF / keine Sperren umgehen, keine Proxy-Pools oder massenhafte Erfassung verwenden, den normalen Betrieb der Ziel-Websites in keiner Weise stören. Bei Blockierung sofort stoppen, niemals die Gegenmaßnahmen eskalieren.
Datengenauigkeit: JD-Inhalte sind öffentliche Informationen der Websites, können veraltet oder ungenau sein; der Autor garantiert nicht deren Richtigkeit, Vollständigkeit oder Verwendbarkeit; die integrierten
seed-Beispieldaten dienen nur zur Verifizierung der gesamten Kette und stellen keine echten Stelleninformationen dar.KI-Ausgaben nur als Referenz: LLM-Feinanalyse / Profil-Schlussfolgerungen werden von Drittanbieter-Modellen generiert und können Abweichungen aufweisen; bitte nach manueller Prüfung verwenden.
Risiko auf eigene Verantwortung: Dieses Projekt wird unter der MIT-Lizenz als Open Source bereitgestellt; der Autor übernimmt keine Haftung für direkte oder indirekte Verluste, Datenlecks oder rechtliche Risiken, die durch die Nutzung dieses Projekts entstehen.
License
MIT © 2026 NaoYun777
This server cannot be deployed
Maintenance
Related MCP Connectors
JobsPipe — data pipeline of every job posting on the web. Search live, normalized job postings from 30+ ATS feeds and job boards for AI agents via MCP.
MCP for 8,700+ current AI jobs. 13 tools: search, match, salaries, companies, commerce quotes.
CareerProof MCP gives AI agents direct access to a professional-grade career and workforce intelligence platform. Two namespaces: atlas_* for HR/TA teams (candidate evaluation, batch shortlisting, competency scoring, interview generation, JD analysis, custom eval frameworks, research reports) and ceevee_* for professionals (CV optimization, career positioning, salary intelligence, market reports). Backed by RAG knowledge from 50+ premium research sources (McKinsey, BCG, HBR, Gartner, WEF)
Jobs, ads, SEO, keywords, YouTube and AliExpress data for AI agents. Runs on Apify.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables 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.476 npm2MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to scrape job offers and filter them based on user-defined criteria, using MCP resources, prompts, and tools.-

trackly-cliofficial
AlicenseNot gradedqualityBmaintenanceMCP 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.849 npm3MIT- AlicenseNot gradedqualityBmaintenanceEnables 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