Skip to main content
Glama
alialtunar

hn-hiring-trends-mcp

by alialtunar

hn-hiring-trends-mcp

Which skills are tech companies hiring for, and which are rising? An MCP server that reads every Hacker News "Ask HN: Who is hiring?" thread (one per month, 250–500 job posts each) and turns them into skill demand trends, remote and salary stats, and searchable job posts.

No API keys. One line to install.

You:    Which skills gained the most demand on HN hiring threads this year?
Claude: [rising_skills(months=12)]
        • "AI agents" went from 11.3% to 14.7% of job posts (+3.4 pts); in
          September 2026 alone it was in 17.4% of posts.
        • Python +2.5 pts, LLM +2.1 pts.
        • Frontend fell 4.3 pts and React 2.7 pts.

Summarized from real tool output: Oct 2025–Sep 2026, 3,788 job posts.

Rising and falling skills on HN Who is hiring, by hn-hiring-trends

Why

You want to know

Without it

With hn-hiring-trends

Is Rust (or Go, or Elixir) worth learning?

Gut feeling, hype on X

skill_demand shows its share of job posts, month by month

What's rising in tech hiring

Read 400 posts a month

rising_skills ranks ~70 skills by change

Who's hiring remote Rust devs with visa sponsorship

Ctrl-F across threads

search_jobs(["Rust"], remote_only=True, visa_only=True)

What a senior engineer earns

Scattered posts

hiring_snapshot gives median and middle-half salary from stated ranges

Related MCP server: HackerNews Job Scraper

How it works

flowchart LR
    C[Claude / MCP client] -->|tool call| S[hn-hiring-trends-mcp]
    S --> A[HN Algolia API: monthly threads + all top-level job posts]
    A --> P[Parse: company, remote/hybrid/onsite, visa, salary range]
    P --> K[Skill matching: ~70 tuned patterns, or any phrase you pass]
    K -->|shares, trends, matching posts| C

A post "mentions" a skill once no matter how often it repeats it, so shares are "% of job posts asking for X". Ambiguous words get tuned rules: Go doesn't match "go-to-market", C doesn't match "Series C", Java doesn't match "JavaScript". Past months never change and are cached on disk (~/.cache/hn-hiring-trends).

Install

Requires uv.

Claude Code

claude mcp add hn-hiring-trends -- uvx hn-hiring-trends-mcp

Claude Desktop / Cursor (claude_desktop_config.json / .cursor/mcp.json)

{
  "mcpServers": {
    "hn-hiring-trends": {
      "command": "uvx",
      "args": ["hn-hiring-trends-mcp"]
    }
  }
}

Tools

Tool

What it does

hiring_snapshot

One month: post count, remote/hybrid/onsite and visa shares, salary medians, top skills

skill_demand

% of posts mentioning each of 1–10 skills, month by month, with the change

rising_skills

Biggest gainers and losers among ~70 skills (recent half vs earlier half of the period)

search_jobs

Posts mentioning all your terms; filter remote-only or visa; returns company, header, salary, link

hiring_threads

The monthly threads available

Prompts: monthly_hiring_report (a shareable monthly summary), skill_outlook ("should I learn X, Y or Z?").

Try these

  • "Should I learn Rust, Go or Elixir? Use 18 months of HN hiring data."

  • "Write this month's HN hiring report."

  • "Find remote Python jobs that mention LLMs and sponsor visas."

  • "What's the median salary in posts that mention Kubernetes?"

Limits

  • One slice of the market: HN skews toward startups, remote work and US/EU tech.

  • Skill matching is keyword-based; context like "nice to have" is not separated from "required".

  • Salaries are parsed from stated yearly ranges only (about a quarter of posts state one).

Part of the keyless MCP series

Open-source MCP servers that answer one market question each, with public data and no API keys.

Server

Question it answers

review-miner-mcp

What do users hate about competitor apps and games? (App Store + Steam reviews)

pricing-time-machine-mcp

How did a SaaS pricing page change over the years? (Wayback Machine)

hn-hiring-trends-mcp (this one)

Which skills are tech companies hiring for, and which are rising? (HN Who is hiring)

model-price-radar-mcp

What does each LLM cost, and did it get cheaper? (OpenRouter + price history)

launch-detector-mcp

What is a company about to launch? (certificate transparency logs)

Development

uv sync --extra dev
uv run pytest                          # offline tests with a mocked Algolia API
uv run python scripts/smoke_live.py    # live check against hn.algolia.com
uv run --with rich python scripts/demo.py 12   # terminal demo (vhs docs/demo.tape records the GIF)
npx @modelcontextprotocol/inspector uv run hn-hiring-trends-mcp   # click-through UI

MIT © Ali Altunar

Available Tools

