ats-mcp-server: jobs from hh.ru and ATS platforms
ats-mcp-server
An MCP server that aggregates vacancies from hh.ru and the public Greenhouse, Ashby, Lever, Workable and Bayt APIs into one format without HTML scraping
Low risk
We rate an entry low when it mostly gives the agent instructions and reference material.
Why this level
- Only reads public job listings and does not submit applications on the user's behalf
- The local database and search run on the user's own infrastructure; only requests to source APIs go outside
Install
In your terminal, with SkillFoxx CLI
npx skillfoxx add mcp/ats-mcp-serverDetects the agents on your machine, checks the risk and pins the version.
Other ways to install
Assembled automatically, review before installing.
Run in a terminal
claude mcp add --transport stdio --env 'API_KEY=<your API_KEY>' --env NODE_ENV=production ats-mcp-server -- nodeOr add to the file .mcp.json, in the project
{
"mcpServers": {
"ats-mcp-server": {
"command": "node",
"args": [],
"env": {
"API_KEY": "<your API_KEY>",
"NODE_ENV": "production"
}
}
}
}If the file already exists, add the server inside the mcpServers key.
Keys and settings
API_KEYsecret, required- API ключ для доступа к провайдерам
ANOTHER_KEYsecret, optional- Дополнительный секретный ключ
Replace the values in angle brackets with your own. Keys never go into install links and are not stored by us.
The button opens the agent and offers to add the server. If nothing happens, copy the config below.
Add to the file ~/.cursor/mcp.json, for all projects
{
"mcpServers": {
"ats-mcp-server": {
"command": "node",
"args": [],
"env": {
"API_KEY": "<your API_KEY>",
"NODE_ENV": "production"
}
}
}
}If the file already exists, add the server inside the mcpServers key. For a single project, put the same block into .cursor/mcp.json.
Keys and settings
API_KEYsecret, required- API ключ для доступа к провайдерам
ANOTHER_KEYsecret, optional- Дополнительный секретный ключ
Replace the values in angle brackets with your own. Keys never go into install links and are not stored by us.
The button opens the agent and offers to add the server. If nothing happens, copy the config below.
Run in a terminal
code --add-mcp '{"name":"ats-mcp-server","type":"stdio","command":"node","args":[],"env":{"API_KEY":"<your API_KEY>","NODE_ENV":"production"}}'Or add to the file .vscode/mcp.json, in the project
{
"servers": {
"ats-mcp-server": {
"type": "stdio",
"command": "node",
"args": [],
"env": {
"API_KEY": "<your API_KEY>",
"NODE_ENV": "production"
}
}
}
}If the file already exists, add the server inside the servers key.
Keys and settings
API_KEYsecret, required- API ключ для доступа к провайдерам
ANOTHER_KEYsecret, optional- Дополнительный секретный ключ
Replace the values in angle brackets with your own. Keys never go into install links and are not stored by us.
Run in a terminal
codex mcp add ats-mcp-server --env 'API_KEY=<your API_KEY>' --env NODE_ENV=production -- nodeOr add to the file ~/.codex/config.toml, for all projects
[mcp_servers.ats-mcp-server]
command = "node"
args = []
env = { API_KEY = "<your API_KEY>", NODE_ENV = "production" }If the file already exists, append the block to the end.
Keys and settings
API_KEYsecret, required- API ключ для доступа к провайдерам
ANOTHER_KEYsecret, optional- Дополнительный секретный ключ
Replace the values in angle brackets with your own. Keys never go into install links and are not stored by us.
Run in a terminal
gemini mcp add -s user -e 'API_KEY=<your API_KEY>' -e NODE_ENV=production ats-mcp-server nodeOr add to the file ~/.gemini/settings.json, for all projects
{
"mcpServers": {
"ats-mcp-server": {
"command": "node",
"args": [],
"env": {
"API_KEY": "<your API_KEY>",
"NODE_ENV": "production"
}
}
}
}If the file already exists, add the server inside the mcpServers key.
Keys and settings
API_KEYsecret, required- API ключ для доступа к провайдерам
ANOTHER_KEYsecret, optional- Дополнительный секретный ключ
Replace the values in angle brackets with your own. Keys never go into install links and are not stored by us.
Add to the file ~/.config/devin/mcp_config.json, for all projects
{
"mcpServers": {
"ats-mcp-server": {
"command": "node",
"args": [],
"env": {
"API_KEY": "<your API_KEY>",
"NODE_ENV": "production"
}
}
}
}If the file already exists, add the server inside the mcpServers key. Legacy Cascade keeps the MCP config in ~/.codeium/windsurf/mcp_config.json.
Keys and settings
API_KEYsecret, required- API ключ для доступа к провайдерам
ANOTHER_KEYsecret, optional- Дополнительный секретный ключ
Replace the values in angle brackets with your own. Keys never go into install links and are not stored by us.
Formerly Windsurf.
Add to the file cline_mcp_settings.json, for all projects
{
"mcpServers": {
"ats-mcp-server": {
"command": "node",
"args": [],
"env": {
"API_KEY": "<your API_KEY>",
"NODE_ENV": "production"
}
}
}
}If the file already exists, add the server inside the mcpServers key. Open the settings file in Cline: MCP Servers tab, Configure MCP Servers.
Keys and settings
API_KEYsecret, required- API ключ для доступа к провайдерам
ANOTHER_KEYsecret, optional- Дополнительный секретный ключ
Replace the values in angle brackets with your own. Keys never go into install links and are not stored by us.
Add to the file .roo/mcp.json, in the project
{
"mcpServers": {
"ats-mcp-server": {
"command": "node",
"args": [],
"env": {
"API_KEY": "<your API_KEY>",
"NODE_ENV": "production"
}
}
}
}If the file already exists, add the server inside the mcpServers key.
Keys and settings
API_KEYsecret, required- API ключ для доступа к провайдерам
ANOTHER_KEYsecret, optional- Дополнительный секретный ключ
Replace the values in angle brackets with your own. Keys never go into install links and are not stored by us.
A fork of Roo Code, same .roo folders.
Add to the file opencode.json, in the project
{
"mcp": {
"ats-mcp-server": {
"type": "local",
"command": [
"node"
],
"environment": {
"API_KEY": "<your API_KEY>",
"NODE_ENV": "production"
}
}
}
}If the file already exists, add the server inside the mcp key.
Keys and settings
API_KEYsecret, required- API ключ для доступа к провайдерам
ANOTHER_KEYsecret, optional- Дополнительный секретный ключ
Replace the values in angle brackets with your own. Keys never go into install links and are not stored by us.
Add to the file ~/.config/zed/settings.json, for all projects
{
"context_servers": {
"ats-mcp-server": {
"command": "node",
"args": [],
"env": {
"API_KEY": "<your API_KEY>",
"NODE_ENV": "production"
}
}
}
}If the file already exists, add the server inside the context_servers key.
Keys and settings
API_KEYsecret, required- API ключ для доступа к провайдерам
ANOTHER_KEYsecret, optional- Дополнительный секретный ключ
Replace the values in angle brackets with your own. Keys never go into install links and are not stored by us.
Add to the file .codeassistant/mcp.json, in the project
{
"mcpServers": {
"ats-mcp-server": {
"command": "node",
"args": [],
"env": {
"API_KEY": "<your API_KEY>",
"NODE_ENV": "production"
}
}
}
}If the file already exists, add the server inside the mcpServers key.
Keys and settings
API_KEYsecret, required- API ключ для доступа к провайдерам
ANOTHER_KEYsecret, optional- Дополнительный секретный ключ
Replace the values in angle brackets with your own. Keys never go into install links and are not stored by us.
Clone https://github.com/alexvozhak/ats-mcp-server, run npm ci, copy .env.example to .env and fill in keys, start Meilisearch with docker compose up -d, build with npm run build and run npm start, then call search_all or search_hh to search jobs.
Other ways from the author
npm ci && cp .env.example .env && docker compose up -d && npm run build && npm startFull setup from the README: dependencies, Meilisearch infrastructure, build and run.
This is third-party code. Review the repository files before installing.
What it does
Each job source connects through its own provider behind a shared interface: four ATS platforms via their public APIs, plus two job boards, hh.ru and the Middle East board Bayt. The search_all tool searches every source at once, search_hh searches hh.ru alone, get_job_details returns a listing's details by id, get_stats computes statistics over the collected jobs, and exclude_jobs/unexclude_job hide or restore listings in results. Data is stored in SQLite, search runs on Meilisearch, and hh.ru responses use a dedicated typed Zod schema. Adding a new source, per the author, means writing one provider class.
Who it is for. For job seekers and recruiting-tool developers who want one MCP instead of scraping each job board and ATS separately.
Good fit when
- You need to search several sources, including hh.ru, in a single query
- You need structured job data without parsing an HTML page
- You need to collect statistics or keep a local list of excluded listings
Not a fit when
- You only need hh.ru: the server is broader than necessary and requires standing up Meilisearch and Docker infrastructure
- You need resume search, applications or other hh.ru employer features: the server only searches vacancies
- You need a stable library: part of the code sits in src/poc as experiments for individual providers
Example request
Find Python developer jobs in Moscow on hh.ru and across the international ATS sources at onceLimitations
The project is version 0.1.0 from a single author. Running it needs infrastructure: Docker Compose with Meilisearch, environment variables in .env for the sources. Some providers (Bayt) are scraped via Crawlee/Playwright rather than a pure API, which is more fragile to site changes. The provider proof-of-concept code lives in a separate src/poc folder and is not part of the main server.
How to disable. Stop the server (npm run mcp:stop or docker compose down) and remove it from your MCP client configuration.
MCP
- Transport
- stdio
- Authentication
- not required
Security check
- Only reads public job listings and does not submit applications on the user's behalf
- The local database and search run on the user's own infrastructure; only requests to source APIs go outside
README in short
The README describes an MCP server that aggregates jobs from public ATS and job-board APIs, including hh.ru, without HTML scraping. It lists five MCP tools, the stack (TypeScript, Node.js 24, MCP SDK, Zod, SQLite, Meilisearch, Vitest), and setup steps via npm and Docker Compose. It separately mentions provider proof-of-concept checks under src/poc. MIT license.
FAQ
Can I search hh.ru only?
Yes, the search_hh tool searches hh.ru exclusively, while search_all combines every connected source.
Do I need Docker to run it?
Yes, search runs on Meilisearch, which is started with docker compose up -d alongside supporting services.
Related
A self-hosted knowledge base with block-level references and a built-in MCP server for connecting AI agents to your notes
A CLI for every Google Workspace API with JSON output and agent skills: Drive, Gmail, Calendar, Sheets and more
Local search over Markdown notes, docs and meeting transcripts: keywords, semantic search and reranking, with an MCP server
A task manager for AI-driven development: breaks a PRD into dependent tasks and guides the agent through them via MCP or CLI