Skip to main content
Glama
zvieli
by zvieli

Universeller Multi-Quellen-Jobsuch-FastMCP-Server (job-mcp)

Python 3.12+ FastMCP 2.0+ Tests Passing License: MIT

Ein unternehmensreifer, datenschutzorientierter FastMCP-Server, der intelligente, multi-quellenbasierte Tech-Job-Aggregation, intelligente Deduplizierung, dynamische CV-Fähigkeitsextraktion, Anforderungsabdeckungsbewertung und autonome Bewerbungsworkflows über HireMeTech, Comeet ATS und AllJobs Israel bietet.


Architekturübersicht

graph TD
    Client([MCP Client: Claude / Cursor / Gemini Spark / Antigravity]) --> Tools[FastMCP Server Layer]
    Tools --> Aggregator[JobAggregator]
    Aggregator --> Registry[SourceRegistry]

    subgraph Parallel Pluggable Sources Layer
        Registry --> S1[HireMeTechSource<br/>Direct REST API + Session Fallback]
        Registry --> S2[ComeetSource<br/>Direct ATS API + Concurrency Semaphore]
        Registry --> S3[AllJobsSource<br/>Category Feeds + Anti-Blocking Headers]
    end

    subgraph Processing & Normalization Engine
        S1 --> Dedup[Deduplication & Entity Merger]
        S2 --> Dedup
        S3 --> Dedup
        
        Dedup --> NormKey["Key = slug(title) + '@' + slug(company)"]
        NormKey --> Merge[Metadata & Links Merger]
        Merge --> Scorer[Unified CV / Skill Matcher]
    end

    subgraph Dynamic Candidate Engine
        CV["Candidate CV (.pdf / .docx / .txt)"] --> Extractor[Dynamic CV & Profile Extractor]
        Extractor --> Skills["Extracted Skills (40+ tokens)"]
        Extractor --> Seniority["Inferred Seniority & Exclusions"]
        Extractor --> Roles["Target Job Roles"]
        Skills --> Scorer
        Seniority --> Scorer
    end

    Scorer --> Cache[Unified JobCache - 1h TTL]
    Cache --> Tools

Hauptfunktionen

  1. Dynamische CV- und Kandidatenprofilextraktion:

    • Multi-Format-Erfassung: Unterstützt .pdf (über pypdf), .docx (über python-docx) und .txt-Dateien.

    • NLP-Fähigkeits-Chunking und dynamisches Lexikon: Entdeckt und extrahiert 40+ technische Fähigkeiten ohne starre Hardcodierung und unterstützt komplexe mehrwortige Technologien (z. B. FastAPI, LangGraph, PostgreSQL, Smart Contracts, GraphRAG).

    • Automatische Senioritäts- und Ausschlusserkennung: Leitet die Kandidatenseniorität (Junior, Mid, Senior, Lead, Principal, Director) genau ab und generiert intelligente negative Schlüsselwörter, um unpassende Positionen herauszufiltern.

    • Stoppwort- und Rauschfilterung: Verwirft rigoros strukturelle Artefakte des Lebenslaufs, Daten, Bildungstitel und nicht-technische Metadaten.

  2. Intelligente Anforderungsabdeckungsbewertung (0–100):

    • Abdeckungsquote der Stellenanforderungen: Berechnet, wie umfassend Kandidatenfähigkeiten den spezifischen Tech-Stack der Stelle erfüllen (matched_job_skills / total_job_skills), und verhindert so eine Bestrafung von Kandidaten mit breiten Lebensläufen.

    • Gewichtete Komponentenbewertung:

      • Tech-Stack-Überschneidung und -Abdeckung: Bis zu 40 Punkte

      • Relevanz der vollständigen CV-Schlüsselwörter: Bis zu 25 Punkte

      • Arbeitsmodus- und Standortübereinstimmung: Bis zu 20 Punkte

      • Gehaltserwartungen: Bis zu 15 Punkte

      • Ausschlussstrafe: -100 Punkte für harte Senioritäts-/Tech-Disqualifikatoren.

    • Abgestufte Übereinstimmungskategorisierung:

      • Top-Tier-Übereinstimmung ($\ge 85$): Auto-Bewerbung / priorisierte Bewerbungskandidaten.

      • Starke Übereinstimmung ($70 - 84$): Hochinteressante Einträge, die zur Überprüfung/Lesezeichen markiert werden.

      • Disqualifiziert ($< 50$): Automatisch ausgeblendet oder entfernt.

  3. Steckbare Multi-Quellen-Architektur:

    • HireMeTech: Direkte REST-API-Integration (/api/jobs/search, /api/auth/me, /api/resume/profile) mit automatischem DOM-Fallback.

    • Comeet (Direktes ATS): Direkte Integration mit der Comeet-Careers-API (/careers-api/2.0/company/{id}/positions) mit asyncio.Semaphore(5)-Ratenbegrenzung, Tech-Verzeichnisindizierung und TTL-Caching pro Unternehmen.

    • AllJobs Israel: Kategorie-Feed-Integration mit realistischen Browser-Headern und Fehlerisolierung auf Quellenebene.

  4. Quellenübergreifende Deduplizierung und Entitätszusammenführung:

    • Beseitigt Duplikate, wenn Einträge auf mehreren Jobbörsen erscheinen.

    • Führt Quellenlisten zusammen (sources: ["hiremetech", "comeet"]), vereinigt Tech-Stacks, bewahrt die reichhaltigste Beschreibung und priorisiert direkte ATS-Bewerbungslink.

  5. Autonome und überwachte Betriebsmodi:

    • Überwachter Modus: Standard-MCP-Bestätigung für jedes Tool.

    • Autonomer Modus: Sicheres Lesen/Filter/Lesezeichen-Verkettung ohne manuelle Eingabeaufforderungen; zweistufige Sicherheitsbarriere bei der Bewerbungseinreichung.

  6. Beobachtbarkeit und Resilienz:

    • Strukturierte JSON-Protokollierung (structlog), die auf stderr schreibt, mit Token-/Anmeldedatenbereinigung.

    • Automatische Trace-ID-Verfolgung über alle ToolResponse-Nutzlasten.


Tool-Referenz (9 Tools)

Tool-Name

Parameter

Beschreibung

list_job_sources

keine

Listet alle registrierten Jobquellen (hiremetech, comeet, alljobs), Fähigkeiten und Echtzeit-Health auf.

get_job_matches

sources: list[str] = None, force_refresh: bool = False

Ruft übereinstimmende Einträge von allen oder bestimmten Plattformen mit Deduplizierung ab.

filter_jobs_by_preferences

tech_stack: list[str], work_mode: str, location: str, min_salary: int, keywords: list[str], exclude_keywords: list[str], cv_path: str

Bewertet und filtert aggregierte Jobs gegen Kandidaten-CV und Präferenzen.

bookmark_job

job_id: str

Speichert/markiert einen Job-Eintrag auf der Ursprungsplattform als Favorit.

delete_job

job_id: str

Verwirft/blendet einen Job-Eintrag aus und entfernt ihn aus dem Cache.

auto_apply_job

job_id: str

Schritt 1: Untersucht das Bewerbungsmodal, bereitet die Vorschau vor, meldet Warnungen.

confirm_auto_apply

job_id: str

Schritt 2: Führt die Bewerbungseinreichung aus. Erfordert immer eine explizite Bestätigung.

calibrate_selectors

keine

Entdeckt und kalibriert DOM-Selektoren gegen Live-Seiten mit selbstheilenden Heuristiken.

set_operation_mode

mode: 'supervised' | 'autonomous'

Wechselt den Server-Ausführungsmodus zwischen überwacht und autonom.


Schnellstart & Einrichtung

1. Klonen und Abhängigkeiten installieren

git clone https://github.com/zvieli/hireme_mcp.git
cd hireme_mcp

# Using uv (recommended)
uv venv .venv
uv pip install -e ".[dev]"
playwright install chromium

2. Kandidatenprofil und CV konfigurieren

Platzieren Sie Ihren Lebenslauf (cv.pdf, cv.docx oder cv.txt) im Stammverzeichnis:

cp /path/to/your/resume.pdf ./cv.pdf
cp .env.example .env

