Job Matcher MCP
Job Matcher MCP
🎯 Servidor MCP (Model Context Protocol) de búsqueda de empleo y personalización de currículums impulsado por IA
Automatiza tu búsqueda de empleo y personaliza tu currículum para cada puesto en menos de un minuto. Impulsado por APIs de empleo y el LLM de Claude.
📋 Tabla de Contenidos
Related MCP server: job-search
🚀 Inicio Rápido
Objetivo: Poner el servidor en funcionamiento con datos simulados en 5 minutos (sin necesidad de claves API).
1. Clonar el repositorio
\
cd job-matcher-mcp2. Instalar dependencias
\
pip install -r requirements.txt3. Ejecutar con datos simulados
\
export USE_MOCK_DATA=true
python mcp_server.pySalida esperada:
=== 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...",
...
}✅ ¡Éxito! Tu servidor MCP está funcionando. Ahora agreguemos las claves API reales.
✨ Características
Característica | Estado | Descripción |
Búsqueda de Empleo | ✅ MVP | Consulta miles de ofertas mediante la API de Adzuna |
Personalización de Currículum | ✅ MVP | Adaptación del currículum impulsada por IA usando Claude |
Coincidencia de Habilidades | ✅ MVP | Identifica habilidades coincidentes/faltantes |
Optimización ATS | ✅ MVP | Inserción automática de palabras clave para ATS |
Modo de Datos Simulados | ✅ MVP | Prueba sin claves API |
Soporte Multi-API | 🔜 v1.2 | Añadir Indeed, LinkedIn, AngelList |
Generación de Cartas de Presentación | 🔜 v1.2 | Generación automática de cartas de presentación |
Seguimiento de Solicitudes | 🔜 v2.0 | Seguimiento de solicitudes y entrevistas |
🔧 Instalación
Requisitos previos
Python 3.10 o superior
pip (gestor de paquetes de Python)
Git
Paso 1: Clonar el repositorio
\
git clone https://github.com/yourusername/job-matcher-mcp.git
cd job-matcher-mcpPaso 2: Crear entorno virtual (recomendado)
\
# macOS/Linux
python3 -m venv venv
source venv/bin/activate
# Windows
python -m venv venv
.\venv\Scripts\Activate.ps1Paso 3: Instalar dependencias
\
pip install -r requirements.txt⚙️ Configuración
1. Obtener claves API
API de Adzuna (Gratuita)
Crea una cuenta
Crea una aplicación para obtener App ID y App Key
Nivel gratuito: ~100 solicitudes/día
API de Anthropic Claude (Paga, $0.50-5/mes)
Crea una cuenta
Genera una clave API
Precios: ~$0.003 por 1K tokens de entrada, $0.015 por 1K tokens de salida
2. Crear archivo .env
\
cp .env.example .env3. Agregar tus claves API a .env
ADZUNA_APP_ID=tu_app_id_real
ADZUNA_APP_KEY=tu_app_key_real
ANTHROPIC_API_KEY=sk-ant-tu_clave_api_real
USE_MOCK_DATA=false
LOG_LEVEL=INFO4. Cargar variables de entorno
\
# 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 }
}💻 Uso
Ejecutar el servidor
\
python mcp_server.pyProbar con curl (ejemplo)
\
# Buscar empleos
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
}'
# Personalizar currículum
curl -X POST http://localhost:8000/tools/customize_resume \
-H "Content-Type: application/json" \
-d '{
"base_resume": "...",
"job_description": "...",
"template": "modern"
}'Ejemplo en Python
from mcp_server import JobMatcherMCPServer
server = JobMatcherMCPServer()
# Buscar empleos
jobs = server.search_jobs(
role="Product Manager",
location="San Francisco, CA",
experience_years=5,
max_results=10
)
print(jobs)
# Personalizar currículum
resume = server.customize_resume(
base_resume="Tu texto de currículum aquí...",
job_description="Descripción del empleo aquí...",
template="modern"
)
print(resume)🛠️ Referencia de Herramientas MCP
Herramienta 1: search_jobs
Busca ofertas de empleo según criterios.
Esquema de Entrada
{
"role": "Product Manager", // Requerido: Título del puesto
"location": "San Francisco, CA", // Requerido: Ubicación geográfica
"experience_years": 5, // Requerido: Años de experiencia
"max_results": 10, // Opcional: Límite de resultados (por defecto: 10)
"use_mock_data": false // Opcional: Usar datos simulados (por defecto: false)
}Esquema de Salida
{
"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": "Buscamos a..."
}
],
"total_found": 123,
"search_time_ms": 1234,
"error": null
}Ejemplo
jobs = server.search_jobs(
role="Product Manager",
location="Remoto",
experience_years=3,
max_results=5
)Herramienta 2: customize_resume
Personaliza el currículum para un empleo específico usando IA.
Esquema de Entrada
{
"base_resume": "# Jane Doe...", // Requerido: Texto de tu currículum
"job_description": "Buscamos a...", // Requerido: Publicación del empleo
"template": "modern", // Opcional: modern|classic|minimal
"use_mock_data": false // Opcional: Usar datos simulados
}Esquema de Salida
{
"success": true,
"customized_resume": "# Jane Doe...",
"match_analysis": {
"skills_match_percentage": 82,
"matched_skills": ["Product Management", "Leadership"],
"missing_skills": ["Machine Learning", "Cloud"],
"suggestions": ["Agrega experiencia en ML si aplica"],
"keywords_added": ["Data-driven", "Cross-functional"]
},
"generation_time_ms": 2345,
"error": null
}Ejemplo
customized = server.customize_resume(
base_resume=open("resume.txt").read(),
job_description=open("job_posting.txt").read(),
template="modern"
)🏗️ Arquitectura
┌─────────────────────────────────────────────────────┐
│ Usuario/Agente IA (Chat, Script, Cliente API) │
└────────────────┬────────────────────────────────────┘
│ Protocolo MCP
┌────────────────▼────────────────────────────────────┐
│ Servidor Job Matcher MCP │
│ ┌──────────────────────────────────────────────┐ │
│ │ Herramienta: search_jobs() │ │
│ │ - Consulta API de Adzuna │ │
│ │ - Analiza y estructura resultados │ │
│ └──────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────┐ │
│ │ Herramienta: customize_resume() │ │
│ │ - Envía a API de Claude │ │
│ │ - Analiza y devuelve currículum personalizado│ │
│ └──────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────┐ │
│ │ APIs Externas │ │
│ │ - API de Búsqueda de Empleo de Adzuna │ │
│ │ - API de Anthropic Claude │ │
│ └──────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘🔍 Solución de Problemas
Problema: ModuleNotFoundError: No module named 'anthropic'
Solución: Instala las dependencias
pip install -r requirements.txtProblema: API request failed: Unauthorized
Solución: Verifica tus claves API en .env
# Verifica que las claves estén configuradas
echo $ADZUNA_APP_ID
echo $ANTHROPIC_API_KEYProblema: No jobs found
Solución: Prueba con un puesto/ubicación diferente o aumenta max_results
# Intenta una búsqueda más amplia
jobs = server.search_jobs(
role="Manager", # Término más general
location="New York, NY",
experience_years=5,
max_results=50
)Problema: Claude API response too slow
Solución: Usa datos simulados para pruebas
resume = server.customize_resume(
base_resume="...",
job_description="...",
use_mock_data=True # Omite la llamada a la API
)Problema: Rate limit exceeded
Solución: El nivel gratuito de Adzuna tiene límites. Implementa caché:
# Almacena resultados de búsqueda de empleo
cached_jobs = {}
key = f"{role}*{location}*{experience_years}"
if key not in cached_jobs:
cached_jobs[key] = server.search_jobs(...)🚢 Despliegue
Desplegar en Vercel
# 1. Crea una cuenta en Vercel en https://vercel.com
# 2. Instala la CLI de Vercel
npm install -g vercel
# 3. Despliega
vercel
# 4. Agrega variables de entorno en el panel de Vercel
# Settings → Environment VariablesDesplegar en Railway
# 1. Crea una cuenta en Railway en https://railway.app
# 2. Conecta tu repositorio de Git
# 3. Agrega variables de entorno en el panel de Railway📊 Métricas de Rendimiento (Objetivo)
Operación | Tiempo Objetivo | Real |
Búsqueda de empleo | <5 segundos | ~2-3s |
Personalización de currículum | <10 segundos | ~3-5s |
Búsqueda simulada | <100ms | ~50ms |
Personalización simulada | <500ms | ~200ms |
📚 Referencias de API
API de Adzuna: https://developer.adzuna.com/docs
API de Claude: https://docs.anthropic.com/
Protocolo MCP: https://modelcontextprotocol.io/
📝 Licencia
Licencia MIT - consulta el archivo LICENSE para más detalles.
👨💼 Autor
Creado para gerentes de producto tecnológicos en transición laboral.
Versión: 1.0.0
Última actualización: 2026-08-17
Estado: MVP Listo
This server cannot be deployed
Maintenance
Related MCP Connectors
GetJobzi MCP server for job search, application tracking, and career forecasting.
AI job search MCP — fact-checked jobs, application tracker, alerts. ChatGPT, Claude, Cursor.
Public MCP server for discovering open jobs. Search, filter, and get application links.
Job application tracker for developers - AI agents write over MCP, you review in a dashboard.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for maintaining a professional profile database and generating tailored, ATS-optimized resumes for specific job postings.1-
- AlicenseNot gradedqualityDmaintenanceA job-search MCP server that ranks roles, drafts cover letters, and rehearses Q&A answers using a candidate profile, with live listings from five public sources.26 npmMIT
- 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.8319 npm1AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes job-search and application-management capabilities to compatible AI clients, enabling discovery of vacancies, drafting of tailored application materials, and coordinated human-approved submissions.MIT