Skip to main content
Glama

Übersicht

MCP-Resume-Tailor ist ein Model Context Protocol-Serversystem, das die Dokumentenbearbeitung über die UNO-API von LibreOffice automatisiert. Zwei MCP-Server — ein Dokumenteneditor und ein Extraktor für Stellenbeschreibungs-Schlüsselwörter — verbinden sich mit Claude Desktop und ermöglichen eine KI-gestützte Anpassung von Lebensläufen durch natürliche Konversation.

Der Editor bewahrt die vollständige Dokumententreue, indem er direkt auf .odt-Dateien über das interne Dokumenten-Objektmodell von LibreOffice arbeitet, anstatt in Zwischenformate zu konvertieren. Durch Lesezeichen begrenzte Abschnitte definieren die bearbeitbaren Bereiche, und Inhalte werden ersetzt, während die Formatierung, Stile und das Layout der Vorlage beibehalten werden. Der Schlüsselwort-Extraktor analysiert Stellenbeschreibungen über die Claude-API und liefert eine strukturierte, in 5 Stufen bewertete Ausgabe, die den Anpassungsprozess leitet.

Technologiestack

Designprinzipien

1. Dokumententreue durch native API

Ziel: Bewahrung der vollständigen Formatierung, Stile und des Layouts der Vorlage bei jeder Bearbeitung.

Anstatt Dokumente in Markdown oder HTML zu konvertieren — eine verlustbehaftete Transformation — verbindet sich der Editor über einen lokalen Socket mit der UNO-Brücke von LibreOffice und arbeitet auf dem Live-Dokumentenmodell. Lesezeichenpaare begrenzen bearbeitbare Bereiche. Der Inhaltsaustausch erfolgt auf Dokumenten-Objektebene, sodass Schriftarten, Absatzstile, Abstände und Seitenstruktur exakt so erhalten bleiben, wie sie vom Vorlagenersteller entworfen wurden.

2. MCP-natives Tool-Design

Ziel: Bereitstellung von Dokumentenbearbeitung und Schlüsselwortextraktion als erstklassige MCP-Tools, nicht als REST-Wrapper.

Beide Server basieren direkt auf FastMCP mit typisierten Tool-Schemas. Claude Desktop ruft sie über das Model Context Protocol auf — kein Klebecode, keine Prompt-Injection, keine API-Choreografie. Die KI entscheidet basierend auf dem Konversationskontext, wann und wie jedes Tool aufgerufen wird, und kombiniert die Ausgabe der Schlüsselwortextraktion mit der Dokumentenbearbeitung in einer einzigen interaktiven Sitzung.

3. Transportunabhängige Bereitstellung

Ziel: Lokal für die Entwicklung ausführen, containerisiert für Zuverlässigkeit — die MCP-Tool-Oberfläche bleibt in beiden Fällen gleich.

Der lokale Modus verwendet stdio-Transport: Claude Desktop startet den Python-Prozess direkt. Der Docker-Modus führt beide Server hinter Nginx aus, wobei Proxy-Skripte das stdio-Protokoll von Claude Desktop mit HTTP/SSE-Endpunkten innerhalb des Containers verbinden. Die MCP-Tool-Oberfläche ist in beiden Modi identisch — keine Codeänderungen, keine Funktionsunterschiede.


Architektur

Lokal / stdio

Claude Desktop ──stdio──▶ resume_editor_server.py ──UNO──▶ LibreOffice (port 2002) ──▶ .odt
Claude Desktop ──stdio──▶ jd_keyword_extractor_mcp.py ──API──▶ Claude API

Claude Desktop startet jeden MCP-Server als untergeordneten Prozess. Der Dokumenteneditor verbindet sich über die UNO-Brücke auf Port 2002 mit einer Headless-LibreOffice-Instanz. Der Schlüsselwort-Extraktor ruft die Anthropic-API direkt auf.

Containerisiert / HTTP

Claude Desktop ──stdio──▶ macOS proxy ──HTTP──▶ Docker (Nginx)
                                                  ├─ :5001 → Resume Editor MCP (port 8000, streamable-http)
                                                  ├─ :5002 → JD Extractor MCP (port 9000, streamable-http)
                                                  └─ LibreOffice headless (port 2002, internal)

