Skip to main content
Glama
AndreyTepaykin

hh-mcp

search_vacancies

Search hh.ru job vacancies using filters for keywords, region, salary, experience, employment type, work format, and more. Returns paginated summaries with option for full JSON.

Instructions

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).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the full raw hh.ru JSON instead of the compact summary.
areaNoRegion code (1=Moscow, 2=Saint Petersburg). Use get_areas / suggest_areas to find codes.
pageNoPage number (0-based)
textNoSearch query. Supports hh.ru query language (quotes, AND/OR/NOT, field:). e.g. "python AND django"
labelNoVacancy label filter (replaces the deprecated only_with_salary — use with_salary).
metroNoMetro station or line id. Use get_metro to find ids.
periodNoOnly vacancies published within the last N days (1-30). Mutually exclusive with date_from/date_to.
salaryNoDesired salary amount (sent together with currency).
date_toNoPublished up to this date (ISO 8601). Mutually exclusive with period.
currencyNoSalary currency (RUR, USD, EUR). Only applied when salary is set; defaults to RUR.
industryNoIndustry id (employer industry). Use get_industries to find ids.
order_byNoSort order
per_pageNoResults per page (1-100)
scheduleNoDEPRECATED by hh.ru — prefer work_format. Still accepted.
date_fromNoPublished from this date (ISO 8601, e.g. 2026-06-01). Mutually exclusive with period.
employmentNoDEPRECATED by hh.ru — prefer employment_form. Still accepted.
experienceNoRequired experience level
employer_idNoRestrict results to a single employer id.
work_formatNoWork format (modern replacement for schedule=remote etc.).
search_fieldNoRestrict the text search to a single field.
excluded_textNoExclude vacancies matching this text.
employment_formNoEmployment form (modern replacement for the deprecated `employment`).
professional_roleNoProfessional role id. Use get_professional_roles / suggest_professional_roles to find ids.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.2.0

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool returns 'a compact paginated summary' and that passing raw:true yields full JSON, which is useful behavioral context. However, it does not mention whether the operation is read-only, any authentication requirements, rate limits, or side effects. For a search tool that is inherently read-only, the absence of a read-only hint is acceptable but not explicitly stated. The return format disclosure is the main value added beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly packed sentence that conveys the core purpose, the breadth of filters, and the return format option. Every phrase earns its place; there is no fluff or repetition. It is front-loaded with the action and includes the key caveat about raw JSON. This is an excellent example of concise, efficient writing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (23 parameters, no output schema), the description provides adequate context for an agent to understand what the tool does and what it returns. It mentions the filter types and the return summary. However, it does not explain the pagination mechanics (though page and per_page are in the schema), nor does it clarify mutually exclusive parameter groups (period vs date range) — though these are also in the schema. For a search tool with full schema coverage, the description is sufficient but could have added a note about the relationship between filters and the need for area/role IDs from helper tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each of the 23 parameters already has a descriptive comment. The description lists filter categories but adds no extra meaning beyond what the schema provides. For instance, it mentions 'labels' but the schema already explains the label enum. The description does not clarify any parameter interdependencies (e.g., period vs date range) beyond what is in the schema. Thus, it adds minimal value over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Search job vacancies on hh.ru' with a comprehensive list of filter dimensions (keywords, region, professional role, industry, metro, salary, etc.). It uses a specific verb and resource, and the inclusion of many distinct filter categories distinguishes it from sibling tools like get_vacancy (which retrieves a single vacancy) or search_employers (which searches a different entity). The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates the tool is for broad vacancy searching but does not explicitly state when to prefer it over alternatives like get_vacancy (for a specific vacancy ID) or get_similar_vacancies (for similarity-based results). It also doesn't mention any exclusions or conditions. While the name and filter list imply broad search usage, the lack of explicit guidance on alternatives leaves room for agent confusion among the many sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.