ResumeTailor

ResumeTailor

An MCP server that enables users to automatically tailor LibreOffice resumes by updating specific sections based on job descriptions via the UNO API. It allows Claude to modify skills, projects, and work experience in .odt templates to generate customized resume files.

Category
Visit Server

README

ResumeTailor

A toolkit for automatically tailoring your resume to specific job applications using LibreOffice. The system allows you to maintain a single resume template and quickly generate customized versions for different job applications.

Features

  • Update specific sections of your resume (skills, projects, work experience) for targeted job applications
  • Maintain a master template with all your achievements and experiences
  • Create new tailored resume files without modifying your original template
  • Use with Claude AI to automatically generate tailored content based on job descriptions
  • Command-line tools for direct customization
  • Containerized deployment for consistent execution across macOS and Linux

Prerequisites

  • LibreOffice installed (tested with LibreOffice Writer)
  • Python 3.10+ with venv support
  • libreoffice-script-provider-python system package installed
  • A properly formatted .odt resume with bookmarks
  • For containerized deployment: Docker and Docker Compose

Setup

  1. Clone the repository

    git clone https://github.com/yourusername/ResumeTailor.git
    cd ResumeTailor
    
  2. Create and activate a virtual environment

    python -m venv .venv
    source .venv/bin/activate  # Linux/Mac
    
  3. Install dependencies

    pip install -r requirements.txt
    
  4. Set up the UNO environment

    • Create symbolic links to the system's UNO modules:
    ln -s /usr/lib/python3/dist-packages/uno.py .venv/lib/python3.*/site-packages/uno.py
    ln -s /usr/lib/python3/dist-packages/unohelper.py .venv/lib/python3.*/site-packages/unohelper.py
    
    • Replace python3.* with your actual Python version (e.g., python3.12)
  5. Prepare your resume template

    • Open your resume in LibreOffice Writer
    • Follow the instructions in setup_resume_bookmarks.md to add bookmarks

Usage

Method 1: Direct Python Script Usage

  1. Start LibreOffice in headless mode

    soffice --accept="socket,host=localhost,port=2002;urp;" --headless --norestore --nologo --nodefault &
    
  2. Run one of the test scripts

    # Update just the skills section
    ./test_skill_update.py
    
    # Update a project description
    ./test_canova_update.py
    ./test_project_update.py
    
    # Update multiple sections for a specific job
    ./tailor_for_job.py
    
  3. Check the output

    • The scripts create new .odt files with names like Adityak_For_TechCompany_DataScientist_20250401.odt
    • Open these files in LibreOffice Writer to see the changes

Method 2: Using with Claude AI (MCP)

  1. Start the resume editor service

    ./start_resume_editor_service.sh
    

    This script starts LibreOffice in headless mode and runs the MCP server.

  2. Configure Claude Desktop

    • Make sure you have Claude Desktop installed
    • Create or edit claude_desktop_config.json in your home directory:
    {
      "mcpServers": {
        "libreOfficeResumeEditor": {
          "command": "/home/adi235/ResumeTailor/.venv/bin/python",
          "args": [
            "resume_editor_server.py"
          ],
          "cwd": "/home/adi235/ResumeTailor"
        }
      }
    }
    
    • Adjust paths as needed for your setup
  3. Restart Claude Desktop

    • Close and reopen Claude Desktop to load the new configuration
  4. Ask Claude to update your resume

    • Example prompts:
      • "What sections of my resume can you update?"
      • "Update my Skills section to focus on machine learning and Python for this data science role."
      • "Tailor my Project1 (Cannabis app) description to highlight the technical aspects for a Senior Developer position."

See CLAUDE_MCP_USAGE.md for more detailed instructions on using with Claude.

Method 3: Containerized Deployment (Cross-Platform)