Die macOS-Proxy-Skripte übersetzen zwischen dem stdio-MCP-Protokoll von Claude Desktop und den containerisierten HTTP/SSE-Endpunkten, verwalten das MCP-Sitzungs-ID-Management und das Parsen des Server-Sent-Event-Streams. Nginx leitet den Datenverkehr an den korrekten internen Dienst weiter.


MCP-Tool-Oberfläche

Tool

Server

Beschreibung

update_resume_section

Dokumenteneditor

Ersetzt Inhalte in einem einzelnen, durch Lesezeichen begrenzten Abschnitt

update_multiple_resume_sections

Dokumenteneditor

Aktualisiert mehrere Abschnitte atomar in einem Durchgang

get_available_sections

Dokumenteneditor

Listet alle bearbeitbaren Lesezeichenbereiche in der aktuellen Vorlage auf

extract_jd_keywords

Schlüsselwort-Extraktor

Analysiert eine Stellenbeschreibung und gibt strukturierte Schlüsselwort-Rankings zurück

Bearbeitbare Abschnitte

Der Dokumenteneditor arbeitet auf durch Lesezeichenpaare begrenzten Bereichen. Die aktuelle Vorlage bietet:

Abschnitt

Lesezeichenbereich

Skills

Skills_StartSkills_End

Summary

Summary_StartSummary_End

WorkExperience1

WorkExperience1_StartWorkExperience1_End

WorkExperience2

WorkExperience2_StartWorkExperience2_End

WorkExperience3

WorkExperience3_StartWorkExperience3_End

Ausgabe der Schlüsselwortextraktion

Das Tool extract_jd_keywords gibt strukturiertes JSON zurück mit:

  • 5-stufig bewertete Schlüsselwörter — kritisch, hoch, mittel, niedrig und „nice-to-have“

  • Anforderungszusammenfassung und Rollenkontext

  • Tools, Technologien und Methoden, die aus der Anzeige extrahiert wurden

  • Kernverantwortlichkeiten und gewünschte Ergebnisse

  • Rollenebene, Umfang und Unternehmenskontext


Gelöste schwierigste Probleme

1. Zuverlässigkeit der LibreOffice UNO-Brücke

Problem: Die UNO-API von LibreOffice erfordert eine laufende Headless-Instanz mit einem offenen Socket auf Port 2002. Verbindungsabbrüche, Dokumentensperren und Prozesszustandslecks sind häufige Fehlermodi bei lang laufenden Sitzungen.

Lösung: Der Editor verwaltet den gesamten Verbindungslebenszyklus — Aufbau der UNO-Brücke, Laden von Dokumenten über das URL-Protokoll, Handhabung des Öffnen/Schließen-Zustands und Schreiben in zeitgestempelte Ausgabedateien, um ein Überschreiben der Vorlage zu vermeiden. Die Docker-Bereitstellung verwendet eine dedizierte Startsequenz, um sicherzustellen, dass LibreOffice Verbindungen akzeptiert, bevor der MCP-Server mit der Bearbeitung von Anfragen beginnt.

2. MCP-Transport-Bridging (stdio zu HTTP)

Problem: Claude Desktop unterstützt nur stdio-basierten MCP-Transport. Containerisierte Dienste stellen HTTP-Endpunkte bereit. Dies sind grundlegend unterschiedliche Protokollmodelle mit inkompatibler Stream-Semantik.

Lösung: Benutzerdefinierte Proxy-Skripte (mac_proxy_resume_editor.py, mac_proxy_jd_extractor.py) überbrücken die Lücke: Sie lesen JSON-RPC-Nachrichten von stdin, leiten sie als HTTP-Anfragen an den Container weiter, parsen den SSE-Antwort-Stream zurück in MCP-Nachrichten und verwalten Sitzungs-IDs über den gesamten Verbindungslebenszyklus hinweg. Claude Desktop sieht einen lokalen stdio-Server; der Container sieht Standard-HTTP-Clients.

3. Lesezeichen-erhaltender Inhaltsaustausch

Problem: Das Ersetzen von Text zwischen Lesezeichen in einem .odt-Dokument muss die umgebende Dokumentenstruktur bewahren — Absatzstile, Zeichenformatierung, Seitenlayout —, ohne das zugrunde liegende XML zu beschädigen.

