# ATS Engine (npm · @veriworkly/ats-engine-mcp)

Read your own resume the way an ATS does and score it with a published, deterministic rubric.

- Trust score: 92/100 (high trust)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `@veriworkly/ats-engine-mcp`: 92/100 (this document), [markdown](https://verifymcp.io/servers/veriworkly-ats-engine/veriworkly-ats-engine-mcp.md), [page](https://verifymcp.io/servers/veriworkly-ats-engine/veriworkly-ats-engine-mcp)

## Channel facts

- Registry: `npm`
- Package: `@veriworkly/ats-engine-mcp`
- Version: `0.15.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 45 of 142 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to VeriWorkly/ats-engine).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 7 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 74/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 1425 tokens (~285/item across 5 items; 4 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 77/100
  - Stability observed for 23 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 4 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 6 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the ATS Engine MCP server?

ATS Engine runs locally as an npm package, launched with npx -y @veriworkly/ats-engine-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

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

### Cursor

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

### VS Code

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

### Codex

```bash
codex mcp add veriworkly-ats-engine -- npx -y @veriworkly/ats-engine-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "veriworkly-ats-engine": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@veriworkly/ats-engine-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add veriworkly-ats-engine --command npx --arg -y --arg @veriworkly/ats-engine-mcp
```

### Hermes

```yaml
mcp_servers:
  veriworkly-ats-engine:
    command: "npx"
    args: ["-y", "@veriworkly/ats-engine-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "veriworkly-ats-engine": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@veriworkly/ats-engine-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add veriworkly-ats-engine -t stdio -c npx -a -y @veriworkly/ats-engine-mcp
```

### Other

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

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 92, +1)

No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 91, +1)

No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-01 (score 90, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-30 (score 89, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 88, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-28 (score 73, −14)

- [security regression] Malware scan: pass → unverified
- [functional] Package version: 0.15.0 → 0.15.1

### 2026-10-26 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 86, +15)

- [security improvement] Malware scan: unverified → pass

## MCP tools (4)

### `check_resume` (~494 tokens)

Check my resume

Reads the user's resume the way an applicant tracking system (ATS) does and scores it: readiness score (0-100), verdict, per-category scores, every failed check with its evidence and fix, and the fields an ATS would store (name, contact, roles, education, skills). With a job posting it adds the job match score and each requirement judged. Advice that is not scored (the file, age signals, a named ATS's documented notes) comes apart from the score. The score comes from a published, deterministic rubric (the same file gets the same score from the same engine on the same day), not from an AI model; present it as the rubric's result, not your own judgement. Use it only on the user's own resume, at their request: it is a tool for candidates. Never use it to screen, rank, compare or reject other people. Runs locally and reads only the files named in the call; nothing is sent anywhere.

Input parameters:

- `job_path` (string): Path to a job posting: .txt, .md, .pdf, .docx, or a saved .html page. Optional; give job_path or job_text.
- `job_text` (string): The job posting as text. Optional; give job_path or job_text, not both.
- `language` (string): Read the resume and the posting in this language (en, de, fr, hi, es, pt; en: English only). Default: detected from each. Give it only when the resume was read in the wrong language; a posting in ano…
- `path` (string): Absolute path to the user's resume: .pdf, .docx, .html, .txt, .md, or a .json JSON Resume or ats-resume document. Give path or text, not both.
- `region` (string): Read the resume as from this country (US, DE, FR, GB, IN, ES, BR, PT, MX, AR, CO, CL). Default: inferred from it.
- `target_ats` (string): The applicant tracking system the user is applying through (greenhouse, lever, taleo), to add its vendor's documented notes, each with its source. Advice only; never scored.
- `text` (string): The resume as plain text, when there is no file. Give path or text, not both.

Output parameters:

- `advice` (array): Not scored: the file (name, size, password, tracked changes), details that can invite age bias where the region calls for it, and a named ATS's documented notes.
- `categories` (array)
- `checksPassed` (number)
- `checksTotal` (number)
- `engine` (object)
- `failedChecks` (array): Every failed check, with its evidence and fix.
- `job`: The match against the posting; null when no posting was given.
- `locale` (object)
- `parsed` (object): The fields an ATS would store from this resume.
- `parsingWarnings` (array)
- `prioritizedFixes` (array)
- `readinessScore` (number): 0-100, how well an ATS reads and ranks the resume.
- `strengths` (array)
- `verdict` (string)
- `wordCount` (number)

### `match_job` (~397 tokens)

Match my resume to a job

Matches the user's resume against one job posting: the job match score (0-100), each requirement of the posting judged met, partial, missing or unverifiable with the resume's own words as evidence, and the posting's keywords the resume lacks. The score comes from a published, deterministic rubric (the same file gets the same score from the same engine on the same day), not from an AI model; present it as the rubric's result, not your own judgement. Use it only on the user's own resume, at their request: it is a tool for candidates. Never use it to screen, rank, compare or reject other people. Runs locally and reads only the files named in the call; nothing is sent anywhere.

Input parameters:

- `job_path` (string): Path to a job posting: .txt, .md, .pdf, .docx, or a saved .html page. Give job_path or job_text.
- `job_text` (string): The job posting as text. Give job_path or job_text, not both.
- `language` (string): Read the resume and the posting in this language (en, de, fr, hi, es, pt; en: English only). Default: detected from each. Give it only when the resume was read in the wrong language; a posting in ano…
- `path` (string): Absolute path to the user's resume: .pdf, .docx, .html, .txt, .md, or a .json JSON Resume or ats-resume document. Give path or text, not both.
- `region` (string): Read the resume as from this country (US, DE, FR, GB, IN, ES, BR, PT, MX, AR, CO, CL). Default: inferred from it.
- `text` (string): The resume as plain text, when there is no file. Give path or text, not both.

Output parameters:

- `jobMatchScore` (number|null): 0-100, how well the resume meets the posting.
- `missingKeywordGroups` (object): The same terms by kind; soft skills weigh less in the match.
- `missingKeywords` (array)
- `requirements` (array): Each requirement of the posting, judged.

### `explain_rule` (~141 tokens)

Explain a rubric rule

Explains one rule of the published rubric by its id (as in a failed check's id): its category, severity, what it checks, how many points it is worth, and how to fix it. With a region, as that country weighs it. The full rubric is the resource rubric://default.

Input parameters:

- `region` (string): The country the resume was scored as (US, DE, FR, GB, IN, ES, BR, PT, MX, AR, CO, CL), as in a report's locale. Default: none, the published weights.
- `rule_id` (string, required): A rule id, e.g. from failedChecks.

Output parameters:

- `category` (string)
- `deduction` (boolean)
- `fix` (string)
- `id` (string)
- `measures` (string)
- `passes` (string)
- `points` (number)
- `severity` (string)

### `extract_text` (~236 tokens)

Show my resume as an ATS reads it

The user's resume text in the order an ATS reads it, line by line — after columns are untangled and wrapped lines rejoined — with what the layout measured (columns, tables, hidden text) and the parsing warnings. For answering 'why did it read my resume like this?'. Use it only on the user's own resume, at their request: it is a tool for candidates. Never use it to screen, rank, compare or reject other people. Runs locally and reads only the files named in the call; nothing is sent anywhere.

Input parameters:

- `path` (string): Absolute path to the user's resume: .pdf, .docx, .html, .txt, .md, or a .json JSON Resume or ats-resume document. Give path or text, not both.
- `region` (string): Read the resume as from this country (US, DE, FR, GB, IN, ES, BR, PT, MX, AR, CO, CL). Default: inferred from it.
- `text` (string): The resume as plain text, when there is no file. Give path or text, not both.

Output parameters:

- `layout`: What the file's layout measured (columns, tables, hidden text); null for text.
- `lines` (array): The text in the order an ATS reads it. At most 500 lines.
- `parsingWarnings` (array)
- `wordCount` (number)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/veriworkly-ats-engine/veriworkly-ats-engine-mcp#diagnostics

## Score history

- 2026-11-05: 92
- 2026-11-04: 91
- 2026-11-03: 91
- 2026-11-02: 90
- 2026-11-01: 90
- 2026-10-31: 89
- 2026-10-30: 89
- 2026-10-29: 88
- 2026-10-28: 73
- 2026-10-27: 87
- 2026-10-26: 87
- 2026-10-25: 86
- 2026-10-24: 71
- 2026-10-23: 60
- 2026-10-22: 85
- 2026-10-21: 59
- 2026-10-20: 69
- 2026-10-19: 58
- 2026-10-18: 83
- 2026-10-17: 83
- 2026-10-16: 82
- 2026-10-15: 67
- 2026-10-14: 49
- 2026-10-13: 81
- 2026-10-12: 49

## Common questions

### What is the ATS Engine MCP server?

ATS Engine is an MCP server listed in the public MCP registry as io.github.VeriWorkly/ats-engine. Read your own resume the way an ATS does and score it with a published, deterministic rubric. This page covers its npm package (@veriworkly/ats-engine-mcp).

### Is the ATS Engine MCP server safe to use?

ATS Engine scores 92 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the ATS Engine MCP server expose?

ATS Engine exposes 4 tools: check_resume, match_job, explain_rule, extract_text. Their descriptions and schemas cost roughly 1,268 tokens of context every time the server is loaded.

### Is the ATS Engine MCP server still maintained?

ATS Engine is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the ATS Engine MCP server under?

ATS Engine declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/@veriworkly/ats-engine-mcp
- Socket report: https://socket.dev/npm/package/@veriworkly/ats-engine-mcp
- Repository: https://github.com/VeriWorkly/ats-engine
- Website: https://docs.veriworkly.com/ats-engine/tools/mcp
- Changelog RSS feed: https://verifymcp.io/servers/veriworkly-ats-engine/veriworkly-ats-engine-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/veriworkly-ats-engine/veriworkly-ats-engine-mcp.json
- HTML version of this page: https://verifymcp.io/servers/veriworkly-ats-engine/veriworkly-ats-engine-mcp