The containerized deployment provides consistent execution across macOS and Linux systems without the need to install LibreOffice or UNO libraries on the host system. The container includes both the Resume Editor service and the JD Keyword Extractor service.

  1. Ensure Docker and Docker Compose are installed

    • Install Docker
    • Docker Compose typically comes with Docker Desktop (macOS/Windows) or can be installed separately on Linux
  2. Run the containerized application

    ./run_container.sh
    

    This script will:

    • Build the Docker image if it doesn't exist
    • Start the container in the background
    • Start both the Resume Editor (port 5001) and JD Keyword Extractor (port 5002) services
    • Map the ports to the host system
    • Create an Output directory on your host that maps to the container's output directory
  3. Accessing the services

    • Resume Editor service: http://localhost:5001
    • JD Keyword Extractor service: http://localhost:5002
    • Generated resume files will appear in the ./Output directory
  4. Managing the container

    # View container logs
    docker logs resume-tailor
    
    # Stop the container
    docker-compose down
    
    # Restart the container
    docker-compose restart resume-tailor
    
  5. Configure Claude Desktop for containerized use

    • Use the provided claude_desktop_config_docker.json file:
    # For macOS (adjust path as needed)
    cp claude_desktop_config_docker.json ~/claude_desktop_config.json
    
    # For Linux (adjust path as needed)
    cp claude_desktop_config_docker.json ~/.claude_desktop_config.json
    
    • This configuration points Claude Desktop to both services running in the container:
    {
      "mcpServers": {
        "LibreOfficeResumeEditor": {
          "url": "http://localhost:5001"
        },
        "JDKeywordExtractor": {
          "url": "http://localhost:5002"
        }
      }
    }
    
    • Restart Claude Desktop to apply the changes
  6. How the services work together

    • The JD Keyword Extractor service analyzes job descriptions to extract key requirements and skills
    • The Resume Editor service then uses this information to tailor your resume specifically for the job
    • Claude can leverage both services to automate your job application process

Available Resume Sections

When asking Claude to update your resume, use these section names:

  • Skills: Technical skills section
  • Summary: Professional summary
  • Project1: Cannabis Tracking app (Canova)
  • Project2: RAG-Based-Brainstorming-Archive
  • Project3: Ethereum AI Agent
  • WorkExp1: IMPROSYS work experience

Troubleshooting

LibreOffice Connection Issues

  • Make sure LibreOffice is running in headless mode:
    nc -z localhost 2002 || soffice --accept="socket,host=localhost,port=2002;urp;" --headless --norestore --nologo --nodefault &
    

UNO Module Errors

  • If you get ModuleNotFoundError: No module named 'uno', check your symlinks:
    ls -la .venv/lib/python3.*/site-packages/uno.py
    
  • If they're missing or incorrect, recreate them using the setup steps above

MCP Server Not Showing in Claude

  • Check if your claude_desktop_config.json is correctly formatted
  • Verify the paths in the config file are correct
  • Make sure both LibreOffice and the MCP server are running
  • Restart Claude Desktop completely

Bookmark Not Found Errors

  • Open your resume in LibreOffice Writer
  • Press F5 to open the Navigator
  • Verify that all required bookmarks exist
  • Check setup_resume_bookmarks.md for the correct naming convention

Container Issues

  • Container fails to start:

    • Check Docker logs: docker logs resume-tailor
    • Ensure port 5001 isn't already in use: netstat -tuln | grep 5001
    • Verify Docker is running: docker info
  • Cannot access the service:

    • Verify the container is running: docker ps | grep resume-tailor
    • Check if the service is listening: curl -v http://localhost:5001
    • Restart the container: docker-compose restart resume-tailor
  • Output files not appearing:

    • Check permissions on the ./Output directory
    • Verify the volume mapping: docker inspect resume-tailor | grep -A 10 Mounts

Project Structure

  • edit_resume_uno.py - Core LibreOffice UNO API interaction
  • resume_editor_server.py - MCP server for Claude integration
  • start_resume_editor_service.sh - Script to start LibreOffice and the MCP server
  • test_*.py - Test scripts for different resume sections
  • setup_resume_bookmarks.md - Guide for adding bookmarks to your resume
  • CLAUDE_MCP_USAGE.md - Detailed instructions for using with Claude

License

MIT # ResumeTailor

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured