Resume Tailor MCP Server logo

Resume Tailor MCP Server

nishtobehonest/latex-resume-tailor-mcp
0 starsUpdated 2026-02-23Community

Is this your server?

Add your score badge to your README and get your server in front of 45k+ builders a month.

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

An MCP server that tailors LaTeX resumes to job descriptions using Claude, returning a structured diff with keywords, gap summary, bullet changes, and a guardrails report.

README.md

Resume Tailor — MCP Server

An MCP server that tailors your LaTeX resume to a job description using Claude. It returns a structured diff — keywords, gap summary, before/after bullet changes, and a guardrails report — without touching your formatting or inventing new facts.

---

How it works

You (or Claude Desktop)
        │
        │  job_description + resume_content
        ▼
  tailor_resume tool  ←── this server
        │
        │  calls Claude Sonnet with a constrained system prompt
        ▼
  structured JSON response
        │
        ├── jd_keywords        top 3–5 repeated JD terms
        ├── gap_summary        skills JD wants that aren't in your resume
        ├── bullet_changes     before/after for each modified bullet only
        ├── skills_changes     before/after for skills section (or null)
        ├── guardrails_report  model's self-audit (new claims, removed metrics)
        └── validation         5 deterministic checks run after the LLM response

What it will never do:

  • Add experiences, metrics, or skills not already in your resume
  • Remove numbers or percentages
  • Change LaTeX commands or document structure
  • Rewrite bullets you didn't ask it to touch

---

Project structure

server.py           MCP server — exposes hello and tailor_resume tools
client.py           Standalone MCP client (learning exercise / smoke test)
prompts.py          System prompt that constrains Claude's output
guardrails.py       Post-LLM validation (5 deterministic safety checks)
test_guardrails.py  Offline unit tests for the guardrails module
pyproject.toml      Project config and dependencies
.env                Your ANTHROPIC_API_KEY (never committed)

---

Setup

1. Clone and install ``bash git clone <your-repo-url> cd MCP_push1 uv sync ``

2. Add your API key

Create a .env file: `` ANTHROPIC_API_KEY=sk-ant-... `` Get a key at https://console.anthropic.com → API Keys.

3. Test in the MCP Inspector ``bash uv run mcp dev server.py ` Open the URL it prints. You'll see two tools: hello and tailor_resume`.

4. Run the offline guardrail tests ``bash uv run python test_guardrails.py ``

---

Connect to Claude Desktop

Add this to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "resume-tailor": {
      "command": "/Users/your-username/.local/bin/uv",
      "args": [
        "--directory",
        "/path/to/MCP_push1",
        "run",
        "server.py"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "sk-ant-..."
      }
    }
  }
}

Why full paths? Claude Desktop spawns the server in a minimal environment that may not have your shell PATH. Full paths are required.

Restart Claude Desktop after saving. The resume-tailor server will appear in the connectors list.

---

Usage

Via Claude Desktop

Once connected, ask Claude:

"Use the tailor_resume tool. Here's the job description: [paste JD]. Here's my resume: [paste LaTeX]."

Claude will call the tool automatically and explain the results to you.

JD ingestion modes

| Source | How to use | |--------|-----------| | Pasted text | Copy the JD text, pass it directly | | URL | Open the page, copy all text, paste it | | PDF | Open the PDF, copy text, paste it |

The tool takes plain text input. Claude Desktop can also read URLs and PDFs from your context window and pass the extracted text to the tool.

---

Output format

{
  "jd_keywords": ["Python", "ETL", "SQL"],
  "gap_summary": "No evidence of distributed systems experience.",
  "bullet_changes": [
    {
      "section": "Acme Corp / Data Engineer",
      "before": "\\resumeItem{Built pipeline tooling...}",
      "after":  "\\resumeItem{Built data pipeline tooling...}",
      "rationale": "Targets 'ETL' keyword — no new facts added."
    }
  ],
  "skills_changes": { "before": null, "after": null, "rationale": null },
  "guardrails_report": {
    "new_claims": [],
    "removed_metrics": [],
    "formatting_changes": []
  },
  "validation": {
    "passed": true,
    "issues": []
  }
}

---

Guardrails

Five checks run after every LLM response:

| Check | What it catches | |-------|----------------| | Self-reported new claims | Model admits hallucinating | | Self-reported removed metrics | Model admits stripping numbers | | "Before" not in resume | Model invented the source text | | LaTeX commands dropped | Formatting silently corrupted | | Word count >50% growth | Keyword stuffing |

If any check fails, validation.passed is false and issues lists exactly what went wrong.

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use Other servers.