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 devDespliegue en Producción
# Deploy to Vercel (recommended)
npm install -g vercel
vercel
# Or deploy to AWS
# See docs/DEPLOYMENT.md for AWS Lambda setupArquitectura 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 buttonsConfiguració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.jsonLa 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
jobTypemientras que otro puede exponer:
location
timeType
LocationCountry
jobFamilyGroup
workerSubTypeEl 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 # ExtractorRegistryEjemplo 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].jsPruebas 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.jsPropó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.jsPropó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.jsPropó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.jsPropó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 correctamentetest/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.jsArchivos de Salida de las Pruebas
Los informes CSV generados se almacenan en la carpeta test/:
manager-jobs-success.csv- Extracciones de empleo exitosasmanager-jobs-errors.csv- Intentos de extracción fallidos con códigos de errorArchivos 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:
Leer
src/config.json.Procesar todas las empresas listadas en
sites.Visitar/analizar la URL de búsqueda proporcionada.
Determinar la estructura real de carreras/búsqueda de la empresa.
Descubrir los parámetros de búsqueda disponibles y sus valores.
Generar o actualizar el
sites/<empresa>.jsoncorrespondiente.Asegurarse de que el archivo generado sigue la estructura definida por
test/sample.json.Compilar/actualizar la implementación común del MCP.
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 fileTecnologí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 configurationEl 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.
This server cannot be deployed
Maintenance
Related MCP Connectors
Public MCP server for discovering open jobs. Search, filter, and get application links.
GetJobzi MCP server for job search, application tracking, and career forecasting.
JobsPipe — data pipeline of every job posting on the web. Search live, normalized job postings from 30+ ATS feeds and job boards for AI agents via MCP.
AI job search MCP — fact-checked jobs, application tracker, alerts. ChatGPT, Claude, Cursor.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server that exposes job search data from multiple boards, enabling clients to query and manage job listings via natural language.7MIT

trackly-cliofficial
AlicenseNot gradedqualityAmaintenanceMCP 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 npm3MIT- 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.8342 npm1AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceA 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