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 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
- AlicenseAqualityBmaintenanceEnables 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.4732MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to scrape job offers and filter them based on user-defined criteria, using MCP resources, prompts, and tools.
- AlicenseNot gradedqualityAmaintenanceEnables job search and scraping across multiple job boards (LinkedIn, Indeed, Glassdoor, etc.) with advanced filtering, directly from Claude Desktop or other MCP clients.5MIT

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.5643MIT
Related MCP Connectors
AI job search MCP — fact-checked jobs, application tracker, alerts. ChatGPT, Claude, Cursor.
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
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/NaoYUN77/JD-PULL'
If you have feedback or need assistance with the MCP directory API, please join our Discord server