hn-hiring-trends-mcp
# hn-hiring-trends-mcp
<!-- mcp-name: io.github.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?"](https://news.ycombinator.com/submitted?id=whoishiring) 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.
```
<sub>Summarized from real tool output: Oct 2025–Sep 2026, 3,788 job posts.</sub>

## 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 |
## How it works
```mermaid
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](https://docs.astral.sh/uv/).
**Claude Code**
```bash
claude mcp add hn-hiring-trends -- uvx hn-hiring-trends-mcp
```
**Claude Desktop / Cursor** (`claude_desktop_config.json` / `.cursor/mcp.json`)
```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](https://github.com/alialtunar/review-miner-mcp) | What do users hate about competitor apps and games? (App Store + Steam reviews) |
| [pricing-time-machine-mcp](https://github.com/alialtunar/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](https://github.com/alialtunar/model-price-radar-mcp) | What does each LLM cost, and did it get cheaper? (OpenRouter + price history) |
| [launch-detector-mcp](https://github.com/alialtunar/launch-detector-mcp) | What is a company about to launch? (certificate transparency logs) |
## Development
```bash
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
TDQS
Scored across 5 tools
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.
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.
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).
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.