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-репозиторий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-анализ с несколькими провайдерами

Секция 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

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