Forge powerful, ATS-friendly CVs tailored to any job - an MCP server for intelligent CV generation
npm install cv-forgebash
npm install -g cv-forge
`
Or install locally in your project:
`bash
npm install cv-forge
`
$3
1. Clone this repository
2. Install dependencies:
`bash
npm install
`
3. Build the project:
`bash
npm run build
`
Usage
$3
To use this MCP server with Claude Desktop, you need to add it to your Claude configuration file.
Step 1: Install cv-forge
`bash
npm install -g cv-forge
`
Step 2: Find your Claude Desktop config file
- Windows: %APPDATA%\Claude\claude_desktop_config.json
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
- Linux: ~/.config/Claude/claude_desktop_config.json
Step 3: Add the MCP server to your config
For global installation, add this to your claude_desktop_config.json file:
`json
{
"mcpServers": {
"cv-forge": {
"command": "cv-forge"
}
}
}
`
Or if installed locally, specify the full path:
`json
{
"mcpServers": {
"cv-forge": {
"command": "node",
"args": ["d:/TopSecret/cv-forge/build/index.js"],
"cwd": "d:/TopSecret/cv-forge"
}
}
}
`
Step 4: (Optional) Add environment configuration
You can customize the server with environment variables:
`json
{
"mcpServers": {
"cv-forge": {
"command": "cv-forge",
"env": {
"DEFAULT_OUTPUT_PATH": "D:/CV",
"PDF_BASE_FONT_SIZE": "12px",
"PDF_LINE_HEIGHT": "1.4"
}
}
}
}
`
Step 5: Restart Claude Desktop
After adding the configuration, restart Claude Desktop application.
Step 6: Verify Connection
In Claude Desktop, you should see the CV Forge tools available. You can ask Claude to use tools like:
- "Parse this job posting for me"
- "Generate a tailored CV based on my profile and this job"
- "Save my CV as a PDF file"
$3
You can also run the server directly for testing:
`bash
npm start
`
The server runs on stdio and communicates via the Model Context Protocol.
$3
#### 1. parse_job_requirements
Parses job requirements and extracts key information for CV tailoring.
Parameters:
- jobTitle (string, required): The job title/position
- company (string, required): Company name
- jobDescription (string, required): Full job description text
- requirements (array, optional): Specific requirements if separated
- preferredSkills (array, optional): Preferred skills if separated
- location (string, optional): Job location
- salaryRange (string, optional): Salary range if provided
#### 2. generate_cv_data
Generates tailored CV content based on user profile and job requirements.
Parameters:
- userProfile (object, required): Complete user profile information
- jobRequirements (object, required): Job requirements object
User Profile Structure:
`json
{
"personalInfo": {
"fullName": "John Doe",
"email": "john@example.com",
"phone": "+1-555-0123",
"location": "City, State",
"linkedIn": "linkedin.com/in/johndoe",
"github": "github.com/johndoe",
"website": "johndoe.com"
},
"summary": "Professional summary text...",
"experience": [
{
"jobTitle": "Software Engineer",
"company": "Tech Corp",
"location": "City, State",
"startDate": "2020-01",
"endDate": "2023-12",
"description": "Job description...",
"achievements": [
"Achievement 1",
"Achievement 2"
]
}
],
"education": [
{
"degree": "Bachelor of Science in Computer Science",
"institution": "University Name",
"location": "City, State",
"graduationYear": "2020",
"gpa": "3.8",
"honors": ["Magna Cum Laude"]
}
],
"skills": {
"technical": ["JavaScript", "Python", "React"],
"soft": ["Leadership", "Communication"],
"languages": ["English", "Spanish"],
"certifications": ["AWS Certified"]
},
"projects": [
{
"name": "Project Name",
"description": "Project description...",
"technologies": ["React", "Node.js"],
"url": "github.com/johndoe/project"
}
]
}
`
#### 3. save_cv_text
Saves CV content as a formatted text file.
Parameters:
- cvData (object, required): Tailored CV data object (from generate_cv_data)
- outputPath (string, required): Directory path where the CV should be saved
- fileName (string, optional): Custom filename (without extension), defaults to "generated_cv"
#### 4. generate_cv (Recommended - Main CV Generation Tool)
Generate tailored CV and save to specified location or default folder. Defaults to PDF format if no format is specified.
Parameters:
- userProfile (object, required): Complete user profile information
- jobRequirements (object, required): Job requirements object
- outputPath (string, optional): Directory path where the CV should be saved (uses DEFAULT_OUTPUT_PATH if not provided)
- fileName (string, optional): Custom filename (without extension), defaults to "professional_cv"
- format (string, optional): Output format - "pdf" (default), "html", or "markdown"
- pageSize (string, optional): PDF page size (e.g., 'A4', 'Letter', 'Legal') - uses PDF_PAGE_SIZE env var if not provided
- margins (object, optional): PDF margins with top, right, bottom, left properties (e.g., '10mm', '0.8in') - uses PDF_MARGIN_* env vars if not provided
#### 5. generate_and_save_cv_pdf (Legacy - Use generate_cv instead)
Generate tailored CV and save directly as professional PDF (combines CV generation and PDF creation in one step).
Parameters:
- userProfile (object, required): Complete user profile information
- jobRequirements (object, required): Job requirements object
- outputPath (string, optional): Directory path where the CV should be saved (uses DEFAULT_OUTPUT_PATH if not provided)
- fileName (string, optional): Custom filename (without extension), defaults to "professional_cv"
#### 6. generate_and_save_cv_markdown (Recommended)
Generate tailored CV and save directly as Markdown (combines CV generation and Markdown creation in one step).
Parameters:
- userProfile (object, required): Complete user profile information
- jobRequirements (object, required): Job requirements object
- outputPath (string, required): Directory path where the CV should be saved
- fileName (string, optional): Custom filename (without extension), defaults to "cv_markdown"
#### 7. generate_and_save_cv_html (Recommended)
Generate tailored CV and save directly as HTML (combines CV generation and HTML creation in one step).
Parameters:
- userProfile (object, required): Complete user profile information
- jobRequirements (object, required): Job requirements object
- outputPath (string, required): Directory path where the CV should be saved
- fileName (string, optional): Custom filename (without extension), defaults to "cv_html"
#### 8. generate_cv_pdf (Advanced)
Generate and save CV as a professional PDF document from pre-generated CV data.
Parameters:
- cvData (object, required): Tailored CV data object (from generate_cv_data)
- outputPath (string, required): Directory path where the CV should be saved
- fileName (string, optional): Custom filename (without extension), defaults to "professional_cv"
#### 9. generate_cv_markdown (Advanced)
Generate CV as Markdown format from pre-generated CV data.
Parameters:
- cvData (object, required): Tailored CV data object (from generate_cv_data)
- outputPath (string, required): Directory path where the CV should be saved
- fileName (string, optional): Custom filename (without extension), defaults to "cv_markdown"
#### 10. generate_cv_html (Advanced)
Generate CV as styled HTML document from pre-generated CV data.
Parameters:
- cvData (object, required): Tailored CV data object (from generate_cv_data)
- outputPath (string, required): Directory path where the CV should be saved
- fileName (string, optional): Custom filename (without extension), defaults to "cv_web"
$3
#### 11. generate_cover_letter (Recommended)
Generate a tailored cover letter for a specific job application. Returns formatted text that can be displayed on screen or saved as PDF.
Parameters:
- userProfile (object, required): Complete user profile information
- jobRequirements (object, required): Job requirements object
- hiringManagerName (string, optional): Name of the hiring manager if known
- format (string, optional): Output format - "text" (default) for on-screen display, "html" for styled viewing
#### 12. save_cover_letter_pdf
Generate and save a cover letter as PDF to specified location. Automatically extracts email addresses and hiring manager names from job descriptions.
Parameters:
- userProfile (object, required): Complete user profile information
- jobRequirements (object, required): Job requirements object
- outputPath (string, optional): Directory path where the cover letter should be saved
- fileName (string, optional): Custom filename (without extension), defaults to "cover_letter"
- hiringManagerName (string, optional): Name of the hiring manager if known
- pageSize (string, optional): PDF page size (e.g., 'A4', 'Letter', 'Legal')
- margins (object, optional): PDF margins with top, right, bottom, left properties
#### 13. generate_email_template
Generate a professional email template for job application. Automatically detects email addresses from job description.
Parameters:
- userProfile (object, required): Complete user profile information
- jobRequirements (object, required): Job requirements object
- templateType (string, optional): Type of email template - "application" (default), "follow_up", "inquiry", "thank_you"
- recipientEmail (string, optional): Recipient email address (optional, will use extracted email from job description if available)
- hiringManagerName (string, optional): Name of the hiring manager if known
#### 14. draft_complete_application (Recommended - One-Stop Solution)
Draft a complete job application package: CV, cover letter, and email template. Automatically generates PDF CV and cover letter, plus email template if email address is found in the job description.
Parameters:
- userProfile (object, required): Complete user profile information
- jobRequirements (object, required): Job requirements object
- outputPath (string, optional): Directory path where files should be saved
- baseFileName (string, optional): Base filename for generated files (without extension), defaults to "job_application"
- hiringManagerName (string, optional): Name of the hiring manager if known
Configuration
$3
The MCP server supports various configuration options via environment variables in the Claude Desktop config:
`json
{
"mcpServers": {
"cv-forge": {
"command": "node",
"args": ["path/to/cv-forge/build/index.js"],
"cwd": "path/to/cv-forge",
"env": {
"DEFAULT_OUTPUT_PATH": "D:/CV",
"TEMP_DIR": "C:/Users/YourName/AppData/Local/Temp/cv-maker",
"PDF_TIMEOUT": "300000",
"PDF_PAGE_SIZE": "A4",
"PDF_MARGIN_TOP": "10mm",
"PDF_MARGIN_RIGHT": "10mm",
"PDF_MARGIN_BOTTOM": "10mm",
"PDF_MARGIN_LEFT": "10mm",
"PDF_BASE_FONT_SIZE": "12px",
"PDF_LINE_HEIGHT": "1.4",
"PDF_H1_FONT_SIZE": "20px",
"PDF_H2_FONT_SIZE": "15px",
"PDF_H3_FONT_SIZE": "13px",
"PDF_PARAGRAPH_SPACING": "8px",
"PDF_SECTION_SPACING": "12px"
}
}
}
}
`
Configuration Options:
- DEFAULT_OUTPUT_PATH: Default directory for saving CV files (when outputPath is not provided or is "./")
- TEMP_DIR: Directory for temporary files during PDF generation
- PDF_TIMEOUT: Timeout for PDF generation in milliseconds
- PDF_PAGE_SIZE: Default PDF page size - defaults to 'A4'
- Common sizes: 'A4' (210×297mm), 'Letter' (8.5×11in), 'Legal' (8.5×14in)
- PDF_MARGIN_*: PDF page margins (top, right, bottom, left) - defaults to '10mm'
- PDF_BASE_FONT_SIZE: Base font size for CV body text (12px ≈ MS Word 9pt, 13px ≈ 10pt)
- PDF_LINE_HEIGHT: Line height for text (1.4 recommended for compact layout)
- PDF_H1_FONT_SIZE: Font size for name/title heading
- PDF_H2_FONT_SIZE: Font size for section headings
- PDF_H3_FONT_SIZE: Font size for job titles and subsections
- PDF_PARAGRAPH_SPACING: Spacing between paragraphs
- PDF_SECTION_SPACING: Spacing between major sections
Example Usage with Claude Desktop
Once connected to Claude Desktop, you can use natural language to interact with the CV maker:
$3
`
"Can you parse this job posting for me:
Job Title: Senior Software Engineer
Company: TechCorp Inc
Description: We are looking for a Senior Software Engineer with 5+ years of experience in JavaScript, React, and Node.js. Must have experience with cloud platforms and agile methodologies. Strong communication skills required."
`
$3
`
"Generate a tailored CV for me based on this job posting:
Job Title: Senior Software Engineer
Company: TechCorp Inc
Job Description: We are looking for a Senior Software Engineer with 5+ years of experience in JavaScript, React, and Node.js. Must have experience with cloud platforms and agile methodologies.
My Profile:
- Full Name: John Doe
- Email: john@example.com
- Phone: +1-555-0123
- Experience: 6 years as Software Engineer at various companies
- Skills: JavaScript, Python, React, Node.js, AWS, Docker
- Education: BS Computer Science from State University
Please save it to C:\Users\John\Documents\CVs with filename 'john_doe_senior_engineer_techcorp'"
`
Note: This will automatically generate a PDF file (default format) unless you specify a different format.
$3
`
"Can you generate my CV in multiple formats? I need:
1. A professional PDF for applications (default format)
2. A Markdown version for my GitHub
3. An HTML version for my website
Save them all to C:\Users\John\Documents\CVs with the base filename 'john_doe_cv'"
`
Or specify format explicitly:
`
"Generate my CV in HTML format and save it to C:\Users\John\Documents\CVs"
`
Or specify custom page size and margins for PDF:
`
"Generate my CV as a PDF with Letter page size and 1 inch margins on all sides, save it to C:\Users\John\Documents\CVs"
`
$3
`
"Generate a cover letter for the Senior Software Engineer position at TechCorp Inc. The job description mentions the hiring manager is Sarah Johnson and applications should be sent to careers@techcorp.com."
`
$3
`
"Create an email template for applying to the Senior Software Engineer position at TechCorp Inc. The job posting includes the email careers@techcorp.com and mentions Sarah Johnson as the hiring manager."
`
$3
`
"Draft a complete job application package for the Senior Software Engineer position at TechCorp Inc. Include CV, cover letter, and email template. Save everything to C:\Users\John\Documents\Applications with the base filename 'techcorp_application'."
`
This will generate:
- techcorp_application_CV.pdf - Tailored CV
- techcorp_application_Cover_Letter.pdf - Professional cover letter
- techcorp_application_Email_Template.txt - Email template (if email address found in job description)
$3
`
"Generate a follow-up email template for the Senior Software Engineer position I applied to at TechCorp Inc last week."
`
$3
If you want to use the tools directly (advanced usage):
1. Parse a job posting:
`json
{
"tool": "parse_job_requirements",
"args": {
"jobTitle": "Senior Software Engineer",
"company": "TechCorp Inc",
"jobDescription": "We are looking for a Senior Software Engineer with 5+ years of experience in JavaScript, React, and Node.js. Must have experience with cloud platforms and agile methodologies."
}
}
`
2. Generate tailored CV:
`json
{
"tool": "generate_cv_data",
"args": {
"userProfile": { / user profile object / },
"jobRequirements": { / job requirements object / }
}
}
`
3. Generate PDF CV:
`json
{
"tool": "generate_cv_pdf",
"args": {
"cvData": { / tailored CV data / },
"outputPath": "C:\\Users\\YourName\\Documents\\CVs",
"fileName": "senior_engineer_techcorp_cv"
}
}
`
4. Generate Markdown CV:
`json
{
"tool": "generate_cv_markdown",
"args": {
"cvData": { / tailored CV data / },
"outputPath": "C:\\Users\\YourName\\Documents\\CVs",
"fileName": "cv_for_github"
}
}
`
5. Generate HTML CV:
`json
{
"tool": "generate_cv_html",
"args": {
"cvData": { / tailored CV data / },
"outputPath": "C:\\Users\\YourName\\Documents\\CVs",
"fileName": "web_resume"
}
}
`
6. Save CV as text file:
`json
{
"tool": "save_cv_text",
"args": {
"cvData": { / tailored CV data / },
"outputPath": "C:\\Users\\YourName\\Documents\\CVs",
"fileName": "senior_engineer_techcorp_cv"
}
}
`
How It Works
1. Job Analysis: The server parses job descriptions to extract:
- Required technical skills
- Preferred qualifications
- Company industry and size
- Experience level requirements
2. CV Tailoring: Based on the analysis, it:
- Prioritizes relevant skills and experience
- Adjusts the professional summary
- Reorders and emphasizes matching achievements
- Incorporates job-specific keywords for ATS optimization
3. Output Generation: Creates a well-formatted text CV that:
- Uses ATS-friendly formatting
- Includes relevant keywords
- Maintains professional structure
- Highlights the most relevant qualifications
File Structure
`
cv-forge/
├── src/
│ ├── index.ts # Main MCP server
│ └── lib/
│ ├── job-parser.ts # Job requirement parsing logic
│ ├── cv-generator.ts # CV tailoring algorithms
│ ├── document-generator.ts # Multi-format document generation
│ └── word-generator.ts # Word document generation (future)
├── build/ # Compiled JavaScript files
├── package.json # Project configuration
├── tsconfig.json # TypeScript configuration
├── claude_desktop_config.example.json # Example configuration
└── README.md # This file
`
Development
$3
`bash
npm run build
`
$3
`bash
npm run dev
`
$3
- src/index.ts: Main MCP server with tool registration
- src/lib/job-parser.ts: Parses job requirements, extracts key information, emails, and hiring manager names
- src/lib/cv-generator.ts: Generates tailored CV content based on job requirements
- src/lib/cover-letter-generator.ts: Generates personalized cover letters for job applications
- src/lib/email-template-generator.ts: Creates professional email templates for various application scenarios
- src/lib/document-generator.ts: Multi-format document generation (PDF, HTML, Markdown)
- src/lib/word-generator.ts: (Future) Word document generation functionality
Troubleshooting
$3
- Ensure DEFAULT_OUTPUT_PATH is set in your Claude Desktop config
- Restart Claude Desktop after changing configuration
- Check that the path exists or the application has permission to create it
$3
- Adjust PDF_BASE_FONT_SIZE in environment variables (12px ≈ 9pt, 13px ≈ 10pt MS Word)
- Modify PDF_LINE_HEIGHT for tighter/looser spacing
- Restart Claude Desktop after changes
$3
- Check that output directory exists and is writable
- Verify TEMP_DIR path is valid
- Ensure sufficient disk space
$3
- Ensure page size is a valid format (A4, Letter, Legal, A3, A5, etc.)
- Check that the page size is supported by the PDF generator
- Use standard page size names (case-sensitive)
$3
- Use proper units: 'mm', 'cm', 'in', 'px', 'pt'
- Example: '10mm', '0.8in', '72pt'
- Restart Claude Desktop after changing environment variables
Future Enhancements
- Enhanced Word document generation with advanced formatting
- Multiple CV and cover letter templates (modern, classic, minimal)
- Advanced keyword optimization algorithms
- Integration with job boards for automatic job parsing
- LinkedIn profile integration for automatic profile data
- Interview preparation questions based on job requirements
- Salary negotiation guidance based on market data
- Multi-language support for international applications
- AI-powered writing suggestions and improvements
Dependencies
- @modelcontextprotocol/sdk: Core MCP functionality
- zod: Schema validation and type safety
- typescript: TypeScript compiler
- md-to-pdf: PDF generation from Markdown
- markdown-it: Markdown parsing and HTML conversion
- docx`: Word document generation (for future Word output)