matchcv-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@matchcv-mcpCheck my resume for ATS compatibility and tell me how to improve it."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MatchCV MCP Server
Resume tools for MCP clients. Check a resume against ATS rules, parse a job description into structured requirements, get rewrite-level suggestions, and generate a fully tailored resume with a shareable preview link — all from inside Claude, Cursor, Codex, or any other MCP-compatible client.
Powered by MatchCV · MCP docs · Get started free
Tools
Tool | What it does |
| Scores resume text 0–100 for ATS compatibility, with a recruiter take, prioritized issues and fixes, and detected strengths |
| Turns a job posting into structured JSON: title, company, seniority, industry, must-have / nice-to-have keywords, responsibilities |
| Prioritized improvement suggestions with example rewrites, optionally targeted at a role, a JD, and specific missing keywords |
| Blunt recruiter-style critique plus an ATS score, returned as a public shareable report link |
| Reads a local PDF/DOC/DOCX/TXT resume and returns plain text, optionally AI-parsed into structured JSON |
| Full pipeline — analyze the JD, rewrite the resume for that role, return the tailored JSON plus a preview page you can open and download as PDF |
Related MCP server: resume-kit MCP Server
Install
Requires Node.js 20+. No API key and no account are needed to start.
Claude Desktop / Claude Code
Add to your MCP config (claude_desktop_config.json, or run claude mcp add):
{
"mcpServers": {
"matchcv": {
"command": "npx",
"args": ["-y", "matchcv-mcp"]
}
}
}Cursor
~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"matchcv": {
"command": "npx",
"args": ["-y", "matchcv-mcp"]
}
}
}Codex CLI
~/.codex/config.toml:
[mcp_servers.matchcv]
command = "npx"
args = ["-y", "matchcv-mcp"]Any other MCP client
The server speaks MCP over stdio. Run it directly with:
npx -y matchcv-mcpExample prompts
"Read
~/Documents/resume.pdfand tell me how it scores against ATS.""Here's a job posting — what keywords is my resume missing?"
"Roast my resume, I want the honest version."
"Tailor my resume to this job description and give me the preview link."
Usage limits
The tools call MatchCV's public endpoints, so free usage is capped per day, per IP address:
Free (no account) | Signed in | Pro | |
| 3/day | 10/day | Unlimited |
| 1/day | 3/day | Unlimited |
Plain text extraction (extract_resume_text without structured: true) is unlimited — it runs no AI.
Quota errors come back as a readable message telling you how to raise the limit. See matchcv.co/pricing.
Configuration
Environment variable | Default | Purpose |
|
| API origin. Only needed to point at a development deployment. |
Privacy
This server holds no credentials and stores nothing locally. Resume and job description text is sent to the
MatchCV API over HTTPS for processing. roast_resume and tailor_resume create a page at an unguessable
public URL so you can open and share the result; the other tools store nothing. See the
privacy policy.
Development
npm install
npm run build
node dist/index.jsPoint it at a local MatchCV instance with MATCHCV_BASE_URL=http://localhost:3000.
License
MIT — see LICENSE.
Available Tools
6 toolsanalyze_job_descriptionExtract structured requirements from a job descriptionA
Parse a job posting into structured data: title, company, seniority, industry, must-have keywords, nice-to-have keywords, and key responsibilities. Feed the result into optimize_resume to find keyword gaps.
| Name | Required | Description | Default |
|---|---|---|---|
| jdText | Yes | The full job description text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavior. It clearly states the transformation that occurs and enumerates the extracted fields, which effectively sets expectations for what the tool returns. It does not mention edge-case behaviors like handling malformed or very short text, but those are relatively minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The main parsing behavior and output fields are front-loaded, and the downstream usage is included as a useful secondary note without bloating the entry.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema and no annotations, the description provides a solid set of expected output fields and a suggested follow-up action. It is sufficiently complete for an agent to call the tool correctly, though an explicit mention of the input format beyond 'full job description text' would make it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single parameter jdText with a clear description ('The full job description text.'), so schema coverage is 100%. The description adds minimal additional parameter meaning beyond calling it a job posting, which is already implied by the tool name and schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Parse') and identifies the resource ('a job posting') and the structured output fields. It clearly distinguishes the tool from siblings like extract_resume_text by focusing on job descriptions and structured requirements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this tool when a job posting needs to be converted into structured data. It also names a downstream tool, optimize_resume, giving the agent a next-step suggestion. However, it does not explicitly state when not to use this tool or compare it with other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ats_checkCheck a resume against ATS rulesA
Score resume text for applicant tracking system (ATS) compatibility. Returns a 0-100 score, a recruiter take, prioritized issues with concrete fixes, and detected strengths. Use for "is my resume ATS friendly", "why am I not getting interviews", or before tailoring to a specific job.
| Name | Required | Description | Default |
|---|---|---|---|
| resumeText | Yes | Full plain-text resume. Use extract_resume_text first if you only have a file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states what the tool returns (four categories of output) and implies a qualitative analysis. It does not disclose performance characteristics, rate limits, or whether the score is deterministic, but for an analysis tool returning a response these gaps are minor; the return contract is clearly described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and outputs, followed by concrete use cases. Every sentence earns its place; no fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter analysis tool with complete schema coverage, the description covers purpose, use cases, and return contract. It does not describe the output structure beyond the contents, but with no output schema provided, an agent would need to infer format; the score appears to be a number while the issues and strengths are presumably lists. A brief format hint would push this to 5, but the current description is workable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single parameter. The description adds context that the resume text should be plain text, and the parameter description goes further, advising to use extract_resume_text first if only a file is available. This is above the baseline of 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Score') and resource ('resume text for applicant tracking system'). It specifies the exact output: a 0-100 score, a recruiter take, prioritized issues with concrete fixes, and detected strengths. It is distinguishable from siblings like extract_resume_text (which appears to be a text extraction step) because it is an analysis of ATS compatibility rather than an extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: 'Use for is my resume ATS friendly, why am I not getting interviews, or before tailoring to a specific job.' It does not explicitly name alternative tools or say when not to use them, but the use cases and the sibling extract_resume_text's purpose (referenced in the parameter description) imply the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_resume_textExtract plain text from a local resume fileA
Read a local PDF/DOC/DOCX/TXT resume and return its plain text, optionally also parsing it into structured JSON (name, experience, education, skills). Text extraction is unlimited; set structured=true only when the structured form is needed, since that path uses a daily AI credit. Scanned/image-only PDFs will fail — ask the user to paste the text instead.
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Path to the resume file on this machine (absolute, or relative to the CWD). | |
| structured | No | Also return AI-parsed structured resume JSON. Costs one daily AI credit. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that text extraction is unlimited, that structured parsing consumes a daily AI credit, and that scanned PDFs will fail. This is useful and non-obvious behavioral context beyond what the schema offers. It could go further by mentioning file-not-found or permission errors, but the key failure mode is surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the core functionality, the second explains the cost trade-off of the optional parameter, the third warns about the key failure case. It is front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description covers the essential call contract: input formats, parameter behavior, cost implications, and a known failure mode. It doesn't specify the exact plain-text return shape, but that is inherently obvious, and the structured JSON fields are listed. Minor gaps like missing-file errors are acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds meaningful extra semantics by explaining the cost/credit implication of structured=true and reinforcing that it is optional and defaults to false. This goes beyond the schema's basic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Read a local PDF/DOC/DOCX/TXT resume'), the resource (local resume file), and the return value (plain text, optionally structured JSON). This distinguishes it clearly from sibling tools like ats_check or optimize_resume, which operate on extracted text rather than producing it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear guidance on when to set structured=true (only when the structured form is needed, since it costs a daily AI credit) and warns that scanned/image-only PDFs will fail, instructing the agent to ask the user to paste text instead. It does not explicitly name alternatives, but the use cases are clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_resumeGet targeted resume improvement suggestionsA
Return prioritized, rewrite-level suggestions for a resume, optionally aimed at a specific role or job description. Each suggestion has a type, priority, tip, and an example rewrite. Pass missingMustHave / missingNiceToHave from analyze_job_description to close keyword gaps.
| Name | Required | Description | Default |
|---|---|---|---|
| jdText | No | Target job description, for role-specific suggestions. | |
| jobTitle | No | Target job title, e.g. "Senior Backend Engineer". | |
| resumeText | Yes | Full plain-text resume. | |
| missingMustHave | No | Required keywords the resume is missing. | |
| missingNiceToHave | No | Preferred keywords the resume is missing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the output shape ('Each suggestion has a type, priority, tip, and an example rewrite'), prioritization, and that it returns suggestions rather than modifying the resume. It doesn't mention limits or potential errors, but the core behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core purpose is front-loaded, and the cross-tool integration instruction is concise and actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explains the return value structure. The input parameters are fully covered by the schema, and the description adds the only missing context: how to source optional keyword parameters. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantic value beyond the schema by explaining that missingMustHave / missingNiceToHave come from analyze_job_description and should be passed to close keyword gaps, clarifying the purpose and origin of those parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Return prioritized, rewrite-level suggestions for a resume') and clarifies optional role-targeting, which distinguishes it from sibling tools like analyze_job_description (analysis), tailor_resume (actual rewriting), and roast_resume (critique).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for optional inputs ('optionally aimed at a specific role or job description') and explicitly instructs to pass missingMustHave / missingNiceToHave from analyze_job_description to close keyword gaps. It does not explicitly name alternatives or exclusion conditions, but the cross-tool integration guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roast_resumeGet a blunt recruiter-style critique of a resumeA
Run the MatchCV "resume roast": a brutally honest recruiter reaction plus an ATS score. Returns a public shareable report URL. Use when the user wants candid feedback rather than a polite checklist.
| Name | Required | Description | Default |
|---|---|---|---|
| jobTitle | No | Target job title to judge the resume against. | |
| resumeText | Yes | Full plain-text resume. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral context. It discloses the output type (shareable public report URL) and the tone of the feedback, but does not mention side effects such as external processing, data retention, or privacy implications of producing a public link.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no waste. The main action and output are front-loaded, and the usage guidance is placed at the end effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two parameters, one required, the description covers the purpose, output contents, and returned artifact (public shareable URL). Since there is no output schema, the description sufficiently explains what the caller will receive, though privacy details remain implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully explains resumeText and jobTitle. The description adds no additional parameter context, but the baseline 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb and resource ('Run the MatchCV resume roast') and clarifies what it produces: a blunt recruiter reaction and an ATS score. It does not explicitly name a sibling tool, but the candid-versus-polite phrasing helps distinguish it from more diplomatic resume tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final sentence gives an explicit usage condition: use this tool when the user wants candid feedback rather than a polite checklist. It does not name alternative tools or state when not to use it, so it stays one level below the strongest guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailor_resumeGenerate a resume tailored to a specific jobA
The full MatchCV pipeline: analyze the job description, structure the resume, then rewrite it for that role with must-have keywords worked in and bullets rewritten. Returns the tailored resume JSON, an ATS score, and a public preview link the user can open and download as PDF. This is the heaviest tool — it uses one generation credit plus the parse and JD-analysis credits, so run it once the user has settled on a target job.
| Name | Required | Description | Default |
|---|---|---|---|
| jdText | Yes | The target job description. | |
| resumeText | Yes | The candidate's current resume as plain text. | |
| templateId | No | Resume template for the preview page. Defaults to classic-ats. | |
| targetLanguage | No | "en" forces English output; "original" (default) keeps the resume's own language. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure burden. It covers the process, return values, and cost implications. Could add more on persistence or side effects, but this is a generation tool and the main behaviors are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences: purpose, outputs, and usage caveat. No fluff, and the heaviest-tool warning is placed at the end, allowing the front-load to establish what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description appropriately explains return values (JSON, ATS score, preview link). It lacks a note on prerequisite steps like using extract_resume_text first, but the required param makes that obvious and the use-case is fully described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description underscores that resumeText and jdText feed the analysis/rewrite, but adds nothing about templateId or targetLanguage beyond the schema. Acceptable, but not additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (full pipeline: analyze, structure, rewrite) with concrete outcomes, distinguishing it from siblings like analyze_job_description or ats_check. Clearly positions this as the complete tailoring tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: run once the user has settled on a target job, and warns it is the heaviest tool due to credit usage. Does not explicitly list alternatives or when not to use it, but the timing guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
analyze_job_description - First observed
ats_check - First observed
extract_resume_text - First observed
optimize_resume - First observed
roast_resume - First observed
tailor_resume
TDQS
Scored across 6 tools
Most tools map to a distinct pipeline stage: extract, analyze, optimize, tailor. ats_check and roast_resume overlap somewhat since both return ATS scores and recruiter feedback, but their descriptions clearly separate polite actionable feedback from a candid shareable roast, and optimize_resume vs tailor_resume are differentiated by suggestion-level vs full rewrite.
All tool names use lowercase snake_case and mostly follow an imperative verb_noun pattern: analyze_job_description, optimize_resume, extract_resume_text, tailor_resume. ats_check is the only deviation, reading more like a noun phrase than check_ats, but the overall naming remains predictable and readable.
Six tools is a well-scoped size for a resume/CV assistant, covering input extraction, job description parsing, ATS feedback, optimization, roasting, and full tailoring. Each tool has a clear role in the workflow, and there is no sense of bloat or excessive granularity.
The tool surface covers the core resume workflow end to end: extract text, parse job descriptions, diagnose ATS issues, suggest improvements, and generate a fully tailored resume with a preview link. There are no obvious dead ends, and the descriptions include appropriate guidance for handling limitations such as scanned PDFs or AI credit usage.
Maintenance
Related MCP Connectors
Generate tailored, ATS-optimized resume PDFs and cover letters from a job description, over MCP.
Resume builder with native MCP — create and edit resumes from your AI assistant.
A job-search companion: tailor your CV to a role, score fit, fix ATS issues. Also via MCP.
Analyze job listings against your resume, track applications, and generate cover letters.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn intelligent, zero-cost MCP server that securely parses local resumes and compares them against live job postings for ATS scoring, skill gap analysis, and interview prep.1MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that evaluates, compares, aligns, generates, and validates resume materials against specific job postings, including ATS parseability checks, match scoring, and gap analysis.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables JD-aware resume matching through MCP tools, providing deterministic scoring, gap analysis, bullet rewrites, and tailored cover letter generation.7 npmMIT
- AlicenseAqualityCmaintenanceMCP server for AI-powered resume optimization and generation. It enables clients to optimize existing resumes or generate new ones from background info via LLM, producing formatted .docx and .pdf files.21MIT