Reqbeat Hiring Signals

com.reqbeat由 reqbeat.com 發布官方發布者v1.1.4更新於 Oct 24, 2026

Find companies hiring for a role and geo, qualify them, and watch them for changes.

已驗證Streamable HTTP可網頁執行效率與工作流資料與分析商業與電商

概覽

AI 產生的概覽

遠端招募訊號伺服器,讓助理找出某職務與地區正在招募的公司、進行資格篩選,並持續監控其變化。

可以做什麼
依職務、地區或產業找出正在招募的公司,並用名稱或網域查詢公司以取得後續呼叫所需的識別碼。搜尋個別開放職缺並讀取職缺詳情,或取得某公司的目前開缺需求。用脈動指標評估招募動能,並取得某公司一份有界的前置行動簡報。追蹤需求開啟、再次觀測、重新張貼或關閉的變更流。註冊 webhook,建立、列出與取消公司監控,並回報轉換結果。
適用情境
適用於招募、業務開發或市場研究情境:助理需要找出有活躍招募需求的公司,在花費較昂貴的查詢前低成本篩選,並在其招募需求變動時收到通知。
執行需求
遠端 streamable-http 端點,無需在本機安裝。呼叫工具需要 X-API-Key 標頭;沒有它呼叫只會回傳註冊連結而非資料。供應商提供免費方案金鑰。需要能連線至該託管端點的網路。
安裝前請注意
X-API-Key 是密鑰,應避免放入共用設定。呼叫以單位計費,包括每個變更事件與每個監控,可能產生費用。註冊 webhook 會將招募事件資料傳送到你提供的網址,write_outcome 會在你的帳戶附加結果標籤。資料僅涵蓋滾動 30 天視窗且不含 LinkedIn,不提供聯絡人或個人資料。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Reqbeat Hiring Signals,將其新增到工作區。
  2. 連接 X-API-Key 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.reqbeat%2Fhiring-signals/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "reqbeat-hiring-signals": {
      "type": "http",
      "url": "https://mcp.reqbeat.com/mcp",
      "headers": {
        "X-API-Key": "<YOUR_API_KEY>"
      }
    }
  }
}

README

[Reqbeat]

Reqbeat Hiring Signals

https://reqbeat.com/mcp/ · Docs · Pricing · Status

Find companies hiring for a role and geo, qualify them, and watch them for changes.

Remote server, streamable-http. Nothing to run locally, nothing to build — the endpoint below is the whole install.

Try it in 30 seconds (no account)

json
{  "mcpServers": {    "com-reqbeat-hiring-signals": {      "url": "https://mcp.reqbeat.com/mcp"    }  }}

Then ask your agent: "Which companies are hiring backend engineers in the UK right now?"

No header means demo mode: a shared credential, a smaller page and a per-IP limit. When it runs out you get a sign-up link.

Full access (your key)

Get a key at https://reqbeat.com — free tier, no card — and send it as X-API-Key on the same endpoint. There is one server; the header is what picks the tier.

json
{  "mcpServers": {    "com-reqbeat-hiring-signals": {      "url": "https://mcp.reqbeat.com/mcp",      "headers": {        "X-API-Key": "YOUR_REQBEAT_API_KEY"      }    }  }}

Claude Code

bash
claude mcp add --transport http com-reqbeat-hiring-signals https://mcp.reqbeat.com/mcp \  --header "X-API-Key: YOUR_REQBEAT_API_KEY"

Cursor

Paste this into your browser's address bar — Cursor takes the config on the link:

cursor://anysphere.cursor-deeplink/mcp/install?name=com-reqbeat-hiring-signals&config=eyJ1cmwiOiJodHRwczovL21jcC5yZXFiZWF0LmNvbS9tY3AiLCJoZWFkZXJzIjp7IlgtQVBJLUtleSI6IllPVVJfUkVRQkVBVF9BUElfS0VZIn19

Tools (14)

