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.

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
| Herramienta | Qué hace |
|---|---|
profile_set | Almacena 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_get | Devuelve el perfil almacenado como JSON, exactamente como lo ven las demás herramientas |
resume_create | Escribe 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_create | Una 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_job | Aná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_read | Lee 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_markdown | El currículum como markdown, para un formulario de solicitud o un cuadro ATS |
resume_to_html | HTML imprimible con una hoja de estilos de impresión. Ábrelo e imprime a PDF |
license_status | Muestra el modo gratuito o Pro |
license_activate | Activa 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
highlightsque 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
2012no autoriza una carta que afirme12. - 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_jobnunca se convierten en habilidades. La respuesta lo dice en palabras claras.
Lo que puedes decir
| Tú dices | Herramienta |
|---|---|
| "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
| Gratis | Pro ($19 pago único) | |
|---|---|---|
Perfil, resume_create, resume_to_markdown, resume_to_html | Sí, ilimitado | Sí, ilimitado |
| Estilos de currículum | modern | modern, classic, compact |
| Cartas de presentación | 3 por mes calendario | Ilimitadas |
tailor_to_job | Ofertas de hasta 2,000 caracteres | Cualquier longitud |
| Variantes de perfil | Un perfil | Variantes con nombre (backend, management, ...) |
| Color del membrete | Predeterminado | Tu 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
npxse cuelga o no encuentra el paquete: la publicación en npm para este paquete está pendiente. Usa el paquete.mcpbo la ruta de clonar y compilar anterior hasta que llegue.- "no hay perfil almacenado": ejecuta
profile_setuna vez, oresume_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 enkeywordspara que la viñeta supere a las demás.bullets_droppeden la respuesta nombra cada una que no encajó. - Nombres de habilidades cortos:
tailor_to_jobconserva 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 listaskills, 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
gono coincide conGoogleyk8sno coincide conKubernetes. Añade la palabra exacta a tus habilidades si es verdad. resume_readpuso un rol enunparsed: los currículums no tienen esquema. Nada se descarta en silencio; corrige los campos y pásalos aprofile_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_htmlescribe 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.