Resume-Tailor MCP Server

Resume-Tailor MCP Server

Tailor your CV to any job posting with ATS keyword scoring and clean PDF/DOCX export.

Category
Visit Server

README

<div align="center">

<img src="assets/hero.svg" alt="Resume-Tailor MCP โ€” tailor your CV to any job, automatically" width="820">

<br><br>

An open-source Model Context Protocol server that gives Claude Desktop (or any MCP client) a persistent master rรฉsumรฉ, a real ATS keyword score, and clean PDF / DOCX export.

Website CI License: MIT Python 3.11+ MCP Release PRs Welcome Built for Claude

๐ŸŒ View the live site โ†’

Quick start ยท Tools ยท How it works ยท Contributing ยท Releases

</div>


You: "Here's a job link โ€” tailor my CV and export a PDF."

Claude reads the posting and your master CV, rewrites it to match, checks the ATS keyword score, and hands you a clean file ready to send.

Table of Contents

Why this exists

Claude can already rewrite a CV in a normal chat. This MCP is worth installing for the three things a plain chat can't do:

Feature What it gives you
Persistent master CV Stored locally as JSON. Set it up once, reuse it for every job.
Real ATS gap score Deterministic keyword math โ€” not vibes. Tells you exactly which keywords you're missing.
Clean file export ATS-safe PDF / DOCX: single column, standard fonts, real selectable text.

[!IMPORTANT] The MCP does not rewrite your CV โ€” Claude does that. The server supplies the persistence, the job fetch, the ATS math, and the export. Claude ties it together.

How it works

 load_master_resume โ”€โ”
                     โ”œโ”€โ–บ  Claude rewrites the CV  โ”€โ–บ  ats_gap_check  โ”€โ–บ  export_resume
 fetch_job_posting โ”€โ–บโ”‚                                     โ–ฒ
 extract_keywords โ”€โ”€โ”€โ”˜โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  1. Load your master CV โ€” load_master_resume
  2. Analyze the job โ€” fetch_job_posting โ†’ extract_keywords
  3. Rewrite โ€” Claude rewrites the CV to honestly surface the missing keywords
  4. Check the rewrite โ€” ats_gap_check (did the score go up?)
  5. Export โ€” export_resume โ†’ a clean PDF or DOCX

Tools

Tool Purpose
save_master_resume Store/update the base CV (structured JSON: contact, summary, experience, projects, skills, education).
load_master_resume Return the stored master CV so Claude can work from it.
fetch_job_posting Fetch a job URL โ†’ clean text. Falls back to pasted text if the site is blocked or login-walled.
extract_keywords Deterministically pull the ranked skills/tools an ATS scans for.
ats_gap_check Compare a CV against the job keywords โ†’ match score (%) + the exact missing terms.
export_resume Render finished CV content (markdown or JSON) โ†’ a clean PDF or DOCX. Returns the file path.

Installation

git clone git@github.com:NmaaAlhawary/MCP-Resume-Tailor.git
cd MCP-Resume-Tailor

python3 -m venv .venv
source .venv/bin/activate          # fish: source .venv/bin/activate.fish
pip install -r requirements.txt

Smoke-test that all six tools register:

python -c "import asyncio, server; print([t.name for t in asyncio.run(server.mcp.list_tools())])"

[!NOTE] PDF export uses reportlab (pure Python โ€” no system libraries needed on macOS/Windows/Linux). DOCX export uses python-docx.

Connect to Claude Desktop

Add this to your claude_desktop_config.json (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "resume-tailor": {
      "command": "/absolute/path/to/MCP-Resume-Tailor/.venv/bin/python",
      "args": ["/absolute/path/to/MCP-Resume-Tailor/server.py"],
      "env": {
        "RESUME_STORE_PATH": "~/.resume-mcp/master.json"
      }
    }
  }
}

Restart Claude Desktop โ€” the six tools appear under the tools menu.

Usage

First-time setup โ€” store your master CV (once)

Copy master.template.json, fill in your details, then ask Claude:

"Save this as my master resume: (paste the JSON)"

Claude calls save_master_resume and it persists at RESUME_STORE_PATH.

Everyday flow โ€” tailor to a job

You: Here's a job link โ€” tailor my CV for it and export a PDF: https://example.com/careers/senior-frontend

Behind the scenes Claude runs:

1. load_master_resume()                          โ†’ your stored CV
2. fetch_job_posting(url="โ€ฆ/senior-frontend")    โ†’ clean job text
3. extract_keywords(job_text)                    โ†’ ["REST APIs", "GraphQL", "TypeScript",
                                                     "Docker", "AWS", "Next.js", "CI/CD", โ€ฆ]
4. ats_gap_check(resume_text, keywords)          โ†’ { match_score: 20.0,
                                                     missing: ["GraphQL","Docker","AWS",โ€ฆ] }
5. โ”€โ”€ Claude rewrites the CV to surface real, matching skills โ”€โ”€
6. ats_gap_check(new_resume_text, keywords)      โ†’ { match_score: 85.0 }
7. export_resume(content=<rewritten>, format="pdf")
                                                 โ†’ { path: "~/.resume-mcp/exports/โ€ฆโ€‹.pdf" }

Claude: Tailored your CV โ€” keyword match went from 20% โ†’ 85%. I added your Docker/AWS and testing experience to match their stack. Exported here: ~/.resume-mcp/exports/Jane_Developer_โ€ฆ.pdf

Configuration

Env var Default Purpose
RESUME_STORE_PATH ~/.resume-mcp/master.json Where the master CV JSON lives. Exports go to exports/ next to it.

Everything runs locally. No secrets, no external accounts.

ATS-safe export

  • Single column โ€” no text boxes or multi-column tricks that break ATS parsers
  • Standard fonts (Calibri / Helvetica)
  • Real, selectable text โ€” never image-rendered
  • Plain headings and bullet lists that map cleanly to rรฉsumรฉ sections

Contributing

Contributions of any size are welcome. The quickest way in: fork the repo, make your change, and open a pull request.

# 1. Fork on GitHub, then clone your fork
git clone git@github.com:YOUR-USERNAME/MCP-Resume-Tailor.git
cd MCP-Resume-Tailor

# 2. Set up and branch
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
git checkout -b my-improvement

# 3. Change, commit, push
git commit -am "Describe your change"
git push origin my-improvement

# 4. Open a Pull Request on GitHub

Great first contributions: add skills to KNOWN_TERMS / KNOWN_PHRASES in server.py, filter a filler word in STOPLIST, or improve the export layout. See CONTRIBUTING.md for the full step-by-step guide.

License

Released under the MIT License. By contributing, you agree your contributions are licensed under the same terms.

<div align="center">

Built by Nmaa Hawary ยท If this helped, consider giving it a star.

</div>

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured