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
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
Install
- Works in
- 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 reviewBroad 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 invitationMCP
- Transport
- stdio, http
- Authentication
- OAuth
Environment variables
HH_TOKENsecret- 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_KEYSsecret- 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.
Related
All hh.ru toolsAn 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
hh.ru MCP
hh-mcp
MCP server for the hh.ru API: vacancy and employer search, salary estimates, reference lists, resumes with employer access
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
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
A browser-based MCP server for job search on hh.ru: resume-matched vacancy recommendations, applications and statuses
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
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.