Skip to main content
Glama
hh-mcp

hh-mcp

MCP-сервер для hh.ru API — 55 инструментов для ИИ-агента: вакансии, резюме, ATS/отклики, зарплаты

Если вы искали, как подключить hh.ru к Claude или другому ИИ-агенту, — этот сервер даёт агенту поиск по вакансиям и резюме, inbox откликов (ATS), карточки работодателей, статистику зарплат и справочники hh.ru по России и СНГ. Спрашиваете «найди Python-вакансии в Москве от 250 000 ₽ на удалёнке» — агент возвращает готовый список с зарплатами и опытом, а не ссылку на выдачу. Поиск вакансий работает без токена; токен нужен для базы резюме и ATS.

npm CI License: MIT

Демонстрация: вопрос «найди Python-вакансии в Москве от 250 000 ₽ на удалёнке» — агент вызывает search_vacancies и отвечает списком вакансий

По умолчанию ответы приходят компактными сводками, удобными для LLM — передайте raw: true любому инструменту поиска или карточки, чтобы получить полный JSON hh.ru.

Основано на @theyahia/hh-mcp от @theYahia.

Два режима

Режим

Что доступно

Нужен токен?

Без токена

Поиск вакансий, вакансия по ID, похожие/связанные вакансии, работодатели, статистика зарплат, регионы, роли, отрасли, метро, страны/языки/навыки/районы, справочники, подсказки, проверка токена

нет

С токеном

Всё перечисленное + поиск резюме, ATS/отклики, менеджеры, лимиты, архив/скрытые вакансии, статистика вакансий, сохранённые поиски

да (HH_ACCESS_TOKEN)

Токен выдаётся на dev.hh.ru/admin. Важно: поиск резюме дополнительно требует аккаунт работодателя с оплаченной подпиской на базу резюме — токены соискателя и анонимные получают 403. ATS/negotiations требуют employer-токен. Проверить возможности своего токена можно инструментом validate_token.

Related MCP server: HeadHunter API MCP Server

Установка

Claude Desktop

{
  "mcpServers": {
    "hh": {
      "command": "npx",
      "args": ["-y", "@andrey-tepaykin/hh-mcp"],
      "env": {
        "HH_ACCESS_TOKEN": "optional-oauth-token"
      }
    }
  }
}

Claude Code

claude mcp add hh -- npx -y @andrey-tepaykin/hh-mcp
# С токеном:
claude mcp add hh -e HH_ACCESS_TOKEN=your-token -- npx -y @andrey-tepaykin/hh-mcp

VS Code / Cursor

{
  "servers": {
    "hh": {
      "command": "npx",
      "args": ["-y", "@andrey-tepaykin/hh-mcp"]
    }
  }
}

Windsurf

{
  "mcpServers": {
    "hh": {
      "command": "npx",
      "args": ["-y", "@andrey-tepaykin/hh-mcp"]
    }
  }
}

Режим HTTP (Streamable HTTP)

npx @andrey-tepaykin/hh-mcp --http
# или
HTTP_PORT=8080 npx @andrey-tepaykin/hh-mcp --http

Эндпоинт: http://localhost:3000/mcp (POST) · Проверка состояния: http://localhost:3000/health (GET)

HTTP-режим stateless, по умолчанию слушает 127.0.0.1 с включённой защитой от DNS-rebinding. Чтобы открыть его наружу, задайте HOST=0.0.0.0, добавьте свой host/origin в HH_ALLOWED_HOSTS / HH_ALLOWED_ORIGINS и поставьте перед ним собственную аутентификацию.

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

Переменная

Обяз.

Описание

HH_ACCESS_TOKEN

нет

Bearer-токен OAuth 2.0. Нужен для резюме, ATS/откликов и employer-scoped endpoint'ов.

HH_USER_AGENT

нет

Свой HH-User-Agent (hh.ru его требует). Рекомендуемый формат: your-app/1.0 (you@example.com).

HH_MAX_SCAN_PAGES

нет

Лимит страниц hh.ru при list_applications(with_updates_only) (по умолчанию 10).

HH_RESUME_MAX_CONCURRENCY

нет

Параллельных гейтед-просмотров резюме (по умолчанию 1).

HH_RESUME_MIN_INTERVAL_MS

нет

