Skip to main content
Glama
ikrigel
by ikrigel

MCP CV Modifier Server

An MCP (Model Context Protocol) server that intelligently modifies CVs based on job descriptions using keyword extraction and strategic enhancement.

✅ Cross-Platform Support:

Desktop/Server: Windows • macOS • Linux • Unix

Mobile: iOS (Remote) • Android (Remote + Termux)

Full installation guides for each platform are available in PLATFORM_COMPATIBILITY.md.

Note: The MCP server runs as a Node.js backend. For mobile devices (iOS/Android), access the server remotely from desktop or use tunneling services. See PLATFORM_COMPATIBILITY.md - Mobile Platforms for details.

Features

  • Extract Job Descriptions: Scrape job postings from LinkedIn and other job sites to extract requirements and keywords

  • Parse Multiple CV Formats: Support for PDF, DOCX, Markdown, and JSON CV formats

  • Multi-Language Support: Full support for Hebrew and English with automatic language detection

  • Hebrew Language Features:

    • Complete Right-to-Left (RTL) text handling

    • Hebrew character support (Unicode U+0590 to U+05FF)

    • Automatic Hebrew section header translation

    • 50+ Hebrew technical skill translations

    • Mixed Hebrew-English content support

  • Keyword-Based Enhancement: Strategically enhance CVs by incorporating relevant job keywords

  • Multiple Output Formats: Generate modified CVs in PDF, DOCX, and/or Markdown formats with language-aware formatting

  • CV-Job Match Analysis: Analyze how well a CV matches a job description without modifications

  • Natural Language Enhancement: Uses multiple modification levels (minimal, moderate, aggressive) to ensure natural-sounding enhancements

Related MCP server: CV Writer MCP Server

Architecture

src/
├── index.ts                    # MCP server entry point
├── config.ts                   # Configuration management
├── types/
│   ├── cv.types.ts            # CV data structures with language metadata
│   ├── job.types.ts           # Job description structures
│   ├── language.types.ts       # Language configuration & RTL markers
│   └── mcp.types.ts           # MCP tool definitions
├── parsers/                   # CV parsing (Phase 2)
│   ├── cv-parser.ts           # Main coordinator with language detection
│   ├── pdf-parser.ts
│   ├── docx-parser.ts
│   ├── markdown-parser.ts
│   └── json-parser.ts
├── scrapers/                  # Web scraping (Phase 3)
├── nlp/                       # NLP & keyword extraction (Phase 4)
│   ├── keyword-extractor.ts
│   ├── skill-matcher.ts
│   ├── text-analyzer.ts
│   └── hebrew-keywords.ts     # 50+ Hebrew skill translations
├── modifiers/                 # CV modification logic (Phase 5)
├── generators/                # Document generation (Phase 6)
│   ├── markdown-generator.ts
│   ├── markdown-generator-rtl.ts # Hebrew RTL support
│   ├── pdf-generator.ts
│   └── docx-generator.ts
├── tools/                     # MCP tool implementations
└── utils/
    ├── logger.ts              # Logging utility
    ├── language-detector.ts   # Language detection & analysis
    ├── rtl-formatter.ts       # RTL text formatting
    └── validators.ts          # Input validation

Installation

Prerequisites

  • Node.js 18+ (Download)

  • npm (comes with Node.js) or yarn

  • Git (optional, for cloning the repository)

Cross-Platform Support

This MCP server runs on Windows, macOS, Linux, and Unix systems. Follow the OS-specific instructions below.

Windows Installation

  1. Clone or download the project

cd c:\mcp-server-cv-modify
  1. Install dependencies

npm install
  1. Install Playwright browsers (for web scraping)

npx playwright install chromium
  1. Create environment file

Copy-Item .env.example .env
# Edit .env with your preferred editor (Notepad, VS Code, etc.)
  1. Verify installation

npm run build
npm start

macOS Installation

  1. Clone or download the project

cd ~/mcp-server-cv-modify
# Or wherever you downloaded/cloned it
  1. Install dependencies

