Skip to main content
Glama
ATS Jobs Feed MCP Server

ATS Jobs Feed MCP Server

ATS Jobs Feed MCP Server

Glama score MCP Registry npm version npm downloads license mcpservers.org

An MCP server for the Mamba Labs ATS Jobs Feed 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

Related MCP server: io.github.groundtruthtools/ats-jobs-mcp

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 job row per open job and one free company row per company with jobs_on_board, jobs_matched, and jobs_returned, or row_status no_board and the reason.

  • Filters and schedules: title keywords, excluded words, locations, departments, remote only, posted within N days, and only_new with a state_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

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.

Available Tools

1 tool
list_company_ats_jobsList open jobs from company ATS boardsA
Read-only

List every open job for a list of companies, read from their own applicant tracking system boards: Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Personio, Recruitee, Rippling, Oracle Recruiting, SuccessFactors, Teamtailor, BambooHR, ADP, UKG, Paylocity, and Breezy. Give companies as domains (stripe.com) or board URLs (https://jobs.lever.co/palantir). The board is found from the company site or by name, and a board that names another employer is rejected. Returns one row per job (title, department, location, remote flag, posting date, link, company domain) plus one free company row per company with the board found and job counts, or why no board was read. Optional filters on title, location, department, remote, and posting age; optional descriptions; only_new with a state_key returns only jobs not seen on the last run. A run that does not succeed is returned as an error with its run ID. Read-only; requires an APIFY_TOKEN; Apify charges per job row returned and once per run start; company rows are free.

NameRequiredDescriptionDefault
only_newNotrue 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
companiesNoOne 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
locationsNoOptional. Return only jobs whose location text contains one of these, ignoring case, for example new york, london, germany. The word remote matches remote jobs
platformsNoOptional. 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_keyNoNames the saved state for only new jobs. Use one key per schedule, for example sales-accounts-daily
departmentsNoOptional. Return only jobs whose department or team contains one of these, ignoring case. Boards that publish no department return nothing under this filter
remote_onlyNotrue returns only jobs the board marks remote or whose location says remote
reset_stateNotrue forgets the saved state for this state key and treats every board as a first run
max_charge_usdNoOptional. The run stops before it would charge more than this
title_keywordsNoOptional. 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_daysNoOptional. 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_descriptionNotrue 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
max_jobs_per_companyNoJob 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_keywordsNoOptional. Drop jobs whose title contains one of these words or phrases, for example intern

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, open-world, non-idempotent, non-destructive; the description adds real behavior beyond them: APIFY_TOKEN is required, Apify charges per job row plus once per run start while company rows are free, include_description carries no extra charge but slows Workday, board-mismatch rejection, and failures are returned as errors with a run ID. That is exactly the cost/permission/failure disclosure an agent needs before spending money.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and format, and every later sentence (pricing, error/run ID, only_new) carries actionable information. The 17-platform enumeration and the long single-paragraph block make it denser than necessary, but it is not padded with filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, zero-required, open-world scraping tool with no output schema, the description still covers return shape (per-job fields plus one free company row), partial-failure behavior, auth, and cost model. Nothing an agent needs to call it safely and correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all 14 parameters are already documented in the schema, including the domain/board-URL syntax and the equals-sign tie. The description mostly restates the filter set ('title, location, department, remote, and posting age') and only lightly clarifies only_new's state_key coupling; it never mentions max_charge_usd or max_jobs_per_company, so it adds little beyond structured data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: 'List every open job for a list of companies, read from their own applicant tracking system boards', then names the 17 supported ATS platforms. An agent knows exactly what this returns (job rows plus a company summary row) versus any generic job-search tool, and there are no siblings to confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating context: companies must be given as domains or board URLs, boards naming another employer are rejected, and state_key should be 'one key per schedule' for only_new runs. It does not state when to avoid the tool or what to do instead when a board cannot be found, so it stops short of explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.0.0
    • First observedlist_company_ats_jobs

TDQS

A4.4/5.0

Scored across 1 tool

Disambiguation5/5

There is only one tool, so there is no possibility of selecting the wrong tool or confusing overlapping purposes. Its purpose is clearly stated as listing open jobs from company ATS boards.

Naming Consistency5/5

The single tool name follows a clear snake_case verb_noun pattern: list_company_ats_jobs. With only one tool there are no naming inconsistencies to compare against.

Tool Count3/5

A single tool is thin for a server that also performs board discovery, validation, filtering, and incremental state tracking. Those responsibilities are packed into one broad operation rather than separated into focused tools.

Completeness4/5

For a read-only job feed, the tool covers the core listing workflow across many ATS providers with filters, descriptions, and only_new state. Minor gaps remain, such as fetching a single job by URL or separately listing supported providers/boards.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables users to discover applicant tracking system job boards from company domains, list open roles, detect hiring changes over time, and generate hiring summaries across multiple ATS platforms.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables querying open job postings directly from company applicant-tracking systems (Greenhouse, Ashby, Lever), finding a company's job board, listing and comparing roles, and accessing salary data, all without scraping or API keys.
    3
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables querying job boards for a company's open roles, pulling from Greenhouse, Workday, and an opt-in LinkedIn source and normalizing the results into one shape. It discovers boards, searches one or many companies at once, and returns full postings with title-based AI/ML and junior filtering.
    7
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables users to look up a company's open job postings from public Greenhouse, Lever, and Ashby boards, returning them in one normalized shape with filtering by keyword, location, remote status, and posting date. It also identifies which of those three ATSs hosts a given company's board and how many roles are open there.
    52 npm
    MIT