hiringindex-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@hiringindex-mcpShow me remote Python jobs in Berlin posted this week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
hiringindex-mcp
MCP server over live job postings. Search roles, aggregate a market slice, and see how long each listing has been sitting open.
Zero dependencies, Node ≥ 18, stdio transport.
Install
npx -y hiringindex-mcpClaude Desktop / Claude Code:
{
"mcpServers": {
"hiringindex": {
"command": "npx",
"args": ["-y", "hiringindex-mcp"],
"env": { "HIRINGINDEX_API_KEY": "your-key" }
}
}
}Related MCP server: JobsPipe MCP Server
Tools
Tool | What it answers |
| "Show me Python data roles in Amsterdam paying over 80k" |
| "What does a data engineer earn in Berlin, and who is hiring?" |
| "Are these listings fresh, or have they been open for months?" |
| "Give me the full posting for this id" |
posting_age_report reports median age, the share posted this week and the share
still open after sixty days — the most commonly cited signal that a role is not
being actively filled. It reports the numbers; it does not pretend to know the
employer's intent.
Where this sits against what exists. A free tool, whenthisjobwasposted.com, resolves the real posting date for one URL at a time and has an MCP server of its own. If that is what you need, use it — it costs nothing. This tool answers a different question: the age distribution of an entire slice of the market, computed alongside pay and demand for the same cohort. One is a lookup, the other is an aggregate.
All four take the same filter shape, so a slice defined once can be searched, aggregated and aged without rewriting the query.
Filters
Exactly what the live index can apply (checked against the marketplace listing
on 2026-09-07, board_handle added 2026-09-08). Anything else is not a filter, and the tool schemas are closed
so a model cannot invent one.
Field | Meaning | Notes |
| job titles to match | terms shorter than 3 characters are rejected by the index |
| terms mentioned anywhere in the posting (title or description) | any keyword matches; since 2026-09-08 — before that, title only |
| city as employers write it |
|
| ISO 3166-1 alpha-2 code or an English name |
|
|
| hybrid is not a separate filter upstream |
| one employer by name | |
| one ATS board by its handle | take it from the |
| advertised salary bounds | only postings that disclose a salary match |
| published in the last N days | |
| paging, |
|
Not offered here although the index accepts them: seniority and
employment_type — their values are raw vendor strings ("Mid-Senior Level",
"FullTime"), so a model would guess spellings and silently get an empty slice;
the aggregates still report both as employers write them. Not available upstream
at all: region or state, industry.
Configuration
Variable | Default | Meaning |
| — | required; also accepts |
|
| marketplace host |
| — | set this to call our backend directly instead of the marketplace |
|
| request timeout |
Setting HIRINGINDEX_API_BASE switches auth from x-rapidapi-key to x-api-key
and skips the marketplace entirely.
Why the handshake is local
The tools call REST endpoints directly instead of proxying a remote /mcp.
The marketplace meters every request against the declared path, initialize and
tools/list included. Going through this package, the handshake never leaves the
machine and only real queries cost anything.
Output
Markdown by default — repeated fields render as tables, which costs fewer tokens
than a labelled list and stays readable for a human. Pass format: "json" on any
tool for the raw response.
Development
npm test # 16 protocol checks, no key needed
HIRINGINDEX_API_KEY=... npm test # 17 — adds live calls through the marketplaceThe test drives the server the way a real client does: writes JSON-RPC to stdin, reads from stdout.
Before publishing
Smoke test with a real key: done 2026-09-07 through the marketplace, 17/17 (search, insights, age report, single posting). Re-run before every publish.
git initand addrepositorytopackage.json.The marketplace host is final (
hiringindex.p.rapidapi.com, listing public since 2026-09-07), so the default inconfig.jswill not need a major bump.Submit to the official MCP registry (no gatekeeper), then Docker MCP Registry and the Cline marketplace.
Note on the registry listing
Across 115 job-related servers in the official registry, the description is the only thing a browsing user reads, and the ones that get installed are narrow: a country, an industry, a single job family. "Job search with AI" is indistinguishable from a dozen others. Lead with the number, the source and the tool list — and with the age angle, which nobody else has taken.
Available Tools
4 toolsget_jobFetch one postingARead-onlyIdempotent
Full detail for a single posting by its id, including the description and the application link.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Posting id returned by search_jobs. | |
| format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and open-world. The description adds useful behavioral detail by specifying that the response includes the full description and application link, which is not visible in annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence conveys the essential purpose and key response contents. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only retrieval tool, the description plus annotations provide sufficient context. There is no output schema, but the description names the main fields returned. The optional format parameter's meaning is the only notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: the required 'id' parameter is well-described, while 'format' has only an enum without explanation. The description adds little beyond the schema, only restating that retrieval is by id; it does not clarify the meaning or effect of the format parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('get'), a concrete resource ('single posting'), and the key selector ('by its id'). It also identifies what the returned detail includes, making the tool's distinct role clear relative to sibling search_jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used after obtaining a posting id, and the schema reinforces that the id is 'returned by search_jobs.' It does not explicitly name alternatives or state when not to use the tool, but the context is clear enough for basic routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_market_insightsAggregate a slice of the job marketARead-onlyIdempotent
Counts, salary percentiles by currency, remote share, top employers, seniority and employment-type mix, city and source split for any slice of postings. Accepts the same filters as search_jobs. Use this instead of paging through results when the question is about the market rather than about individual roles.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City name as employers write it, e.g. "Berlin", "New York", "Bengaluru". | |
| format | No | ||
| titles | No | Job titles to match, e.g. ["Data Engineer"]. Terms shorter than 3 characters are rejected by the index. | |
| company | No | Restrict to one employer by name. | |
| country | No | Country as ISO 3166-1 alpha-2 code ("US", "DE") or an English name ("Germany"). | |
| keywords | No | Terms mentioned anywhere in the posting — title or description — e.g. ["Kubernetes"]. Any keyword matches. Use titles for the role itself; keywords for a tool, skill or technology the posting talks about. | |
| salary_max | No | Highest advertised salary to include. | |
| salary_min | No | Lowest advertised salary to include. Only postings that disclose a salary match. | |
| board_handle | No | Restrict to one ATS board by its handle, exactly as the `handle` field of a posting reports it, e.g. "EndeavorITSolution" (SmartRecruiters) or "walmart:wd504:WalmartExternal" (Workday). The precise way to pull one employer's postings when names are ambiguous. | |
| work_arrangement | No | Filter by how the work is done. Hybrid is not a separate filter upstream. | |
| posted_within_days | No | Only postings published in the last N days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent behavior. The description adds useful behavioral context: it returns aggregate market statistics rather than a list of postings, and its filters are identical to search_jobs. This is more than what annotations alone convey, though no deep caveats like rate limits or data freshness are mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all informative. The output metrics are front-loaded, the filter equivalence is stated compactly, and the usage guidance is one clear sentence. No filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values, and it does enumerate the main metric categories. It could be more explicit about the shape of the response and how the format parameter affects it, but the listed dimensions give an agent a solid mental model of what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 91%, so the schema already explains individual parameters in detail. The description adds the cross-tool point that the tool accepts the same filters as search_jobs, which is helpful, but it does not need to repeat parameter-level semantics. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (aggregate/count) and a clear resource (slice of job postings), and enumerates the exact metrics returned: counts, salary percentiles, remote share, top employers, etc. It also distinguishes itself from paging through individual results, making the purpose obvious relative to siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this instead of paging through results when the question is about the market rather than individual roles. It also states that it accepts the same filters as search_jobs, giving clear routing guidance against the main sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
posting_age_reportHow long these postings have been openARead-onlyIdempotent
Age profile of a slice of postings: median days since publication, share posted in the last week, and share still open after sixty days. A listing that has been open for months is the most commonly cited sign that a role is not being actively filled — this reports the numbers rather than guessing.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City name as employers write it, e.g. "Berlin", "New York", "Bengaluru". | |
| format | No | ||
| titles | No | Job titles to match, e.g. ["Data Engineer"]. Terms shorter than 3 characters are rejected by the index. | |
| company | No | Restrict to one employer by name. | |
| country | No | Country as ISO 3166-1 alpha-2 code ("US", "DE") or an English name ("Germany"). | |
| keywords | No | Terms mentioned anywhere in the posting — title or description — e.g. ["Kubernetes"]. Any keyword matches. Use titles for the role itself; keywords for a tool, skill or technology the posting talks about. | |
| salary_max | No | Highest advertised salary to include. | |
| salary_min | No | Lowest advertised salary to include. Only postings that disclose a salary match. | |
| board_handle | No | Restrict to one ATS board by its handle, exactly as the `handle` field of a posting reports it, e.g. "EndeavorITSolution" (SmartRecruiters) or "walmart:wd504:WalmartExternal" (Workday). The precise way to pull one employer's postings when names are ambiguous. | |
| work_arrangement | No | Filter by how the work is done. Hybrid is not a separate filter upstream. | |
| posted_within_days | No | Only postings published in the last N days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the call as read-only, idempotent, and open-world, so no safety disclosure is needed. The description adds useful behavioral context by naming exactly which statistics are returned and by framing the tool as a factual report ('reports the numbers rather than guessing'). It does not, however, describe edge cases like empty or unfiltered results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the core metrics first and then provide rationale for the report. No filler or repetition; the description is appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich 11-parameter schema and safety annotations, the description covers the essential output semantics even though there is no output schema. It names the computed metrics but does not specify output structure or behavior when no filters are supplied; these are minor gaps given the strong schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 91%, so the parameters are already well documented and the baseline is 3. The tool description only refers to 'a slice of postings' and does not add meaning to any specific parameter, but it also does not need to because the schema carries that weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear purpose: it computes an age profile ('median days since publication, share posted in the last week, and share still open after sixty days') for a filtered slice of postings. This is distinct from the sibling search/get tools and from general job_market_insights because it focuses specifically on how long postings have been open.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case ('a listing that has been open for months is the most commonly cited sign that a role is not being actively filled'), but it never explicitly states when to prefer this over siblings or when not to use it. There is no alternative guidance, so the agent must infer when this aggregate age report is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_jobsSearch job postingsARead-onlyIdempotent
Search live job postings read directly from ten applicant tracking systems (Workday, SmartRecruiters, Greenhouse, Workable, Lever, Ashby, Recruitee, Teamtailor, Breezy, Personio). Returns title, employer where the ATS publishes it, location, employment type, advertised salary where disclosed, posting date and the employer's own apply link where the source carries one.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City name as employers write it, e.g. "Berlin", "New York", "Bengaluru". | |
| page | No | Result page, starts at 1. | |
| limit | No | Postings per page, up to 100. | |
| format | No | markdown (default) or raw json. | |
| titles | No | Job titles to match, e.g. ["Data Engineer"]. Terms shorter than 3 characters are rejected by the index. | |
| company | No | Restrict to one employer by name. | |
| country | No | Country as ISO 3166-1 alpha-2 code ("US", "DE") or an English name ("Germany"). | |
| keywords | No | Terms mentioned anywhere in the posting — title or description — e.g. ["Kubernetes"]. Any keyword matches. Use titles for the role itself; keywords for a tool, skill or technology the posting talks about. | |
| salary_max | No | Highest advertised salary to include. | |
| salary_min | No | Lowest advertised salary to include. Only postings that disclose a salary match. | |
| board_handle | No | Restrict to one ATS board by its handle, exactly as the `handle` field of a posting reports it, e.g. "EndeavorITSolution" (SmartRecruiters) or "walmart:wd504:WalmartExternal" (Workday). The precise way to pull one employer's postings when names are ambiguous. | |
| work_arrangement | No | Filter by how the work is done. Hybrid is not a separate filter upstream. | |
| posted_within_days | No | Only postings published in the last N days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent, so the safety profile is covered. The description adds real value on top: live data sourced directly from ATSs, and conditional-field caveats — 'employer where the ATS publishes it', 'advertised salary where disclosed', 'apply link where the source carries one' — which warn the agent that fields are per-posting optional and not fully normalized.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the action verb and scope are front-loaded, the ATS source list is high-value context, and the return-field enumeration earns its place since there is no output schema. Every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with no output schema, this is nearly complete: the description documents the response contract via its return-field list, the schema covers all parameters at 100%, and annotations cover safety and open-world behavior. Minor gaps remain — result ordering, pagination semantics, and default format behavior are not stated — but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies. The description itself adds nothing about the 13 parameters; the schema already documents each one richly (3-character title minimum, hybrid not being a separate filter, board_handle ambiguity guidance, salary disclosure requirement). The description correctly defers to the schema here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb and resource ('Search live job postings') with concrete detail: ten named ATS sources and the exact return fields (title, employer, location, employment type, salary, posting date, apply link). This clearly positions it against siblings like get_job (single posting) and job_market_insights (market-level analysis) without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear scope ('live job postings read directly from ten applicant tracking systems') and enumerates what results contain, so when an agent wants a live posting search the choice is implied. However, it never names the siblings or states when NOT to use this tool — the selection guidance that does exist (titles vs keywords, board_handle for ambiguous names) lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
get_job - First observed
job_market_insights - First observed
posting_age_report - First observed
search_jobs
TDQS
Scored across 4 tools
Each tool targets a distinct question: individual postings, aggregate market stats, single-post detail, and posting-age distribution. The overlap between search_jobs and job_market_insights is explicitly addressed in the descriptions, so an agent can reliably select the right tool.
Two tools use an imperative verb_noun pattern (search_jobs, get_job), while the other two use descriptive noun phrases (job_market_insights, posting_age_report). This is a minor convention split, but the names are still clear and the pattern is readable.
Four tools is well-scoped for a read-only job-market data server. Each tool covers a distinct and necessary operation without redundancy or bloat.
For the stated domain of job posting search and market analysis, the surface is complete: search, detail retrieval, aggregate insights, and posting-age reporting cover the core workflows. No obvious dead ends or missing lifecycle steps exist for this read-only domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Live job postings from 30+ ATS feeds and job boards, one schema. Live results need a Bearer key.
Indeed job listings by keyword and location, and full postings, as structured JSON.
Search a live index of millions of open jobs from employer career sites and 100+ ATS platforms.
Read job postings live from employer career sites across 10 applicant tracking systems.
Related MCP Servers
- FlicenseAqualityFmaintenanceEnables job market analysis by providing salary distributions, trends, regional vacancy counts, and employer leaderboards via the Adzuna API, complementing listings from other sources.7-

JobsPipe MCP Serverofficial
FlicenseNot gradedqualityBmaintenanceEnables searching live, normalized job postings from 30+ ATS feeds and job boards, with tools for job search, source listing, pricing plans, and Upwork jobs.-- FlicenseNot gradedqualityCmaintenanceEnables users to retrieve live job postings from any iCIMS career site, providing structured data including title, requisition ID, employer, locations, employment type, dates, salary, and apply links.-
- AlicenseAqualityBmaintenanceEnables querying open job postings directly from company applicant-tracking systems (Greenhouse, Ashby, Lever), finding a company's job board, listing and comparing roles, and accessing salary data, all without scraping or API keys.3MIT