jd-mcp
JD-PULL · 爬取 de JD · Análisis · Herramienta MCP
Una herramienta de código abierto de 爬取 de JD de empleo + análisis por reglas + retrato de puestos + servidor MCP. Cualquiera puede clonarla localmente, 爬取 y analizar sus propios datos, y exponerlos a Claude / DeepSeek agent / Pi agent / Cursor o cualquier IA externa compatible con MCP a través de MCP(Model Context Protocol).
┌──────────────────────────┐ ┌──────────────────────────┐
│ 外部 AI(任何 MCP 客户端) │ ───► │ 本机 jd-mcp 服务器 │
│ Claude / DeepSeek / Pi │ MCP │ ┌────────────────────┐ │
│ / Cursor … │ │ │ 只读查询 · 写操作 │ │
└──────────────────────────┘ │ └────────┬───────────┘ │
└──────────┼───────────────┘
│ 读写
┌──────────▼───────────────┐
│ 你的数据目录(JD_DATA_DIR)│
│ 本地文件夹 或 私有 git 仓库 │
└──────────────────────────┘Los resultados de la 爬取 solo existen en tu directorio local data/ o en el repositorio de datos que tú mismo especifiques.
Características
爬取 de JD:51job(Playwright con navegador real, Edge del sistema por defecto)爬取 cortés de baja frecuencia; interfaces reservadas para Boss直聘 / 拉勾 / 猎聘(requieren inicio de sesión/firma, no implementadas en esta versión);
Análisis por reglas:clasifica los JD en categorías de puestos según diccionarios de clasificación, extrae palabras de alta frecuencia de habilidades y responsabilidades;
Análisis fino con LLM(opcional, multi-proveedor):seis proveedores — Claude / OpenAI / Gemini / DeepSeek / Qwen / Ollama — con adaptación automática a la salida estructurada de cada uno mediante la «escalera de capacidades»;
Retrato de puestos:genera informes de distribución de habilidades / salario / experiencia / formación y palabras de alta frecuencia de responsabilidades por categoría(JSON + Markdown);
Servidor MCP:doble transporte stdio y streamable-http, herramientas de solo lectura siempre disponibles, herramientas de escritura habilitadas por defecto(desactivables con
--no-write-tools), autenticación opcional por Bearer token en HTTP;Datos completamente locales:
JD_DATA_DIRpuede apuntar a cualquier directorio o repositorio git; si el directorio de datos no es un repositorio git independiente,syncse omite automáticamente para proteger los datos de confirmaciones accidentales.
Related MCP server: MCP Job Search Server
Stack tecnológico
Categoría | Tecnología |
Lenguaje | Python ≥ 3.10 |
爬取 | httpx + BeautifulSoup4(análisis estático); Playwright con navegador real(SPA de 51job, Edge del sistema por defecto |
Análisis | Segmentación jieba + clasificación por diccionario de reglas; análisis fino con LLM vía SDK de anthropic / adaptación multi-proveedor con httpx |
Datos | Almacenamiento local en archivos JSON; deduplicación por huella( |
Salida | Sitio de informes HTML estático(CSS en línea, sin dependencias de frameworks frontend) |
MCP |
|
Configuración | YAML(PyYAML), sitios/diccionarios/LLM totalmente configurables sin modificar código |
Pruebas | pytest(51 casos) |
Sitios | 51job(actualmente habilitado); Boss直聘 / 拉勾 / 猎聘(reservados, no implementados) |
Instalación
Requiere 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 chromiumInicio rápido(primero tener datos)
Los sitios de empleo suelen tener controles anti-爬取. Mantén una frecuencia baja, usa un navegador real y 爬取 solo lo que necesites; si te bloquean, detente y no intentes evadirlo.
# 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 viewLos datos se escriben por defecto en data/ en la raíz del repositorio(ignorado por .gitignore, no se confirma en el repositorio).
Uso como servidor MCP
Una vez iniciado, las IAs externas pueden acceder a tus datos a través de 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 你的tokenClaude Desktop
Edita 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, y en command escribe:
jd-mcp --transport stdioResumen de herramientas MCP
Tipo | Herramienta | Descripción |
Solo lectura |
| Estadísticas resumidas de datos(total / recuento por categoría) |
Solo lectura |
| Lista las categorías de puestos y su número de muestras |
Solo lectura |
| Busca JD por palabra clave / categoría / ciudad / empresa(devuelve título, salario, habilidades, etc.) |
Solo lectura |
| Obtiene el registro completo de un JD por job_id |
Solo lectura |
| Informe de retrato de una categoría(JSON) |
Solo lectura |
| Informe de retrato de una categoría(Markdown) |
Escritura |
| 爬取 local de JD(requiere Playwright / navegador); devuelve resultado estructurado |
Escritura |
| Análisis por reglas(análisis fino con LLM opcional) |
Escritura |
| Genera informes de retrato por categoría |
Escritura |
| Genera sitio de informes HTML estático |
Escritura |
| Confirma / envía el directorio de datos a su repositorio git |
También se registran resources de solo lectura: jd://stats、jd://portrait/{category}.
Despliegue HTTP y autenticación
jd-mcp --transport http --host 0.0.0.0 --port 8000 --token 你的token
# 环境变量亦可:JD_MCP_TRANSPORT / JD_MCP_HOST / JD_MCP_PORT / JD_MCP_TOKENEl cliente se conecta a http://127.0.0.1:8000/mcp con el encabezado Authorization: Bearer 你的token.
En producción se recomienda colocarlo detrás de un proxy inverso(Nginx / Caddy)con TLS habilitado; no expongas puertos en texto plano a Internet.
Directorio de datos y sincronización git
El directorio raíz de datos se especifica con la variable de entorno JD_DATA_DIR, por defecto <raíz del repositorio>/data(ignorado por git):
Variable de entorno | Función |
| Directorio raíz de datos; puede ser una carpeta normal o un repositorio git independiente |
| Sobrescribe la URL del repositorio destino para sync/push(si no se indica, usa el |
| Token incrustado en HTTPS, solo para este push(no se escribe en la configuración de git) |
Lógica de decisión de sync_data / jdcollector sync:
El directorio de datos no es un repositorio git → solo guardado local, se omite git;
El directorio de datos está dentro de otro repositorio(por ejemplo, el
./datadel propio repositorio de la herramienta)→ se omite git, para evitar que los datos se confirmen en un repositorio público;El directorio de datos es un repositorio git independiente →
add→commit→pull --rebase→push.
Ejemplo: datos en un repositorio privado de 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_xxxAnálisis fino multi-proveedor con LLM
Sección llm: de config/settings.yaml:
llm:
enabled: true # 关闭即纯规则分析
provider: deepseek # 选供应商Proveedor |
| Variable de entorno | Modelo por defecto | Nivel de capacidad |
Anthropic Claude |
|
|
| L3 schema estricto |
OpenAI |
|
|
| L3 schema estricto |
Google Gemini |
|
|
| L3 schema estricto |
DeepSeek |
|
|
| L2 modo JSON |
通义千问 |
|
|
| L2 modo JSON |
Ollama(local) |
| Ninguna |
| L2 modo JSON |
Escalera de capacidades:abstracción unificada LlmClient que selecciona automáticamente la forma de salida estructurada según la capacidad del proveedor — L3 usa el modo de schema estricto nativo de cada uno(Claude output_config / OpenAI response_format.json_schema / Gemini response_schema), L2 usa modo JSON(response_format.json_object de DeepSeek / Qwen, format:"json" de Ollama), L1 solo prompt como respaldo; si el nivel actual falla, degrada automáticamente. La salida se valida uniformemente con Pydantic; si faltan campos o son inválidos, reintenta una vez con retroalimentación de error, y si aún falla, vuelve al resultado de reglas sin interrumpir el flujo.
Con provider: claude, los model / api_key_env de nivel superior siguen siendo compatibles hacia atrás y sobrescriben los valores predefinidos; para otros proveedores, configura bajo llm.providers.<name>(el significado de cada campo está en los comentarios del archivo).
Estructura del proyecto
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 单元测试Aviso legal(Disclaimer)
⚠️ Por favor, lee atentamente los siguientes términos antes de usar este proyecto.
Restricción de uso:Este proyecto es solo para aprendizaje personal, análisis de datos e intercambio técnico; no constituye uso comercial ni base para decisiones de búsqueda de empleo / contratación.
Los datos son responsabilidad del usuario:La 爬取 ocurre en tu propia máquina, y toda la responsabilidad de cumplimiento normativo de los datos recae en el usuario. Respeta los términos de servicio y robots.txt de los sitios objetivo, así como las leyes y regulaciones locales(como la Ley de Protección de Información Personal, la Ley de Seguridad de Datos y la Ley contra la Competencia Desleal).
Límites de la 爬取:Solo se 爬取 páginas públicas; no se 爬取 información personal que requiera inicio de sesión o no sea pública; no se descifran captchas, no se evaden WAF / bloqueos, no se usan pools de proxies ni recolección a escala, y no se interfiere de ninguna manera con el servicio normal de los sitios objetivo. Si te bloquean, detente y nunca escales las medidas de confrontación.
Precisión de los datos:El contenido de los JD es información pública del sitio y puede estar desactualizado o ser inexacto; el autor no garantiza su veracidad, integridad o disponibilidad; los datos de muestra
seedintegrados solo sirven para verificar el flujo completo y no representan información real de empleo.La salida de IA es solo de referencia:El análisis fino con LLM / las conclusiones de retrato son generadas por modelos de terceros y pueden contener sesgos; verifica manualmente antes de usar.
Riesgo asumido por el usuario:Este proyecto se ofrece bajo licencia MIT; el autor no se hace responsable de pérdidas directas o indirectas, filtraciones de datos o riesgos legales derivados del uso de este proyecto.
Licencia
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