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
🚀 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 installed
Maintenance
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
MCP server for AI job search — find jobs, track applications, get alerts. Claude, ChatGPT, Cursor.
GetJobzi MCP server for job search, application tracking, and career forecasting.
Job search and interview prep MCP. 11 tools, OAuth 2.1, cross-LLM. four-leaf.ai.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/SRP-alohamora/JobMatcherMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server