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
🚀 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 installed
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
MCP server for AI job search — find jobs, track applications, get alerts. Claude, ChatGPT, Cursor.
GetJobzi MCP server for job search, application tracking, and career forecasting.
Job search and interview prep MCP. 11 tools, OAuth 2.1, cross-LLM. four-leaf.ai.
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/SRP-alohamora/JobMatcherMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server