Мин. интервал между стартами гейтед-чтений (по умолчанию 1500).

HH_RESUME_MAX_PER_WINDOW

нет

Макс. гейтед-чтений в скользящем окне (по умолчанию 20; 0 — выкл.). Общий для инстансов при HH_BUDGET_FILE.

HH_RESUME_WINDOW_MS

нет

Длина скользящего окна (по умолчанию 60000).

HH_BUDGET_FILE

нет

Shared lock-файл бюджета, окна и breaker'а между процессами; off — только in-process.

HH_CAPTCHA_COOLDOWN_MS

нет

Начальный cooldown breaker'а при captcha (по умолчанию 60000).

HH_CAPTCHA_COOLDOWN_MAX_MS

нет

Потолок cooldown (по умолчанию 600000).

HH_CAPTCHA_RETRY_S

нет

Лестница пауз, сек (по умолчанию 45,120,300).

HH_CAPTCHA_RECOVERY_MS

нет

Длительность осторожного режима после капчи (по умолчанию 600000): интервал ×2, окно ÷2 на 10 чтений.

HH_CAPTCHA_RECOVERY_STEP_MS

нет

Пауза после пробного чтения и мин. пауза перед повтором 404 в recovery (по умолчанию 5000).

HH_CACHE_DIR / HH_CACHE_TTL_MS

нет

Кэш резюме на диске (TTL 24ч; 0 отключает). Ключ — sha256(resume_id, topic_id, vacancy_id); HH_CACHE_DIR=off выключает.

HH_LEDGER_FILE / HH_LOG_DIR

нет

JSONL-ledger гейтед-чтений и лог запросов (по умолчанию выкл.).

HH_INSTANCE

нет

Метка инстанса в ledger, /health и hh_usage_report (иначе HH_USER_AGENT, иначе HTTP_PORT).

HH_REQUIRE_TOPIC

нет

1/true/on — get_resume без topic_id не ходит в сеть, пока не передан allow_unscoped: true.

HH_EXPORT_DIR

нет

Каталог экспорта для collect_vacancy_resumes.

HH_QUOTA_CHECK

нет

off — не запрашивать лимит просмотров для строки в ответе.

HH_QUOTA_PATH_TTL_MS

нет

Сколько помнить рабочий путь квоты, не пробуя другой (по умолчанию 3600000).

HH_QUOTA_STALE_MS

нет

Когда hh_usage_report считает квоту устаревшей и обновляет её (по умолчанию 1800000).

HH_DEBUG

нет

1 — писать quota.path.probe (иначе probe-404 не логируются).

HH_API_BASE_URL

нет

