ATS Jobs

io.github.benkrasinPublished by GitHub account benkrasinv0.2.2Updated Oct 24, 2026

Open jobs from public Greenhouse, Lever and Ashby boards; keyword search across 14,000+ companies.

Overview

AI-generated overview

Looks up open jobs on public Greenhouse, Lever and Ashby company boards, and keyword-searches a large directory of company career boards.

What you can do
List a company's open jobs from its Greenhouse, Lever or Ashby board, with keyword, location, remote and posting-date filters and an optional full description field, returned in one normalized shape (title, company, location, salary, URL and more). Detect which of the three ATSs hosts a given company slug and how many jobs each board has. Search a built-in directory of 16,000+ company career boards by keywords, locations, remote-only, posting date and minimum salary. Run the same lookups from the command line with JSON or CSV output.
When to use it
Useful when an assistant should answer hiring questions with live data instead of guessing: checking whether a set of companies is hiring a given role, watching a target company's openings, comparing roles across companies, or pulling a company's jobs into a spreadsheet.
Requirements
Runs as a local stdio process needing Node.js 18+ and network access; the package is fetched from its GitHub repository, and the README warns that the bare npm name belongs to an unrelated package. The two single-company tools need no key. The all-companies search needs an APIFY_TOKEN environment variable and a free Apify account.
Before you install
The all-companies search sends queries to a hosted Apify actor and is billed by Apify at roughly $1 per 1,000 jobs returned, with max_results defaulting to 100, so each call can cost money. Requests for the single-company tools go directly from your machine to the public job-board APIs. There is no caching or rate limiting, so heavy use is discouraged. Results are best-effort: remote flags and salary fields vary by ATS.

Installation

In SourceWeft

  1. Open ATS Jobs in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

ats-jobs-mcp

Look up a company's open jobs from its Greenhouse, Lever or Ashby job board, from the command line or from any MCP client (Claude Desktop, Claude Code, Cursor, ...).

  • Zero dependencies. Plain Node.js 18+, no build step, no API keys.
  • Official public APIs only. It calls the same public job-board endpoints that the companies' own careers pages use. No HTML scraping, no headless browser, no proxies.
  • One normalized shape across all three ATSs: title, company, location, remote, workplaceType, department, team, employmentType, salary, url, postedAt, ats, id.
  • Slug auto-detect. Give it ramp, ashby:ramp or https://jobs.ashbyhq.com/ramp; if you don't say which ATS, it checks all three.

Useful for: "which of these 10 companies are hiring a staff backend engineer?", watching a target account's hiring, pulling a company's roles into a spreadsheet, or letting an assistant answer job questions with live data instead of guessing.

New: search 16,000+ companies at once

No company list? The search_jobs_all_companies tool searches a built-in directory of 16,000+ public company career boards (Greenhouse, Lever, Ashby, BambooHR, Personio, Rippling, SmartRecruiters, Teamtailor, Breezy, Recruitee, Workable; about 490k open jobs) by keyword, location, remote and posting date: "data engineer jobs in Berlin or remote, posted this week". It runs the hosted ATS Jobs Feed actor on Apify, so it needs an APIFY_TOKEN (a free Apify account works) and Apify bills about $1 per 1,000 jobs returned (max_results defaults to 100, about $0.10). The two single-company tools stay free and keyless.

MCP Registry name: mcp-name: io.github.benkrasin/ats-jobs-mcp

Use it with an MCP client

The server speaks MCP over stdio. It needs Node.js 18+ and network access; npx fetches it straight from this GitHub repo. Always use github:benkrasin/ats-jobs-mcp. The bare npm name ats-jobs-mcp is an unrelated package from another author.

Claude Desktop

Add to claude_desktop_config.json (Settings -> Developer -> Edit Config), then restart Claude Desktop:

json
{  "mcpServers": {    "ats-jobs": {      "command": "npx",      "args": ["-y", "github:benkrasin/ats-jobs-mcp", "mcp"],      "env": { "APIFY_TOKEN": "optional, only for search_jobs_all_companies" }    }  }}

Or download ats-jobs-mcp.mcpb from the latest release and double-click it to install in Claude Desktop.

Claude Code

sh
claude mcp add ats-jobs -- npx -y github:benkrasin/ats-jobs-mcp mcp

Cursor

Add the same block to ~/.cursor/mcp.json (global) or .cursor/mcp.json (per project):

json
{  "mcpServers": {    "ats-jobs": {      "command": "npx",      "args": ["-y", "github:benkrasin/ats-jobs-mcp", "mcp"]    }  }}

Any other MCP client that can launch a stdio server works the same way.

Tools

ToolArgumentsReturns
list_company_jobsslug (required; slug or board URL), ats (greenhouse/lever/ashby), query, remote (bool), location, posted_within_days, include_descriptions, limit (default 100)Board info, total and matching counts, normalized jobs (newest first)
detect_atsslugWhich of the three ATSs has a board for that slug, and how many open jobs each has
search_jobs_all_companieskeywords (required, array), locations, remote_only, posted_within_days (default 14), min_salary_yearly, only_with_salary, max_results (default 100)Matching jobs across 16,000+ companies. Needs APIFY_TOKEN; billed by Apify (~$1 per 1,000 jobs); takes about a minute

query matches title, department, team and location. Spaces mean AND, commas mean OR: "backend engineer, sre".

Example prompts: "Is Ramp hiring remote engineers? Group them by team." / "Which ATS does Notion use, and what sales roles are open?" / "Compare open data roles at airbnb, palantir and ramp."

Use it from the command line

sh
npx github:benkrasin/ats-jobs-mcp jobs <company-slug|board-url> [--ats greenhouse|lever|ashby] [--q keyword] [--remote] [--location text] [--days n] [--limit n] [--json|--csv]npx github:benkrasin/ats-jobs-mcp detect <company-slug>

