Zovo Resume MCP Server

Crea y adapta currículums y CVs a partir de archivos locales con secciones estructuradas. Servidor MCP offline-first, nivel gratuito, sin registro.

Documentación

mcp-resume

Guarda los datos de tu CV una sola vez. Luego di "adapta mi currículum a esta oferta y escribe la carta de presentación" y obtén dos archivos .docx reales: un currículum cuyas viñetas se reordenan según su relevancia para la oferta, recortado para ajustarse al número de páginas que solicitaste, con las palabras clave de la oferta en negrita donde realmente las tienes, y una carta de presentación de una página que no afirma nada que no hayas puesto en tu perfil. Cuando falta un dato, la carta deja una indicación entre corchetes como [add: metric] en lugar de inventar un número. También lee un currículum existente .docx de vuelta a la forma de perfil, exporta markdown para un sistema de seguimiento de candidatos (ATS) y escribe HTML imprimible. Todo se ejecuta localmente: sin subidas, sin cuenta, sin dependencias nativas.

En el Registro oficial de MCP (io.github.theluckystrike/resume-cover-letter-docx-generator).

Listado en el Índice de Productos de IA — punto de conexión remoto en vivo en mcp.zovo.one/s/resume, plan gratuito, sin registro.

resume demo

Instalación en 60 segundos

La publicación en npm para @theluckystrike/mcp-resume está pendiente. Hasta entonces, el paquete de un clic .mcpb o una clonación y compilación es la vía funcional; ambas están verificadas a continuación.

Un clic (.mcpb): descarga resume.mcpb de la última versión y haz doble clic en Claude Desktop: https://github.com/theluckystrike/mcp-servers/releases/latest

(claude_desktop_config.json):

{
  "mcpServers": {
    "resume": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-resume"]
    }
  }
}

Claude Code:

claude mcp add resume -- npx -y @theluckystrike/mcp-resume

(.cursor/mcp.json):

{
  "mcpServers": {
    "resume": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-resume"]
    }
  }
}

El formulario npx anterior comienza a funcionar en cuanto se publique el paquete. Hasta entonces, usa el paquete .mcpb anterior, o compila desde el código fuente con exactamente estos tres comandos:

git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/docx -w servers/resume

Luego apunta el command de tu cliente a node con un argumento: la ruta absoluta a servers/resume/dist/index.js. servers/docx está en esa lista de compilación porque este servidor comparte el motor de documentos con mcp-docx en lugar de llevar una segunda copia del mismo.

Para ejecutar en modo Pro, establece MCP_LICENSE_KEY en el mismo bloque de configuración, o llama a license_activate una vez con tu clave.

Herramientas

HerramientaQué hace
profile_setAlmacena los datos de los que se generan todas las salidas: nombre, correo, teléfono, ubicación, enlaces, resumen, habilidades, roles con viñetas, educación, certificaciones, idiomas. Un perfil por directorio de datos; Pro añade variantes con nombre
profile_getDevuelve el perfil almacenado como JSON, exactamente como lo ven las demás herramientas
resume_createEscribe el currículum como .docx. Las viñetas se clasifican por coincidencias de palabras clave y actualidad, y luego se recortan a max_pages según un presupuesto de palabras medido; las palabras clave coincidentes se ponen en negrita, las faltantes se informan y nunca se añaden. Estilos: modern, classic, compact
cover_letter_createUna carta de una página en cuatro partes — apertura, encaje, prueba, cierre — extraída solo del perfil. Tonos: formal, direct, warm. Las incógnitas vuelven como indicaciones [add: ...]
tailor_to_jobAnálisis de carencias frente a una oferta: las palabras clave que realmente pide, cuáles de ellas tu perfil ya cubre, cuáles no, una cifra de cobertura y reescrituras que solo reordenan datos que ya has indicado
resume_readLee un currículum existente .docx de vuelta a la forma de perfil, sección por encabezado. Mejor esfuerzo; nada se guarda a menos que save: true
resume_to_markdownEl currículum como markdown, para un formulario de solicitud o un cuadro ATS
resume_to_htmlHTML imprimible con una hoja de estilos de impresión. Ábrelo e imprime a PDF
license_statusMuestra el modo gratuito o Pro
license_activateActiva una clave Pro (verificada sin conexión)