Базовый URL API (по умолчанию https://api.hh.ru) — для тестов на мок-сервере.

HH_TOOLS / HH_TOOLS_EXCLUDE

нет

Allow/deny список имён и групп инструментов. CLI: --tools / --tools-exclude.

HTTP_PORT / PORT

нет

Порт HTTP-режима (по умолчанию 3000). HTTP включается только флагом --http.

HOST

нет

Интерфейс привязки в HTTP-режиме (по умолчанию 127.0.0.1).

HH_ALLOWED_HOSTS

нет

Список разрешённых Host через запятую для HTTP-режима (по умолчанию loopback).

HH_ALLOWED_ORIGINS

нет

Список разрешённых Origin через запятую для HTTP-режима.

См. .env.example.

Инструменты (55)

Любой инструмент поиска или карточки принимает raw: true — тогда вернётся полный JSON hh.ru вместо компактной сводки.

Поверхность режется через HH_TOOLS / HH_TOOLS_EXCLUDE (имена и группы: vacancies, resumes, batch, negotiations, employers, references, salary, diagnostics, validate_token). Профиль для разбора откликов: HH_TOOLS=negotiations,resumes,batch,validate_token,diagnostics.

Вакансии

Инструмент

Описание

Токен?

search_vacancies

Поиск по ключевым словам, региону, профессиональной роли, отрасли, метро, работодателю, зарплате, опыту, формату работы и типу занятости, периоду (period или date_from/date_to), меткам и полю поиска, с сортировкой и пагинацией

нет

get_vacancy

Полная карточка вакансии: описание, требования, ключевые навыки, контакты

нет

get_similar_vacancies

Найти вакансии, похожие на заданную

нет

get_related_vacancies

Связанные вакансии (/related_vacancies)

нет

get_vacancy_stats

Статистика просмотров/откликов по вакансии

да

get_vacancy_visitors

Посетители вакансии

да

get_vacancy_conditions

Условия публикации вакансий

да

Резюме (токен работодателя + оплаченная база резюме)

Инструмент

Описание

Токен?

search_resumes

Поиск резюме кандидатов по ключевым словам, региону, роли, зарплате, опыту

да

get_resume

Полное резюме. Если резюме из отклика — всегда передавайте topic_id (+vacancy_id): иначе бьёте в базу резюме и ловите captcha. При HH_REQUIRE_TOPIC без topic_id нужен allow_unscoped: true

да

get_resumes

Пакетное чтение до 50 резюме через бюджет. Предпочтительно items: [{resume_id, topic_id}] (старый resume_ids + topics поддерживается, опечатка в ключе — ошибка до сети). require_topic: true — без topic_id не читать (skipped). out_dir — raw-файлы + manifest.json / negotiations.csv. Статусы: ok, cached, unscoped, captcha, not_found, failed, skipped, not_attempted

да

collect_vacancy_resumes

Сбор резюме по воронке вакансии → raw JSON + manifest.json / negotiations.csv; cursor по id откликов (устойчив к новым откликам между вызовами) при обрезке по max/max_wait_ms/окну

да

get_resume_negotiations_history

История откликов по резюме

да

list_saved_resume_searches

Список сохранённых поисков резюме

да

get_saved_resume_search

Сохранённый поиск резюме по ID

да

hh_usage_report

Локальный отчёт: ledger/лог, breaker, бюджет, кэш; квота обновляется, если отсутствует или старше HH_QUOTA_STALE_MS (не гейтед)

нет

ATS / отклики (токен работодателя)

Инструмент

Описание

Токен?

list_application_collections

Воронка: счётчики по этапам и подэтапам + with_updates; ids подэтапов для list_applications

да

list_applications

Список откликов: collection (по умолчанию response) или sub_collection (id/имя), with_updates_only (скан страниц, page/per_page — по отфильтрованным; лимит HH_MAX_SCAN_PAGES), order_by. raw: true — одна сырая страница без фильтра

да

get_application

Полная карточка отклика (опыт, релевантность, этап, счётчики сообщений) — без платного get_resume

да

get_application_messages

Переписка с пагинацией (page / per_page, max 50)

да

get_negotiations_statistics

Статистика откликов по работодателю (employer_id)

да

get_preferred_negotiations_order

Предпочтительная сортировка откликов по вакансии

да

Типичный flow: list_application_collections → list_applications → get_application → при необходимости collect_vacancy_resumes / get_resumes с topic_id (не фан-аут субагентов на голый get_resume). get_application печатает готовую подсказку get_resume … topic_id=….

Просмотры резюме: rate, captcha, budget

hh.ru антифродом закрывает быстрые пакетные GET /resumes/{id} капчей (403 captcha_required, type: employer_resume_view). Это не исчерпание квоты resume_view_limits и не проблема OAuth-scope.

Правила сервера (3.0.0+):

  1. Передавайте topic_id (+vacancy_id) для резюме из отклика — scoped-URL; нескоупленный путь считается гейтед. Чтение без topic_id в батче помечается статусом unscoped (платная база), а не ok.

  2. Гейтед-трафик идёт через бюджет: concurrency 1, интервал 1500 мс (±20% jitter) и скользящее окно 20 чтений / 60 с; опционально общий файл HH_BUDGET_FILE на два инстанса. Ретраи 429/5xx/404 заново проходят breaker и берут слот.

  3. При captcha открывается breaker: следующие гейтед-вызовы fail-fast с retry_after_s, без молотьбы API. Состояние breaker'а в общем файле монотонно — один инстанс не может «закрыть» cooldown другого.

  4. После снятия breaker'а — осторожный режим (HH_CAPTCHA_RECOVERY_MS): интервал ×2, окно ÷2 на 10 чтений.

  5. 404 на чтение резюме повторяется один раз с паузой; повторный 404 — статус not_found (в кэш не пишется).

  6. Успешные ответы кэшируются на диск (HH_CACHE_DIR); повтор не бьёт в сеть.

  7. Массовый разбор — collect_vacancy_resumes / get_resumes, а не 12 параллельных get_resume.

Капча не решается автоматизацией браузера в этом пакете: подождите 45–120 с или откройте fallback_url вручную.

Ограничение частоты запросов

Обычный трафик: 5 запросов/с. Гейтед-просмотры резюме — отдельный более строгий бюджет (см. выше). Автоповтор на 429/5xx (до 3 попыток); captcha не ретраится циклом 5xx.

Работодатели

Инструмент

Описание

Токен?

search_employers

Поиск компаний по названию и региону

нет

get_employer

Профиль работодателя: описание, отрасли, сайт, число вакансий

нет

get_employer_vacancies

Активные вакансии работодателя (публичный поиск с employer_id)

нет

list_employer_managers

Менеджеры аккаунта (employer_id)

да

get_employer_manager

Менеджер по ID

да

get_manager_resume_limits

Информативные лимиты просмотра резюме менеджера (счётчик hh.ru может не совпадать с фактом; 404/нули — не сигнал капчи). employer_id/manager_id можно не передавать

да

get_manager_negotiations_statistics

Статистика откликов менеджера

да

list_active_vacancies

Опубликованные вакансии своего аккаунта (/employers/{id}/vacancies/active)

да

list_archived_vacancies

Архивные вакансии

да

list_hidden_vacancies

Скрытые вакансии

да

get_message_template

Шаблон сообщения по отклику

да

list_mail_templates

Почтовые шаблоны работодателя

да

get_employer_vacancy_areas

Активные регионы вакансий

да

get_employer_departments

Подразделения

да

list_employer_addresses

Адреса

да

Справочники и подсказки

Инструмент

Описание

Токен?

get_areas

Дерево регионов и городов (id — название)

нет

get_areas_subtree

Регионы и города внутри одного региона — легче, чем всё дерево

нет

get_countries

Список стран

нет

get_professional_roles

Дерево профессиональных ролей с ID

нет

get_industries

Дерево отраслей компаний с ID

нет

get_metro

Станции и линии метро с ID по городу

нет

get_languages

Справочник языков

нет

get_skills

Названия навыков по id (/skills, 1–50 id; для поиска по имени — suggest_skill_set)

нет

get_districts

Районы (опционально по area_id)

нет

get_dictionaries

Все справочные данные: валюты, типы занятости, графики, опыт, метки

нет

suggest_positions

Автодополнение названий должностей (/suggests/positions)

нет

suggest_professional_roles

Автодополнение проф. ролей с ID (для фильтров поиска)

нет

suggest_companies

Автодополнение названий компаний

нет

suggest_areas

Автодополнение названий регионов и городов

нет

suggest_vacancy_search_keyword

Подсказки ключевых слов поиска вакансий

нет

suggest_resume_search_keyword

Подсказки ключевых слов поиска резюме

нет

suggest_skill_set

Автодополнение навыков

нет

Зарплаты и аккаунт

Инструмент

Описание

Токен?

get_salary_statistics

При HH_ACCESS_TOKEN + area_id сначала пробует платный Банк данных (/salary_statistics/paid/...); при 401/403/404 или без токена/региона — оценка по зарплатам в вакансиях (смещённая выборка).

для банка — да

validate_token

Проверить, действителен ли HH_ACCESS_TOKEN (через /me), и показать роль аккаунта

нет

Демо-промпты

Найди удалённые вакансии Python-разработчика в Москве от 300 000 рублей
Покажи все открытые вакансии Яндекса и дай статистику зарплат по основным ролям
Сравни зарплаты Senior Backend в Москве и Санкт-Петербурге и предложи вакансии, похожие на самую высокооплачиваемую
Покажи коллекции откликов по вакансии 123456 и список неразобранных откликов

Разработка

git clone https://github.com/AndreyTepaykin/hh-mcp.git
cd hh-mcp
npm install
npm run build
npm test

Справочник API

Лицензия

MIT


Репозиторий: AndreyTepaykin/hh-mcp · npm: @andrey-tepaykin/hh-mcp

Available Tools

55 tools
collect_vacancy_resumesA

Walk a vacancy funnel (collection/sub_collection), fetch each resume with topic_id through the gated budget, write raw JSON + manifest/csv under out_dir (HH_EXPORT_DIR). Bounded by max (default 25) and max_wait_ms; returns an id-based cursor/remaining when truncated (safe when new responses arrive between calls). Prefer this over spawning subagents. Requires HH_ACCESS_TOKEN.

Inputs: vacancy_id (required), max, raw, cursor, +5 more.

get_applicationA

Full application card from the negotiations endpoint (candidate, relevant experience, funnel stage, message counters) — prefer over get_resume for screening. Requires HH_ACCESS_TOKEN.

Inputs: id (required), raw.

get_application_messagesA

Paginated chat messages for an application topic (page/per_page, max 50). Requires HH_ACCESS_TOKEN.

Inputs: nid (required), raw, page, per_page.

get_areasA

Get the full tree of regions and cities as id — name lines (pass raw:true for nested JSON). Use to find area IDs for search filters.

Inputs: raw.

get_areas_subtreeA

Get the regions/cities subtree under one area id (e.g. 113=Russia) — lighter than the full /areas tree.

Inputs: area_id (required), raw.

get_countriesA

List countries (id — name) from /areas/countries.

Inputs: raw.

get_dictionariesA

Get all reference dictionaries: currencies, employment types, schedules, experience levels, vacancy labels, and more.

Inputs: no named parameters.

get_districtsA

List districts (optionally filtered by area_id). Useful for address/area fine-tuning.

Inputs: raw, area_id.

get_employerA

Get detailed employer profile: description, industries, website, vacancy count.

Inputs: employer_id (required), raw.

get_employer_departmentsA

List departments for an employer. employer_id of the authenticated account can be omitted (resolved from /me). Requires HH_ACCESS_TOKEN.

Inputs: raw, employer_id.

get_employer_managerA

Get a single employer manager by id. employer_id/manager_id of the authenticated account can be omitted (resolved from /me). Requires HH_ACCESS_TOKEN.

Inputs: raw, manager_id, employer_id.

get_employer_vacanciesA

List active vacancies for a specific employer via public vacancy search (employer_id filter). No token required.

Inputs: employer_id (required), raw, page, per_page.

get_employer_vacancy_areasB

List active vacancy areas for an employer. Requires HH_ACCESS_TOKEN.

Inputs: employer_id (required), raw.

get_industriesA

Get the tree of company industries with IDs. Use to find industry IDs for the search_vacancies industry filter.

Inputs: raw.

get_languagesB

List languages (id — name) from /languages.

Inputs: raw.

get_manager_negotiations_statisticsB

Get negotiations statistics for a manager. employer_id/manager_id of the authenticated account can be omitted (resolved from /me). Requires HH_ACCESS_TOKEN.

Inputs: raw, manager_id, employer_id.

get_manager_resume_limitsA

Informational resume-view limits for a manager (hh.ru counter may not match real views; 404/zeros are not a captcha signal). employer_id/manager_id of the authenticated account can be omitted (resolved from /me). Do not pass 0. Requires HH_ACCESS_TOKEN.

Inputs: raw, manager_id, employer_id.

get_message_templateB

Get a negotiation message template by id (optionally with topic_id / resume_id / vacancy_id). Requires HH_ACCESS_TOKEN.

Inputs: template (required), raw, topic_id, resume_id, +1 more.

get_metroA

Get metro stations and lines with IDs for a city (city_id), or for all cities. Use to find metro IDs for the search_vacancies metro filter.

Inputs: city_id.

get_negotiations_statisticsB

Get employer-level negotiations statistics. Requires employer_id and HH_ACCESS_TOKEN.

Inputs: employer_id (required), raw.

get_preferred_negotiations_orderA

Get the preferred negotiations sort order for a vacancy. Requires HH_ACCESS_TOKEN.

Inputs: vacancy_id (required), raw.

get_professional_rolesA

Get the tree of professional roles with IDs. Use to find role IDs for vacancy/resume search and salary stats.

Inputs: raw.

get_resumeA

Get full resume details: experience, education, skills, contacts. If the resume came through an отклик, always pass topic_id (+vacancy_id): the unscoped read hits the resume database, consumes a paid view and is the call hh.ru captcha-gates. When HH_REQUIRE_TOPIC is on, unscoped reads require allow_unscoped:true. Requires an EMPLOYER OAuth token + paid resume-database access.

Inputs: resume_id (required), raw, no_cache, topic_id, +2 more.

get_resume_negotiations_historyB

Get negotiation history for a resume (employer view). Requires HH_ACCESS_TOKEN.

Inputs: resume_id (required), raw.

get_resumesA

Safely fetch up to 50 resumes sequentially through the resume-view budget (default ~1.5s spacing, 20 reads/60s window). Preferred input: items:[{resume_id, topic_id}] + vacancy_id for scoped reads; set require_topic:true to never read the paid database. Legacy resume_ids+topics is validated (typo'd keys fail before any request). Reads without topic_id return status unscoped. Pass out_dir to persist payloads (raw/*.json + manifest.json + negotiations.csv). stop_on_captcha default true. max_wait_ms default 90000 (cap 110000). Requires HH_ACCESS_TOKEN.

Inputs: raw, items, topics, out_dir, +6 more.

get_salary_statisticsA

Salary distribution for a role/region. With HH_ACCESS_TOKEN + area_id, tries paid Банк данных зарплат (/salary_statistics/paid/salary_evaluation/{area_id}); on 401/403/404 or without token/area falls back to sampling vacancy salaries (biased). Optional speciality/employee_level/industry/extend_sources for the bank; text maps to position_name.

Inputs: professional_role_id (required), raw, text, area_id, +5 more.

get_similar_vacanciesB

Find vacancies similar to a given one. Useful for expanding a candidate's job search.

Inputs: vacancy_id (required), raw, page, per_page.

get_skillsA

Resolve skill names by id via /skills (1–50 ids). Use suggest_skill_set to discover ids by name first.

Inputs: id (required), raw.

get_vacancyB

Get full vacancy details: description, requirements, key skills, contacts, employer info.

Inputs: vacancy_id (required), raw.

get_vacancy_conditionsB

Get vacancy publication conditions / constraints for the current employer. Requires HH_ACCESS_TOKEN.

Inputs: raw.

get_vacancy_statsB

Get employer-facing vacancy statistics (views/responses/invitations). Requires HH_ACCESS_TOKEN.

Inputs: vacancy_id (required), raw.

get_vacancy_visitorsB

List visitors who viewed a vacancy. Requires HH_ACCESS_TOKEN.

Inputs: vacancy_id (required), raw, page, per_page.

hh_usage_reportA

Local diagnostics: gated-read ledger / JSONL log summary, captcha breaker state, resume budget, cache hit counts. No network.

Inputs: raw.

list_active_vacanciesA

List published (active) vacancies for the authenticated employer account via /employers/{id}/vacancies/active. Requires HH_ACCESS_TOKEN. For any employer's public vacancies use get_employer_vacancies.

Inputs: employer_id (required), raw, page, per_page.

list_application_collectionsA

Vacancy application funnel: per-stage and per-sub-stage counters plus unread (with_updates). Sub-collection ids are inputs for list_applications. Also lists employer_states. Start here before list_applications. Requires HH_ACCESS_TOKEN.

Inputs: vacancy_id (required), raw.

list_applicationsA

List applications for a vacancy by collection or sub_collection (id/name), with optional with_updates_only (scans collection pages for has_updates; page/per_page are the filtered stream; capped by HH_MAX_SCAN_PAGES), page/per_page/order_by. raw:true returns one unfiltered upstream page. Defaults collection to response. Requires HH_ACCESS_TOKEN.

Inputs: vacancy_id (required), raw, page, order_by, +4 more.

list_archived_vacanciesA

List archived vacancies for an employer. Requires HH_ACCESS_TOKEN.

Inputs: employer_id (required), raw, page, per_page.

list_employer_addressesB

List addresses for an employer. Requires HH_ACCESS_TOKEN.

Inputs: employer_id (required), raw.

list_employer_managersA

List managers for an employer account. employer_id of the authenticated account can be omitted (resolved from /me). Requires HH_ACCESS_TOKEN.

Inputs: raw, page, per_page, employer_id.

list_hidden_vacanciesB

List hidden vacancies for an employer. Requires HH_ACCESS_TOKEN.

Inputs: employer_id (required), raw, page, per_page.

list_mail_templatesB

List employer mail templates. Requires employer_id and HH_ACCESS_TOKEN.

Inputs: employer_id (required), raw.

list_saved_resume_searchesA

List saved resume searches for the current employer account. Requires HH_ACCESS_TOKEN.

Inputs: raw, page, per_page.

search_employersA

Search companies/employers on hh.ru by name. Returns company info and open vacancy count.

Inputs: text (required), raw, area, page, +1 more.

search_resumesA

Search candidate resumes by keywords, region, professional role, salary, experience. Requires an EMPLOYER OAuth token (HH_ACCESS_TOKEN) AND a paid hh.ru resume-database subscription — applicant/anonymous tokens get 403.

Inputs: raw, area, page, text, +4 more.

search_vacanciesA

Search job vacancies on hh.ru by keywords, region, professional role, industry, metro, salary, experience, employment form, work format, date range and labels. Returns a compact paginated summary (pass raw:true for full JSON).

Inputs: raw, area, page, text, +19 more.

suggest_areasA

Autocomplete region/city names. Returns matching area suggestions for partial input.

Inputs: text (required), raw.

suggest_companiesB

Autocomplete company names. Returns matching employer suggestions for partial input.

Inputs: text (required), raw.

suggest_positionsA

Autocomplete free-form job titles / positions via /suggests/positions (not role IDs — use suggest_professional_roles for those).

Inputs: text (required), raw.

suggest_professional_rolesA

Autocomplete professional roles with IDs via /suggests/professional_roles. Use for vacancy/resume search filters and salary stats.

Inputs: text (required), raw.

suggest_resume_search_keywordA

Autocomplete resume-search keywords via /suggests/resume_search_keyword.

Inputs: text (required), raw.

suggest_skill_setC

Autocomplete skills via /suggests/skill_set.

Inputs: text (required), raw.

suggest_vacancy_search_keywordC

Autocomplete vacancy-search keywords via /suggests/vacancy_search_keyword.

Inputs: text (required), raw.

validate_tokenA

Check whether HH_ACCESS_TOKEN is valid via /me and report the user role (applicant/employer). Use to diagnose resume-search and ATS access.

Inputs: raw.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 55 tools

    Disambiguation4/5

    Descriptions are detailed and often explicitly say when to prefer one tool over another (e.g., get_application vs get_resume). However, several clusters overlap: get_resumes vs collect_vacancy_resumes vs search_resumes vs get_resume, and list_active/archived/hidden vacancies vs get_employer_vacancies vs search_vacancies. An agent can usually disambiguate with the descriptions, but the sheer number increases misselection risk.

    Naming Consistency4/5

    Nearly all tools use snake_case with a verb_noun pattern (get_, list_, search_, suggest_, collect_, validate_). hh_usage_report breaks the verb_noun convention, and a few names are compound or plural, but the overall scheme is predictable and readable.

    Tool Count1/5

    55 tools far exceeds the 3–15 sweet spot and crosses the 50+ 'extreme mismatch' threshold. While the hh.ru domain is broad, the surface is unwieldy and many list/get endpoints could be consolidated (e.g., vacancy statuses, area lookups), making selection and maintenance burdensome.

    Completeness3/5

    The server covers extensive read operations: search, dictionaries, resumes, applications, employer data, and negotiations. However, it lacks write/lifecycle tools such as create/update/delete for vacancies or resumes, apply-to-vacancy, send-message, or status-update actions. Core CRUD coverage is missing, though read-only analysis workflows are well served.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to search job vacancies, manage resumes, and apply to jobs on HeadHunter (hh.ru), Russia's largest job search platform. Includes OAuth 2.0 integration for secure job applications and an automated vacancy hunter agent with intelligent matching.
      37
      MIT
    • A
      license
      Not graded
      quality
      F
      maintenance
      Enables AI assistants to access and manage HeadHunter job platform data, including vacancies, resumes, negotiations, and employer settings via 167+ tools.
      260 npm
      5
      MIT
    • F
      license
      A
      quality
      D
      maintenance
      Enables to interact with hh.ru (a Russian job platform) through browser automation, allowing users to search for jobs, manage resumes, apply to vacancies with cover letters, and track application statuses via natural language.
      9
      3
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables searching for jobs in Russia and remote positions from AI assistants using multiple job platforms (hh.ru, Trudvsem, SuperJob, and remote job aggregators).
      1
      -