Headcount Labs

com.headcountlabs由 headcountlabs.com 发布官方发布者v1.2.0更新于 Oct 26, 2026

Job postings search: find, count and read open jobs from employer career sites, with pay and links.

已验证Streamable HTTP可网页运行网页搜索与抓取金融数据与分析

概览

AI 生成的概览

托管式 MCP 服务器,用于搜索、统计和读取雇主招聘网站上的在招职位,附带薪资数据与申请链接。

可以做什么
  • 按关键词、职位名称、公司、地点、薪资、日期和工作方式搜索、统计并读取职位,附原始招聘链接
  • 查询市场数据:薪资分位数、远程/混合办公占比、主要雇主,以及按州、都会区、城市或资历的排名
  • 根据美国在招职位的每日快照,给出某职位、地点与资历的薪资建议
  • 查找可用的筛选条件、职位字段与市场维度,并检索服务商自身的文档
适用场景
适合需要实时劳动力市场答案的场景:符合某组筛选条件的职位有多少、哪些雇主在招人、某职位在某地薪资如何,或需要一份带申请链接的在招职位清单。
运行要求
远程 Streamable HTTP 端点,无需安装。公开端点无需账号;登录端点使用 OAuth 2.1 或以 bearer token 形式提供的 API 密钥。不支持远程服务器的客户端可运行 npx mcp-remote。
安装前请注意
搜索筛选条件和职位 ID 会发送到服务商 API,服务商仅保留计费所需的用量计数。公开端点免费;登录端点每月免费 10 万条记录,之后按每千条记录计费,且可开启超额计费。职位广告文本由雇主撰写,会被标记为不可信内容。工具为只读,不能投递职位或联系雇主。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Headcount Labs,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/com.headcountlabs%2Fjobs/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "headcount-labs": {
      "type": "http",
      "url": "https://api.headcountlabs.com/mcp/public"
    }
  }
}

README

[Headcount Labs]

Headcount 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.

EndpointSign-inTools
https://api.headcountlabs.com/mcp/publicNone6 read-only tools; one search shows up to 250 matching jobs, 50 per page
https://api.headcountlabs.com/mcpOAuth 2.1 (PKCE, dynamic client registration) or an API key as a bearer token26 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:

bash
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:

bash
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):

bash
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:

bash
codex mcp add headcountlabs --url https://api.headcountlabs.com/mcpcodex 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.

ToolWhat it doesUses records
search_jobsFinds 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_jobsCounts the jobs that match a set of filters, optionally grouped by employer.No
get_jobReads one job with every linked posting and its source links.Yes
market_insightsPay, top employers, remote share, metros, jobs by state and more, from a dated snapshot.No
list_fieldsFinds the filters and job fields that match your words, such as "pay" or "remote".No
search_docsReturns the best-matching sections of the Headcount Labs docs.No
read_filePages through a file that search_jobs delivered, for 24 hours.No
verify_jobsRe-opens a random sample of original postings and checks link, status, title, employer, location and pay.Sampled jobs
compare_sourcesMatches your own job list against Headcount Labs, row by row.Matched jobs
search_jobs_json, search_jobs_dslThe same search with a JSON body or Elasticsearch-style clauses.Yes
list_job_changesNew, changed and closed jobs since a time or cursor.Yes
list_companies, search_companies, get_company, list_company_jobsThe 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_fileAsynchronous exports of up to 100,000 jobs.Completed exports
get_usage, get_overage, get_usage_requests, get_usage_analyticsYour plan, records used and left, overage status and request reports.No
set_confirmation_level, set_overageHow 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_jobs returns a short summary of each job: rank, job_id, the employer-written title, employer and a 200-character snippet (in job_ad), locations, work arrangement, pay with its period, dates and the posting and apply links. Pass view: "full", name the fields you need, or call get_job for 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_content notice, 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_arguments with each problem's field, what is wrong, the accepted values or the nearest valid name (did_you_mean), and a working example. Rate-limit and overload errors give retry_after_seconds.
  • Paging. Signed in, limit is the page size (10 to 100, default 50) and max_results is the most results one search returns across all its pages (10 to 1,000, default 250). They apply to search_jobs, search_jobs_json, search_jobs_dsl, list_company_jobs, list_companies, search_companies and list_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 returns next_cursor: null and 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_jobs also 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.

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.

来源:README.md,提交 a15502d

工具

9

search_docs

Search the Headcount Labs docs

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.

输入参数limitquestion必填

search_jobs

Search jobs

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.

输入参数sortviewlimitcursorfieldsfiltersdescriptions

get_job

Get job details

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.

输入参数viewfieldsjob_id必填

count_jobs

Count jobs

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.

输入参数filtersgroup_by

market_lookup

Look up a job market figure

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.

输入参数roleplacetitlemetricremotecompanyseniorityemployment_type

market_breakdown

Rank a job market dimension

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.

输入参数byrolesortlimitplacetitleremotecompanyseniorityemployment_type

salary_range

Salary range for a role

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.

输入参数roleplacetitleseniority

market_dimensions

List market dimensions

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.

输入参数qlimitdimension

list_fields

List job fields and filters

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.

输入参数keywords

版本历史

2
  1. v1.2.0最新Oct 18, 2026
  2. v1.1.0Oct 15, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分