npm install
  1. Install Playwright browsers (for web scraping)

npx playwright install chromium
  1. Create environment file

cp .env.example .env
# Edit .env with your preferred editor (nano, vim, VS Code, etc.)
nano .env  # or: open -a TextEdit .env
  1. Verify installation

npm run build
npm start

Linux Installation

  1. Clone or download the project

cd ~/mcp-server-cv-modify
# Or wherever you downloaded/cloned it
  1. Install dependencies

npm install
  1. Install Playwright browsers (for web scraping)

npx playwright install chromium
  1. Create environment file

cp .env.example .env
# Edit .env with your preferred editor (nano, vim, VS Code, etc.)
nano .env  # or: vi .env
  1. Verify installation

npm run build
npm start

Note for Linux users: Playwright may require additional system dependencies. If you encounter issues, install them with:

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y libgbm1 libxss1 libatk1.0-0 libatk-bridge2.0-0 libcups2 libxkbcommon0 libnss3 libxcomposite1

# Fedora/RHEL
sudo dnf install libxss libxcomposite libxkbcommon

# Arch Linux
sudo pacman -S libxss libxcomposite libxkbcommon

Unix Installation

  1. Clone or download the project

cd /opt/mcp-server-cv-modify
# Or wherever you want to install it
  1. Install dependencies

npm install
  1. Install Playwright browsers (for web scraping)

npx playwright install chromium
  1. Create environment file

cp .env.example .env
# Edit .env with your preferred editor
nano .env  # or: vi .env
  1. Verify installation

npm run build
npm start

Building

Build the TypeScript project:

npm run build

This compiles TypeScript to JavaScript in the dist/ directory.

Running

Development Mode

All Platforms:

npm run dev

This starts the server with auto-reload when files change.

Production Mode

All Platforms:

npm run build
npm start

Running in the Background

Windows (PowerShell):

# Start in background
Start-Process node "dist\index.js"

# Or with logging
Start-Process node "dist\index.js" -RedirectStandardOutput "logs\output.log" -RedirectStandardError "logs\error.log"

macOS/Linux/Unix (Bash):

# Start in background
nohup npm start > logs/output.log 2>&1 &

# Or using screen
screen -d -m npm start

# Or using tmux
tmux new-session -d -s mcp-server "npm start"

Windows (Command Prompt):

# Using start command
start node dist\index.js

# Or using npm with npm-run-all for persistent execution
npm start

Debugging

All Platforms: Enable debug logging by setting the environment variable:

# Linux/macOS/Unix
export LOG_LEVEL=debug
npm start

# Windows PowerShell
$env:LOG_LEVEL = "debug"
npm start

# Windows Command Prompt
set LOG_LEVEL=debug
npm start

Or edit .env and set LOG_LEVEL=debug

Mobile Support

This server can be accessed from iOS and Android devices through several methods:

  • Remote Access (Same WiFi) - Easiest, ~5 minutes setup

  • Tunneling Service (Ngrok, Cloudflare) - Anywhere access, ~10 minutes

  • Cloud Deployment (Railway, Render, Heroku) - Always-on, ~15-30 minutes

  • Termux (Android only) - Local Node.js installation, ~20-30 minutes

  • Custom Mobile App - Native iOS/Android app development

Quick Start for Mobile:

1. Start server on desktop: npm start
2. Find desktop IP: ipconfig (Windows) or ifconfig (macOS/Linux)
3. Open on mobile: http://[desktop-ip]:3000

For detailed mobile setup guides, examples, and advanced options, see MOBILE_USAGE.md.

MCP Tools

1. extract_job_description

Extracts job description and keywords from a job posting URL.

Input:

  • url (string, required): Job posting URL

  • extractKeywords (boolean, default: true): Auto-extract and categorize keywords

Output:

  • Job title, company, location

  • Full description text

  • Extracted keywords with scores and categories

  • Categorized skills (technical, soft skills, tools)

Example:

{
  "url": "https://www.linkedin.com/jobs/view/123456",
  "extractKeywords": true
}

