Skip to main content
Glama
iraguzov

HH MCP Server

by iraguzov
README.md
# HH MCP Server

MCP-сервер для автоматизации работы с [hh.ru](https://hh.ru) через браузерную автоматизацию (Playwright).

## Возможности

- **Поиск вакансий** — по ключевым словам, городу, зарплате, опыту, графику (удалёнка/офис/гибрид)
- **Просмотр деталей вакансий** — полное описание, требования, стек, условия
- **Управление резюме** — просмотр списка и содержимого своих резюме
- **Отклики на вакансии** — с сопроводительным письмом и ответами на вопросы работодателя
- **Отслеживание откликов** — статусы всех отправленных откликов
- **Информация о работодателях** — карточка компании

## Требования

- Python 3.12+
- [uv](https://docs.astral.sh/uv/) (менеджер пакетов)

## Установка

```bash
cd hh-mcp-server
uv sync
uv run playwright install chromium
```

## Авторизация

Перед первым использованием нужно авторизоваться на hh.ru:

```bash
uv run hh-mcp-server --login
```

Откроется браузер — войдите в свой аккаунт hh.ru. Сессия сохранится в `~/.hh-mcp/profile/state.json`.

## Запуск

### Как MCP-сервер (stdio, для Claude Code)

```bash
uv run hh-mcp-server
```

### С видимым браузером (для отладки)

```bash
uv run hh-mcp-server --no-headless
```

### HTTP-транспорт

```bash
uv run hh-mcp-server --transport streamable-http --port 8766
```

## Настройка в Claude Code

Добавьте в `.claude/settings.json`:

```json
{
  "mcpServers": {
    "hh": {
      "command": "/path/to/uv",
      "args": ["run", "--directory", "/path/to/hh-mcp-server", "hh-mcp-server"]
    }
  }
}
```

## MCP-инструменты

| Инструмент | Описание |
|---|---|
| `search_vacancies` | Поиск вакансий по ключевым словам (keywords, area, salary, experience, schedule) |
| `get_recommended_vacancies` | Подходящие вакансии для резюме (алгоритм hh.ru, до 1000 вакансий) |
| `get_vacancy_details` | Детали вакансии по ID |
| `get_my_resumes` | Список резюме пользователя |
| `get_resume` | Полное содержимое резюме |
| `apply_to_vacancy` | Отклик на вакансию (с письмом и ответами на вопросы) |
| `get_responses` | Статусы откликов |
| `get_employer_info` | Информация о компании |
| `close_session` | Закрытие браузера и сохранение сессии |

### Рекомендованные вакансии

Инструмент `get_recommended_vacancies` использует алгоритм hh.ru для подбора вакансий на основе резюме (аналог страницы "Подходящие вакансии"):

```
get_recommended_vacancies(
    resume_id="0fe69243ff063cb4720039ed1f574b71676a55",
    max_pages=50  # до 1000 вакансий (20 на страницу)
)
```

Это значительно точнее, чем keyword search — hh.ru анализирует опыт, навыки и должность из резюме.

### Отклик на вакансию (двухшаговый flow)

Некоторые вакансии имеют обязательные вопросы от работодателя:

1. **Первый вызов** без `question_answers` — возвращает список вопросов
2. **Второй вызов** с `question_answers` — отправляет отклик

```
# Шаг 1: получить вопросы
apply_to_vacancy(vacancy_id="12345")
# → {"status": "questions_required", "questions": [...]}

# Шаг 2: отправить с ответами
apply_to_vacancy(
    vacancy_id="12345",
    resume_id="abc123",
    cover_letter="Текст письма",
    question_answers={"task_123_text": "Ответ на вопрос"}
)
```

## Структура проекта

```
hh_mcp_server/
├── cli_main.py       # CLI точка входа (--login, --no-headless, --transport)
├── server.py         # FastMCP сервер, регистрация инструментов
├── constants.py      # URL, пути, маппинги (города, графики, опыт)
├── exceptions.py     # Кастомные исключения
├── drivers/
│   └── browser.py    # Playwright: контекст, страница, сохранение сессии
├── tools/
│   ├── vacancy.py    # Инструменты поиска и просмотра вакансий
│   ├── apply.py      # Инструмент отклика на вакансию
│   ├── resume.py     # Инструменты работы с резюме
│   ├── employer.py   # Информация о работодателе
│   └── responses.py  # Отслеживание откликов
├── scraping/
│   ├── selectors.py  # CSS-селекторы для парсинга hh.ru
│   ├── extractor.py  # Утилиты извлечения данных со страниц
│   ├── apply.py      # Логика отклика (cookies, вопросы, письмо, submit)
│   └── resume.py     # Парсинг страниц резюме
└── utils/
    └── auth.py       # Авторизация (login flow, проверка сессии)
```

## Логирование

```bash
uv run hh-mcp-server --log-level DEBUG
```

Уровни: `DEBUG`, `INFO`, `WARNING` (по умолчанию), `ERROR`.

TDQS

A3.8/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: searching vacancies, getting details, applying, managing resumes, employer info, and responses. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., search_vacancies, get_resume, apply_to_vacancy). No mixing of styles.

Tool Count5/5

9 tools are well-scoped for a job application platform, covering all core operations without being excessive or too sparse.

Completeness4/5

The tool set covers the essential job search and application workflow. Minor gaps like resume creation/editing are absent but can be handled externally.

Maintenance

ActivityInactive
ResponsivenessNo issues