Watch company job boards for new, closed, and reposted postings, with 30 day hiring velocity.
An MCP server for the Mamba Labs Account Hiring Watch actor on Apify. Send a list of company domains. Each run reads every company's own job board and returns only what changed since the last run: new, closed, and reposted postings, with the full job description, a stable posting key, and 30 day hiring velocity per company.
Watch a list of company domains and get back only what changed on their job boards since the last run with the same watch name: new, closed, and reposted postings, read live from 17 job boards including Greenhouse, Lever, Ashby, and Workday. Each change row carries the full job description, a stable posting key, and the board it came from; each company also gets a summary row with open postings and 30 day hiring velocity. The first run for a watch sets the baseline, and its rows are marked is_backfill and never charged. Optional signed webhook delivery. A run that does not succeed is returned as an error with its run ID. Read-only on the boards; requires an APIFY_TOKEN and consumes Apify credits per change returned.
All of the work runs on Apify. This package is a thin client that starts the actor run, waits for it, and hands back the dataset rows.
You need Node.js 18 or newer and an Apify account with an API token.
Add this to your Claude Desktop config (claude_desktop_config.json), Cursor, or any MCP client:
{
"mcpServers": {
"mamba-account-hiring-watch": {
"command": "npx",
"args": [
"-y",
"@mambalabsdev/mcp-account-hiring-watch"
],
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}
Restart the client. The watch_account_hiring tool appears.
APIFY_TOKEN. The server lists its tool without a token; a call needs one.watch_account_hiring. One tool. Example arguments:
{
"domains": ["stripe.com", "ramp.com", "vercel.com"],
"watch_name": "target-accounts",
"keyword_categories": ["GTM"]
}
Every buyer facing input of the live actor, unchanged. Omitted inputs take the actor's own defaults.
| Input | Type | Required | Description |
|---|---|---|---|
domains | array | yes | Company website domains to watch, for example stripe.com. The watch reads each company's own job board. Up to 2,000 per run. |
watch_name | string | no | Keeps separate watch lists apart. Use one name per list or client. Changing the name starts a new watch, and its first run sets the baseline. Default default. |
keyword_categories | array | no | Only changes to postings whose title matches these role categories are returned and charged. All returns every posting change. Every posting still counts toward hiring velocity. Default ["All"]. |
custom_keywords | array | no | Extra title keywords, matched on whole words. Prefix with T1: for the strongest tier or T3: for the weakest; no prefix is tier 2. Adding any keyword also adds the Custom category. |
board_hints | array | no | Point a domain at its job board when the watch cannot find it, as domain=provider:slug, for example acme.com=greenhouse:acmeinc or acme.com=workday:acme.wd5/External. Providers: greenhouse, lever, ashby, workable, smartrecruiters, personio, recruitee, workday, rippling. |
first_run_mode | string | no | What a domain's first run returns. recent returns postings the board dates inside the last N days, baseline_only returns the summary row, all_open returns every open posting. First run rows are marked is_backfill and never charged. Default recent. |
first_run_recent_days | string | no | With first_run_mode recent: how many days back counts as recent. 1 to 30. Default 7. |
closed_after_misses | string | no | A posting closes after this many complete board reads without it. A partial read never counts. 1 to 5. Default 2. |
repost_window_days | string | no | A closed posting that comes back inside this many days is reported as reposted, not new. 7 to 60. Default 30. |
include_job_description | string | no | Adds the full description text to new and reposted rows. Closed rows carry no description. Default true. |
description_max_chars | string | no | Longest description kept per row. job_description_chars always reports the full length. 500 to 100000. Default 20000. |
webhook_url | string | no | Optional HTTPS endpoint. Changes are sent as signed Standard Webhooks requests, and a change is charged only after your endpoint answers 2xx. |
webhook_secret | string | no | Required with webhook_url. Signs each request (HMAC SHA256). A whsec_ prefixed secret is base64 decoded per the Standard Webhooks spec. |
webhook_batch_mode | string | no | batch sends up to 50 changes per request, grouped by company. per_change sends one request per change, for tools where one request is one row (Clay table webhooks, Zapier). Default batch. |
state_store | string | no | Optional key value store that holds the watch state. Leave empty to use the store account-hiring-watch-state in your own Apify account. |
max_domains | string | no | Domains past this number are skipped. 1 to 2000. Default 500. |
max_charge_usd | string | no | Optional. When the next change would take this run's charges over this amount, the remaining changes are held and delivered first on the next run. |
Pay per event on Apify, billed to your Apify account. Prices in USD.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
posting_change, per change returned (new, closed, or reposted) | $0.01 | $0.0095 | $0.009 | $0.0085 |
apify-actor-start, per run start | $0.002 | $0.002 | $0.002 | $0.002 |
First run rows (is_backfill) and rows from a board the run could not confirm are never charged. With a webhook set, a change is charged only after your endpoint answers 2xx.
The actor needs no provider key. It reads public job board APIs and holds no key of its own. A webhook secret, if you set one, is yours and is stored by Apify as a secret input.
apify.com/mambalabs/account-hiring-watch
MIT. See LICENSE.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y @mambalabsdev/mcp-account-hiring-watchMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"com-mambabuilt-mcp-account-hiring-watch": {
"command": "npx",
"args": [
"-y",
"@mambalabsdev/mcp-account-hiring-watch"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup reference@mambalabsdev/mcp-account-hiring-watchnpmcom.mambabuilt/mcp-account-hiring-watch works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.