Skip to main content
Glama
18boys

matchcv-mcp

by 18boys

MatchCV MCP Server

npm License: MIT

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

ats_check

Scores resume text 0–100 for ATS compatibility, with a recruiter take, prioritized issues and fixes, and detected strengths

analyze_job_description

Turns a job posting into structured JSON: title, company, seniority, industry, must-have / nice-to-have keywords, responsibilities

optimize_resume

Prioritized improvement suggestions with example rewrites, optionally targeted at a role, a JD, and specific missing keywords

roast_resume

Blunt recruiter-style critique plus an ATS score, returned as a public shareable report link

extract_resume_text

Reads a local PDF/DOC/DOCX/TXT resume and returns plain text, optionally AI-parsed into structured JSON

tailor_resume

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-mcp

Example prompts

  • "Read ~/Documents/resume.pdf and 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

ats_check, analyze_job_description, optimize_resume, roast_resume, structured parsing

3/day

10/day

Unlimited

tailor_resume

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

MATCHCV_BASE_URL

https://matchcv.co

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.js

Point it at a local MatchCV instance with MATCHCV_BASE_URL=http://localhost:3000.

License

MIT — see LICENSE.

Available Tools

6 tools
analyze_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
jdTextYesThe full job description text.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
resumeTextYesFull plain-text resume. Use extract_resume_text first if you only have a file.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesPath to the resume file on this machine (absolute, or relative to the CWD).
structuredNoAlso return AI-parsed structured resume JSON. Costs one daily AI credit. Defaults to false.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
jdTextNoTarget job description, for role-specific suggestions.
jobTitleNoTarget job title, e.g. "Senior Backend Engineer".
resumeTextYesFull plain-text resume.
missingMustHaveNoRequired keywords the resume is missing.
missingNiceToHaveNoPreferred keywords the resume is missing.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobTitleNoTarget job title to judge the resume against.
resumeTextYesFull plain-text resume.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
jdTextYesThe target job description.
resumeTextYesThe candidate's current resume as plain text.
templateIdNoResume template for the preview page. Defaults to classic-ats.
targetLanguageNo"en" forces English output; "original" (default) keeps the resume's own language.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 6 tool updatesv0.1.0
    • First observedanalyze_job_description
    • First observedats_check
    • First observedextract_resume_text
    • First observedoptimize_resume
    • First observedroast_resume
    • First observedtailor_resume

TDQS

A4.2/5.0

Scored across 6 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers