Job Matcher MCP
Job Matcher MCP
🎯 KI-gestützter MCP-Server (Model Context Protocol) für die Jobsuche und Lebenslauf-Anpassung
Automatisieren Sie Ihre Jobsuche und passen Sie Ihren Lebenslauf in unter einer Minute an jede Stelle an. Angetrieben durch Job-APIs und Claude LLM.
📋 Inhaltsverzeichnis
Related MCP server: job-search
🚀 Schnellstart
Ziel: Den Server mit Mock-Daten in 5 Minuten zum Laufen bringen (keine API-Schlüssel nötig).
1. Repository klonen
\
cd job-matcher-mcp2. Abhängigkeiten installieren
\
pip install -r requirements.txt3. Mit Mock-Daten ausführen
\
export USE_MOCK_DATA=true
python mcp_server.pyErwartete Ausgabe:
=== Testing search_jobs ===
{
"success": true,
"job_listings": [
{
"id": "mock_1",
"title": "Senior Product Manager",
"company": "TechCorp Inc",
"location": "San Francisco, CA",
...
}
],
...
}
=== Testing customize_resume ===
{
"success": true,
"customized_resume": "# John Doe...",
...
}✅ Erfolg! Ihr MCP-Server funktioniert. Jetzt fügen wir echte API-Schlüssel hinzu.
✨ Funktionen
Funktion | Status | Beschreibung |
Jobsuche | ✅ MVP | Abfrage tausender Stellenanzeigen über Adzuna API |
Lebenslauf-Anpassung | ✅ MVP | KI-gestützte Lebenslauf-Optimierung mit Claude |
Skill-Matching | ✅ MVP | Identifikation passender/fehlender Fähigkeiten |
ATS-Optimierung | ✅ MVP | Automatische Keyword-Injektion für ATS |
Mock-Daten-Modus | ✅ MVP | Testen ohne API-Schlüssel |
Multi-API-Unterstützung | 🔜 v1.2 | Hinzufügen von Indeed, LinkedIn, AngelList |
Anschreiben-Generierung | 🔜 v1.2 | Automatische Erstellung von Anschreiben |
Bewerbungs-Tracking | 🔜 v2.0 | Verfolgung von Bewerbungen und Vorstellungsgesprächen |
🔧 Installation
Voraussetzungen
Python 3.10 oder höher
pip (Python-Paketmanager)
Git
Schritt 1: Repository klonen
\
git clone https://github.com/yourusername/job-matcher-mcp.git
cd job-matcher-mcpSchritt 2: Virtuelle Umgebung erstellen (empfohlen)
\
# macOS/Linux
python3 -m venv venv
source venv/bin/activate
# Windows
python -m venv venv
.\venv\Scripts\Activate.ps1Schritt 3: Abhängigkeiten installieren
\
pip install -r requirements.txt⚙️ Konfiguration
1. API-Schlüssel besorgen
Adzuna API (Kostenlos)
Gehen Sie zu https://developer.adzuna.com/
Erstellen Sie ein Konto
Erstellen Sie eine App, um App ID und App Key zu erhalten
Kostenloser Tarif: ~100 Anfragen/Tag
Anthropic Claude API (Bezahlt, .50-5/Monat)
Gehen Sie zu https://console.anthropic.com/
Erstellen Sie ein Konto
Generieren Sie einen API-Schlüssel
Preise: ~.003 pro 1.000 Eingabe-Tokens, .015 pro 1.000 Ausgabe-Tokens
2. .env-Datei erstellen
\
cp .env.example .env3. Fügen Sie Ihre API-Schlüssel in .env hinzu
\
ADZUNA_APP_ID=ihre_tatsaechliche_app_id
ADZUNA_APP_KEY=ihr_tatsaechlicher_app_key
ANTHROPIC_API_KEY=sk-ant-ihr_tatsaechlicher_api_key
USE_MOCK_DATA=false
LOG_LEVEL=INFO4. Umgebungsvariablen laden
\
# macOS/Linux
export $(grep -v '^#' .env | xargs)
# Windows PowerShell
Get-Content .env | ForEach-Object {
$name, $value = $_.Split('=')
if ($name) { Set-Item -Path env:\$name -Value $value }
}💻 Nutzung
Server starten
\
python mcp_server.pyMit curl testen (Beispiel)
\
# Nach Jobs suchen
curl -X POST http://localhost:8000/tools/search_jobs \
-H "Content-Type: application/json" \
-d '{
"role": "Product Manager",
"location": "San Francisco, CA",
"experience_years": 5,
"max_results": 10
}'
# Lebenslauf anpassen
curl -X POST http://localhost:8000/tools/customize_resume \
-H "Content-Type: application/json" \
-d '{
"base_resume": "...",
"job_description": "...",
"template": "modern"
}'Python-Beispiel
\
from mcp_server import JobMatcherMCPServer
server = JobMatcherMCPServer()
# Jobs suchen
jobs = server.search_jobs(
role="Product Manager",
location="San Francisco, CA",
experience_years=5,
max_results=10
)
print(jobs)
# Lebenslauf anpassen
resume = server.customize_resume(
base_resume="Ihr Lebenslauftext hier...",
job_description="Stellenbeschreibung hier...",
template="modern"
)
print(resume)🛠️ MCP-Tools-Referenz
Tool 1: search_jobs
Suche nach Stellenanzeigen basierend auf Kriterien.
Eingabeschema
\
{
"role": "Product Manager", // Erforderlich: Jobtitel
"location": "San Francisco, CA", // Erforderlich: Geografischer Standort
"experience_years": 5, // Erforderlich: Berufserfahrung in Jahren
"max_results": 10, // Optional: Ergebnislimit (Standard: 10)
"use_mock_data": false // Optional: Mock-Daten verwenden (Standard: false)
}Ausgabeschema
\
{
"success": true,
"job_listings": [
{
"id": "12345",
"title": "Senior Product Manager",
"company": "TechCorp",
"location": "San Francisco, CA",
"link": "https://...",
"salary_min": 120000,
"salary_max": 160000,
"posted_date": "2026-08-17T10:00:00Z",
"description_snippet": "Wir suchen..."
}
],
"total_found": 123,
"search_time_ms": 1234,
"error": null
}Beispiel
\
jobs = server.search_jobs(
role="Product Manager",
location="Remote",
experience_years=3,
max_results=5
)Tool 2: customize_resume
Lebenslauf mit KI für eine bestimmte Stelle anpassen.
Eingabeschema
\
{
"base_resume": "# Jane Doe...", // Erforderlich: Ihr Lebenslauftext
"job_description": "Wir suchen...", // Erforderlich: Stellenausschreibung
"template": "modern", // Optional: modern|classic|minimal
"use_mock_data": false // Optional: Mock-Daten verwenden
}Ausgabeschema
\
{
"success": true,
"customized_resume": "# Jane Doe...",
"match_analysis": {
"skills_match_percentage": 82,
"matched_skills": ["Produktmanagement", "Führung"],".$&!"missing_skills": ["Maschinelles Lernen", "Cloud"],
"suggestions": ["Fügen Sie ML-Erfahrung hinzu, falls zutreffend"],
"keywords_added": ["Datengetrieben", "übergeriflich"]
},
"eneration_time_ms": 2345,
"error": null
}d
Beispiel
\
customized = server.customize_resume(
base_resume=open("resume.txt").read(),
job_description=open("job_posting.txt").read(),
template="modern"\)```
d
***
## 🏗️ Architektur
┌─────────────────────────────────────────────────────┐ │ Benutzer/KI-Agent (Chat, Skript, API-Client) │ └────────────────┬────────────────────────────────────┘ der MCP-Protokoll ┌────────────────▼────────────────────────────────────┐ │ Job Matcher MCP Server │ │ ┌──────────────────────────────────────────────┐ │ │ │ Tool: search_jobs() │ ││ │ - Abfrage der Adzuna API ││ │ - Parsen & strukturieren der Ergebnisse ││ └──────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────┐ ││ │ Tool: customize_resume() │ ││ │ - an Claude senden │ ││ │ - Parsen & Rückgaben des angepassten Lebenslaufs ││ └──────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────┐ ││ │ Externe APIs │ ││ │ - Adzuna Job Search API │ ││ │ - Anthropic Claude API │ ││ └──────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────┘
***
## 🔍 Fehlerbehebung
### Problem: `ModuleNotFoundError: No module named 'anthropic'` n**Lösung:** Ahängigkeiten installieren
\`bash
pip install -r requirements.txtd
Problem: API request failed: Unauthorized n**Lösung:**Üerprüfen Sie Ihre API-Schlüssel in .env
`bash #Üerprüfen, ob Schlüssel gesetzt sind echo $ADZUNA_APP_ID echo $ANTHROPIC_API_KEY
d
### Problem: `No jobs found` n**Lösung:** Proieren Sie eine andere Rolle/einen anderen Standort oder erhöhen Sie max_results
\`python
# Breitere Suche versuchen
jobs = server.search_jobs(
role="Manger", # Allgemeinerer Begriff
location="New York, NY",
experience_years=5,
max_results=50
)Problem: Claude API response too slow nLösung: Verwenden Sie Mock-Daten zum Testen
`python resume = server.customize_resume( base_resume="...", job_description="...", use_mock_data=True # API-Aufruf überspringen )
d
### Problem: `Rate limit exceeded` n**Lösung:** Der kostenlose Adzuna-Tarif hat Limits. Implementieren Sie Caching:
\`python
# Suchergebnisse zwischenspeichern
cached_jobs = {}
key = f"{role}_{location}_{experience_years}"
if key not in cacked_jobs:
cacked_jobs[key] = server.search_jobs(...)d
d## 🚢 Deployment
Auf Vercel deployen
`bash
1. Vercel-Konto unter https://vercel.com erstellen
2. Vercel CLI installieren
npm install -g vercel
3. Deployen
vercel
4. Umgebungsvariablen im Vercel-Dashboard hinzufügen
Settings → Environment Variables
d
### Auf Railway deployen
\`bash
# 1. Railwy-Konto unter https://railway.app erstellen
# 2. Git-Repository verbinden
# 3. Umgebungsvariablen im Railwy-Dashoard hinzufügend
d## 📊 Leistungsmetriken (Ziel)
Operation | Zielzeit | Tastsächlich |
Jobsuche | <5 Sekunden | ~2-3s |
Lebeslauf-Anpassung | <10 Sekunden | ~3-5s |
Mock-Jobsuche | <100ms | ~50ms |
Mock-Lebenslauf-Anpassung | <500ms | ~200ms |
d## 📚 API-Refrenzen
Adzuna API: https://developer.adzuna.com/does
Claude API: https://docs.anthropic.com/
MCP Protokoll: https://modelcontextprotocool.io/d
d## 📝 Lizenz
MIT Lizenz – siehe LIZENSE-Datei für Details
d## 👨💼 Autor
Erstellt für Technologie-Produktmanager im Jobübergang.
Version: 1.0.0 nLetzte Aktualisierung: 2026-08-17 nStatus: MVP bereit
This server cannot be deployed
Maintenance
Related MCP Connectors
GetJobzi MCP server for job search, application tracking, and career forecasting.
AI job search MCP — fact-checked jobs, application tracker, alerts. ChatGPT, Claude, Cursor.
Public MCP server for discovering open jobs. Search, filter, and get application links.
Job application tracker for developers - AI agents write over MCP, you review in a dashboard.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for maintaining a professional profile database and generating tailored, ATS-optimized resumes for specific job postings.1-
- AlicenseNot gradedqualityDmaintenanceA job-search MCP server that ranks roles, drafts cover letters, and rehearses Q&A answers using a candidate profile, with live listings from five public sources.53 npmMIT
- AlicenseCqualityCmaintenanceAn MCP server that enables AI-assisted job search workflows including job discovery, application tracking, resume evaluation, and cover letter generation, with support for multiple job sources and scheduled scraping.8312 npm1AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes job-search and application-management capabilities to compatible AI clients, enabling discovery of vacancies, drafting of tailored application materials, and coordinated human-approved submissions.MIT