Recurso: resume://profile devuelve el perfil almacenado como JSON. Indicación: apply_to_job encadena tailor_to_job, resume_create y cover_letter_create contra una oferta, y hace que el modelo te informe de las carencias en lugar de rellenarlas.

La carta de presentación no inventa datos

Esta es la parte que importa, así que se aplica en lugar de solicitarse:

  • Cada línea de prueba en la carta es una viñeta textual de tu perfil. La carta nunca parafrasea una viñeta para convertirla en una afirmación más fuerte.
  • Una entrada highlights que pases se comprueba primero contra el perfil. Si el perfil no la respalda, se imprime como [add: "..." is not in your profile - add it there or drop it], no como una afirmación.
  • Antes de escribir el archivo, cada secuencia de dígitos en la carta se comprueba contra tu perfil y los argumentos que pasaste. Un número que no se remonta a ninguno de los dos es una negativa, no una advertencia; la herramienta devuelve un error y no escribe nada. La descripción del puesto se excluye deliberadamente no como fuente permitida: las cifras de ingresos, plantilla y rendimiento del empleador son suyas, y la carta nunca repetirá una como propia. La comparación es con números enteros, así que un perfil que contiene 2012 no autoriza una carta que afirme 12.
  • Cada viñeta de prueba se imprime bajo el rol al que realmente pertenece. Una carta que cita trabajo de dos empleadores imprime dos encabezados; el trabajo de un empleo anterior nunca se lista bajo el actual.
  • Una viñeta sin cifra recibe [add: metric] añadido, para que la carta te pida el resultado en lugar de adivinar uno.
  • Las palabras clave faltantes de tailor_to_job nunca se convierten en habilidades. La respuesta lo dice en palabras claras.

Lo que puedes decir

Tú dicesHerramienta
"Aquí está mi CV: Ada Rowe, ingeniera backend, Acme Pay desde 2021, ..."profile_set
"Lee mi currículum antiguo en ~/Documents/cv.docx y configura mi perfil."resume_read
"¿Qué tan bien encajo con esta oferta?"tailor_to_job
"Hazme un currículum de una página para este rol de ingeniera senior."resume_create
"Escribe la carta de presentación para Zeta Systems, tono directo."cover_letter_create
"Dame la versión en texto plano para el formulario de solicitud."resume_to_markdown
"Necesito un PDF para adjuntar."resume_to_html, luego imprime a PDF
"Aplícame a este trabajo."la indicación apply_to_job

Ejemplo práctico

You: Tailor my resume to this posting and write the letter. One page.

  tailor_to_job { job_description: "...payments platform, PostgreSQL, Kubernetes..." }
  -> matched: payments, postgresql, kubernetes   missing: rust
  -> coverage 75%

  resume_create { style: "modern", target_role: "Staff Engineer",
                  keywords: ["postgresql", "kubernetes", "rust"], max_pages: 1 }
  -> estimated_pages 1, words_used 402 of a 384-word budget for bullets
  -> bullets_dropped: ["Wrote the deployment pipeline"]
  -> keywords_missing: ["rust"]  (not added anywhere)
  -> ~/.local/share/mcp-servers/resume/documents/ada-rowe-resume.docx

  cover_letter_create { company: "Zeta Systems", role: "Staff Engineer", tone: "formal" }
  -> fills_required: ["[add: metric]"]
  -> ~/.local/share/mcp-servers/resume/documents/zeta-systems-staff-engineer-cover-letter.docx

Cómo funciona el recorte de páginas

No hay un motor de maquetación de páginas en JavaScript puro, así que este servidor no pretende medir uno. Usa un presupuesto de palabras en su lugar: una página A4 completa a 11pt Calibri con márgenes de 2 cm contiene unas 520 palabras de texto del cuerpo, y un currículum gasta aproximadamente una séptima parte de esa página en encabezados, líneas en blanco y el bloque de contacto. La cifra neta es 450 palabras por página (540 para el estilo compact). El bloque de contacto, el resumen, las habilidades, los encabezados de roles, la educación, las certificaciones y los idiomas se cuentan primero; el presupuesto restante va a las viñetas de experiencia, con la puntuación más alta primero. Cada rol conserva su primera viñeta antes de que cualquier rol reciba una segunda, así que el recorte nunca deja un trabajo en la página sin nada debajo. La respuesta informa el presupuesto, las palabras usadas, el número estimado de páginas y cada viñeta que descartó, para que veas la decisión en lugar de descubrirla en Word.

