jd-mcp
JD-PULL · Сбор JD · Анализ · MCP-инструмент
Открытый инструмент сбора вакансий 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 |
Анализ | jieba для сегментации + классификация по словарям правил; LLM-анализ через anthropic SDK / httpx с адаптацией под разных провайдеров |
Данные | Локальное хранение в JSON-файлах; дедупликация по отпечаткам ( |
Вывод | Статический HTML-сайт отчётов (встроенный CSS, без зависимостей от фронтенд-фреймворков) |
MCP |
|
Конфигурация | 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 你的tokenClaude 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-инструментов
Тип | Инструмент | Описание |
Только чтение |
| Сводная статистика данных (всего / количество по категориям) |
Только чтение |
| Список категорий должностей и количество образцов в каждой |
Только чтение |
| Поиск JD по ключевым словам / категории / городу / компании (возвращает заголовок, зарплату, навыки и т.д.) |
Только чтение |
| Полная запись одного JD по job_id |
Только чтение |
| Отчёт-портрет категории (JSON) |
Только чтение |
| Отчёт-портрет категории (Markdown) |
Запись |
| Локальный сбор JD (требуется Playwright / браузер); возвращает структурированный результат |
Запись |
| Анализ по правилам (опционально с LLM-анализом) |
Запись |
| Генерация отчётов-портретов по категориям |
Запись |
| Генерация статического HTML-сайта отчётов |
Запись |
| Коммит / 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):
Переменная окружения | Назначение |
| Корневая директория данных; может быть обычной папкой или отдельным git-репозиторием |
| Переопределяет URL целевого репозитория для sync/push (если не указано, используется |
| Встроенный токен для 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_xxxLLM-анализ с несколькими провайдерами
Секция llm: в config/settings.yaml:
llm:
enabled: true # 关闭即纯规则分析
provider: deepseek # 选供应商Провайдер |
| Переменная окружения | Модель по умолчанию | Уровень возможностей |
Anthropic Claude |
|
|
| L3 строгая схема |
OpenAI |
|
|
| L3 строгая схема |
Google Gemini |
|
|
| L3 строгая схема |
DeepSeek |
|
|
| L2 JSON-режим |
通义千问 |
|
|
| L2 JSON-режим |
Ollama (локально) |
| нет |
| 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)
⚠️ Перед использованием этого проекта обязательно ознакомьтесь со следующими условиями.
Ограничение назначения: проект предназначен только для личного обучения, анализа данных и технического обмена; не является коммерческим использованием и не служит основанием для решений о трудоустройстве / найме.
Данные предоставляет и несёт за них ответственность пользователь: сбор происходит на вашей собственной машине, вся ответственность за соответствие данных требованиям законодательства лежит на пользователе. Соблюдайте условия обслуживания целевых сайтов и robots.txt, а также местные законы и нормативные акты (например, «Закон о защите персональной информации», «Закон о безопасности данных», «Закон о противодействии недобросовестной конкуренции»).
Границы сбора: собираются только публичные страницы; не собираются данные, требующие входа, и непубличная персональная информация; не взламываются капчи, не обходится WAF / блокировки, не используются прокси-пулы или массовый сбор, не допускается какое-либо вмешательство в нормальную работу целевых сайтов. При блокировке немедленно прекращайте, никогда не эскалируйте методы противодействия.
Точность данных: содержимое JD — публичная информация сайтов, может быть устаревшей или неточной; автор не гарантирует её достоверность, полноту и пригодность; встроенные образцы данных
seedпредназначены только для проверки полного конвейера и не представляют реальную информацию о вакансиях.Вывод ИИ — только для справки: LLM-анализ / выводы портретов генерируются сторонними моделями и могут содержать отклонения; используйте после ручной проверки.
Риск на свой страх: проект предоставляется по лицензии MIT License; автор не несёт ответственности за любые прямые или косвенные убытки, утечки данных или юридические риски, возникшие при использовании проекта.
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