About Headcount Labs
Headcount Labs is a hosted MCP service for job data, letting researchers and agents search, count, and read openings from employer career sites and hiring platforms. It merges duplicate listings and retains links to original postings.
Key features
- 01Filter jobs by title, location, pay, and more
- 02Count jobs and group by employer
- 03Read job details and source links
- 04Explore job market insights
- 05Track job changes
- 06Export job data
Use cases
- 01Find remote jobs in a specific region
- 02Compare job counts across employers
- 03Review job pay and application links
- 04Track new, changed, and closed jobs
MCP support
It provides public and authenticated remote Streamable HTTP MCP endpoints. Clients can call tools for job search, counts, details, and market insights; the authenticated endpoint also offers exports, a company registry, and job changes.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://api.headcountlabs.com/mcp/publicclaude mcp add --transport http com-headcountlabs-jobs https://api.headcountlabs.com/mcp/public{"mcpServers":{"com-headcountlabs-jobs":{"type":"http","url":"https://api.headcountlabs.com/mcp/public"}}}Open in Cursor{"servers":{"com-headcountlabs-jobs":{"type":"http","url":"https://api.headcountlabs.com/mcp/public"}}}Open in VS Code{"mcpServers":{"com-headcountlabs-jobs":{"type":"http","url":"https://api.headcountlabs.com/mcp/public"}}}{"mcpServers":{"com-headcountlabs-jobs":{"serverUrl":"https://api.headcountlabs.com/mcp/public"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
https://api.headcountlabs.com/mcp/publichttps://api.headcountlabs.com/mcpTools
6| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | No | |
| question | string | Yes |
Details
From the project READMEHeadcount Labs MCP server
Job postings for AI agents. Headcount Labs is a hosted Model Context Protocol server that lets Claude, ChatGPT, Codex, Cursor, VS Code and other MCP clients search, count and read open jobs from employers' own career sites and the hiring platforms they use (Workday, Greenhouse, Lever, iCIMS, SmartRecruiters and others). Copies of the same opening are merged into one job, and every job keeps the link to the original posting.
There is nothing to install or run. This repository holds the connection instructions, client examples and the
official MCP Registry entry (server.json, name com.headcountlabs/jobs). The server itself is hosted.
| Endpoint | Sign-in | Tools |
|---|---|---|
https://api.headcountlabs.com/mcp/public | None | 6 read-only tools; one search shows up to 250 matching jobs, 50 per page |
https://api.headcountlabs.com/mcp | OAuth 2.1 (PKCE, dynamic client registration) or an API key as a bearer token | 26 tools, including exports, the company registry, the job change feed and usage |
Both use the Streamable HTTP transport.
Pricing. Every organization gets 100,000 records free each calendar month (UTC), with no card. After that, records cost a flat $0.01 per 1,000. Counts, market insights, field lookups and doc searches are free. See headcountlabs.com/pricing.
Try it without an account
Add the public endpoint to any MCP client. In Claude Code:
claude mcp add --transport http headcountlabs-public https://api.headcountlabs.com/mcp/public
Or call it directly. This counts every open job in the catalog:
curl -s https://api.headcountlabs.com/mcp/public \
-H "content-type: application/json" -H "accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"count_jobs","arguments":{}}}'
Connect with an account
Claude Code (then run /mcp and choose Authenticate):
claude mcp add --transport http headcountlabs https://api.headcountlabs.com/mcp
Or install the Claude Code plugin, which adds the server and a job-search skill:
/plugin install headcount-labs --marketplace HeadcountLabs/claude-plugin
Codex:
codex mcp add headcountlabs --url https://api.headcountlabs.com/mcp
codex mcp login headcountlabs
Cursor, Windsurf and other clients that read mcp.json: examples/mcp.json.
VS Code: examples/vscode-mcp.json.
claude.ai and Claude Desktop: add a custom connector with the endpoint URL.
ChatGPT: headcountlabs.com/mcp/chatgpt. Grok:
headcountlabs.com/mcp/grok.
Clients without remote server support: run npx mcp-remote https://api.headcountlabs.com/mcp as the server command.
Tools
The public endpoint serves the first six tools in this table. The signed-in endpoint serves all of them. The full reference, with scopes and limits, is at headcountlabs.com/docs/mcp-tools.
| Tool | What it does | Uses records |
|---|---|---|
search_jobs | Finds jobs by title, keywords, company, city, state, country, work arrangement, pay and dates. Signed in, deliver_file: true writes up to 5,000 jobs to a file. | Yes |
count_jobs | Counts the jobs that match a set of filters, optionally grouped by employer. | No |
get_job | Reads one job with every linked posting and its source links. | Yes |
market_insights | Pay, top employers, remote share, metros, jobs by state and more, from a dated snapshot. | No |
list_fields | Finds the filters and job fields that match your words, such as "pay" or "remote". | No |
search_docs | Returns the best-matching sections of the Headcount Labs docs. | No |
read_file | Pages through a file that search_jobs delivered, for 24 hours. | No |
verify_jobs | Re-opens a random sample of original postings and checks link, status, title, employer, location and pay. | Sampled jobs |
compare_sources | Matches your own job list against Headcount Labs, row by row. | Matched jobs |
search_jobs_json, search_jobs_dsl | The same search with a JSON body or Elasticsearch-style clauses. | Yes |
list_job_changes | New, changed and closed jobs since a time or cursor. | Yes |
list_companies, search_companies, get_company, list_company_jobs | The company registry and each company's jobs (needs the companies:read scope). | Jobs only |
create_job_export, list_job_exports, get_job_export, read_job_export_file | Asynchronous exports of up to 100,000 jobs. | Completed exports |
get_usage, get_overage, get_usage_requests, get_usage_analytics | Your plan, records used and left, overage status and request reports. | No |
set_confirmation_level, set_overage | How large a search may be before the agent must ask you, and overage billing on or off. Agents change them only when you ask. | No |
Every tool carries a title and readOnlyHint or destructiveHint annotations. The tools read job data. They can't
apply to jobs or contact employers.
What results look like
- Compact by default.
search_jobsreturns a short summary of each job: rank,job_id, the employer-written title, employer and a 200-character snippet (injob_ad), locations, work arrangement, pay with its period, dates and the posting and apply links. Passview: "full", name thefieldsyou need, or callget_jobfor every field. Ten typical searches came to 62% fewer tokens than with every field. - Job ad text is data. Results that carry employer-written text start with an
untrusted_contentnotice, and the server tells the AI never to follow instructions inside a job ad. Hidden text (zero-width and text-direction characters, HTML comments, hidden elements) is removed before it is sent. - Errors say how to fix the call. A bad argument returns
invalid_argumentswith each problem'sfield, what is wrong, the accepted values or the nearest valid name (did_you_mean), and a workingexample. Rate-limit and overload errors giveretry_after_seconds. - Paging. Signed in,
limitis the page size (10 to 100, default 50) andmax_resultsis the most results one search returns across all its pages (10 to 1,000, default 250). They apply tosearch_jobs,search_jobs_json,search_jobs_dsl,list_company_jobs,list_companies,search_companiesandlist_job_changes. Set both on the first call and keep them the same on every page, because the cursor carries them. A search that reaches the cap returnsnext_cursor: nulland a note. The no-account endpoint pages 1 to 50 jobs (default 10, or 1 to 10 with full descriptions) and stops at 250. - Job cards. In clients that support MCP Apps,
search_jobsalso shows the jobs as cards with pay, remote and location filters and an Apply button that opens the original posting. Other clients get the normal result.
Example prompts
- "How many data engineer jobs are open in Germany right now?"
- "Find 5 remote software engineer jobs in the US posted in the last week, with pay and apply links."
- "Which employers have the most open registered nurse jobs in Texas?"
- "What share of project manager jobs are remote, hybrid or on-site?"
- "Pull every open job at Deloitte in Germany into a file."
The data
Open jobs read from employer career sites and hiring platforms, refreshed continuously, with closed jobs removed. Each job carries the employer, title, locations, work arrangement, pay as the employer published it, dates, and the posting and apply links.
- Coverage by platform, country and company: headcountlabs.com/coverage
- Fields in a job record: headcountlabs.com/docs/data-fields
- REST API with the same filters: headcountlabs.com/docs
- Public subsets of the job dataset on Hugging Face (ODbL 1.0): huggingface.co/HeadcountLabs; the full dataset is coming soon. Example queries and the schema are in the job-postings repository
Privacy and support
Your client sends search filters and job IDs to api.headcountlabs.com and gets job data back. Headcount Labs keeps only the usage counts needed for billing. See the privacy policy and terms.
Support: headcountlabs.com/contact or [email protected].
The examples and docs in this repository are MIT licensed.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.