2. modify_cv

Modifies a CV to emphasize relevant keywords for a job.

Input:

  • cvData (string, required): CV content (base64, raw text, or file path)

  • cvFormat (enum, required): "pdf" | "docx" | "markdown" | "json"

  • jobKeywords (array, optional): Manual keyword list

  • jobUrl (string, optional): Auto-extract keywords from URL

  • outputFormat (enum, default: "pdf"): "pdf" | "docx" | "markdown" | "all"

  • modificationLevel (enum, default: "moderate"): "minimal" | "moderate" | "aggressive"

Output:

  • Modified CV in requested format(s)

  • Modification summary with before/after match scores

  • List of changes and keywords added

  • Improvement suggestions

Example:

{
  "cvData": "base64_encoded_pdf",
  "cvFormat": "pdf",
  "jobUrl": "https://www.linkedin.com/jobs/view/123456",
  "outputFormat": "pdf",
  "modificationLevel": "moderate"
}

3. analyze_cv_job_match

Analyzes how well a CV matches a job description without modifying it.

Input:

  • cvData (string, required): CV content

  • cvFormat (enum, required): Format type

  • jobUrl (string, required): Job posting URL

Output:

  • Overall match score (0-100%)

  • Missing keywords and skills

  • Section-by-section analysis

  • Specific improvement recommendations

Example:

{
  "cvData": "markdown_cv_content",
  "cvFormat": "markdown",
  "jobUrl": "https://www.linkedin.com/jobs/view/123456"
}

Hebrew Language Support

This MCP server includes full support for Hebrew language with complete Right-to-Left (RTL) text handling. See HEBREW_SUPPORT.md for comprehensive documentation.

Features:

  • Automatic Language Detection: Detects Hebrew vs English content automatically

  • Full RTL Formatting: Proper right-to-left text direction and indentation

  • Hebrew Section Headers: All CV section headers automatically translated to Hebrew

  • 50+ Hebrew Skill Translations: Common technical and soft skills translated to Hebrew

  • Mixed Language Support: Handles mixed Hebrew-English content with proper Unicode markers

  • Hebrew Unicode Support: Full support for Hebrew characters (U+0590 to U+05FF)

Example - Hebrew CV Input:

{
  "cvData": "שם: דוד כהן\nאימייל: david@example.com\n\nניסיון:\nמפתח תוכנה בTech Corp",
  "cvFormat": "markdown",
  "jobUrl": "https://example.com/hebrew-job"
}

Output automatically includes:

  • RTL text direction

  • Hebrew section headers

  • Proper indentation and spacing

  • Mixed language directional markers where needed

For complete Hebrew language documentation, examples, and usage, see HEBREW_SUPPORT.md.

Configuration

Edit .env to configure the server:

# Node environment
NODE_ENV=production

# Rate limiting (to avoid scraping detection)
SCRAPER_MIN_DELAY_MS=5000
SCRAPER_MAX_CONCURRENT=1

# Caching
CACHE_ENABLED=true
CACHE_TTL_HOURS=24

# Browser
PLAYWRIGHT_HEADLESS=true
BROWSER_TIMEOUT_MS=30000

# NLP
NLP_MIN_KEYWORD_SCORE=0.3
NLP_MAX_KEYWORDS=50

# CV Modification
CV_MODIFICATION_CONFIDENCE_THRESHOLD=0.6
CV_MAX_KEYWORDS_PER_BULLET=2

# Language & Localization
DETECT_LANGUAGE=true
EMBED_RTL_MARKERS=true
NORMALIZE_HEBREW_SPACING=true
USE_HEBREW_CHARACTER_WIDTHS=true

Integration with Claude Desktop

To use this MCP server with Claude Desktop, add it to your MCP servers configuration. The configuration file location varies by operating system.

Windows

  1. Open or create %APPDATA%\Claude\claude_desktop_config.json

    • Full path: C:\Users\[YourUsername]\AppData\Roaming\Claude\claude_desktop_config.json

    • You can quickly open AppData with: Win+R, type %appdata%, press Enter

  2. Add this configuration:

