Resume Builder MCP
Crea, adapta y exporta currículums desde el chat: datos estructurados de CV, coincidencia con descripciones de empleo y renderizado compatible con ATS.
Documentación
mcp-resume
Servidor MCP para redacción de currículums y cartas de presentación, documentos CV en formato Word. Currículums y cartas de presentación como archivos Word desde un solo perfil, nunca inventados.
Funciona con Claude Desktop, Claude Code, Cursor y cualquier cliente del Model Context Protocol. Se ejecuta en tu propia máquina, o alojado sin instalación.
Página del producto: https://mcp.zovo.one/s/resume — qué hace, las herramientas que expone y un endpoint de token en vivo.
Instalación
Alojado, nada que instalar. Obtén un token de https://mcp.zovo.one/mcp/connect (la página de conexión) o https://mcp.zovo.one/mcp/token (el mismo token como JSON); se emite uno anónimo gratuito al instante y una clave Pro funciona igual. Luego apunta un cliente MCP a https://mcp.zovo.one/mcp/resume a través de streamable-http y envía el token como Authorization: Bearer <token>.
Si tu cliente no puede configurar cabeceras, coloca el token en la ruta en su lugar: https://mcp.zovo.one/mcp/resume/t/<token>. Ambas formas funcionan. La URL sin token responde 401 en tools/call, por lo que el token no es opcional.
Claude Desktop, un clic. Descarga resume.mcpb desde la última versión y haz doble clic en él.
Desde el código fuente. El espejo es autocontenido: cada dependencia @theluckystrike/* está incluida, por lo que un clon nuevo se compila sin configuración adicional.
git clone https://github.com/theluckystrike/mcp-resume.git
cd mcp-resume
npm install && npm run build
Luego apunta tu cliente al punto de entrada compilado:
{
"mcpServers": {
"resume": {
"command": "node",
"args": ["/absolute/path/to/mcp-resume/dist/index.js"]
}
}
}
@theluckystrike/mcp-resumeaún no está publicado en npm, por lo que un comandonpx -y @theluckystrike/mcp-resumefallará. Las tres rutas anteriores son las que funcionan y cada una es probada por CI.

Espejo de solo lectura de mcp-servers/servers/resume. Consulta MIRROR.md.
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 por relevancia a la oferta, recortadas para ajustarse al número de páginas que pediste, 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 un aviso 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 del perfil, exporta markdown para un campo de 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 AI Product Index — endpoint 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 un clon+compilación es la ruta que funciona, ambas verificadas abajo.
Un clic (.mcpb): descarga resume.mcpb desde 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"]
}
}
}
La forma npx anterior empieza a funcionar en cuanto se publique el paquete. Hasta entonces, usa el paquete .mcpb de arriba, 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 construye cada salida: 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, luego se recortan a max_pages contra 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 avisos [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 declaraste |
resume_read | Lee un currículum existente .docx de vuelta a la forma del 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 campo de 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.
Aviso: 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, por lo 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 contra el perfil primero. 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 proviene de ninguno es una negativa, no una advertencia: la herramienta devuelve un error y no escribe nada. La descripción del puesto se excluye deliberadamente como fuente permitida: las cifras de ingresos, plantilla y rendimiento del empleador son suyas, y la carta nunca las repetirá como tuyas. La comparación es con números enteros, por lo 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 adivinarlo. - 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 Staff Engineer." | 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." | el aviso 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, por lo 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 2cm 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, resumen, habilidades, encabezados de roles, educación, certificaciones e 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, por lo 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: como sea que 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 único pago) | |
|---|---|---|
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 de 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 único pago, 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 de arriba hasta que llegue.- "no profile stored": ejecuta
profile_setuna vez, oresume_read {path, save: true}desde un currículum existente. - El currículum descartó una viñeta que quería: sube
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 cupo. - 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, por lo 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 silenciosamente, 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 Built by theluckystrike.
Un perfil de negocio para toda la suite
Tu identidad se almacena una sola vez, en ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json,
y cada servidor de la suite 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 contrato. Configúrala una vez con business_set (factura o docx): nunca
la repites en ningún otro lugar. Una dirección de correo electrónico 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 indica en lugar de
permitir que alguien improvise una dirección.
Usa estos documentos como un servidor MCP
Cualquier cliente MCP (Claude, Cursor, Windsurf, VS Code) puede leer la documentación de este repositorio directamente a través de GitMCP, sin instalación:
- URL de documentos MCP: https://gitmcp.io/theluckystrike/mcp-resume