5 tools
hiring_snapshotB
Read-onlyIdempotent

One month at a glance: number of job posts, remote/hybrid/onsite and visa shares, the most requested skills, and salary ranges where posts state them.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
monthNo'YYYY-MM' or 'latest'.latest
response_formatNo'markdown' (default) or 'json'.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is fully covered by structured data. The description does add useful scope detail (what is counted) and a data-quality caveat — salary ranges only 'where posts state them' — which is genuine behavioral context. It does not mention default month behavior or result limits, so it is solid but not rich.

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?

A single front-loaded sentence that enumerates exactly the returned metrics with no filler. The 'where posts state them' qualifier earns its place by setting expectations about missing salary data.

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?

An output schema exists, so return-value structure need not be explained here, and all parameters are optional with sane defaults, making invocation trivial. The one gap is that the undocumented 'top' parameter is left for the agent to guess at, but otherwise the definition is complete for its intended aggregate use.

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 coverage is 67%; 'month' and 'response_format' are documented in the schema, but 'top' (integer, default 20, range 5-60) has no description anywhere, and the description never says what it truncates. The description adds no parameter meaning beyond the schema, so the baseline 3 for moderate coverage is appropriate.

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

Purpose4/5

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

The description states concretely what the tool returns: job post counts, work-mode and visa shares, top skills, and salary ranges for a single month. That is a specific aggregation resource an agent can recognize. It does not, however, differentiate itself from siblings like skill_demand or hiring_threads, which likely overlap on the skills dimension.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no mention of when not to use it, and no reference to any of the four sibling tools. The phrase 'one month at a glance' weakly implies an aggregate-overview use case, but the agent must infer that itself.

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

hiring_threadsB
Read-onlyIdempotent

List the monthly 'Who is hiring?' threads available, with comment counts and links.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNoHow many monthly threads to read, newest first.
response_formatNo'markdown' (default) or 'json'.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is well covered without the description. The description adds that results include comment counts and links, a modest behavioral/return detail beyond the annotations.

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?

A single front-loaded sentence with no filler; the resource and its distinguishing contents are stated immediately.

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?

An output schema exists, so return structure need not be spelled out, and the annotations cover the safety profile for a simple read-only list tool. The only gap is the absence of any sibling-routing guidance, which the description could have supplied.

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 both parameters (months, response_format) are already fully documented with defaults, bounds, and enum values. The description adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.

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

Purpose4/5

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

The description gives a specific verb ('List') and resource (monthly 'Who is hiring?' threads) and notes the payload (comment counts and links). It does not explicitly name or contrast with the sibling tools (search_jobs, hiring_snapshot, skill_demand), so it stops short of a 5.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus search_jobs or hiring_snapshot, and no prerequisites or exclusions. The agent must infer usage from the tool name and the four sibling names alone.

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

rising_skillsB
Read-onlyIdempotent

Which skills gained or lost demand: compares the share of posts mentioning ~70 known skills in the recent half of the period with the earlier half.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
monthsNo
response_formatNo'markdown' (default) or 'json'.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld). The description adds genuinely useful behavioral context beyond them: the analysis compares the recent half of the period against the earlier half and draws on ~70 known skills. It does not disclose output shape or damping/limitations, but the method disclosure is the substantive part.

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

Conciseness4/5

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

A single tight sentence, front-loaded with the analytic question and then the comparison method. No filler, though the '~70 known skills' detail is somewhat optional.

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

Completeness3/5

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

An output schema exists, so return-value explanation is not required, and the comparison methodology is stated. However, with two of three parameters undocumented anywhere, an agent still cannot confidently size 'top' or interpret 'months' from the definition alone.

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

Parameters2/5

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

Schema description coverage is only 33% -- 'top' and 'months' carry no descriptions in the schema. The description's reference to 'the period' loosely ties to 'months' but never explains what 'top' caps or how the two halves are derived. With low coverage, the description should compensate and does not.

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

Purpose4/5

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

The description gives a specific analytical verb and resource: it identifies which skills gained or lost demand by comparing mention shares between two halves of a period. That is concrete and distinguishable from a level-check like skill_demand, though it never names a sibling or explicitly contrasts itself with them.

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?

Usage is implied by the framing ('gained or lost demand') -- an agent can infer this is the trend/change tool rather than a static demand tool. But there is no explicit statement of when to prefer this over skill_demand or the hiring_* siblings, and no exclusions or prerequisites.

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

search_jobsA
Read-onlyIdempotent

Find job posts that mention all the given terms, optionally remote-only or visa-sponsoring. Returns company, the post's header line, salary if stated, and a link.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
termsYesAll must appear, e.g. ['Rust', 'embedded'].
monthsNoSearch the newest N monthly threads.
visa_onlyNo
remote_onlyNo
response_formatNo'markdown' (default) or 'json'.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds useful detail by listing the returned fields (company, header line, salary if stated, link), but that overlaps with the existing output schema, and nothing is said about result ordering or truncation.

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?

