Skip to main content
Glama
saurabhgayali

Job Search MCP

Motor de Búsqueda de Empleo

Búsqueda de empleo rápida y fiable en 5 grandes empresas farmacéuticas.

Busca empleos directamente en los sitios web de carreras de Amgen, Bayer, GSK, Novartis y Pfizer. Extrae títulos de empleo, descripciones, requisitos y enlaces de solicitud al instante.

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

Características

  • ✅ Búsqueda en 5 empresas simultáneamente

  • ✅ Extracción de información detallada del empleo (título, descripción, requisitos, caducidad)

  • ✅ Seguimiento de extracciones fallidas con códigos de error (404, tiempos de espera, etc.)

  • ✅ Generación de informes CSV con resultados

  • ✅ Cero dependencias externas, análisis rápido basado en expresiones regulares

  • ✅ TypeScript + seguridad estricta de tipos

  • ✅ Manejo y clasificación exhaustivos de errores

  • ✅ API con límite de velocidad (5 búsquedas/día/IP)

Related MCP server: trackly-cli

Pila Tecnológica

  • Frontend: React + TypeScript + Tailwind CSS

  • Backend: Next.js + Node.js

  • Análisis: Extracción de HTML basada en expresiones regulares (sin dependencias pesadas)

  • Entorno de ejecución: Node.js (v18+)

  • Lenguaje: TypeScript 5.3+

  • Compilación: Compilador de TypeScript (tsc)

  • Despliegue: Vercel (recomendado) o AWS Lambda

Inicio Rápido

Probar la Demo

Visita: https://[tu-app-vercel].vercel.app/

Serás redirigido a la interfaz de búsqueda de empleo. Introduce un título de empleo, selecciona empresas y explora los resultados al instante.

Desarrollo Local

# 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

Despliegue en Producción

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

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

Arquitectura del Proyecto

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

Configuración

src/config.json es la fuente de verdad para las empresas que admite el proyecto.

Ejemplo:

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

Solo es necesario proporcionar el nombre de la empresa y una URL de búsqueda utilizable al añadir una nueva empresa.

Definiciones de Sitios

Cada empresa está representada por un archivo independiente en sites/.

Por ejemplo:

sites/amgen.json

La estructura debe seguir test/sample.json.

Una definición de sitio contiene:

  • nombre de la empresa

  • URL de carreras

  • URL de búsqueda

  • parámetros de búsqueda admitidos

  • etiquetas de parámetros

  • tipos de parámetros

  • valores de parámetros disponibles

La estructura de parámetros es intencionadamente una matriz en lugar de claves JSON fijas porque los diferentes sitios web de carreras exponen diferentes parámetros de búsqueda.

Por ejemplo, un sitio puede exponer:

location
country
jobType

mientras que otro puede exponer:

location
timeType
LocationCountry
jobFamilyGroup
workerSubType

El MCP no debe asumir que todas las empresas admiten los mismos parámetros.

Extractores de Empleo

El proyecto incluye extractores de empleo específicos del sitio que analizan URLs individuales de ofertas de empleo y extraen información detallada.

Datos Extraídos

Cada extractor recupera:

  • Título del Empleo - Nombre del puesto

  • Descripción del Empleo - Descripción completa del empleo/responsabilidades (excluye encabezados y pies de página)

  • Elegibilidad - Requisitos, cualificaciones y habilidades

  • Fecha de Caducidad - Fecha límite de solicitud (formato AAAA-MM-DD, en blanco si no está disponible)

  • Enlace de Solicitud - URL directa para solicitar (puede diferir de la URL de la oferta de empleo)

Extractores Disponibles

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

Ejemplo de Uso

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);
}

Pruebas

El proyecto incluye un conjunto completo de pruebas para validar la funcionalidad de búsqueda y extracción.

Resumen del Conjunto de Pruebas

Todas las pruebas son archivos TypeScript autónomos que se pueden ejecutar de forma independiente:

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

Pruebas Disponibles

1. test-config.ts - Prueba de Carga de Configuración

Comprueba que las configuraciones de las empresas se cargan correctamente desde src/config.json.

node dist/test/test-config.js

Propósito: Valida la estructura de configuración y el descubrimiento de empresas Salida: Lista las empresas disponibles y sus URLs de búsqueda


2. test-search.ts - Prueba de Búsqueda de Empleo

