Skip to main content
Glama
saurabhgayali

Job Search MCP

Job-Suchmaschine

Schnelle, zuverlässige Jobsuche über 5 große Pharmaunternehmen.

Durchsuchen Sie die Karriere-Websites von Amgen, Bayer, GSK, Novartis und Pfizer direkt nach Jobs. Extrahieren Sie Stellenbezeichnungen, Beschreibungen, Anforderungen und Bewerbungslinks sofort.

Demo: https://[your-vercel-app].vercel.app/

Funktionen

  • ✅ Gleichzeitige Suche in 5 Unternehmen

  • ✅ Extraktion detaillierter Jobinformationen (Titel, Beschreibung, Anforderungen, Ablaufdatum)

  • ✅ Verfolgung fehlgeschlagener Extraktionen mit Fehlercodes (404s, Timeouts usw.)

  • ✅ CSV-Berichte mit Ergebnissen generieren

  • ✅ Keine externen Abhängigkeiten, schnelles regex-basiertes Parsing

  • ✅ TypeScript + strenge Typsicherheit

  • ✅ Umfassende Fehlerbehandlung und -klassifizierung

  • ✅ Ratenbegrenzte API (5 Suchen/Tag/IP)

Related MCP server: trackly-cli

Technologie-Stack

  • Frontend: React + TypeScript + Tailwind CSS

  • Backend: Next.js + Node.js

  • Parsing: Regex-basierte HTML-Extraktion (keine schweren Abhängigkeiten)

  • Laufzeit: Node.js (v18+)

  • Sprache: TypeScript 5.3+

  • Build: TypeScript Compiler (tsc)

  • Bereitstellung: Vercel (empfohlen) oder AWS Lambda

Schnellstart

Demo ausprobieren

Besuchen Sie: https://[your-vercel-app].vercel.app/

Sie werden zur Jobsuch-Oberfläche weitergeleitet. Geben Sie eine Stellenbezeichnung ein, wählen Sie Unternehmen aus und durchsuchen Sie die Ergebnisse sofort.

Lokale Entwicklung

# Install dependencies
npm install

# Build TypeScript
npm run build

# Run a test
node dist/test/test-manager-jobs.js

# Start development server (requires Next.js setup)
npm run dev

Produktionsbereitstellung

# Deploy to Vercel (recommended)
npm install -g vercel
vercel

# Or deploy to AWS
# See docs/DEPLOYMENT.md for AWS Lambda setup

Projektarchitektur

User searches for jobs → Demo page (/app/demo/page.tsx)
                          ↓
                    React UI Component
                    - Search input
                    - Company multi-select
                    - Sortable results tables
                    ↓
                   REST API (/api/search-jobs)
                    ↓
    ┌───────────────┬────────────────┬────────────────┐
    │               │                │                │
  Amgen          Bayer            GSK           Novartis  Pfizer
(Workday)   (Eightfold AI)    (Workday)      (Drupal)   (Workday)
    │               │                │                │
    └───────────────┴────────────────┴────────────────┘
                    ↓
          Search Executor (src/search-executor.ts)
          - Fetches job URLs from each site
          - Parses HTML for job listings
          ↓
    Extractor Registry (src/extractors/)
    - Extracts job details from each URL
    - Company-specific parsers
    - Error tracking & classification
          ↓
    Extraction Helpers (src/extraction-helpers.ts)
    - CSV report generation
    - Error aggregation
          ↓
    REST API Response (JSON)
          ↓
    Demo Page displays results
    - Success table: Jobs with details
    - Error table: Failed extractions
    - Download CSV buttons

Konfiguration

src/config.json ist die maßgebliche Quelle für die Unternehmen, die das Projekt unterstützt.

Beispiel:

{
  "projectname": "Job Search MCP",
  "sites": [
    {
      "name": "Amgen",
      "search_url": "https://amgen.wd1.myworkdayjobs.com/Careers?q=Engineer"
    },
    {
      "name": "Pfizer",
      "search_url": "..."
    }
  ]
}

Beim Hinzufügen eines neuen Unternehmens müssen nur der Firmenname und eine nutzbare Such-URL angegeben werden.

Site-Definitionen

Jedes Unternehmen wird durch eine separate Datei unter sites/ repräsentiert.

Zum Beispiel:

sites/amgen.json

Die Struktur muss test/sample.json entsprechen.

Eine Site-Definition enthält:

  • Firmenname

  • Karriere-URL

  • Such-URL

  • Unterstützte Suchparameter

  • Parameterbezeichnungen

  • Parametertypen

  • Verfügbare Parameterwerte

Die Parameterstruktur ist bewusst als Array und nicht als feste JSON-Schlüssel angelegt, da verschiedene Karriere-Websites unterschiedliche Suchparameter bereitstellen.

Zum Beispiel kann eine Website Folgendes bereitstellen:

location
country
jobType

während eine andere Folgendes bereitstellt:

location
timeType
LocationCountry
jobFamilyGroup
workerSubType

Der MCP darf nicht davon ausgehen, dass jedes Unternehmen dieselben Parameter unterstützt.

Job-Extraktoren

Das Projekt enthält sitespezifische Job-Extraktoren, die einzelne Stellenausschreibungs-URLs parsen und detaillierte Informationen extrahieren.

Extrahierte Daten

Jeder Extraktor ruft ab:

  • Stellenbezeichnung – Positionsname

  • Stellenbeschreibung – Vollständige Stellenbeschreibung/Aufgaben (ohne Kopf- und Fußzeilen)

  • Eignung – Anforderungen, Qualifikationen und Fähigkeiten

  • Ablaufdatum – Bewerbungsschluss (Format JJJJ-MM-TT, leer wenn nicht verfügbar)

  • Bewerbungslink – Direkte URL zur Bewerbung (kann von der Stellenausschreibungs-URL abweichen)

Verfügbare Extraktoren

src/extractors/
├── types.ts                  # JobExtractor interface & types
├── amgen.ts                  # Amgen (Workday-based)
├── pfizer.ts                 # Pfizer (Workday-based)
├── bayer.ts                  # Bayer (Eightfold AI)
├── gsk.ts                    # GSK (Workday-based)
├── novartis.ts               # Novartis (Drupal)
└── index.ts                  # ExtractorRegistry

Verwendungsbeispiel

import { ExtractorRegistry } from './src/extractors/index.js';

const registry = new ExtractorRegistry();
const amgenExtractor = registry.getExtractor('amgen');

const result = await amgenExtractor?.extract(
  'https://amgen.wd1.myworkdayjobs.com/job/India---Hyderabad/Assoc-Director---Data-Product-Mgmt_R-219150'
);

if (result?.success && result.data) {
  console.log(result.data.jobTitle);
  console.log(result.data.jobDescription);
  console.log(result.data.eligibility);
}

Testen

Das Projekt enthält eine umfassende Testsuite zur Validierung der Such- und Extraktionsfunktionalität.

Übersicht der Testsuite

Alle Tests sind eigenständige TypeScript-Dateien, die unabhängig ausgeführt werden können:

npm run build
node dist/test/[test-name].js

Verfügbare Tests

1. test-config.ts – Konfigurationsladetest

Testet, ob die Unternehmenskonfigurationen korrekt aus src/config.json geladen werden.

node dist/test/test-config.js

Zweck: Validiert die Konfigurationsstruktur und die Unternehmenserkennung Ausgabe: Listet verfügbare Unternehmen und deren Such-URLs auf


2. test-search.ts – Jobsuchtest

Testet die Suchfunktionalität über alle Unternehmen.

node dist/test/test-search.js

Zweck: Verifiziert, dass Suchen gültige Job-URLs zurückgeben Ausgabe: Suchergebnisse für „Manager“-Jobs von jedem Unternehmen Hinweis: Erfordert Internetverbindung zu den tatsächlichen Karriere-Websites


3. test-extractors.ts – Job-Extraktionstest

Testet, ob die Extraktion von Jobdetails für die Job-URLs jedes Unternehmens funktioniert.

node dist/test/test-extractors.js

Zweck: Validiert die Extraktion von Stellenbezeichnung, Beschreibung und Eignung Ausgabe: Extraktionserfolgsrate und Felddetails Hinweis: Erfordert echte Job-URLs aus der Ausgabe von test-search.ts


4. test-manager-jobs.ts – End-to-End-Integrationstest

Vollständiger Pipeline-Test: sucht nach Jobs → extrahiert Details → generiert Berichte

node dist/test/test-manager-jobs.js

Zweck: Vollständiger Integrationstest mit Fehlerverfolgung und CSV-Berichtsgenerierung Ausgabe:

  • test/manager-jobs-success.csv – Erfolgreich extrahierte Jobdaten

  • test/manager-jobs-errors.csv – Extraktionsfehler (404s, Timeouts usw.)

  • Konsolenzusammenfassung mit Erfolgsrate und Fehleraufschlüsselung

Alle Tests ausführen

npm run build
node dist/test/test-config.js
node dist/test/test-search.js
node dist/test/test-extractors.js
node dist/test/test-manager-jobs.js

Testausgabedateien

Generierte CSV-Berichte werden im Ordner test/ gespeichert:

  • manager-jobs-success.csv – Erfolgreiche Job-Extraktionen

  • manager-jobs-errors.csv – Fehlgeschlagene Extraktionsversuche mit Fehlercodes

  • Beispiel-HTML-Dateien zum Debuggen

Diese Dateien werden während Testläufen generiert und können bedenkenlos gelöscht werden. Sie sind in .gitignore.

test/sample.json

test/sample.json definiert die erwartete Struktur für einzelne Unternehmensdateien.