Two tight sentences: the search scope is front-loaded, then the return shape. Every clause earns its place with no restating of the name or title.

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?

With annotations covering safety and an output schema covering return structure, the description only needs to frame the search; it does that well. Minor gaps remain around pagination/limit behavior and the 'monthly threads' window, which is a domain concept a new agent may not know.

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 50% (terms, months, response_format documented; limit, visa_only and remote_only not). The description compensates slightly by naming the remote-only and visa-sponsoring behaviors behind two of the undocumented flags, which is more than the schema alone provides, but it says nothing about limit or the months window.

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

Purpose4/5

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

States a specific verb ('Find') and resource ('job posts') plus the matching semantics ('mention all the given terms'), so the agent knows exactly what this returns. It does not, however, differentiate itself from siblings like hiring_threads or skill_demand, which also surface job-market data.

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 mention of 'optionally remote-only or visa-sponsoring' implies the filtering context in which each flag matters, but there is no explicit when-to-use guidance, no exclusions, and no pointer to a sibling for aggregate/analytics queries.

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

skill_demandA
Read-onlyIdempotent

Month-by-month share of job posts that mention each skill, with the change from the oldest to the newest month read.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNoHow many monthly threads to read, newest first.
skillsYesSkills or phrases, e.g. ['Rust', 'Go', 'LLM']. Any word works; known skills use tuned matching.
response_formatNo'markdown' (default) or 'json'.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, open-world and non-destructive behavior, so the safety profile is covered. The description adds genuine behavioral value by stating the output includes a delta between the oldest and newest month, which is not derivable from the schema. It stops short of noting aggregation or sampling caveats.

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

Conciseness4/5

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

A single tight sentence with no filler, and the core measure is front-loaded. The trailing clause about the oldest-to-newest change is slightly awkwardly worded but still earns its place as behavioral content.

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?

An output schema exists, so return shape need not be explained, and all three parameters are documented in the schema. What the tool computes and that it includes a trend delta is clear; only sibling routing guidance is absent.

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%, with months, skills and response_format all documented in the schema itself (including the tuned-matching note for known skills). The description adds no parameter-level syntax or constraints, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific computation — monthly share of job posts mentioning a skill, plus the change from oldest to newest month — so an agent knows exactly what is produced. It does not, however, differentiate itself from the sibling 'rising_skills', which sounds like an adjacent trend-over-time tool.

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 measurement it performs implies a use case (tracking demand for named skills over time), but there is no explicit statement of when to pick this over 'rising_skills' or 'hiring_threads', nor any exclusion. Usage is left to inference.

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.

  1. 5 tool updatesv0.1.0
    • First observedhiring_snapshot
    • First observedhiring_threads
    • First observedrising_skills
    • First observedsearch_jobs
    • First observedskill_demand

TDQS

A3.6/5.0

Scored across 5 tools

Disambiguation3/5

The job-listing tools (hiring_threads, search_jobs) are clearly distinct, but the analytics trio overlaps: rising_skills (recent vs earlier half), skill_demand (month-by-month shares + change), and hiring_snapshot (which also reports most-requested skills) all report skill-demand information. An agent could easily pick the wrong one for a given question.

Naming Consistency4/5

All names are lowercase snake_case and readable, forming a coherent set with recurring 'hiring_' and 'skill' prefixes. Only minor deviation: search_jobs is verb_noun while the others are noun phrases, but the style stays consistent.

Tool Count5/5

Five tools is well-scoped for a niche analytics server; each covers a distinct slice (thread listing, job search, monthly snapshot, skill trends, skill change).

Completeness4/5

The surface covers the main analytical needs: discovering threads, searching posts, monthly aggregation, and skill trends over time. Minor gaps remain (e.g. no company-level aggregation or filtering by thread directly in search), but core workflows are supported.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables browsing Hacker News, searching discussions, analyzing users, and tracking tech trends with zero setup required—no API keys or authentication needed.
    5
    27 npm
    6
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Extracts and manages job postings from HackerNews 'Who's Hiring' threads, enabling users to search and analyze listings through Claude Desktop. It provides tools for keyword-based job searches and detailed post retrieval while utilizing a file-based caching system.
    -
  • A
    license
    A
    quality
    A
    maintenance
    Live tech-hiring intelligence for AI agents. Search 130K+ open jobs collected daily from ~500 tech companies' own career sites — plus company hiring profiles, tech stacks, salary benchmarks, and skill trends. Five tools work with no account.
    31
    144 npm
    MIT