ToolWhat it does
is_hiringWHEN an agent already holds a company and needs to qualify it -- the cheap gate before spending a richer call. ATS/board-only and freshness-floored. Takes the integer company_id …
get_open_reqsThe company's current active reqs, deduped across boards -- ATS/board-only, freshness-floored. function must be a function id (as seen in prior results); a plain role name like …
hiring_pulseOne number set for one company: how many reqs it opened in the last 30 days, a velocity ratio of that against the 30 days before it, a direction of up / flat / down between …
who_is_hiring_forWHEN an agent needs to FIND the companies worth working -- the sourcing step, before it knows which companies exist. Reverse who's-hiring-for {role, geo} search: companies with …
search_jobsFlat, role-granular job search -- the individual open roles across companies matching role (function) / geo (country) / since, one row per logical req (each with its own …
get_roleOne open role's detail, addressed by the company_id + req_key pair every search_jobs row already carries -- the follow-up call for a role you hold an identifier for, instead …
pre_action_briefEverything an agent needs before acting on one company, in one bounded round-trip instead of five: the hiring pulse, its top open reqs deduped across boards, …
get_changesThe change feed, not a search: ledger events -- a req opened, re-observed, reposted or closed -- with event_seq > since, ascending, plus next_cursor. Replay with next_cursor …
find_companyWHEN you hold a company's website or name but not the company_id every company-scoped tool takes (is_hiring, get_open_reqs, hiring_pulse, pre_action_brief, …
register_webhookRegister the delivery target a watch fires to, and get back the webhook_endpoint_id watch_company needs -- call this first if you do not already hold one. Idempotent: …
watch_companySubscribe to a company's hiring events on a registered webhook -- webhook_endpoint_id must belong to the same customer as the authenticated key. Meters one watch unit. A free …
list_watchesWHEN you need to see what you are subscribed to -- before adding a watch, or to find the id cancel_watch takes. Returns your live watches newest first, cancelled ones …
cancel_watchWHEN a watch should stop firing. Takes the id watch_company returned (or list_watches lists): {"watch_id": 42} -> {"id": 42, "canceled": true}. Idempotent -- cancelling a …
write_outcomeWrite back a conversion outcome for company_id -- the label-flywheel substrate. Appends to outcome_labels scoped to the caller's own customer. Plane session only: …

Summaries are trimmed for reading. Your client gets the full descriptions live from tools/list, and this table is re-rendered from the same document.

What it is not

A rolling 30-day window over open requisitions, not multi-year history. No contact data and no people — this plane sells hiring demand, not person records.

Links

Generated, not hand-written

Every file here is rendered from the live server.json at https://mcp.reqbeat.com/server.json, and pushed by static-site/deploy/mcp_server_repo_publish.py in reqbeat.git. Edit the renderer, never these files — a hand-edit is replaced on the next publish, silently.

來源:README.md,提交 0dea954

工具

15

is_hiring

Is this company hiring?

WHEN an agent already holds a company and needs to qualify it -- the cheap gate before spending a richer call. LinkedIn-excluded (ATS tenants plus public job boards and aggregators) and freshness-floored. Takes the integer `company_id` from an earlier result, not a company name or domain. company_id=1234 -> is_hiring true, open_req_count 7, coverage_status "ats_direct_hit". company_id=5678 -> is_hiring false with coverage_status "no_ats_signal" -- that company has no ATS coverage yet, which is not evidence it is quiet, so do not score it as a negative. No key yet? Pass `plane_api_key` as an empty string and the call answers with a signup link instead of an auth error. To find companies in the first place, use `who_is_hiring_for`.

輸入參數company_id必填plane_api_keyidempotency_key

get_open_reqs

Open requisitions for a company

The company's current active reqs, deduped across boards -- LinkedIn-excluded: ATS tenants plus public job boards and aggregators; each row's `boards` names its source. Freshness-floored. Each row's `first_seen` is our first observation of the req, not the employer's posting date; `source_posted_at` is the date the source itself published, null when it gave none. `function` is a function name (a prior result's `function_name`, like 'Software & IT') or a function id (its `function`); anything else, like 'engineering', is rejected with an explicit error that lists the names, rather than an empty result. `limit` is bounded: an oversized page is rejected rather than truncated.

輸入參數limitcountryfunctioncompany_id必填plane_api_keyidempotency_key

hiring_pulse

Hiring velocity and direction

One number set for one company: how many reqs it opened in the last 30 days, a `velocity` ratio of that against the 30 days before it, a `direction` of up / flat / down between the two, a surge flag, and `momentum` -- postings published per week, a flow rather than a stock. Use it to rank or score a company you already hold a `company_id` for. Freshness is controlled by `max_age` (seconds); a company with no ATS/board data yet returns `{job_id, status: "crawling"}` instead of a body -- poll again later, do not read it as "not hiring". For the whole picture in one round-trip use `pre_action_brief`; for a cheap yes/no use `is_hiring`.

輸入參數max_agecompany_id必填plane_api_keyidempotency_key

who_is_hiring_for

Find companies hiring for a role

WHEN an agent needs to FIND the companies worth working -- the sourcing step, before it knows which companies exist. Reverse who's-hiring-for {title, geo} search: companies with active reqs matching `q`/`geo`/`since`, deduped by company, keyset-paginated via `cursor`. `q` is free text matched against the posting title, not an id; plurals and other inflections match, so "backend engineers" is the same search. `geo` is resolved to a stored country before matching; an unresolvable one is an explicit error, never a quietly partial page. `limit` is bounded -- page through the full set with `cursor` instead of raising it. Billed per company returned (~0.10 USD each) -- an empty result bills nothing. q="backend engineer", geo="USA" -> the companies with matching active reqs, each with its pulse and its matched reqs. geo="Atlantis" -> an explicit unresolvable-country error rather than an empty page. No key yet? Pass `plane_api_key` as an empty string and the call answers with a signup link instead of rows; on the hosted HTTP endpoint the key it mints finishes this exact search. Already holding a company_id and only need a yes/no? Use `is_hiring`.

輸入參數qgeolimitsincecursorsource_typeplane_api_keyidempotency_keyexclude_agencies

search_jobs

Search open roles

Flat, role-granular job search -- the individual open roles across companies matching `function` / `geo` (country) / `since`, one row per logical req (each with its own `company_id` + `req_key`), LinkedIn-excluded (ATS tenants plus public job boards and aggregators; each row's `board` names its source) + freshness-floored. `since` filters on `first_seen`, our first observation of the req (not the employer's posting date); each row's `source_posted_at` is the date the source itself published, null when it gave none. Keyset-paginated via the opaque `cursor` (a prior call's `next_cursor`). Use `who_is_hiring_for` for the company-granular reverse view. `function` is a function name (a prior result's `function_name`, like 'Software & IT') or a function id (its `function`); anything else, like 'engineering', is rejected with an explicit error that lists the names, rather than an empty result -- pass plain language as `q` instead, which searches the posting's own title, expanded semantically to nearby titles, and reports each row's `relevance` (0-1). `exclude_employer_types` (e.g. ['staffing']) drops roles whose posting is classified as that employer type -- 'direct', 'staffing', 'consultancy' or 'unknown'; unclassified roles are kept unless 'unknown' is listed. `q` is independent of `function`: pass both to search titles within one function. `sort` is 'relevance' (the default with a `q`) or 'recency'; omit both and the page keeps its stable default order. `limit` is bounded: an oversized page is rejected rather than truncated, so page through the full set with `cursor` instead of raising `limit`. No key yet? The call answers with a signup link instead of rows.

輸入參數qgeosortlimitsincecursorfunctionsource_typeplane_api_keyidempotency_keyexclude_agenciesexclude_employer_types

get_role

Get one role

One open role's detail, addressed by the `company_id` + `req_key` pair every `search_jobs` row already carries -- the follow-up call for a role you hold an identifier for, instead of re-pulling the whole company with `get_open_reqs`. Scoped exactly as `search_jobs` is: LinkedIn-excluded (ATS tenants plus public job boards and aggregators) and freshness-floored. The body adds `raw_title` (the posting's own title) and `boards`, the full deduped list of boards reporting this req. A role that does not exist, is closed, or has not reached the freshness floor is an explicit error, never an empty success -- and it is not billed. No key yet? The call answers with a signup link instead of the role.

輸入參數req_key必填company_id必填plane_api_keyidempotency_key

find_qualified_reqs

Find live roles matching an ICP

WHEN an agent already knows its ideal customer profile and wants the matching open roles as rows it can act on: several countries, an industry, a headcount band and title keywords in ONE call, instead of a search followed by a lookup per company. `criteria` takes up to three groups -- `company` (country, industry, industry_terms, headcount_band, company_kind), `req` (q, q_excludes, seniority_level, function, skills, remote_type, location) and `event` (company_id, board, source_type, ats_vendor, country) -- AND across fields, OR within one. A field outside that list is an explicit error, never quietly dropped. criteria={"company": {"country": ["United States", "Germany"]}, "req": {"q": ["backend engineer"]}} -> live backend roles in both countries, each row naming the company and carrying the posting URL, seniority, skills and declared or estimated yearly pay. `salary_min_usd` / `salary_max_usd` bracket that pay. Agencies and expired postings are excluded by default. Page with `cursor` (the previous `next_cursor`); `limit` is bounded. Billed per row returned, and an empty page bills nothing. Needs an API key: without one the answer is a signup link. For a first look at who is hiring before you have a key, use `who_is_hiring_for`.

輸入參數limitsincecursorcriteria必填live_onlyplane_api_keysalary_max_usdsalary_min_usdidempotency_keyexclude_agencies

pre_action_brief

Pre-action brief for a company

Everything an agent needs before acting on one company, in one bounded round-trip instead of five: the hiring pulse, its top open reqs deduped across boards, first-hire-by-function events, hardest-to-fill (reposted) reqs and ATS-vendor migrations, pre-joined and each section capped so the payload stays compact. Use it right before writing outreach or a qualification note for a `company_id` you already hold. Honors `max_age` (seconds); a company with no ATS/board data returns `{job_id, status: "crawling"}`. If you only need the velocity number, `hiring_pulse` is cheaper.

輸入參數max_agecompany_id必填plane_api_keyidempotency_key

get_changes

Change feed since cursor

The change feed, not a search: ledger events -- a req opened, re-observed, reposted or closed -- with `event_seq > since`, ascending, plus `next_cursor`. Replay with `next_cursor` instead of polling or re-searching; an empty page bills nothing and one `change` unit is metered per event returned. Filter by `company_id`, or by one exact `event_type`. `limit` is bounded -- page with the cursor rather than raising it. Free-tier callers see events at the same freshness floor as every other free read. This is the pull-based twin of `watch_company` (push via webhook).

輸入參數limitsince必填company_idevent_typeplane_api_keyidempotency_key

find_company

Find company by domain or name

WHEN you hold a company's website or name but not the `company_id` every company-scoped tool takes (`is_hiring`, `get_open_reqs`, `hiring_pulse`, `pre_action_brief`, `watch_company`). Pass exactly one of `domain` or `name`; both or neither is an error naming that rule. `domain` takes a bare host or a full URL and matches exactly ({"domain": "https://www.stripe.com/jobs"} -> the companies at `stripe.com`); `name` returns up to five candidates, each with a `match_confidence` -- 1.0 for an exact name, 0.8 for a match once legal suffixes are dropped. Each company carries `company_id`, `company_name`, `company_domain`, `country_code` and `coverage_status`, and no hiring signal: ask `is_hiring` for that. Nothing matching is an empty `companies` list, never an error. Never billed. No key yet? The call answers with a signup link instead of companies.

輸入參數namedomainplane_api_key

register_webhook

Register a webhook endpoint

Register the delivery target a watch fires to, and get back the `webhook_endpoint_id` `watch_company` needs -- call this first if you do not already hold one. Idempotent: registering the same `url` twice returns the same id, so retrying is safe and never leaves you with two endpoints. `secret` is optional; supply one to verify the `X-Reqbeat-Signature` on delivered payloads, omit it and one is generated and returned once in `secret` (never again after this call). Registration itself is free -- the `watch_company` call that follows is what bills.

輸入參數url必填secretplane_api_key

watch_company

Watch a company

Subscribe to a company's hiring events on a registered webhook -- `webhook_endpoint_id` must belong to the same customer as the authenticated key. Meters one `watch` unit. `event_types` names which events fire it, at least one of: `opened` (a req seen for the first time), `reobserved` (a known req seen again on a later day), `reposted` (a req that came back after it was gone), `closed` (a req verified gone from its source). Anything else is refused and creates nothing: a watch on a type that never fires would be billed and silent. A free key holds a limited number of watches at once; the one past that is refused with the same 402 the REST route raises, and cancelling a watch returns the slot.

輸入參數company_id必填event_types必填plane_api_keyidempotency_keywebhook_endpoint_id必填

list_watches

List active watches

WHEN you need to see what you are subscribed to -- before adding a watch, or to find the `id` `cancel_watch` takes. Returns your live watches newest first, cancelled ones excluded: {} -> {"watches": [{"id": ..., "company_id": ..., "event_types": [...], "webhook_endpoint_id": ..., "status": "firing", ...}]}. Each also reports its heartbeat -- `last_fired_at`, `fires_last_7d`, `fires_last_30d`, `fires_last_hour` against `max_fires_per_hour`, `rate_limited`, and a one-word `status` -- so a watch silent because nobody is hiring reads differently from one that can never match or whose endpoint is failing. Never billed. Needs your key: a blank one returns a signup link.

輸入參數plane_api_key

cancel_watch

Cancel a watch

WHEN a watch should stop firing. Takes the `id` `watch_company` returned (or `list_watches` lists): {"watch_id": 42} -> {"id": 42, "canceled": true}. Idempotent -- cancelling a watch you already cancelled succeeds again. An id that is not one of your watches is an error, identical whether it belongs to someone else or does not exist. Frees the slot a free key's watch limit counts. Never billed. Needs your key: a blank one returns a signup link.

輸入參數watch_id必填plane_api_key

write_outcome

Record a conversion outcome

WHEN a company you reached through a signal converts -- a reply, a meeting, a closed deal -- report it back. Takes the `company_id`, a short `outcome` label of your choosing (e.g. "meeting_booked"), the `observed_at` time it happened and, optionally, the `req_key` of the role that prompted the outreach: {"company_id": 1234, "outcome": "meeting_booked", "observed_at": "2026-10-01T09:00:00Z"} -> {"id": 87}. Each call adds one record, visible only to your own account; nothing is overwritten, so report a later stage as a new outcome. Never billed. Needs your key: a blank one returns a signup link.

輸入參數outcome必填req_keycompany_id必填observed_at必填plane_api_key

版本歷史

3
  1. v1.1.4最新Oct 9, 2026
  2. v1.1.3Oct 6, 2026
  3. v1.1.2Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分