Headcount Labs
REMOTE · API.HEADCOUNTLABS.COM · 2 COMPONENTS
Job postings search: find, count and read open jobs from employer career sites, with pay and links.
Available components
Last scanned (10 hours ago)
Scores higher than 71% of remote servers
Reachable. Last reached 23 Oct 2026.
Category CRM and Sales
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security80
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability72
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 3099 tokens (~238/item across 13 items; 9 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage94
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 83% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 9 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
- Supports UI / widget rendering.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 22 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.
- 20 Oct 26 +7
- A breaking change shipped without a version bump: still 1.0.0 ▼ security
- Tool “market_insights” was removed ▼ security
- HSTS header: fail → pass ▲ security
- The server rewrote its instructions, which are the text every model session reads security
- Tool “count_jobs” rewrote its description, which is the text the model reads security
- Tool “get_job” rewrote its description, which is the text the model reads security
- Tool “list_fields” rewrote its description, which is the text the model reads security
- Tool “search_docs” rewrote its description, which is the text the model reads security
- Tool “search_jobs” rewrote its description, which is the text the model reads security
- Schema quality: 369 → 238 ▲ functional
- Tool coverage: 71% → 83% ▲ functional
- The server now declares the “resources” capability functional
- First check of Capabilities: pass functional
- First check of Schema quality: 100 functional
- New resource “job_cards” functional
- New resource “job_cards_v1” functional
- New resource “job_cards_v2” functional
- New resource “job_cards_v3” functional
- New tool “market_breakdown” functional
- New tool “market_dimensions” functional
- New tool “market_lookup” functional
- New tool “salary_range” functional
- “get_job” added an optional parameter “view” cosmetic
- “count_jobs” reworded the description of “group_by” cosmetic
- “search_jobs” reworded the description of “limit” cosmetic
- “search_jobs” reworded the description of “descriptions” cosmetic
- 19 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “search_jobs” rewrote its description, which is the text the model reads security
- “search_jobs” added an optional parameter “view” cosmetic
- 18 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 16 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Schema quality: 183 → 344 ▼ functional
- Tool coverage: 38% → 70% ▲ functional
- Stability: unverified → 0.03 ▲ functional
- New tool “market_insights” functional
- 15 Oct 26 67
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 23 Oct 2026 · Probed https://api.headcountlabs.com/mcp/public
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=headcountlabs.com | CN=YE1,O=Let's Encrypt,C=US | 18 Oct 2026 | 16 Jan 2027 | ECDSA 256 | ECDSA-SHA384 | 6d7a14ef0219084a0035081589c6f5d5857 |
| SANs: *.headcountlabs.com, headcountlabs.com | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of api.headcountlabs.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| headcountlabs.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=86400 |
| x-content-type-options | nosniff |
| referrer-policy | strict-origin-when-cross-origin |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.headcountlabs.com/mcp/public | Verified | 200 | |
| http (plaintext) | http://api.headcountlabs.com/mcp/public | HTTPS enforced | 308 | https://api.headcountlabs.com/mcp/public |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
count_jobs Count jobs ~353
Count the current jobs matching the filters, without listing them. This is the live count: it reads the job database as it is now, so use it for "how many jobs" and "which employers are hiring" questions, and prefer its numbers over market_lookup and market_breakdown, which read a daily snapshot. No account needed. To answer "which companies are hiring for X" or "how are these jobs split by ...", pass group_by: employer (company works too), work_arrangement (remote, hybrid or in_person), title, state (US), city (metro works too), country or employment_type. The answer then also has group_by, groups (the top 25 values by number of matching jobs, each with value and jobs), groups_from_jobs (how many matching jobs were grouped, at most 1,000, taken in the default list order), groups_sampled (true when more jobs matched than were grouped, so the counts are from a sample) and groups_unknown_jobs (grouped jobs with no known value). A job with several locations or postings can count under more than one value. group_by employer keeps its own keys: employers (each with employer_name, company_id and jobs), employers_from_jobs, employers_sampled and employers_unknown_jobs. When a filter is too broad to count exactly in time, count is an estimate: the answer then has count_is_estimate: true, count_margin (the 95% range either side of count) and count_note.
| Name | Type | Req | Description |
|---|---|---|---|
| filters | object | – | – |
| group_by | string | – | Break the matching jobs down by employer (company), work_arrangement, title, state, city (metro), country or employment_type. |
No output schema declared.
No examples provided.
get_job Get job details ~231
Get a job by its job_id. No account needed. By default the answer has the same compact shape search_jobs returns (rank 1, job_id, job_ad, company_id, locations, work_arrangement, pay, posted_at, first_seen_at, posting_url, apply_url) with the whole description in job_ad.description, currentness, stale and last_checked_at (is it still open, and when was it last checked), and every linked posting in postings (status, last_fetched_at, application_check). Pass view: "full" for every field as the REST API returns it. Use fields to select top-level job properties; job_id is always included.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | – | – | Top-level job properties as a comma-separated string or field array; job_id is always included. |
| job_id | string | yes | – |
| view | string | – | compact (default): the same summary search_jobs returns, plus the whole description, whether the job is still open, when it was last checked, and the linked postings. full: every field of the job, as… |
No output schema declared.
No examples provided.
list_fields List job fields and filters ~116
Find the search_jobs filters and the job fields that match some keywords, with each one's type and a short description. Pass words such as ["pay", "remote"]; no keywords lists everything. kind is filter (pass it in search_jobs filters) or field (a property of each returned job; postings[].x is a property of each linked posting). A field state is an object whose state says whether the source published the value (known), Atlas derived it, the source omitted it, or extraction failed.
| Name | Type | Req | Description |
|---|---|---|---|
| keywords | array | – | – |
No output schema declared.
No examples provided.
market_breakdown Rank a job market dimension ~429
Rank the values of one dimension (by: title, state, metro, city, company, seniority, employment_type or remote) by jobs, pay or another figure, over all jobs or inside one filter, such as which states pay Software Engineers the most (by=state, title=Software Engineer, sort=pay_median). Answers come from a daily snapshot of open US jobs and give their as_of date; for current job counts or the employers hiring right now, count_jobs is the live source. Cells with fewer than 30 jobs are left out. No account needed.
| Name | Type | Req | Description |
|---|---|---|---|
| by | string | – | breakdown only: what to rank (title, state, metro, city, company, seniority, employment_type or remote; place means state). |
| company | string | – | An employer name (lookup and breakdown). |
| employment_type | string | – | full_time, part_time, contract, temporary, internship or per_diem (lookup and breakdown). |
| limit | integer | – | breakdown rows or dimension values to return. |
| place | string | – | US (the default), a state code such as TX, a state name, a metro area such as "Austin-Round Rock-Georgetown, TX" or a city such as "Austin, TX" (cities and metros only for lookup, breakdown and negot… |
| remote | string | – | remote, hybrid or in_person (lookup and breakdown). |
| role | string | – | A standard job title such as "Registered Nurse" or "Software Engineer"; leave out for every job. Same as title. |
| seniority | string | – | intern, entry, senior, lead, manager, director or executive, read from the job title (lookup, breakdown, negotiate). |
| sort | string | – | breakdown only: jobs (the default), pay_median, pay_p75, pay_p90, share_with_pay, remote_share, new_7_days or new_30_days. |
| title | string | – | A standard job title; lookup, breakdown and negotiate match more than 6,000 titles. Same as role. |
No output schema declared.
No examples provided.
market_dimensions List market dimensions ~101
List what market_lookup, market_breakdown and salary_range accept: the dimensions, how many values each has and the metrics; with dimension (and optionally q) the values of that dimension, such as the metro names. No account needed.
| Name | Type | Req | Description |
|---|---|---|---|
| dimension | string | – | dimensions only: list the values of this dimension. |
| limit | integer | – | breakdown rows or dimension values to return. |
| q | string | – | dimensions only: search the values of dimension. |
No output schema declared.
No examples provided.
market_lookup Look up a job market figure ~373
Job count, pay percentiles, share of jobs showing pay, remote/hybrid/in-person shares, posting age, new postings or top employers for up to two of title, place, company, seniority, employment_type and remote, such as the pay range for Registered Nurses in Texas. Leave metric out for every figure. Answers come from a daily snapshot of open US jobs and give their as_of date; for current job counts or the employers hiring right now, count_jobs is the live source. Cells with fewer than 30 jobs are left out. No account needed.
| Name | Type | Req | Description |
|---|---|---|---|
| company | string | – | An employer name (lookup and breakdown). |
| employment_type | string | – | full_time, part_time, contract, temporary, internship or per_diem (lookup and breakdown). |
| metric | string | – | lookup only: job_count, pay, pay_share, work_arrangement, posting_age, new_postings or top_employers; leave out for all of them. |
| place | string | – | US (the default), a state code such as TX, a state name, a metro area such as "Austin-Round Rock-Georgetown, TX" or a city such as "Austin, TX" (cities and metros only for lookup, breakdown and negot… |
| remote | string | – | remote, hybrid or in_person (lookup and breakdown). |
| role | string | – | A standard job title such as "Registered Nurse" or "Software Engineer"; leave out for every job. Same as title. |
| seniority | string | – | intern, entry, senior, lead, manager, director or executive, read from the job title (lookup, breakdown, negotiate). |
| title | string | – | A standard job title; lookup, breakdown and negotiate match more than 6,000 titles. Same as role. |
No output schema declared.
No examples provided.
salary_range Salary range for a role ~261
What salary to ask for: for a title, a place (default US) and an optional seniority, the 25th, 50th, 75th and 90th percentile of posted pay, the sample size and a plain recommendation. Answers come from a daily snapshot of open US jobs and give their as_of date; for current job counts or the employers hiring right now, count_jobs is the live source. Cells with fewer than 30 jobs are left out. No account needed.
| Name | Type | Req | Description |
|---|---|---|---|
| place | string | – | US (the default), a state code such as TX, a state name, a metro area such as "Austin-Round Rock-Georgetown, TX" or a city such as "Austin, TX" (cities and metros only for lookup, breakdown and negot… |
| role | string | – | A standard job title such as "Registered Nurse" or "Software Engineer"; leave out for every job. Same as title. |
| seniority | string | – | intern, entry, senior, lead, manager, director or executive, read from the job title (lookup, breakdown, negotiate). |
| title | string | – | A standard job title; lookup, breakdown and negotiate match more than 6,000 titles. Same as role. |
No output schema declared.
No examples provided.
search_docs Search the Headcount Labs docs ~64
Ask a question about Headcount Labs (filters, limits, MCP setup, errors) and get the best-matching sections of the headcountlabs.com docs, each with its URL. Works without an account.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| question | string | yes | – |
No output schema declared.
No examples provided.
search_jobs Search jobs ~578
Search current job postings by keyword, title, company, place, pay, date and more. No account needed. Call list_fields to find the filter names. Country and employment_type accept comma-separated values or arrays and match any listed value. Pages return up to 50 jobs (limit, default 10), or up to 10 jobs when descriptions is "full"; a larger limit is refused. Pass next_cursor as cursor to see the next page. One search shows up to 250 jobs in total (the last page is shortened to fit), so narrow it with filters to find the right ones; count_jobs tells you how many jobs match without listing them. sort is relevance (best match) or updated (most recently updated). By default each job is a compact summary: rank, job_id, job_ad (the employer-written title, employer and a 200-character snippet of the description), company_id, locations, work_arrangement, pay (min, max, currency, period), posted_at, first_seen_at, posting_url and apply_url. For every field of each job pass view: "full" (descriptions cut to 400 characters, or descriptions: "full" for the whole text), name the top-level properties you need in fields (job_id is always included), or call get_job for one job. You choose how much description each job gets: descriptions: "snippet" (the default) gives a short preview and allows up to 50 jobs per page; descriptions: "full" gives the whole text but allows only 10 jobs per page. To read the full text of just a few jobs, search with snippets, then call get_job on the ones you want. Leave description out of fields to drop it entirely. For job titles, title matches the words as one phrase in that order, so "senior software engineer" misses "Software Engineer, Senior"; title_advanced matches words in any order with AND, OR and NOT, for example senior AND ("software engineer" OR "software developer"), and usually finds more.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | The next_cursor from the previous result, to see the next page. |
| descriptions | string | – | snippet (default): a short preview of each description, up to 50 jobs per page. full: the whole text, up to 10 jobs per page. |
| fields | – | – | Top-level job properties as a comma-separated string or field array; job_id is always included. |
| filters | object | – | – |
| limit | integer | – | Jobs per page, 1-50 (1-10 when descriptions is "full"). Default 10. |
| sort | string | – | – |
| view | string | – | compact (default): one short summary per job. full: every field of every job, as the REST API returns it. |
No output schema declared.
No examples provided.
How do I install the Headcount Labs MCP server?
Headcount Labs is a hosted endpoint at https://api.headcountlabs.com/mcp/public, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · api.headcountlabs.com
claude mcp add --transport http com-headcountlabs-jobs 'https://api.headcountlabs.com/mcp/public'
What is the Headcount Labs MCP server?
Headcount Labs is an MCP server listed in the public MCP registry as com.headcountlabs/jobs. Job postings search: find, count and read open jobs from employer career sites, with pay and links. This page covers its hosted endpoint (https://api.headcountlabs.com/mcp/public).
Is the Headcount Labs MCP server safe to use?
Headcount Labs scores 76 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Headcount Labs MCP server expose?
Headcount Labs exposes 9 tools: search_docs, search_jobs, get_job, count_jobs, market_lookup, and 4 more. Their descriptions and schemas cost roughly 2,506 tokens of context every time the server is loaded.
Does the Headcount Labs MCP server require authentication?
No. We connected to Headcount Labs without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Headcount Labs MCP server still maintained?
Headcount Labs is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.