La actualidad es parte de esa puntuación, y se lee del orden del array, no del texto start/end. profile_set aplica el orden que hace eso seguro: sin importar cómo listes los roles al llamarlo, el perfil almacenado siempre termina del más reciente al más antiguo, un rol abierto sin end primero, luego por end descendente, luego por start descendente. Introduce los roles en cualquier orden; el orden almacenado (y la clasificación de viñetas de la carta en cover_letter_create) siempre es correcto.

Gratis vs Pro

GratisPro ($19 pago único)
Perfil, resume_create, resume_to_markdown, resume_to_htmlSí, ilimitadoSí, ilimitado
Estilos de currículummodernmodern, classic, compact
Cartas de presentación3 por mes calendarioIlimitadas
tailor_to_jobOfertas de hasta 2,000 caracteresCualquier longitud
Variantes de perfilUn perfilVariantes con nombre (backend, management, ...)
Color del membretePredeterminadoTu propio accent_color
Crédito de pie de página"Generado con mcp-docx por theluckystrike"Eliminado

Obtén Pro: https://mcp.zovo.one/buy/resume ($19 pago único, o $39 por el paquete completo).

Privacidad

Todos los datos permanecen locales. Tu CV nunca sale de la máquina: el servidor lee y escribe archivos en tu computadora, almacena el perfil bajo tu directorio de datos y no hace ninguna solicitud de red de ningún tipo, ni para licencias (las claves se verifican sin conexión), ni para fuentes, ni para telemetría.

Se combina con

  • mcp-docx, este servidor importa su motor de documentos (@theluckystrike/mcp-docx/lib); instala docx también cuando quieras propuestas, contratos y markdown a Word.
  • office-suite, varios servidores detrás de una sola instalación, una entrada de configuración.

Solución de problemas

  • npx se cuelga o no encuentra el paquete: la publicación en npm para este paquete está pendiente. Usa el paquete .mcpb o la ruta de clonar y compilar anterior hasta que llegue.
  • "no hay perfil almacenado": ejecuta profile_set una vez, o resume_read {path, save: true} desde un currículum existente.
  • El currículum descartó una viñeta que quería: aumenta max_pages, o pasa las palabras de la oferta en keywords para que la viñeta supere a las demás. bullets_dropped en la respuesta nombra cada una que no encajó.
  • Nombres de habilidades cortos: tailor_to_job conserva habilidades de dos y un carácter, Go, C, R, C#, C++, F#, Qt, UI, UX, QA, ML, AI, AR, VR, JS, TS, K8s, AWS, GCP, SQL, iOS, más cualquier palabra corta que aparezca en tu propia lista skills, y clasifica una habilidad conocida por encima de una palabra más larga de la misma frecuencia.
  • Una palabra clave que tengo se informa como faltante: la coincidencia es por límites de palabra, así que go no coincide con Google y k8s no coincide con Kubernetes. Añade la palabra exacta a tus habilidades si es verdad.
  • resume_read puso un rol en unparsed: los currículums no tienen esquema. Nada se descarta en silencio; corrige los campos y pásalos a profile_set.
  • No hay resume_to_pdf: toda ruta de JavaScript puro de Word a PDF necesita una dependencia nativa o una API en la nube. resume_to_html escribe HTML semántico con una hoja de estilos de impresión; imprime eso a PDF.
  • Versión de Node: requiere Node >= 18. Compruébalo con node -v.

Licencia MIT. Soporte: support@zovo.one

Creado por theluckystrike.

Un perfil de negocio para todo el conjunto

Tu identidad se almacena una vez, en ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json, y cada servidor del conjunto la lee: el emisor de facturas, el membrete de docx, el emisor recurrente, la tasa de IVA predeterminada de expense-tracker, la zona horaria de time-tracker y timezone, y los membretes de currículum y contratos. Configúralo una vez con business_set (invoice o docx) — nunca lo repites en ningún otro lugar. Una dirección de correo solo se toma de ese perfil o de un argumento explícito; cuando no hay ninguna almacenada, los documentos muestran [add: email] y la herramienta lo dice en lugar de dejar que alguien improvise una dirección.