Prueba la funcionalidad de búsqueda en todas las empresas.

node dist/test/test-search.js

Propósito: Verifica que las búsquedas devuelven URLs de empleo válidas Salida: Resultados de búsqueda para empleos de "Manager" de cada empresa Nota: Requiere conectividad a internet con los sitios de carreras reales


3. test-extractors.ts - Prueba de Extracción de Empleo

Prueba que la extracción de detalles del empleo funciona para las URLs de empleo de cada empresa.

node dist/test/test-extractors.js

Propósito: Valida la extracción del título, la descripción y la elegibilidad del empleo Salida: Tasa de éxito de extracción y detalles de los campos Nota: Requiere URLs de empleo reales de la salida de test-search.ts


4. test-manager-jobs.ts - Prueba de Integración de Extremo a Extremo

Prueba completa del pipeline: busca empleos → extrae detalles → genera informes

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

Propósito: Prueba de integración completa con seguimiento de errores y generación de informes CSV Salida:

  • test/manager-jobs-success.csv - Datos de empleo extraídos correctamente

  • test/manager-jobs-errors.csv - Errores de extracción (404, tiempos de espera, etc.)

  • Resumen en consola que muestra la tasa de éxito y el desglose de errores

Ejecutar Todas las Pruebas

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

Archivos de Salida de las Pruebas

Los informes CSV generados se almacenan en la carpeta test/:

  • manager-jobs-success.csv - Extracciones de empleo exitosas

  • manager-jobs-errors.csv - Intentos de extracción fallidos con códigos de error

  • Archivos HTML de muestra para depuración

Estos archivos se generan durante las ejecuciones de prueba y se pueden eliminar de forma segura. Están en .gitignore.

test/sample.json

test/sample.json define la estructura esperada para los archivos individuales de las empresas.

Es un esquema mediante ejemplo/plantilla en lugar de un registro de empresas.

El ejemplo actual utiliza parámetros como location, timeType, LocationCountry, jobFamilyGroup y workerSubType.

BUILD.md

BUILD.md contiene instrucciones para el proceso de IA/desarrollo que construye el MCP a partir de las configuraciones de las empresas.

El proceso de compilación debe:

  1. Leer src/config.json.

  2. Procesar todas las empresas listadas en sites.

  3. Visitar/analizar la URL de búsqueda proporcionada.

  4. Determinar la estructura real de carreras/búsqueda de la empresa.

  5. Descubrir los parámetros de búsqueda disponibles y sus valores.

  6. Generar o actualizar el sites/<empresa>.json correspondiente.

  7. Asegurarse de que el archivo generado sigue la estructura definida por test/sample.json.

  8. Compilar/actualizar la implementación común del MCP.

  9. Validar que todos los sitios configurados se pueden buscar.

UPDATE.md

Consulta ai/UPDATE.md para obtener instrucciones sobre cómo reconstruir el proyecto cuando se crea una nueva versión.

Cuando src/config.json cambia, la IA debe reconstruir todas las definiciones de empresas, no solo las empresas recién añadidas.

Esto es intencionado.

Los sitios de carreras existentes pueden cambiar:

  • sus URLs de búsqueda

  • sus parámetros de consulta

  • los nombres de los filtros

  • los valores de los filtros

  • la estructura del sitio de carreras

  • la implementación del ATS

Por lo tanto, cada versión debe volver a comprobar los archivos sites/*.json existentes frente a los sitios de carreras en vivo actuales.

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

Estructura del Proyecto

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

Tecnología

Entorno de ejecución: Node.js Lenguaje: TypeScript SDK del MCP: SDK oficial de TypeScript del Model Context Protocol Configuración: JSON

Principio de Diseño

El proyecto separa el conocimiento específico del sitio de la lógica común del MCP.

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

El MCP no debe contener suposiciones codificadas sobre parámetros como location, remote, full_time o job_type.

Un parámetro solo existe para una empresa si el sitio de carreras de esa empresa realmente lo admite o expone la información requerida por la configuración.

Objetivo

El objetivo es crear un MCP de búsqueda de empleo reutilizable donde añadir empresas sea principalmente una cuestión de añadir sus URLs de búsqueda a config.json, permitiendo que el proceso de compilación de la IA descubra y mantenga las configuraciones específicas del sitio automáticamente.

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