Skip to main content
Glama

JD-PULL · Сбор JD · Анализ · MCP-инструмент

Python 3.10+ License: MIT MCP Tests

Открытый инструмент сбора вакансий JD + анализа по правилам + портрета должностей + MCP-сервер. Любой может склонировать его локально, собрать и проанализировать собственные данные и через MCP (Model Context Protocol) предоставить данные любому внешнему ИИ, поддерживающему MCP: Claude / DeepSeek agent / Pi agent / Cursor и другим.

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

Результаты сбора хранятся только в вашей локальной директории data/ или в указанном вами хранилище данных.

Возможности

  • Сбор JD: 51job (Playwright с реальным браузером, по умолчанию системный Edge) — вежливый сбор с низкой частотой; для Boss直聘 / 拉勾 / 猎聘 зарезервированы интерфейсы (требуют входа/подписи, в этой версии не реализованы);

  • Анализ по правилам: классификация JD по категориям на основе словарей, извлечение частотных слов навыков и обязанностей;

  • LLM-анализ (опционально, несколько провайдеров): шесть провайдеров — Claude / OpenAI / Gemini / DeepSeek / Qwen / Ollama, автоматическая адаптация структурированного вывода каждого из них через «лестницу возможностей»;

  • Портрет должностей: генерация отчётов по распределению навыков / зарплат / опыта / образования и частотным словам обязанностей по категориям (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 с реальным браузером (SPA 51job, по умолчанию системный 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直聘 / 拉勾 / 猎聘 (зарезервированы, не реализованы)

Установка

Требуется 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-сервера

После запуска внешний ИИ сможет обращаться к вашим данным через 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

Полная запись одного JD по job_id

Только чтение

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

Коммит / push директории данных в её git-репозиторий

Также зарегистрированы ресурсы только для чтения: 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 ваш_токен. В production рекомендуется размещать за обратным прокси (Nginx / Caddy) с включённым TLS; не открывайте незашифрованный порт напрямую в интернет.

Директория данных и синхронизация с git

Корневая директория данных задаётся переменной окружения JD_DATA_DIR, по умолчанию <корень_репозитория>/data (в gitignored):

Переменная окружения

Назначение

JD_DATA_DIR

Корневая директория данных; может быть обычной папкой или отдельным git-репозиторием

JD_DATA_REPO

Переопределяет URL целевого репозитория для sync/push (если не указано, используется origin репозитория данных)

JD_GIT_TOKEN

Встроенный токен для HTTPS, используется только для текущего 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-анализ с несколькими провайдерами

Секция llm: в config/settings.yaml:

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

Провайдер

provider

Переменная окружения

Модель по умолчанию

Уровень возможностей

Anthropic Claude

claude

ANTHROPIC_API_KEY

claude-sonnet-5

L3 строгая схема

OpenAI

openai

OPENAI_API_KEY

gpt-4o

L3 строгая схема

Google Gemini

gemini

GEMINI_API_KEY

gemini-2.5-flash

L3 строгая схема

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 использует нативные строгие режимы схем (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; при отсутствии / некорректности выполняется одна повторная попытка с сообщением об ошибке, при повторном сбое — возврат к результатам правил, без прерывания процесса.

При 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. Вывод ИИ — только для справки: LLM-анализ / выводы портретов генерируются сторонними моделями и могут содержать отклонения; используйте после ручной проверки.

  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
    76 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.
    849 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