Real output (October 2026):

text
$ npx github:benkrasin/ats-jobs-mcp jobs ramp --ats ashby --q engineer --limit 5title                                         location                  remote  type     department            postedAt    urlDesign Systems Lead                           New York, NY (HQ)         yes     hybrid   Engineering           2026-09-30  https://jobs.ashbyhq.com/ramp/baa94095-...Tech Lead and Manager (TLM), Production Eng…  New York, NY (HQ)         yes     hybrid   Engineering           2026-09-28  https://jobs.ashbyhq.com/ramp/465799ed-...Software Engineering Intern, iOS              New York, NY (HQ)         yes     hybrid   Engineering           2026-09-24  https://jobs.ashbyhq.com/ramp/b66be397-...Software Engineering Intern, Android          New York, NY (HQ)                 onsite   Engineering           2026-09-24  https://jobs.ashbyhq.com/ramp/fcf118cc-...Software Engineer Internship, Frontend        New York, NY (HQ)         yes     hybrid   Engineering           2026-09-24  https://jobs.ashbyhq.com/ramp/a13ae586-...
43 matching of 162 open jobs - ashby:ramp (https://jobs.ashbyhq.com/ramp), showing 5
$ npx github:benkrasin/ats-jobs-mcp detect notiongreenhouse  not foundlever       not foundashby       found       130 jobs  https://jobs.ashbyhq.com/notion
$ npx github:benkrasin/ats-jobs-mcp jobs palantir --q "software engineer" --location london --csv --limit 2title,company,location,remote,workplaceType,department,team,employmentType,salary,url,postedAt,ats,idSoftware Engineer – Query Engines,palantir,"London, United Kingdom",false,hybrid,,Dev,Full-time,,https://jobs.lever.co/palantir/4056c8f6-...,2026-09-22T11:06:34.937Z,lever,4056c8f6-...Forward Deployed Software Engineer - NATO,palantir,"London, United Kingdom",false,onsite,,Delta,Full-time,,https://jobs.lever.co/palantir/73d1a90c-...,2026-07-23T12:53:46.989Z,lever,73d1a90c-...

(UUIDs shortened above.) The table summary line goes to stderr, so --json and --csv output can be piped cleanly. Exit code is 2 when no board is found.

As a library

js
import { fetchCompanyJobs, filterJobs } from 'ats-jobs-mcp';const { ats, jobs } = await fetchCompanyJobs('ramp');console.log(ats, filterJobs(jobs, { query: 'engineer', remote: true }).length);

Data sources

ATSEndpoint
Greenhousehttps://boards-api.greenhouse.io/v1/boards/{slug}/jobs (+ /departments for department names)
Leverhttps://api.lever.co/v0/postings/{slug}?mode=json
Ashbyhttps://api.ashbyhq.com/posting-api/job-board/{slug}?includeCompensation=true

These are the public, unauthenticated job-board APIs the vendors document for publishing job listings. Requests go directly from your machine to those endpoints; nothing passes through any other server.

Limitations

  • You need the board slug. It's usually the company name, but not always (check the careers URL: jobs.ashbyhq.com/<slug>, jobs.lever.co/<slug>, boards.greenhouse.io/<slug>). Companies on other ATSs (Workday, SmartRecruiters, iCIMS, custom pages, ...) are not supported.
  • "remote" is a best effort. Lever and Ashby expose a workplace type; Greenhouse doesn't, so remote there is inferred from the location text. Ashby marks a job remote when any of its locations is remote (e.g. a hybrid NYC role also open to "Remote (US)"); workplaceType shows the primary arrangement.
  • Fields vary by ATS. Greenhouse has no team, employment type or salary in this API; salary only appears when the company publishes it (mostly Ashby, sometimes Lever). postedAt is the first-published/created date reported by the ATS, which companies sometimes reset by reposting.
  • Lever EU boards (api.eu.lever.co) aren't queried yet.
  • No caching or rate limiting. It's meant for interactive lookups of a handful of companies, not crawling thousands. Be polite with the public APIs.
  • If the same slug exists on more than one ATS (e.g. an old, empty board), the board with the most open jobs wins; pass --ats / ats to force one.

Run it in the cloud (no install)

The same five-ATS fetcher is published as an Apify actor: ATS Jobs Feed on Apify. It adds scheduling, a "only new jobs since last run" mode for job alerts, and Slack/email/webhook integrations. Apify bills pay-per-result (about $1 per 1,000 jobs), so it's for people who don't want to host anything. This CLI stays free.

Company on Workday (*.myworkdayjobs.com)? Use workday-jobs-scraper (free CLI) or the hosted Workday Jobs Scraper on Apify.

Development

sh
git clone https://github.com/benkrasin/ats-jobs-mcp && cd ats-jobs-mcpnpm test          # live smoke test: three ATSs + an MCP stdio session (needs network)node bin/cli.js jobs airbnb --limit 5

The MCP server (src/mcp.js) is a small, dependency-free implementation of the MCP stdio transport (newline-delimited JSON-RPC 2.0: initialize, ping, tools/list, tools/call). It has also been checked against the official @modelcontextprotocol/sdk client.

About

Built and maintained by an AI agent (Claude, by Anthropic) as part of an experiment in agent-run open-source projects, on behalf of @benkrasin. Issues and PRs are welcome.

License

MIT

Source: README.md at commit 1c364f0

Tools

0
SourceWeft started this package once in an isolated sandbox, without credentials, to list its tools. That failed: the package type cannot run in the sandbox.

Version history

1
  1. v0.2.2LatestOct 24, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts