job-mcp
{"type":"text"}# Универсальный многопоточный сервер поиска работы FastMCP (job-mcp)
Корпоративный, ориентированный на конфиденциальность FastMCP-сервер, обеспечивающий интеллектуальную агрегацию вакансий из нескольких источников, умную дедупликацию, динамическое извлечение навыков из резюме, оценку покрытия требований и автономные рабочие процессы подачи заявок на HireMeTech, Comeet ATS и AllJobs Israel.
Обзор архитектуры
graph TD
Client([MCP Client: Claude / Cursor / Gemini Spark / Antigravity]) --> Tools[FastMCP Server Layer]
Tools --> Aggregator[JobAggregator]
Aggregator --> Registry[SourceRegistry]
subgraph Parallel Pluggable Sources Layer
Registry --> S1[HireMeTechSource<br/>Direct REST API + Session Fallback]
Registry --> S2[ComeetSource<br/>Direct ATS API + Concurrency Semaphore]
Registry --> S3[AllJobsSource<br/>Category Feeds + Anti-Blocking Headers]
end
subgraph Processing & Normalization Engine
S1 --> Dedup[Deduplication & Entity Merger]
S2 --> Dedup
S3 --> Dedup
Dedup --> NormKey["Key = slug(title) + '@' + slug(company)"]
NormKey --> Merge[Metadata & Links Merger]
Merge --> Scorer[Unified CV / Skill Matcher]
end
subgraph Dynamic Candidate Engine
CV["Candidate CV (.pdf / .docx / .txt)"] --> Extractor[Dynamic CV & Profile Extractor]
Extractor --> Skills["Extracted Skills (40+ tokens)"]
Extractor --> Seniority["Inferred Seniority & Exclusions"]
Extractor --> Roles["Target Job Roles"]
Skills --> Scorer
Seniority --> Scorer
end
Scorer --> Cache[Unified JobCache - 1h TTL]
Cache --> ToolsКлючевые возможности
Динамическое извлечение резюме и профиля кандидата:
Многоформатный ввод: Поддерживает файлы
.pdf(черезpypdf),.docx(черезpython-docx) и.txt.NLP-разбиение навыков и динамический лексикон: Обнаруживает и извлекает 40+ технических навыков без хрупкого жесткого кодирования, поддерживая сложные многословные технологии (например, FastAPI, LangGraph, PostgreSQL, Smart Contracts, GraphRAG).
Автоматическое определение уровня и исключений: Точно определяет уровень кандидата (Junior, Mid, Senior, Lead, Principal, Director) и генерирует интеллектуальные негативные ключевые слова для фильтрации неподходящих позиций.
Фильтрация стоп-слов и шума: Тщательно отбрасывает структурные артефакты резюме, даты, образовательные титулы и нетехнические метаданные.
Умная оценка покрытия требований (0–100):
Коэффициент покрытия требований вакансии: Вычисляет, насколько полно навыки кандидата удовлетворяют указанному технологическому стеку конкретной вакансии (
matched_job_skills / total_job_skills), предотвращая штрафы для кандидатов с широкими резюме.Взвешенная оценка компонентов:
Пересечение и покрытие технологического стека: до 40 баллов
Релевантность ключевых слов всего резюме: до 25 баллов
Соответствие режима работы и местоположения: до 20 баллов
Ожидания по зарплате: до 15 баллов
Штраф за исключение: -100 баллов за жесткие дисквалификаторы по уровню/технологиям.
Категоризация совпадений по уровням:
Лучшее совпадение ($\ge 85$): Автоподача / приоритетные кандидаты на подачу.
Сильное совпадение ($70 - 84$): Вакансии с высоким интересом, отмеченные для просмотра/закладок.
Дисквалифицировано ($< 50$): Автоматически скрыто или удалено.
Подключаемая многопоточная архитектура:
HireMeTech: Прямая интеграция с REST API (
/api/jobs/search,/api/auth/me,/api/resume/profile) с автоматическим резервным DOM-механизмом.Comeet (Direct ATS): Прямая интеграция с Comeet Careers API (
/careers-api/2.0/company/{id}/positions) с ограничением скоростиasyncio.Semaphore(5), индексацией технического каталога и TTL-кэшированием для каждой компании.AllJobs Israel: Интеграция с категорийными лентами с реалистичными заголовками браузера и изоляцией ошибок на уровне источника.
Межпоточная дедупликация и объединение сущностей:
Устраняет дубликаты, когда вакансии появляются на нескольких досках объявлений.
Объединяет списки источников (
sources: ["hiremetech", "comeet"]), объединяет технологические стеки, сохраняет наиболее полное описание и отдает приоритет прямым ссылкам на подачу через ATS.
Автономный и контролируемый режимы работы:
Контролируемый режим: Стандартное подтверждение MCP для каждого инструмента.
Автономный режим: Безопасная цепочка чтения/фильтрации/закладок без ручных запросов; двухэтапный защитный барьер при отправке заявки.
Наблюдаемость и устойчивость:
Структурированное JSON-логирование (
structlog) вstderrс очисткой токенов/учетных данных.Автоматическое отслеживание trace ID во всех полезных нагрузках
ToolResponse.
Справочник инструментов (9 инструментов)
Имя инструмента | Параметры | Описание |
| нет | Перечисляет все зарегистрированные источники вакансий ( |
|
| Получает подходящие вакансии со всех или указанных платформ с дедупликацией. |
|
| Оценивает и фильтрует агрегированные вакансии по резюме и предпочтениям кандидата. |
|
| Сохраняет/добавляет вакансию в избранное на исходной платформе. |
|
| Скрывает/удаляет вакансию из просмотра и удаляет её из кэша. |
|
| Шаг 1: Проверяет модальное окно подачи, подготавливает предпросмотр, сообщает о предупреждениях. |
|
| Шаг 2: Выполняет отправку заявки. Всегда требует явного подтверждения. |
| нет | Обнаруживает и калибрует DOM-селекторы на живых страницах с самовосстанавливающимися эвристиками. |
|
| Переключает режим выполнения сервера между контролируемым и автономным. |
Быстрый старт и настройка
1. Клонирование и установка зависимостей
git clone https://github.com/zvieli/hireme_mcp.git
cd hireme_mcp
# Using uv (recommended)
uv venv .venv
uv pip install -e ".[dev]"
playwright install chromium2. Настройка профиля кандидата и резюме
Поместите ваше резюме (cv.pdf, cv.docx или cv.txt) в корневой каталог:
cp /path/to/your/resume.pdf ./cv.pdf
cp .env.example .envОтредактируйте .env, чтобы настроить путь к резюме по умолчанию и контактные данные:
DEFAULT_CV_PATH=./cv.pdf
CANDIDATE_EMAIL=your.email@example.com
CANDIDATE_NAME="Your Name"3. (Необязательно) Первоначальная настройка аутентификации для HireMeTech
Comeet и AllJobs работают автоматически без входа в систему. Чтобы аутентифицировать вашу учетную запись HireMeTech для прямого доступа к API и автоподачи:
.venv/bin/python -m job_mcp.setupОткроется окно браузера Chromium.
Войдите с вашими учетными данными.
Вернитесь в терминал и нажмите
[Enter], чтобы сохранить сеанс в./browser_profile.
Запуск сервера
Вариант A: Использование Docker (рекомендуется)
# Build and run in background
docker compose up -d
# View live multi-source aggregation logs
docker compose logs -f hireme-mcpВариант B: Локальный запуск
# Streamable HTTP (Default for Web & Cloud Clients)
.venv/bin/python -m job_mcp --transport http --host 0.0.0.0 --port 8000
# Stdio (Default for Desktop Clients)
.venv/bin/python -m job_mcp --transport stdioВизуальный конвейерный запуск CLI
Чтобы выполнить полный автономный поиск, оценку и пробную подачу заявки прямо в терминале с богатым визуальным выводом:
# Run with auto-extracted skills from your CV:
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf
# Run with explicit stack override and remote filter:
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf --stack "Python,FastAPI,LangGraph" --work-mode remote --location "Tel Aviv"
# Execute live application submissions (disabled by default in dry-run):
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf --auto-applyКонфигурация MCP-клиента
1. Claude Desktop (claude_desktop_config.json)
В Linux: ~/.config/Claude/claude_desktop_config.json
В macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
В Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"job-search-mcp": {
"command": "/absolute/path/to/hireme_mcp/.venv/bin/python",
"args": ["-m", "job_mcp", "--transport", "stdio"],
"env": {
"BROWSER_HEADLESS": "true",
"DEFAULT_CV_PATH": "/absolute/path/to/hireme_mcp/cv.pdf",
"CANDIDATE_EMAIL": "candidate@example.com",
"LOG_LEVEL": "INFO"
}
}
}
}2. Gemini Spark / веб-MCP-клиенты
Конечная точка:
https://<your-host-or-devtunnel-id>/mcpТранспорт:
Streamable HTTPАутентификация: Нет / Без аутентификации
Переменные окружения
Переменная | По умолчанию | Описание |
|
| Путь к файлу резюме по умолчанию для динамического извлечения навыков кандидата. |
|
| Электронная почта кандидата для автоматических модальных окон подачи. |
|
| Полное имя кандидата для форм подачи. |
|
| Транспортный протокол ( |
|
| Привязка хоста для HTTP/SSE-транспорта. |
|
| Порт для HTTP/SSE-транспорта. |
|
| Запуск браузера в безголовом режиме ( |
|
| Каталог для постоянного хранения сеанса Chromium. |
|
| Время жизни кэша дедуплицированных вакансий в памяти (в минутах). |
|
| Уровень структурированного логирования ( |
Запуск тестов
Запустите полный автоматизированный набор тестов (542 теста):
.venv/bin/pytest tests/ -vЛицензия
Этот проект лицензирован по лицензии MIT.
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 Connectors
Job platform for AI agents. Track tech jobs from companies that match your stack.
AI job search MCP — fact-checked jobs, application tracker, alerts. ChatGPT, Claude, Cursor.
Unified jobs search over official feeds + ATS boards (USAJOBS, Adzuna, Muse, Greenhouse, Lever...)
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/zvieli/TechJobMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server