ats-resume-writer
# ATS Resume Writer — MCP Server
Let your AI agent rewrite resumes that beat applicant tracking systems.
When a user asks Claude, ChatGPT, Cursor, or any MCP-capable agent "tailor my resume to this job posting," this server does the rewrite: keyword-matched to the job description, quantified bullets, ATS-safe structure (Workday, Greenhouse, iCIMS, Taleo) — with **strict truthfulness guardrails**. The engine never invents dates, metrics, job titles, or seniority levels that aren't in the input resume.
## Tools
| Tool | What it does |
|---|---|
| `rewrite_resume` | Takes resume text + a job description, returns the ATS-optimized rewrite as plain text and/or structured JSON. Requires `ACCESS_CODE`. |
| `get_access_info` | No auth. Explains how to get an access code (pay-what-you-want, $0 works), what the engine does, and whether the server is configured. |
## Setup
Get an access code — pay-what-you-want at [Gumroad](https://4453060844610.gumroad.com/l/npufpb) ($0 works; the code arrives in the delivery email along with the full resume kit).
### Hosted (no install) — recommended
The server is live as a remote MCP endpoint — connect any Streamable-HTTP-capable client directly:
```
https://ats-resume-writer-app.vercel.app/api/mcp
```
Or via [Smithery: mutamiri/ats-resume-writer](https://smithery.ai/server/mutamiri/ats-resume-writer). On the hosted endpoint, pass your access code as the `access_code` argument to `rewrite_resume` (no env config needed).
### Claude Desktop / Claude Code
```json
{
"mcpServers": {
"ats-resume-writer": {
"command": "npx",
"args": ["-y", "tsx", "/path/to/ats-resume-writer-mcp/src/server.ts"],
"env": { "ACCESS_CODE": "your-code-here" }
}
}
}
```
Or after `npm run build`:
```json
{
"mcpServers": {
"ats-resume-writer": {
"command": "node",
"args": ["/path/to/ats-resume-writer-mcp/dist/server.js"],
"env": { "ACCESS_CODE": "your-code-here" }
}
}
}
```
### Cursor / other MCP clients
Same shape — stdio transport, `ACCESS_CODE` in env.
## Quick start (development)
```bash
npm install
npm run typecheck
npm run build
ACCESS_CODE=your-code npm run test:mcp # live smoke test against the hosted API
npm run stdio # run the MCP server on stdio
```
## How it works
```
agent ──MCP/stdio──> this server ──HTTPS──> hosted rewrite API ──> Claude
(access code gate,
rate limiting,
truthfulness guardrails)
```
The server is a thin client: the rewrite engine, rate limiting (10/hour), and guardrails live in the hosted API. Resume content is processed for the rewrite and not stored.
## Truthfulness guardrails
The engine refuses to:
- Emit any date not present verbatim in the input
- Invent numbers, percentages, or dollar amounts (unambiguous arithmetic on input numbers is allowed, e.g. "5 days → 2 days" may be restated as "60% reduction")
- Add seniority words ("Senior", "Lead", "Principal", "Director") to job titles the candidate didn't hold
- Compute "X+ years of experience" from work-history dates
A truthful resume without a number beats a fabricated one with a fake number.
## Companion kit
The same pay-what-you-want purchase includes the full kit: ATS-safe resume template, 7-step writing guide, 54-bullet quantified bullet bank across 9 roles, cover letter framework with worked examples, LinkedIn checklist, and STAR interview prompts.
## License
MIT © SokoTech
TDQS
Scored across 2 tools
The two tools have completely different purposes: one provides information about access and configuration, the other performs the actual resume rewriting. No ambiguity between them.
Both tools follow a consistent verb_noun snake_case pattern (get_access_info, rewrite_resume), making the naming predictable and clear.
With only two tools, the server feels scoped very narrowly. While the core functionality is present, the domain suggests potential for additional tools (e.g., list templates, validate resume), making it borderline thin.
The server covers the main rewrite and access info, but lacks tools for managing multiple resumes, checking access code validity independently, or exploring companion resources. Minor gaps exist.