mcp-server-cv-modify
Click on "Install 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., "@mcp-server-cv-modifyTailor my CV to this job posting: https://linkedin.com/jobs/123"
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.
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 validationInstallation
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
Clone or download the project
cd c:\mcp-server-cv-modifyInstall dependencies
npm installInstall Playwright browsers (for web scraping)
npx playwright install chromiumCreate environment file
Copy-Item .env.example .env
# Edit .env with your preferred editor (Notepad, VS Code, etc.)Verify installation
npm run build
npm startmacOS Installation
Clone or download the project
cd ~/mcp-server-cv-modify
# Or wherever you downloaded/cloned itInstall dependencies
npm installInstall Playwright browsers (for web scraping)
npx playwright install chromiumCreate environment file
cp .env.example .env
# Edit .env with your preferred editor (nano, vim, VS Code, etc.)
nano .env # or: open -a TextEdit .envVerify installation
npm run build
npm startLinux Installation
Clone or download the project
cd ~/mcp-server-cv-modify
# Or wherever you downloaded/cloned itInstall dependencies
npm installInstall Playwright browsers (for web scraping)
npx playwright install chromiumCreate environment file
cp .env.example .env
# Edit .env with your preferred editor (nano, vim, VS Code, etc.)
nano .env # or: vi .envVerify installation
npm run build
npm startNote 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 libxkbcommonUnix Installation
Clone or download the project
cd /opt/mcp-server-cv-modify
# Or wherever you want to install itInstall dependencies
npm installInstall Playwright browsers (for web scraping)
npx playwright install chromiumCreate environment file
cp .env.example .env
# Edit .env with your preferred editor
nano .env # or: vi .envVerify installation
npm run build
npm startBuilding
Build the TypeScript project:
npm run buildThis compiles TypeScript to JavaScript in the dist/ directory.
Running
Development Mode
All Platforms:
npm run devThis starts the server with auto-reload when files change.
Production Mode
All Platforms:
npm run build
npm startRunning 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 startDebugging
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 startOr 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]:3000For 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 URLextractKeywords(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 listjobUrl(string, optional): Auto-extract keywords from URLoutputFormat(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 contentcvFormat(enum, required): Format typejobUrl(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=trueIntegration 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
Open or create
%APPDATA%\Claude\claude_desktop_config.jsonFull path:
C:\Users\[YourUsername]\AppData\Roaming\Claude\claude_desktop_config.jsonYou can quickly open AppData with:
Win+R, type%appdata%, press Enter
Add this configuration:
{
"mcpServers": {
"cv-modifier": {
"command": "node",
"args": ["C:\\path\\to\\mcp-server-cv-modify\\dist\\index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}Replace
C:\path\to\mcp-server-cv-modifywith your actual installation pathRestart Claude Desktop
macOS
Open or create
~/Library/Application Support/Claude/claude_desktop_config.jsonnano ~/Library/Application\ Support/Claude/claude_desktop_config.jsonAdd this configuration:
{
"mcpServers": {
"cv-modifier": {
"command": "node",
"args": ["/path/to/mcp-server-cv-modify/dist/index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}Replace
/path/to/mcp-server-cv-modifywith your actual installation path (e.g.,~/mcp-server-cv-modifyor/Users/username/Documents/mcp-server-cv-modify)Restart Claude Desktop
Linux
Open or create
~/.config/Claude/claude_desktop_config.jsonnano ~/.config/Claude/claude_desktop_config.jsonAdd this configuration:
{
"mcpServers": {
"cv-modifier": {
"command": "node",
"args": ["/path/to/mcp-server-cv-modify/dist/index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}Replace
/path/to/mcp-server-cv-modifywith your actual installation pathRestart Claude Desktop
Unix
Open or create
~/.config/Claude/claude_desktop_config.json(or/etc/claude/claude_desktop_config.jsonfor system-wide installation)nano ~/.config/Claude/claude_desktop_config.jsonAdd this configuration:
{
"mcpServers": {
"cv-modifier": {
"command": "node",
"args": ["/path/to/mcp-server-cv-modify/dist/index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}Replace
/path/to/mcp-server-cv-modifywith your actual installation pathRestart 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-modifymacOS/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:
In Claude, you should see the CV Modifier tools available
Try using one of the tools:
extract_job_description,modify_cv, oranalyze_cv_job_matchIf 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 testRun specific test categories:
npm run test:unit # Unit tests only
npm run test:integration # Integration tests onlyImplementation 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
Ethics & Legal
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 chromiumIf 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 python3Issue: Browser timeout errors
Solution: Increase BROWSER_TIMEOUT_MS in .env:
All Platforms:
BROWSER_TIMEOUT_MS=60000 # 60 secondsOn Windows, you can also increase the timeout temporarily:
$env:BROWSER_TIMEOUT_MS = "60000"
npm startIssue: Rate limiting / scraping detection
Solution: Increase delay between requests:
All Platforms:
SCRAPER_MIN_DELAY_MS=10000 # 10 secondsIssue: 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> /FmacOS/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 installIssue: 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 nodeLinux (Ubuntu/Debian):
sudo apt-get update
sudo apt-get install nodejs npmLinux (Fedora):
sudo dnf install nodejs npmVerify installation:
node --version
npm --versionHebrew 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"anddir="rtl"
Issue: RTL text still displays left-to-right
Solution:
Verify application respects HTML
dirattributeCheck document metadata includes proper RTL markers
Enable
EMBED_RTL_MARKERS=truein .env configurationReview output in application that supports RTL content (Word, modern browsers)
Issue: Mixed Hebrew-English text malformed
Solution:
Ensure
EMBED_RTL_MARKERS=truein configurationVerify text encoding is UTF-8
Check that text contains proper Unicode directional markers
Enable debug logging:
LOG_LEVEL=debugto 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:
Mobile Usage (iOS/Android): See MOBILE_USAGE.md for setup guides and examples
OS-Specific Help: See PLATFORM_COMPATIBILITY.md for your operating system
Hebrew Language Help: See HEBREW_SUPPORT.md
Feature Documentation: Review CLAUDE.md
General Help: Check the GitHub Issues
Debugging: Enable debug logging with
LOG_LEVEL=debugin .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 --installHomebrew (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,python3Libraries 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,python3Webkit 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_CONCURRENTto 1Disable
CACHE_ENABLEDif storage is limitedUse
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_CONCURRENTto 2-3Cache 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 toolsanalyze_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.
| Name | Required | Description | Default |
|---|---|---|---|
| cvData | Yes | CV content (base64, raw text, or file path) | |
| jobUrl | Yes | URL of the job posting to analyze against | |
| cvFormat | Yes | Format of the input CV |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the job posting (LinkedIn, Indeed, Glassdoor, etc.) | |
| extractKeywords | No | Whether to automatically extract and categorize keywords from the job description |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cvData | Yes | CV 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. | |
| jobUrl | No | Optional: URL to automatically extract keywords from. Either jobKeywords or jobUrl must be provided. | |
| cvFormat | Yes | Format of the input CV | |
| jobKeywords | No | Optional: Pre-extracted keywords from job description. If not provided, jobUrl must be specified. | |
| outputFormat | No | Desired output format(s). "all" returns PDF, DOCX, and Markdown | |
| modificationLevel | No | How aggressively to modify the CV. minimal: only adds skills section keywords, moderate: adds skills and enhances 2-3 bullet points, aggressive: comprehensive enhancement | moderate |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v1.0.0- First observed
analyze_cv_job_match - First observed
extract_job_description - First observed
modify_cv
TDQS
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.
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.
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.
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
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
Generate tailored, ATS-optimized resume PDFs and cover letters from a job description, over MCP.
A job-search companion: tailor your CV to a role, score fit, fix ATS issues. Also via MCP.
GetJobzi MCP server for job search, application tracking, and career forecasting.
MCP server for VC pitch-deck scoring, thesis-fit matching, and deal-flow management.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for maintaining a professional profile database and generating tailored, ATS-optimized resumes for specific job postings.1-
- FlicenseNot gradedqualityCmaintenanceA research-driven MCP server that uses 20+ years of psychological research to generate scientifically-optimized CVs tailored to any job and cultural context.-
- FlicenseNot gradedqualityCmaintenanceMCP server for AI-native resume optimization, providing tools to load JD, analyze match, rewrite sections, and assemble customized resumes.1-
- FlicenseNot gradedqualityCmaintenanceMCP server for AI-powered CV building, offering tools to create professional CVs, improve sections, match skills to jobs, and recommend skills.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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