Bearbeiten Sie .env, um Ihren Standard-CV-Pfad und Ihre Kontaktdaten zu konfigurieren:

DEFAULT_CV_PATH=./cv.pdf
CANDIDATE_EMAIL=your.email@example.com
CANDIDATE_NAME="Your Name"

3. (Optional) Erstmalige Authentifizierungseinrichtung für HireMeTech

Comeet und AllJobs funktionieren automatisch ohne Anmeldung. Um Ihr HireMeTech-Konto für direkten API-Zugriff und Auto-Bewerbung zu authentifizieren:

.venv/bin/python -m job_mcp.setup
  1. Ein Chromium-Browserfenster wird geöffnet.

  2. Melden Sie sich mit Ihren Anmeldedaten an.

  3. Kehren Sie zum Terminal zurück und drücken Sie [Enter], um die Sitzung in ./browser_profile zu speichern.


Server ausführen

Option A: Mit Docker (Empfohlen)

# Build and run in background
docker compose up -d

# View live multi-source aggregation logs
docker compose logs -f hireme-mcp

Option B: Lokale Ausführung

# Streamable HTTP (Default for Web & Cloud Clients)
.venv/bin/python -m job_mcp --transport http --host 0.0.0.0 --port 8000

# Stdio (Default for Desktop Clients)
.venv/bin/python -m job_mcp --transport stdio

Visueller CLI-Pipeline-Läufer

Um eine vollständige autonome Entdeckung, Bewertung und Bewerbungs-Trockenlauf direkt in Ihrem Terminal mit reichhaltiger visueller Ausgabe auszuführen:

# Run with auto-extracted skills from your CV:
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf

# Run with explicit stack override and remote filter:
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf --stack "Python,FastAPI,LangGraph" --work-mode remote --location "Tel Aviv"

# Execute live application submissions (disabled by default in dry-run):
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf --auto-apply

MCP-Client-Konfiguration

1. Claude Desktop (claude_desktop_config.json)

Unter Linux: ~/.config/Claude/claude_desktop_config.json
Unter macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Unter Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "job-search-mcp": {
      "command": "/absolute/path/to/hireme_mcp/.venv/bin/python",
      "args": ["-m", "job_mcp", "--transport", "stdio"],
      "env": {
        "BROWSER_HEADLESS": "true",
        "DEFAULT_CV_PATH": "/absolute/path/to/hireme_mcp/cv.pdf",
        "CANDIDATE_EMAIL": "candidate@example.com",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

2. Gemini Spark / Web-MCP-Clients

  • Endpunkt-URL: https://<your-host-or-devtunnel-id>/mcp

  • Transport: Streamable HTTP

  • Authentifizierung: Keine / Keine Auth


Umgebungsvariablen

Variable

Standard

Beschreibung

DEFAULT_CV_PATH

./cv.pdf

Standard-CV-Dateipfad für die dynamische Kandidatenfähigkeitsextraktion.

CANDIDATE_EMAIL

candidate@example.com

Kandidaten-E-Mail für automatisierte Bewerbungsmodale.

CANDIDATE_NAME

""

Vollständiger Kandidatenname für Bewerbungsformulare.

MCP_TRANSPORT

http

Transportprotokoll (http, sse, stdio).

MCP_HOST

0.0.0.0

Host-Bindung für HTTP/SSE-Transport.

MCP_PORT

8000

Port für HTTP/SSE-Transport.

BROWSER_HEADLESS

true

Browser im Headless-Modus ausführen (true/false).

BROWSER_PROFILE_DIR

./browser_profile

Verzeichnis für die persistente Chromium-Sitzungsspeicherung.

CACHE_TTL_MINUTES

60

TTL des In-Memory-Deduplizierungs-Job-Cache in Minuten.

LOG_LEVEL

INFO

Strukturierte Protokollierungsebene (DEBUG, INFO, WARNING, ERROR).


Tests ausführen

Führen Sie die vollständige automatisierte Testsuite aus (542 Tests):

.venv/bin/pytest tests/ -v

Lizenz

Dieses Projekt ist unter der MIT-Lizenz lizenziert.

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all MCP Connectors

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/zvieli/TechJobMCP'

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