About mcp-ats-jobs-feed
mcp-ats-jobs-feed is an MCP server for collecting open roles from company career boards, for recruiting and sales research. It discovers boards across 17 ATS platforms and returns filterable job rows through an Apify actor.
Key features
- 01Discover boards across 17 ATS platforms
- 02Return one row per open job
- 03Filter by title, location, department, and date
- 04Track newly posted jobs between runs
- 05Include job descriptions on request
Use cases
- 01Compare open roles across target companies
- 02Find remote jobs posted recently
- 03Monitor companies for newly listed jobs
MCP support
Exposes the list_company_ats_jobs tool to MCP clients. It starts an Apify actor run and returns its dataset rows.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @mambalabsdev/mcp-ats-jobs-feedAPIFY_TOKENSecretApify API token from https://console.apify.com/account/integrationsLocal servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
1Saved tool list · updated 1w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| only_new | enum | No | true returns only jobs that were not on the board at the last run with the same state key. The first run returns every matching job and records the boardfalse | true |
| companies | array | No | One per line: a company domain (stripe.com), a homepage or careers page URL, or a job board URL (https://jobs.lever.co/palantir, https://job-boards.greenhouse.io/stripe, https://jobs.ashbyhq.com/linear, https://workday.wd5.myworkdayjobs.com/Workday). To tie a board URL to a domain, join them with an equals sign: gusto.com=https://job-boards.greenhouse.io/gusto. Up to 500 per run |
| locations | array | No | Optional. Return only jobs whose location text contains one of these, ignoring case, for example new york, london, germany. The word remote matches remote jobs |
| platforms | array | No | Optional. Limit board discovery to these: greenhouse, lever, ashby, workday, workable, smartrecruiters, personio, recruitee, rippling, oracle_hcm, successfactors, teamtailor, bamboohr, adp, ukg, paylocity, breezy. Empty means all |
| state_key | string | No | Names the saved state for only new jobs. Use one key per schedule, for example sales-accounts-daily |
| departments | array | No | Optional. Return only jobs whose department or team contains one of these, ignoring case. Boards that publish no department return nothing under this filter |
| remote_only | enum | No | true returns only jobs the board marks remote or whose location says remotefalse | true |
| reset_state | enum | No | true forgets the saved state for this state key and treats every board as a first runfalse | true |
| max_charge_usd | string | No | Optional. The run stops before it would charge more than this |
| title_keywords | array | No | Optional. Return only jobs whose title contains one of these words or phrases, matched as whole words and ignoring case, for example account executive, sales, engineer |
| posted_within_days | string | No | Optional. Return only jobs posted in the last N days. Jobs with no posting date are left out when this is set. Workday shows 30+ days for older postings, so those count as 30 days old |
| include_description | enum | No | true adds the job description as plain text, up to 20,000 characters, for the jobs returned. No extra charge. Runs take longer on Workday boards, which need one read per jobfalse | true |
| max_jobs_per_company | string | No | Job rows returned per company, newest first, after the filters. Default 1000, up to 5000. The whole board is read either way, up to 5,000 postings |
| exclude_title_keywords | array | No | Optional. Drop jobs whose title contains one of these words or phrases, for example intern |
Details
From the project READMEATS Jobs Feed MCP Server
An MCP server for the Mamba Labs Company Careers Page Jobs, 17 ATS Boards actor on Apify. Give it company domains or job board URLs. It returns every open job on each company's own ATS board, one row per job with the company domain.
What's Inside
- What it does
- Quick start
- Prerequisites
- Example prompts
- Tool
- Inputs
- Pricing
- Your keys
- Full actor documentation
- License
What it does
- Boards: Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Personio, Recruitee, Rippling, Oracle Recruiting, SuccessFactors, Teamtailor, BambooHR, ADP, UKG, Paylocity, and Breezy, read through their public job board APIs and careers sites.
- Discovery: a domain is matched to its board through the ATS link on the company site, then by the company name as a board name; a board that names another employer is rejected.
- Rows: one
jobrow per open job and one freecompanyrow per company withjobs_on_board,jobs_matched, andjobs_returned, orrow_statusno_boardand the reason. - Filters and schedules: title keywords, excluded words, locations, departments, remote only, posted within N days, and
only_newwith astate_key.
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.
Quick start
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-ats-jobs-feed": {
"command": "npx",
"args": [
"-y",
"@mambalabsdev/mcp-ats-jobs-feed"
],
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}
Restart the client. The list_company_ats_jobs tool appears.
Prerequisites
- Node.js 18 or newer.
- An Apify API token from console.apify.com/account/integrations, set as
APIFY_TOKEN. The server lists its tool without a token; a call needs one.
Example prompts
- "List the open account executive and SDR roles at stripe.com, linear.app, and notion.so."
- "Which of these 30 target accounts posted a remote sales job in the last 14 days?"
- "Every day, tell me which new jobs appeared on Gusto's and Figma's boards."
Tool
list_company_ats_jobs. One tool. Example arguments:
{
"companies": [
"linear.app",
"notion.so"
],
"title_keywords": [
"account executive"
]
}
Inputs
Every buyer facing input of the actor, unchanged. Omitted inputs take the actor's own defaults. Numbers and booleans are sent as strings.
| Input | Type | Description |
|---|---|---|
companies | array | One per line: a company domain (stripe.com), a homepage or careers page URL, or a job board URL (https://jobs.lever.co/palantir, https://job-boards.greenhouse.io/stripe, https://jobs.ashbyhq.com/linear, https://workday.wd5.myworkdayjobs.com/Workday). To tie a board URL to a domain, join them with an equals sign: gusto.com=https://job-boards.greenhouse.io/gusto. Up to 500 per run |
title_keywords | array | Optional. Return only jobs whose title contains one of these words or phrases, matched as whole words and ignoring case, for example account executive, sales, engineer |
exclude_title_keywords | array | Optional. Drop jobs whose title contains one of these words or phrases, for example intern |
locations | array | Optional. Return only jobs whose location text contains one of these, ignoring case, for example new york, london, germany. The word remote matches remote jobs |
departments | array | Optional. Return only jobs whose department or team contains one of these, ignoring case. Boards that publish no department return nothing under this filter |
remote_only | string | true returns only jobs the board marks remote or whose location says remote |
posted_within_days | string | Optional. Return only jobs posted in the last N days. Jobs with no posting date are left out when this is set. Workday shows 30+ days for older postings, so those count as 30 days old |
max_jobs_per_company | string | Job rows returned per company, newest first, after the filters. Default 1000, up to 5000. The whole board is read either way, up to 5,000 postings |
include_description | string | true adds the job description as plain text, up to 20,000 characters, for the jobs returned. No extra charge. Runs take longer on Workday boards, which need one read per job |
only_new | string | true returns only jobs that were not on the board at the last run with the same state key. The first run returns every matching job and records the board |
state_key | string | Names the saved state for only new jobs. Use one key per schedule, for example sales-accounts-daily |
reset_state | string | true forgets the saved state for this state key and treats every board as a first run |
platforms | array | Optional. Limit board discovery to these: greenhouse, lever, ashby, workday, workable, smartrecruiters, personio, recruitee, rippling, oracle_hcm, successfactors, teamtailor, bamboohr, adp, ukg, paylocity, breezy. Empty means all |
max_charge_usd | string | Optional. The run stops before it would charge more than this |
Pricing
Pay per event on Apify, billed to your Apify account. Prices in USD.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
job-row, one open job returned after your filters | $0.002 | $0.0019 | $0.0018 | $0.0017 |
apify-actor-start, per run start | $0.001 | $0.001 | $0.001 | $0.001 |
Company rows, rows for a company with no board found, and the row for a refused input are free.
Your keys
The actor needs no key. It reads public job board APIs and public careers pages and holds no key of any kind. Mamba Labs pays the platform costs of the run.
Full actor documentation
apify.com/mambalabs/ats-jobs-feed
License
MIT. See LICENSE.
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.