{
  "mcpServers": {
    "cv-modifier": {
      "command": "node",
      "args": ["C:\\path\\to\\mcp-server-cv-modify\\dist\\index.js"],
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}
  1. Replace C:\path\to\mcp-server-cv-modify with your actual installation path

  2. Restart Claude Desktop

macOS

  1. Open or create ~/Library/Application Support/Claude/claude_desktop_config.json

    nano ~/Library/Application\ Support/Claude/claude_desktop_config.json
  2. Add this configuration:

{
  "mcpServers": {
    "cv-modifier": {
      "command": "node",
      "args": ["/path/to/mcp-server-cv-modify/dist/index.js"],
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}
  1. Replace /path/to/mcp-server-cv-modify with your actual installation path (e.g., ~/mcp-server-cv-modify or /Users/username/Documents/mcp-server-cv-modify)

  2. Restart Claude Desktop

Linux

  1. Open or create ~/.config/Claude/claude_desktop_config.json

    nano ~/.config/Claude/claude_desktop_config.json
  2. Add this configuration:

{
  "mcpServers": {
    "cv-modifier": {
      "command": "node",
      "args": ["/path/to/mcp-server-cv-modify/dist/index.js"],
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}
  1. Replace /path/to/mcp-server-cv-modify with your actual installation path

  2. Restart Claude Desktop

Unix

  1. Open or create ~/.config/Claude/claude_desktop_config.json (or /etc/claude/claude_desktop_config.json for system-wide installation)

    nano ~/.config/Claude/claude_desktop_config.json
  2. Add this configuration:

{
  "mcpServers": {
    "cv-modifier": {
      "command": "node",
      "args": ["/path/to/mcp-server-cv-modify/dist/index.js"],
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}
  1. Replace /path/to/mcp-server-cv-modify with your actual installation path

  2. Restart Claude Desktop

Finding Your Installation Path

Windows:

# Command Prompt or PowerShell
cd c:\mcp-server-cv-modify
echo %cd%
# Or simply: echo C:\path\to\mcp-server-cv-modify

macOS/Linux/Unix:

pwd  # Shows current directory
# If in mcp-server-cv-modify folder, shows the full path
# Or use: realpath .

Verify Installation

After adding the configuration and restarting Claude Desktop:

  1. In Claude, you should see the CV Modifier tools available

  2. Try using one of the tools: extract_job_description, modify_cv, or analyze_cv_job_match

  3. If tools don't appear, check the Claude Desktop logs (Settings > Logs)

Development

Project Structure

  • src/index.ts - MCP server entry point

  • src/types/ - TypeScript type definitions

  • src/parsers/ - CV parsing implementations

  • src/scrapers/ - Web scraping implementations

  • src/nlp/ - NLP and keyword extraction

  • src/modifiers/ - CV modification logic

  • src/generators/ - Document generation

  • src/tools/ - MCP tool handlers

  • src/utils/ - Utility functions

  • tests/ - Test files

Running Tests

npm test

Run specific test categories:

npm run test:unit      # Unit tests only
npm run test:integration # Integration tests only

Implementation Phases

✅ Phase 1: Foundation & MCP Server Setup

  • TypeScript configuration

  • MCP server setup with three tools

  • Type definitions

  • Basic error handling and logging

📋 Phase 2: CV Parsing

  • PDF parsing (pdf-parse)

  • DOCX parsing (mammoth)

  • Markdown parsing (marked)

  • JSON/structured data parsing

  • Unified CV data structure extraction

📋 Phase 3: Web Scraping

  • LinkedIn job scraping with Playwright

  • Generic job site scraping

  • Rate limiting and caching

  • Ethical scraping practices

📋 Phase 4: NLP & Keywords

  • Keyword extraction using wink-nlp and retext

  • Skill dictionary and categorization

  • Keyword scoring and relevance ranking

  • CV-job skill matching

📋 Phase 5: CV Modification

  • Rule-based modification system

  • Keywords section enhancement

  • Bullet point enhancement

  • Summary rewriting

  • Multiple modification levels

📋 Phase 6: Document Generation

  • PDF generation with pdf-lib

  • DOCX generation with docx library

  • Markdown generation

  • Professional formatting

📋 Phase 7: Integration & Tools

  • Wire all components into MCP tools

  • Comprehensive error handling

  • Input validation with Zod

📋 Phase 8: Testing, Documentation & Hebrew Support

  • Unit tests for all components

  • Integration tests

  • Complete documentation

  • Full Hebrew language support with RTL formatting

  • Hebrew keyword dictionary (50+ translations)

  • Language detection and metadata

  • RTL-aware document generators

This tool is designed for ethical use only:

  • ✅ Only scrapes publicly accessible job postings

  • ✅ Respects robots.txt and rate limiting

  • ✅ Uses realistic delays to avoid detection

  • Caches results to minimize scraping requests

  • ✅ Does not persist user data

  • ✅ All processing is local

Troubleshooting

General Issues

Issue: "Cannot find module" errors

Solution: Make sure dependencies are installed:

npm install
npx playwright install chromium

If you still get errors on Linux, you may need to install additional system libraries:

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y python3 build-essential

# Fedora
sudo dnf install python3 gcc-c++

# macOS (using Homebrew)
brew install python3

Issue: Browser timeout errors

Solution: Increase BROWSER_TIMEOUT_MS in .env:

All Platforms:

BROWSER_TIMEOUT_MS=60000  # 60 seconds

On Windows, you can also increase the timeout temporarily:

$env:BROWSER_TIMEOUT_MS = "60000"
npm start

Issue: Rate limiting / scraping detection

Solution: Increase delay between requests:

All Platforms:

SCRAPER_MIN_DELAY_MS=10000  # 10 seconds

Issue: Port already in use (if running as service)

Solution: Check what's using the port and either stop that process or change the port:

Windows:

# Find process using port (requires admin)
netstat -ano | findstr :9000
# Kill the process
taskkill /PID <PID> /F

macOS/Linux/Unix:

# Find process using port
lsof -i :9000
# Kill the process
kill -9 <PID>

Issue: Permission denied errors

Solution:

Windows: Run Command Prompt or PowerShell as Administrator

macOS/Linux/Unix:

# Make scripts executable
chmod +x node_modules/.bin/*

# Or use sudo for npm install if needed
sudo npm install

Issue: Node.js command not found

Solution:

Ensure Node.js is installed and in your PATH:

Windows:

  • Download from https://nodejs.org/

  • Run the installer and ensure "Add to PATH" is checked

  • Restart your terminal

macOS:

# Using Homebrew
brew install node

Linux (Ubuntu/Debian):

sudo apt-get update
sudo apt-get install nodejs npm

Linux (Fedora):

sudo dnf install nodejs npm

Verify installation:

node --version
npm --version

Hebrew Language Issues

Issue: Hebrew characters appear as squares or garbled

Solution:

  • Ensure UTF-8 encoding in viewing application

  • Update system fonts to include Hebrew font support

  • Use modern applications that support Unicode (Word, modern browsers)

  • Check document's HTML meta tags have proper lang="he" and dir="rtl"

Issue: RTL text still displays left-to-right

Solution:

  • Verify application respects HTML dir attribute

  • Check document metadata includes proper RTL markers

  • Enable EMBED_RTL_MARKERS=true in .env configuration

  • Review output in application that supports RTL content (Word, modern browsers)

Issue: Mixed Hebrew-English text malformed

Solution:

  • Ensure EMBED_RTL_MARKERS=true in configuration

  • Verify text encoding is UTF-8

  • Check that text contains proper Unicode directional markers

  • Enable debug logging: LOG_LEVEL=debug to diagnose issues

Issue: Hebrew keywords not detected

Solution:

  • Check exact spelling of Hebrew words

  • Verify text is properly encoded as UTF-8

  • Review HEBREW_SUPPORT.md for list of supported keywords

  • Enable debug logging to see detected language and composition

Performance

Expected performance metrics:

  • CV parsing: < 5 seconds

  • Job scraping: < 30 seconds

  • Full modification pipeline: < 45 seconds

  • CV parsing accuracy: > 95%

Future Enhancements

  • AI-powered CV rewriting using Claude API

  • Cover letter generation

  • Additional language support (Arabic, French, Spanish, etc.)

  • ATS optimization analysis

  • Batch processing multiple CVs

  • Analytics dashboard

  • Hebrew date formatting and name parsing

  • BiDi (Bidirectional) algorithm refinement

Documentation

This project includes comprehensive documentation:

  • README.md - Quick start guide and basic usage (this file)

  • PLATFORM_COMPATIBILITY.md - Detailed OS-specific setup for Windows, macOS, Linux, Unix, iOS, and Android

  • MOBILE_USAGE.md - Complete guide to using the server from iOS and Android devices (remote access, tunneling, Termux, cloud deployment)

  • HEBREW_SUPPORT.md - Complete Hebrew language feature documentation

  • CLAUDE.md - Comprehensive feature reference and API documentation

Support

For issues or questions:

  1. Mobile Usage (iOS/Android): See MOBILE_USAGE.md for setup guides and examples

  2. OS-Specific Help: See PLATFORM_COMPATIBILITY.md for your operating system

  3. Hebrew Language Help: See HEBREW_SUPPORT.md

  4. Feature Documentation: Review CLAUDE.md

  5. General Help: Check the GitHub Issues

  6. Debugging: Enable debug logging with LOG_LEVEL=debug in .env

System Requirements by Operating System

Windows (10/11)

  • Minimum RAM: 2 GB (4 GB recommended)

  • Minimum Disk Space: 500 MB

  • Node.js: 18.0.0 or later

  • Required Components:

    • Build Tools for Visual Studio (optional, for native modules)

    • .NET Framework 4.5+ (for some system libraries)

  • Supported Shells: PowerShell, Command Prompt, Windows Terminal

  • Notes:

    • Uses backslashes for paths (e.g., C:\path\to\file)

    • Environment variables set differently in different shells

    • Run as Administrator may be needed for some operations

macOS

  • Minimum Version: macOS 10.13 (High Sierra)

  • Minimum RAM: 2 GB (4 GB recommended)

  • Minimum Disk Space: 500 MB

  • Node.js: 18.0.0 or later

  • Required Components:

    • Xcode Command Line Tools: xcode-select --install

    • Homebrew (optional but recommended)

  • Supported Shells: zsh (default), bash

  • Notes:

    • Uses forward slashes for paths

    • Configuration files in ~/Library/Application Support/

    • May need to allow apps from "unidentified developers" in System Preferences

Linux

  • Minimum RAM: 1 GB (2 GB recommended)

  • Minimum Disk Space: 500 MB

  • Node.js: 18.0.0 or later

  • Required Components:

    • Build tools: gcc, g++, make, python3

    • Libraries for Playwright: libxss1, libxcomposite1, etc.

  • Supported Distributions:

    • Ubuntu/Debian 18.04+

    • Fedora 30+

    • CentOS 7+

    • Arch Linux

    • openSUSE

  • Notes:

    • Uses forward slashes for paths

    • May need to install additional system libraries

    • Often runs as non-root user

    • Configuration files in ~/.config/

Unix (FreeBSD, OpenBSD, etc.)

  • Minimum RAM: 1 GB (2 GB recommended)

  • Minimum Disk Space: 500 MB

  • Node.js: 18.0.0 or later (available via ports/packages)

  • Required Components:

    • Build tools: gcc, gmake, python3

    • Webkit libraries for Playwright

  • Notes:

    • Uses forward slashes for paths

    • Requires ports/packages system to be updated

    • Some dependencies may need to be built from source

    • Sandbox restrictions may apply (OpenBSD)

Performance Considerations

Hardware Optimization

Low-Spec Machines (1-2 GB RAM):

  • Reduce SCRAPER_MAX_CONCURRENT to 1

  • Disable CACHE_ENABLED if storage is limited

  • Use modificationLevel: "minimal" for CV modifications

Standard Machines (4-8 GB RAM):

  • Default configuration works well

  • Can run multiple concurrent jobs

High-End Machines (16+ GB RAM):

  • Can increase SCRAPER_MAX_CONCURRENT to 2-3

  • Cache will improve performance significantly

Expected Performance by OS

Operation

Windows

macOS

Linux

Unix

CV Parsing (PDF)

2-4s

1-3s

1-3s

2-4s

Job Scraping

20-30s

15-25s

15-25s

20-30s

Full Pipeline

30-45s

25-40s

25-40s

30-50s

Performance depends on:

  • Network speed (for web scraping)

  • Disk speed (SSD vs HDD)

  • System load

  • Browser capabilities (Playwright)

License

MIT License - See LICENSE file for details

Changelog

v1.1.0 - Hebrew Language Support (Current)

Added:

  • ✅ Full Hebrew language detection and support

  • ✅ Right-to-Left (RTL) text formatting with proper indentation

  • ✅ 50+ Hebrew skill dictionary with technical and soft skill translations

  • ✅ Hebrew section header translations (Experience, Education, Skills, etc.)

  • ✅ Mixed Hebrew-English content support with Unicode directional markers

  • ✅ Hebrew-aware CV parsers and document generators

  • ✅ RTL-aware Markdown generator

  • ✅ Language detection as standard feature in CV parsing

  • ✅ Comprehensive Hebrew support documentation

Improved:

  • Enhanced CV metadata with language tracking

  • Better text composition analysis for language detection

  • Improved character encoding handling

v1.0.0 - Initial Release

  • Phase 1-7: Complete MCP server implementation

  • Three core MCP tools: extract_job_description, modify_cv, analyze_cv_job_match

  • Support for PDF, DOCX, Markdown, and JSON CV formats

  • Web scraping from LinkedIn and other job posting sites

  • Keyword extraction and CV modification logic

  • Multiple document output formats

Available Tools

3 tools
analyze_cv_job_matchA

Analyzes how well a CV matches a job description without modifying it. Scores the CV against job requirements and provides specific improvement suggestions.

ParametersJSON Schema
NameRequiredDescriptionDefault
cvDataYesCV content (base64, raw text, or file path)
jobUrlYesURL of the job posting to analyze against
cvFormatYesFormat of the input CV

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose read-only behavior, which it does via 'without modifying it.' It also mentions scoring and suggestion generation. However, it does not describe output format, potential failures, or any security/privacy aspects related to sending CV data.

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 a single sentence that is direct and packs essential information (purpose, non-modifying behavior, output type) without filler. It is well-structured and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must explain return values; it mentions scoring and suggestions but not their structure or format. It also does not address potential prerequisites (e.g., job description extraction) or edge cases, making it adequate but incomplete for a tool with no output schema.

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 coverage is 100% with each parameter described clearly, so the description adds little beyond confirming the analysis outcome. The description does not provide additional detail on parameter formats, constraints, or interdependencies that are not already in the 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 ('Analyzes') with a clear resource ('CV') and target ('job description'), and explicitly states it does not modify anything. This distinguishes it from sibling tools like modify_cv, which would alter the CV.

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 implies usage context: it is for analysis only, contrasting with modification. However, it does not explicitly name sibling tools or provide exclusion criteria, though the 'without modifying it' phrase provides clear differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_job_descriptionA

Extracts job description and keywords from a LinkedIn or job posting URL. Scrapes the job posting, extracts key information, and identifies important keywords and skills.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the job posting (LinkedIn, Indeed, Glassdoor, etc.)
extractKeywordsNoWhether to automatically extract and categorize keywords from the job description

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It mentions scraping and extracting keywords, which adds context, but it does not disclose potential side effects, such as external network calls, rate limits, or error behavior. The description is adequate but not rich.

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, front-loaded with the primary action, and contains no unnecessary information. Every word earns its place, making it highly concise and structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient for a simple extraction tool, but there is no output schema, so it would benefit from outlining return values. It also does not differentiate between sibling tools beyond the basic purpose, leaving some contextual gaps.

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 provides full descriptions for both parameters (url and extractKeywords), giving a baseline of 3. The description adds context about keywords and skills but does not provide additional meaning beyond what the schema already states.

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 clearly states the tool extracts job descriptions and keywords from a LinkedIn or job posting URL, with a specific verb and resource. It distinguishes itself from sibling tools like modify_cv and analyze_cv_job_match by focusing on extraction from external URLs.

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 implies the tool should be used when given a job posting URL to extract information, providing clear context. However, it does not explicitly mention when to use alternatives or when not to use this tool, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modify_cvA

Modifies a CV to better match a job description by strategically emphasizing relevant keywords. Parses the CV, extracts keywords from the job posting, and enhances the CV with relevant keywords while maintaining naturalness.

ParametersJSON Schema
NameRequiredDescriptionDefault
cvDataYesCV content as base64 encoded string (for binary files like PDF/DOCX) or raw text/JSON. Can also be a file path to a local CV file.
jobUrlNoOptional: URL to automatically extract keywords from. Either jobKeywords or jobUrl must be provided.
cvFormatYesFormat of the input CV
jobKeywordsNoOptional: Pre-extracted keywords from job description. If not provided, jobUrl must be specified.
outputFormatNoDesired output format(s). "all" returns PDF, DOCX, and Markdownpdf
modificationLevelNoHow aggressively to modify the CV. minimal: only adds skills section keywords, moderate: adds skills and enhances 2-3 bullet points, aggressive: comprehensive enhancementmoderate

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose behavioral traits, but it only describes the process ('Parses the CV, extracts keywords... enhances the CV') without revealing side effects, such as whether the original CV is overwritten or a new file is returned. It also lacks details on permissions or irreversibility, which is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with the main action first. It is mostly concise, but the second sentence partially repeats the first ('enhances the CV with relevant keywords') and could be trimmed for even greater clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, no output schema), the description is incomplete. It does not explain what the tool returns (e.g., formatted file, path) or how the outputFormat parameter relates to the result. This leaves the agent uncertain about the tool's end-to-end behavior.

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?

All 6 parameters are described in the schema, so the description doesn't need to add basic parameter meanings. It does mention keyword extraction and enhancement, which loosely relates to jobKeywords/jobUrl, but doesn't provide additional syntax or semantics beyond the 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 clearly states the action ('Modifies a CV to better match a job description') with a specific resource (CV) and purpose (strategically emphasizing relevant keywords). This distinguishes it from sibling tools like extract_job_description and analyze_cv_job_match, which perform different tasks.

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 when to use the tool: to tailor a CV to a job description by emphasizing relevant keywords. However, it does not explicitly name alternatives or state when not to use it, which would earn a 5.

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. Dates show when Glama detected each change.

  1. 3 tool updatesv1.0.0
    • First observedanalyze_cv_job_match
    • First observedextract_job_description
    • First observedmodify_cv

TDQS

A4/5.0
Disambiguation5/5

Each tool addresses a distinct stage in the CV optimization workflow: extracting job data, modifying the CV, and analyzing match. No two tools perform overlapping functions, so there is no ambiguity in selection.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscore separators (extract_job_description, modify_cv, analyze_cv_job_match). The naming is clear and predictable, making it easy for an agent to infer each tool's purpose.

Tool Count5/5

The server has 3 tools, which is within the typical well-scoped range. Each tool is essential to the CV modification workflow, and the small count reflects a focused design without unnecessary bloat.

Completeness4/5

The tools cover the core pipeline from job description extraction to CV modification and match analysis. However, there are minor gaps such as no explicit tool for reverting changes or handling multiple CV formats, which agents might need to work around.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ikrigel/mcp-server-cv-modify'

If you have feedback or need assistance with the MCP directory API, please join our Discord server