npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@veriworkly/ats-engine-mcp

v0.15.1

Published

ATS resume checker MCP server: lets Claude, Cursor or VS Code read your resume the way an applicant tracking system does and score it with a published, deterministic rubric. Runs locally.

Readme

ATS Engine MCP server

An MCP server that lets an AI assistant (Claude, Cursor, VS Code Copilot and others) read your own resume the way an applicant tracking system (ATS) does, and score it with @veriworkly/ats-engine's published, deterministic rubric.

Setup for each client, every tool and its inputs, and example prompts: docs.veriworkly.com/ats-engine/tools/mcp.

Ask your assistant things like "check my resume at ~/Documents/cv.pdf", "how well does it match this job posting?", "why did it fail the date check?" or "show me how an ATS reads my resume".

The score comes from the rubric (RUBRIC.md), not from a model. The same file always gets the same score. The assistant explains the result and helps you fix what failed.

Install

You need Node.js 22.12 or later. Every client below runs the server with npx -y @veriworkly/ats-engine-mcp.

Claude Code

claude mcp add ats-engine -- npx -y @veriworkly/ats-engine-mcp

On native Windows (not WSL), wrap npx in cmd /c:

claude mcp add ats-engine -- cmd /c npx -y @veriworkly/ats-engine-mcp

Claude Desktop

Open Settings → Developer → Edit Config, add the server to claude_desktop_config.json, and restart Claude Desktop:

{
  "mcpServers": {
    "ats-engine": {
      "command": "npx",
      "args": ["-y", "@veriworkly/ats-engine-mcp"]
    }
  }
}

Cursor

Add it to ~/.cursor/mcp.json (every project) or .cursor/mcp.json (one project):

{
  "mcpServers": {
    "ats-engine": {
      "command": "npx",
      "args": ["-y", "@veriworkly/ats-engine-mcp"]
    }
  }
}

VS Code

Add it to .vscode/mcp.json in your workspace, or run MCP: Add Server from the Command Palette:

{
  "servers": {
    "ats-engine": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@veriworkly/ats-engine-mcp"]
    }
  }
}

Tools

| Tool | Input | Returns | | -------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | check_resume | path or text; optional job_path or job_text; optional region; optional target_ats | Readiness score (0–100), verdict, category scores (writing style included), every failed check with its evidence and fix, and the fields an ATS stores (name, contact, roles, education, skills; the structured parsed also holds certifications and spoken languages with their CEFR level). With a posting: job match, requirements and keywords too. Then advice, which is not scored. | | match_job | path or text; job_path or job_text (required); optional region | Job match score, each requirement judged met / partial / missing / unverifiable with evidence, and the missing keywords, hard skills and soft skills apart (soft skills weigh less). | | explain_rule | rule_id; optional region | One rubric rule: category, severity, what it checks, points, how to fix it. With a region, as that country weighs it (a photo is worth 6 points in the US and is not scored in Germany). An unknown id lists the valid ones. | | extract_text | path or text; optional region | The text in the order an ATS reads it, line by line, plus what the layout measured (columns, tables, hidden text). For "why did it read my resume like this?" |

Every tool returns readable text for the assistant and its result as structured JSON (structuredContent, described by each tool's outputSchema).

The resource rubric://default is the whole rubric as JSON.

Inputs.

  • Resume files: .pdf, .docx, .html, .txt, .md, or a .json JSON Resume or ats-resume document. Postings: .txt, .md, .pdf, .docx, or a saved .html page; a job_path of any other type is refused, since a posting's words come back in the answer.
  • Give absolute paths. ~/ is read as your home folder; any other relative path is read from the folder the server was started in.
  • Pasted text and job_text may be up to 200 000 characters. A posting, pasted or read from job_path, is scored on its first 20 000 characters; a longer one is cut there, and check_resume's parsingWarnings says so.
  • Files over 20 MB are refused, and so are folders, pipes, devices and network paths (\\host\share\…; on Windows also //host/share/…). So is a PDF with no text layer: an ATS cannot read a scan either.
  • language (check_resume, match_job) is en, de, fr, hi, es or pt; en reads English only. Without it, the language is detected from the resume and from the posting. It sets the language of both, so give it only when the resume was read in the wrong one: en with a German posting reads the posting as English too.
  • region is US, GB, DE, FR, IN, ES, BR, PT, MX, AR, CO or CL. Without it, the region is inferred from the resume.
  • target_ats is greenhouse, lever or taleo. It adds what that vendor documents publicly, each note with a link to the vendor's page. It never changes the score.

Advice. check_resume ends with advice, a list that is never scored. For a file (not pasted text) it covers the name (Resume_final_v3 (2).pdf reads as a draft; a Firstname-Lastname-Resume.pdf name is suggested), a size over 2 MB, a password, and tracked changes or comments left in a Word document. For a US resume it also covers details that can invite age bias. With target_ats it adds the vendor's notes.

Privacy

The server runs on your computer, over stdio. It makes no network requests and calls no AI model. It reads only the files you name in a request, a PDF, DOCX or HTML file in a separate process that is stopped after 60 seconds or when the request is cancelled, as many at once as your computer has CPU cores, and nothing leaves your machine except what your assistant itself sends to its model provider: the tool results it reads, which include text from your resume.

Intended use

[!IMPORTANT] This is a tool for candidates to check their own resume. Do not use it to screen, rank or reject other people. Using it that way may make it an automated employment decision tool under laws such as New York City Local Law 144 and the EU AI Act, which carry duties this package does not meet for you. See Intended use.

A score measures how well a resume parses and reads. It says nothing about the person.

From source

git clone https://github.com/VeriWorkly/ats-engine.git
cd ats-engine
npm ci
npm run build
claude mcp add ats-engine -- node "$PWD/packages/mcp/dist/index.js"

License

MIT