Es ist ein Schema-by-Example/Schema-Vorlage und keine Unternehmensregistrierung.

Das aktuelle Beispiel verwendet Parameter wie location, timeType, LocationCountry, jobFamilyGroup und workerSubType.

BUILD.md

BUILD.md enthält Anweisungen für den KI-/Entwicklungsprozess, der den MCP aus den Unternehmenskonfigurationen erstellt.

Der Build-Prozess sollte:

  1. src/config.json lesen.

  2. Jedes in sites aufgeführte Unternehmen verarbeiten.

  3. Die bereitgestellte Such-URL besuchen/analysieren.

  4. Die tatsächliche Karriere-/Suchstruktur des Unternehmens ermitteln.

  5. Die verfügbaren Suchparameter und deren Werte ermitteln.

  6. Die entsprechende Datei sites/<company>.json generieren oder aktualisieren.

  7. Sicherstellen, dass die generierte Datei der in test/sample.json definierten Struktur folgt.

  8. Die gemeinsame MCP-Implementierung erstellen/aktualisieren.

  9. Validieren, dass alle konfigurierten Sites durchsucht werden können.

UPDATE.md

Siehe ai/UPDATE.md für Anweisungen zum Neuaufbau des Projekts, wenn eine neue Version erstellt wird.

Wenn sich src/config.json ändert, muss die KI alle Unternehmensdefinitionen neu erstellen, nicht nur neu hinzugefügte Unternehmen.

Dies ist beabsichtigt.

Bestehende Karriere-Websites können Folgendes ändern:

  • Such-URLs

  • Abfrageparameter

  • Filternamen

  • Filterwerte

  • Karriere-Website-Struktur

  • ATS-Implementierung

Daher sollte jede Version die vorhandenen sites/*.json-Dateien gegen die aktuellen Live-Karriere-Websites erneut prüfen.

src/config.json updated
       │
       ▼
Rebuild ALL sites
       │
       ├── New company → create site JSON
       │
       └── Existing company → re-analyze and update
       │
       ▼
Rebuild common MCP
       │
       ▼
Validate

Projektstruktur

JobSearchMCP/
├── src/                      # Source code & configs
│   ├── server.ts             # MCP server entry point
│   ├── search-executor.ts    # Search execution & parsing
│   ├── config-loader.ts      # Configuration loader
│   ├── types.ts              # TypeScript types
│   ├── config.json           # Company registry
│   ├── site_configurations.json
│   └── site_analysis.json
├── sites/                    # Company-specific configs
│   ├── amgen.json
│   ├── pfizer.json
│   ├── novartis.json
│   ├── bayer.json
│   └── gsk.json
├── test/                     # Tests & test data
│   ├── test-*.js             # Test scripts
│   ├── sample.json           # Configuration template
│   └── *.html                # Sample HTML files
├── ai/                       # AI development notes (Gitignored)
│   ├── AI.md
│   └── UPDATE.md
├── reports/                  # Documentation
│   ├── IMPLEMENTATION.md
│   ├── ANALYSIS_GUIDE.md
│   ├── MCP_USAGE.md
│   └── MIGRATION.md
├── dist/                     # Compiled JavaScript
├── package.json              # Dependencies & scripts
├── tsconfig.json             # TypeScript config
└── README.md                 # This file

Technologie

Laufzeit: Node.js Sprache: TypeScript MCP SDK: Offizielles Model Context Protocol TypeScript SDK Konfiguration: JSON

Designprinzip

Das Projekt trennt sitespezifisches Wissen von gemeinsamer MCP-Logik.

sites/*.json
    = How a particular company career site works

MCP implementation
    = How to search any configured company

AI
    = Understand the user's request and select/use the appropriate
      company search configuration

Der MCP sollte keine fest codierten Annahmen über Parameter wie location, remote, full_time oder job_type enthalten.

Ein Parameter existiert für ein Unternehmen nur dann, wenn die Karriere-Website des Unternehmens ihn tatsächlich unterstützt oder die für die Konfiguration erforderlichen Informationen bereitstellt.

Ziel

Das Ziel ist die Erstellung eines wiederverwendbaren Jobsuch-MCP, bei dem das Hinzufügen von Unternehmen hauptsächlich darin besteht, deren Such-URLs zu config.json hinzuzufügen, sodass der KI-Build-Prozess die sitespezifischen Konfigurationen automatisch ermitteln und pflegen kann.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that exposes job search data from multiple boards, enabling clients to query and manage job listings via natural language.
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for job search and application tracking, enabling AI agents to search jobs, get details, manage applications, and find contacts across 128K+ jobs and 1,900+ companies.
    258 npm
    3
    MIT
  • A
    license
    C
    quality
    C
    maintenance
    An 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.
    83
    42 npm
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A custom MCP server that exposes a jobs database to any MCP-compatible LLM client, allowing users to ask in plain English to search, filter, and match job openings.
    MIT