resume-mcp
MCP server for maintaining a professional profile database and generating tailored, ATS-optimized resumes for specific job postings.
README
resume-mcp
MCP server for maintaining a professional profile database and generating tailored, ATS-optimized resumes for specific job postings.
Features
- Profile database — SQLite store for contact info, education, work experience, projects, and skills with proficiency ratings
- Job scraping — fetch and parse job postings from URLs; extract tech stack, experience level, requirements, and salary automatically
- Tailored resume generation — scores every experience and project against the job, selects the most relevant ones, and produces a clean LaTeX resume
- Relevance scoring — deterministic match score based on tech overlap, keyword coverage, and description similarity
- ATS/keyword analysis — identifies keyword gaps, naming mismatches (
ReactvsReact.js), weak action verbs, bullets lacking metrics, and unused profile items that could strengthen the resume - No extra API keys — all analysis is pure Python (regex + keyword matching). The calling LLM (Claude, GPT, etc.) does the creative rewriting using its own subscription
- Application tracker — auto-logs every generated resume to a formatted
applications.xlsxspreadsheet with color-coded scores and status tracking
How tailoring works
Each experience and project is scored 0–1 against the job posting:
| Signal | Weight |
|---|---|
| Tech stack tag overlap | 40% |
| Keyword match against requirements | 35% |
| Description keyword match | 25% |
Items are ranked by score, the top 4 experiences and top 4 projects are selected, and skills matching the JD are reordered to appear first.
Review pipeline
full_pipeline(url)— scrapes job → generates initial resume → runs deterministic analysis in one call- The analysis returns: keyword gaps, ATS issues (exact phrasing mismatches), weak verb flags, bullets missing metrics, and unused profile items from the DB
- The calling LLM acts as a hiring manager and rewrites bullets, weaves in missing keywords, reorders sections
save_optimized_resume(...)— saves the LLM-rewritten LaTeX back to the DB and compiles to PDF
No API keys are consumed in step 2. The LLM you're already talking to does the creative work.
Setup
cd ~/resume-mcp
pip install -r requirements.txt
# seed_profile.py is a template — open it and replace the placeholder data
# with your own info, then run it to populate the database:
python seed_profile.py
Tip: To keep your personal data out of git, copy the template to a private file:
cp seed_profile.py seed_yourname.py
echo "seed_yourname.py" >> .gitignore
python seed_yourname.py
Optional: Install pdflatex to compile resumes to PDF locally. Without it, .tex files are saved and can be compiled via Overleaf.
Claude Desktop config
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"resume-builder": {
"command": "python3",
"args": ["/Users/your-username/resume-mcp/server.py"]
}
}
}
Data storage
| Path | Contents |
|---|---|
~/.resume-mcp/profile.db |
SQLite profile database |
~/.resume-mcp/generated/ |
Generated .tex and .pdf files |
~/.resume-mcp/applications.xlsx |
Application tracker spreadsheet |
MCP tools
Profile
| Tool | Description |
|---|---|
get_profile |
Return full profile (contact, education, experience, projects, skills) |
set_contact_info |
Set name, email, phone, LinkedIn, GitHub, website, location |
add_experience |
Add a work experience entry with bullet points and tech tags |
update_experience |
Update fields on an existing experience by ID |
delete_experience |
Remove an experience by ID |
add_project |
Add a project with tech stack, bullets, URL, and status |
update_project |
Update fields on an existing project by ID |
delete_project |
Remove a project by ID |
add_education |
Add an education entry with GPA, coursework, honors |
add_skill |
Add or update a skill with category and proficiency (1–5) |
remove_skill |
Remove a skill |
bulk_add_skills |
Add multiple skills at once via {"Category": ["Skill1", "Skill2"]} |
Job scraping
| Tool | Description |
|---|---|
scrape_job_posting |
Fetch a job posting URL and extract structured data |
analyze_job_from_text |
Parse a job from pasted text when URL scraping fails |
Resume generation
| Tool | Description |
|---|---|
generate_resume |
Generate a tailored resume given job details |
scrape_and_generate |
One-shot: scrape URL and immediately generate resume |
match_score |
Check profile-to-job match without generating a resume |
get_resume_latex |
Retrieve full LaTeX source of a previously generated resume |
list_generated_resumes |
List recent resumes with job details and match scores |
Review & optimization
| Tool | Description |
|---|---|
full_pipeline |
Scrape → generate → analyze in one call; returns everything the LLM needs to rewrite |
review_resume_against_job |
Run deterministic analysis on a resume by ID or raw LaTeX |
get_resume_with_context |
Get resume LaTeX + job info + full profile in one call for rewriting |
save_optimized_resume |
Save LLM-rewritten LaTeX back to DB and compile to PDF |
Application tracker
| Tool | Description |
|---|---|
log_application |
Manually log an application to the spreadsheet |
update_application_status |
Update status (Generated → Applied → Interview → Offer/Rejected) |
get_application_stats |
Summary stats: total, by-status breakdown, average scores |
Usage examples
These are natural language commands you'd send to Claude with the MCP server connected:
Generate a resume for this job posting: [paste URL]
Scrape this job and run the full pipeline so you can optimize my resume: [URL]
Add a new experience: I worked at Acme Corp as a backend engineer from Jan 2024 to present.
Bullets: [...]
What's my match score for a job that requires React, TypeScript, and AWS experience?
Update my application status for row 3 to "Interview"
Show me my application stats
Recommended Servers
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.
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.
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.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
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.
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.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
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.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.