Skip to main content
Glama
SRP-alohamora

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-mcp

2. Instalar dependencias

\

pip install -r requirements.txt

3. Ejecutar con datos simulados

\

export USE_MOCK_DATA=true
python mcp_server.py

Salida 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-mcp

Paso 2: Crear entorno virtual (recomendado)

\

# macOS/Linux
python3 -m venv venv
source venv/bin/activate

# Windows
python -m venv venv
.\venv\Scripts\Activate.ps1

Paso 3: Instalar dependencias

\

pip install -r requirements.txt

⚙️ Configuración

1. Obtener claves API

API de Adzuna (Gratuita)

  1. Ve a https://developer.adzuna.com/

  2. Crea una cuenta

  3. Crea una aplicación para obtener App ID y App Key

  4. Nivel gratuito: ~100 solicitudes/día

API de Anthropic Claude (Paga, $0.50-5/mes)

  1. Ve a https://console.anthropic.com/

  2. Crea una cuenta

  3. Genera una clave API

  4. Precios: ~$0.003 por 1K tokens de entrada, $0.015 por 1K tokens de salida

2. Crear archivo .env

\

cp .env.example .env

3. 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=INFO

4. 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.py

Probar 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.txt

Problema: 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_KEY

Problema: 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 Variables

Desplegar 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


📝 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

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all MCP Connectors

Latest Blog Posts

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