Lösung: Die UNO-API arbeitet auf dem Live-Dokumenten-Objektmodell von LibreOffice, nicht auf rohem XML. replace_bookmark_range_text() enumeriert den Textbereich zwischen gepaarten Lesezeichen (Section_Start / Section_End), entfernt vorhandene Inhalte absatzweise und fügt neue Inhalte ein, während die Standard-Absatz- und Zeichenstile der Vorlage übernommen werden.


Voraussetzungen

  • Python 3.10+

  • LibreOffice mit UNO-Unterstützung (libreoffice-script-provider-python)

  • Eine .odt-Lebenslaufvorlage mit Lesezeichenpaaren (siehe Anleitung zur Lesezeichen-Einrichtung)

  • Für containerisierte Bereitstellung: Docker und Docker Compose

  • Für Schlüsselwortextraktion: Anthropic-API-Schlüssel

Lokale Einrichtung

git clone https://github.com/adi2355/MCP-Resume-Tailor.git
cd MCP-Resume-Tailor

python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

# Link system UNO modules into venv
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

LibreOffice starten

soffice --accept="socket,host=localhost,port=2002;urp;" --headless --norestore --nologo --nodefault &

Claude Desktop-Konfiguration (stdio)

Fügen Sie dies zu Ihrer Claude Desktop-Konfiguration hinzu:

{
  "mcpServers": {
    "LibreOfficeResumeEditor": {
      "command": "/path/to/MCP-Resume-Tailor/.venv/bin/python",
      "args": ["resume_editor_server.py"],
      "cwd": "/path/to/MCP-Resume-Tailor"
    },
    "JDKeywordExtractor": {
      "command": "/path/to/MCP-Resume-Tailor/.venv/bin/python",
      "args": ["jd_keyword_extractor_mcp.py"],
      "cwd": "/path/to/MCP-Resume-Tailor"
    }
  }
}

Docker-Bereitstellung

docker compose up --build

Konfigurieren Sie Claude Desktop für die containerisierte Nutzung:

{
  "mcpServers": {
    "LibreOfficeResumeEditor": {
      "url": "http://localhost:5001"
    },
    "JDKeywordExtractor": {
      "url": "http://localhost:5002"
    }
  }
}

Siehe Docker-Bereitstellungsanleitung und macOS-Einrichtungsanleitung für plattformspezifische Details.


Dokumentation

Dokument

Beschreibung

Claude MCP-Nutzungsanleitung

Schritt-für-Schritt-Integration in Claude Desktop mit Beispiel-Prompts

Docker-Bereitstellung

Containerisierte Einrichtung, Port-Mapping und Dienstverwaltung

macOS-Einrichtung

Plattformspezifische Installation und UNO-Konfiguration

Optimierter Workflow

Zweistufige Pipeline: JD-Schlüsselwortextraktion gefolgt von gezielter Anpassung

Lesezeichen-Einrichtung

Wie man Lesezeichenpaar-Bereiche zu einer .odt-Vorlage in LibreOffice hinzufügt


MCP-Resume-Tailor/
├── resume_editor_server.py            # MCP server: document section editing via UNO
├── jd_keyword_extractor_mcp.py        # MCP server: JD keyword extraction via Claude API
├── edit_resume_uno.py                 # Core LibreOffice UNO API operations
├── container_api.py                   # Flask REST wrapper for container mode
├── mac_proxy_resume_editor.py         # stdio → HTTP proxy (document editor)
├── mac_proxy_jd_extractor.py          # stdio → HTTP proxy (keyword extractor)
├── docker-compose.yml                 # Multi-service container orchestration
├── Dockerfile                         # Ubuntu 22.04 + LibreOffice + Python
├── start_container_service.sh         # Docker entrypoint script
├── start_resume_tailor_services.sh    # Start both MCP services locally
├── requirements.txt                   # Python dependencies
├── claude_desktop_config.json         # Claude Desktop config (stdio mode)
├── claude_desktop_config_docker.json  # Claude Desktop config (HTTP/Docker mode)
├── CLAUDE_MCP_USAGE.md                # Integration guide
├── DOCKER_README.md                   # Docker documentation
├── MACOS_SETUP.md                     # macOS setup guide
├── OPTIMIZED_SYSTEM_USAGE.md          # Workflow documentation
└── setup_resume_bookmarks.md          # Template bookmark guide

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

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/adi2355/File-Editor-MCP'

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