ati-hh-mcp: an MCP server for the hh.ru API

ati-hh-mcp

All 135 public hh.ru API operations as toolsets: vacancies, responses, chats and resumes, writes only with confirm=true

  • 0 ★ on the repository
  • Last commit
  • MIT
MCP server

Broad access

Why this level

  • The hh.ru token opens responses, chats and resumes, and the employer toolsets add vacancies with applicant data
  • Changes are available to the tools and are guarded only by the `confirm=true` argument
All reasons and checks
Russian stack

timur-ai/ati-hh-mcp

Install

Services

Manual install

{"mcpServers":{"hh":{"command":"uvx","args":["--from","git+https://github.com/timur-ai/ati-hh-mcp","ati-hh-mcp","serve","--transport","stdio"],"env":{"HH_TOKEN":"YOUR_HH_TOKEN","HH_UA_EMAIL":"you@example.com"}}}}

Requires uv; the same block fits Cursor in `.cursor/mcp.json`.

Access and checks

How we review

Broad accessThe tool can change data, run commands or handle secrets.

  • The hh.ru token opens responses, chats and resumes, and the employer toolsets add vacancies with applicant data
  • Changes are available to the tools and are guarded only by the `confirm=true` argument

This is third-party code. Review the repository files before installing.

What it does

The MCP server turns every operation of the public hh.ru OpenAPI specification, 135 in total, into grouped toolsets for agents. By default 62 tools are on: dictionaries, suggestions, vacancy search, responses and invitations, chats, resume viewing and the `/me` profile. Six employer toolsets and an extended set are enabled with the `HH_TOOLSETS` variable. Personal mode runs over stdio, team mode over HTTP with server keys and OAuth sign-in. The token is set with the `HH_TOKEN` variable, a request header or OAuth sign-in. Any change requires an explicit `confirm=true` argument; read requests are throttled and retried on a 429 reply, and the server never retries changes by itself. Errors arrive with a structured hh.ru code and a Russian description.

Who it is for. Job seekers, recruiters and HR teams who run vacancy search, responses and correspondence on hh.ru through Claude Code, Claude Desktop or Cursor.

Good fit when

  • An agent must find vacancies by salary, region and role and show similar ones
  • Responses and invitations have to be reviewed as a list and replies prepared in chat
  • A recruiter searches resumes by 52 parameters and keeps saved searches
  • A team server in Docker must give several people access to hh.ru by keys

Not a fit when

  • You need to publish vacancies with no manual check: every change goes only with `confirm=true`
  • You need data from other job sites: the server knows only hh.ru
  • The server will face the network without TLS: it speaks plain HTTP

Example request

Find Python developer vacancies in Moscow from 250 thousand and show the responses that got an invitation

MCP

Transport
stdio, http
Authentication
OAuth

Environment variables

HH_TOKEN secret
hh.ru token for authorized calls
HH_UA_EMAIL
Email for the User-Agent header of hh.ru requests
HH_TOOLSETS
List of enabled toolsets
MCP_API_KEYS secret
Server access keys in HTTP mode

Limitations

Authorized calls need an hh.ru token or a registered OAuth application; dictionaries, suggestions and vacancy search work without a token. Employer toolsets are off by default. It runs from the git repository through `uvx` and needs Python 3.10 to 3.14 or Docker. In HTTP mode the server speaks plain HTTP, so network exposure needs a reverse proxy with TLS, the container bound to `127.0.0.1` and a single worker process. The extended set relies on undocumented hh.ru methods.

How to disable. Remove the `hh` block from the client configuration, stop the container with `docker compose down` and revoke the token in the hh.ru account.

FAQ

Is an hh.ru token needed for vacancy search?

No: dictionaries, suggestions and vacancy search work without a token, while responses, chats and the profile need one.

How do I enable employer tools?

List the toolsets in `HH_TOOLSETS`; the variable replaces the default list entirely, and the `auth` toolset is always on.

Can the agent send a message without my knowledge?

No: every change goes only with the `confirm=true` argument, and the server never repeats changes.

How do I authorize with hh.ru?

Three ways: a static token in `HH_TOKEN`, a token in the header of each request and OAuth sign-in with a registered hh.ru application.

Which Python versions are supported?

From 3.10 to 3.14: the CI matrix covers every minor version. The alternative without Python on the host is Docker Compose.

Discussion

No questions or reviews yet.

Russian stack

An MCP server with 52 tools over the official hh.ru API: vacancy search with no token, employer resumes and applications with one, and salary statistics

MCP serverExtended access

hh.ru MCP

hh-mcp

Russian stack

MCP server for the hh.ru API: vacancy and employer search, salary estimates, reference lists, resumes with employer access

MCP serverExtended access10Repository stars
Russian stack

An MCP server for the employer side of the hh.ru and hh.kz API: your vacancies, applications, resume search, sourcing and webhooks through an OAuth app

MCP serverBroad access1Repository stars
Russian stack

A FastMCP server with 43 hh.ru tools: signs in via the official hh.ru Android app's OAuth, no need to register your own app at dev.hh.ru

MCP serverBroad access
Russian stack

A browser-based MCP server for job search on hh.ru: resume-matched vacancy recommendations, applications and statuses

MCP serverBroad access3Repository stars
Russian stack

A read-only relay over api.hh.ru: it holds its own app OAuth token and exposes vacancy search and details via MCP and ChatGPT Actions, no user keys

MCP serverExtended access

README in short

The documentation covers the quick start with `uvx` and Docker Compose, Claude Desktop and Cursor setup, a table of toolsets, three authorization methods and a two-level search schema. Coverage is locked by a contract metatest against the specification, and test coverage is claimed at 95 percent or more.

README badge

Report a problem