Docx MCP

Convierte un chat en un documento de Word real: propuestas, presupuestos, contratos y cartas como archivos .docx, además de leer y completar plantillas .docx existentes. Todo permanece en tu máquina.

Documentación

Crear documentos .docx de Word desde Claude

Servidor MCP para documentos de Word: creación de archivos docx y creación de un documento de Word desde un chat. Documentos de Word reales desde el chat: propuestas, contratos, presupuestos.

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/docx — 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 momento y una clave Pro funciona igual. Luego apunta un cliente MCP a https://mcp.zovo.one/mcp/docx mediante 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/docx/t/<token>. Ambas formas funcionan. La URL desnuda sin token responde 401 en tools/call, por lo que el token no es opcional.

Claude Desktop, un clic. Descarga docx.mcpb desde la última versión y haz doble clic en él.

Desde el código fuente. El espejo es autocontenido: cada dependencia de @theluckystrike/* está incluida, por lo que una clonación nueva se compila sin configuración adicional.

git clone https://github.com/theluckystrike/mcp-docx.git
cd mcp-docx
npm install && npm run build

Luego apunta tu cliente al punto de entrada compilado:

{
  "mcpServers": {
    "docx": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-docx/dist/index.js"]
    }
  }
}

@theluckystrike/mcp-docx aún no está publicado en npm, por lo que un comando npx -y @theluckystrike/mcp-docx fallará. Las tres rutas anteriores son las que funcionan y cada una está verificada por CI.

docx demo

Espejo de solo lectura de mcp-servers/servers/docx. Ver MIRROR.md.

Di "escribe una propuesta para Beta Corp, reconstrucción del checkout, 4.500 EUR, tres fases" y obtén un .docx real que puedas enviar. Este servidor MCP escribe documentos de Word desde el chat: propuestas, presupuestos, acuerdos de servicio, declaraciones de trabajo y cartas, con tu membrete, encabezados, listas con viñetas y numeradas, y tablas. También convierte markdown en .docx, lee un .docx existente como texto y esquema, y rellena {{placeholders}} en una plantilla que ya usas, conservando cada estilo, tabla, encabezado e imagen del original. Todo se ejecuta localmente: sin subidas, sin cuenta, sin dependencias nativas.

En el Registro MCP oficial (io.github.theluckystrike/docx-document-generator-proposal-contract-markdown).

Documentos de Word reales desde el chat: propuestas, contratos y cartas, sin un sitio de plantillas ni una suscripción de Office.

Instalación en 60 segundos

La publicación en npm para @theluckystrike/mcp-docx está pendiente. Hasta entonces, el paquete de un clic .mcpb o una clonación + compilación es la ruta que funciona; ambas están verificadas a continuación.

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

(claude_desktop_config.json):

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

Claude Code:

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

(.cursor/mcp.json):

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

La forma 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

Luego apunta el command de tu cliente a node con un argumento: la ruta absoluta a servers/docx/dist/index.js.

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
business_setAlmacena el perfil del remitente impreso en cada documento: nombre, dirección, correo electrónico, ID de IVA, IBAN, banco, logotipo, color del membrete, moneda predeterminada, tasa de impuestos, condiciones de pago. El mismo conjunto de campos que mcp-invoice, por lo que un perfil sirve para ambos
doc_createEscribe un .docx a partir de secciones: encabezados, párrafos, listas con viñetas, listas numeradas y tablas. Diseños: plain, letter (bloque del remitente, fecha, destinatario) y proposal (banda de membrete, título de portada)
doc_from_markdownMarkdown a .docx: encabezados ATX, párrafos, listas con viñetas y numeradas (sangría conservada, hasta los nueve niveles de Word), tablas de tuberías GFM, bloques de código delimitados como monoespaciado, y **bold** / *italic* / `código` en línea
doc_readExtrae texto, encabezados con niveles, elementos de lista y tablas de cualquier .docx existente, en orden de documento. format: "json" devuelve la estructura de bloques
doc_to_htmlConvierte un .docx a HTML semántico con una hoja de estilos de impresión. Esta es la ruta a PDF — ver la nota a continuación
doc_fill_templateReemplaza {{placeholders}} en un .docx y escribe un archivo nuevo, conservando cada estilo, tabla, encabezado, pie de página e imagen. Si se llama sin values, lista los marcadores de posición que contiene la plantilla
proposal_createUna propuesta lista para el cliente: resumen, alcance, entregables, tabla de cronograma, precio, condiciones, validez y bloque de firmas, con un número de referencia que nunca se reutiliza
proposal_updateReescribe una propuesta existente en su lugar a partir de su referencia: solo cambian los campos que pasas, el resto proviene de los datos estructurados almacenados con el documento, y el archivo y el número de referencia permanecen iguales
contract_createUn esqueleto de acuerdo de servicios freelance simple: partes, servicios, plazo, honorarios, propiedad intelectual, confidencialidad, estado de contratista, terminación, responsabilidad, ley aplicable. Una plantilla con marcadores etiquetados para un abogado, no asesoramiento legal
license_statusMuestra el modo gratuito o Pro
license_activateActiva una clave Pro (verificada sin conexión)

Recurso: docs://recent devuelve los últimos 25 documentos escritos, del más reciente al más antiguo, con tipo, cliente, referencia y ruta. Prompt: write_proposal_from_hours convierte horas registradas (o un invoice_summary de mcp-time-tracker) en una propuesta con precio.

No hay doc_to_pdf, y es deliberado

Cada ruta de JavaScript puro de Word a PDF necesita una dependencia nativa (LibreOffice, un binario de Chromium, una biblioteca de renderizado C++) o una API en la nube. Esta colección no incluye ninguna, por lo que npx funciona en cualquier máquina con Node y nada más. doc_to_html escribe HTML semántico con una hoja de estilos de impresión en su lugar: ábrelo, imprime a PDF, y el resultado es lo que habrías obtenido. La descripción de la herramienta y la propia respuesta de la herramienta dicen lo mismo, por lo que el modelo no promete un PDF que no puede producir.

Lo que puedes decir

Tú dicesHerramienta
"Configura mi membrete: Acme Consulting, 1 Road Warsaw, VAT PL1234567890."business_set
"Escribe una propuesta para Beta Corp: reconstrucción del checkout, 4.500 EUR, 50/50, tres fases."proposal_create
"Redacta un acuerdo de servicios con Beta Corp, 3.000 EUR mensuales, desde octubre."contract_create
"Convierte estas notas de reunión en un documento de Word."doc_from_markdown
"Escribe una carta a Beta Corp con una agenda para el martes."doc_create con style: "letter"
"¿Qué dice realmente este proposal.docx?"doc_read
"Rellena mi plantilla de NDA con los datos de este cliente."doc_fill_template
"Dame una versión imprimible de ese documento."doc_to_html

Ejemplo práctico

You: Write a proposal for Beta Corp. Checkout rebuild, 4,500 EUR, 50% on
signature 50% on delivery, three phases: discovery 1 week, build 3 weeks,
launch 1 week. Valid until the end of the year.

  proposal_create {
    client: "Beta Corp", project_title: "Checkout rebuild",
    summary: "Beta Corp loses orders at checkout. This project rebuilds it.",
    scope: ["Audit the current funnel", "Rebuild the checkout", "Ship and measure"],
    deliverables: ["New checkout in production", "A one-page handover"],
    timeline: [{phase: "Discovery", duration: "1 week"},
               {phase: "Build", duration: "3 weeks"},
               {phase: "Launch", duration: "1 week"}],
    price: {amount: 4500, currency: "EUR", terms: "50% on signature, 50% on delivery"},
    valid_until: "2026-12-31"
  }
  -> PROP-2026-0001, EUR 4,500.00
  -> ~/.local/share/mcp-servers/docx/documents/checkout-rebuild.docx

El archivo se abre en Word, Pages, LibreOffice y Google Docs: membrete, título de portada, "Preparado para Beta Corp", Resumen, Alcance del trabajo, Entregables, una tabla de Cronograma, una tabla de Inversión con EUR 4,500.00, las condiciones de pago y un bloque de firmas para ambas partes. Cada cantidad lleva su código de moneda, sin números desnudos.

Gratis vs Pro

GratisPro
doc_create, doc_from_markdown, doc_read, doc_to_htmlIlimitadoIlimitado
proposal_create, contract_create3 por mes calendario, combinadosIlimitado
doc_fill_templatePlantillas con hasta 10 marcadores de posiciónCualquier plantilla
Pie de páginaLleva "Generado con mcp-docx por theluckystrike"Sin marca
Logotipo y color del membreteColor predeterminado, sin logotipoTu logo_path y brand_color
Tablas, listas, diseños de carta y propuesta, numeración de referenciasSíSí

Pro es un pago único de $19, o $39 por cada servidor de la colección, de por vida.

Cómo se produce y se lee el .docx

Los documentos se escriben con docx, un escritor OOXML de JavaScript puro, sin módulo nativo, sin navegador sin interfaz, sin instalación de Office.

La lectura y el relleno de plantillas no usan ninguna dependencia. Un .docx es un ZIP, por lo que node:zlib lo abre y un recorrido pequeño de WordprocessingML extrae párrafos, niveles de encabezado (de w:pStyle), elementos de lista y tablas en orden de documento. Las listas numeradas se distinguen de las viñetas resolviendo el w:numId de cada párrafo contra word/numbering.xml, que es el único lugar donde se registra esa distinción; sin él, cada lista numerada se lee como viñetas.

El relleno de plantillas sustituye sobre el texto unido de cada párrafo, no por ejecución. Word divide rutinariamente un marcador de posición que escribiste como {{client}} en tres ejecuciones ({{cli, ent}}, ...) después de una edición o una pasada de revisión ortográfica, y el reemplazo por ejecución falla silenciosamente en esos casos; el documento vuelve con el marcador aún presente. El texto reemplazado va a la primera ejecución, conservando su formato, y las ejecuciones restantes de ese párrafo se vacían. Cada otra parte del paquete se copia byte por byte, por lo que los estilos, imágenes, encabezados, pies de página y la configuración de sección sobreviven. Un marcador sin valor se deja en su lugar y se informa, nunca se vacía.

Los archivos existentes nunca se sobrescriben

Cada herramienta que escribe un archivo (doc_create, doc_from_markdown, doc_to_html, doc_fill_template, proposal_create, contract_create) rechaza un out_path que ya existe y te lo indica:

Error: /path/acme-proposal.docx already exists and nothing was written.
Pass overwrite: true to replace it, or give a different out_path.

La ruta se reserva con una creación exclusiva, no con una comprobación de existencia, por lo que dos procesos que escriben el mismo out_path al mismo tiempo no pueden pisarse entre sí: uno gana, el otro es rechazado y no escribe nada.

Cuando no pasas un out_path, el nombre del archivo se deriva del título, y una ruta derivada nunca cae sobre un documento anterior: una segunda propuesta con el mismo título se escribe como ...-2.docx. Para cambiar una propuesta que ya enviaste, usa proposal_update {reference} en su lugar: reescribe el mismo archivo desde los datos estructurados almacenados y conserva el número de referencia.

La comprobación se ejecuta antes de que se construya o escriba nada, por lo que una llamada rechazada deja el disco intacto y no consume ningún número de referencia. Pasa overwrite: true cuando reemplazar el archivo es lo que quieres.

Caracteres que Word no puede transportar

XML 1.0 permite TAB, LF y CR pero ningún otro código de control. Cada cadena que llega a word/document.xml se limpia primero: los códigos de control y los pares sueltos de sustitutos se eliminan, los escapes literales \n se convierten en saltos de párrafo reales y el espacio en blanco disperso se colapsa. Cuando algo se elimina, la herramienta lo dice en su respuesta en lugar de entregarte un archivo que Word ofrecería reparar.

Cómo almacena datos

El perfil de negocio, el registro de documentos y el contador de referencias viven bajo ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/docx/ como JSON plano, más una subcarpeta documents/ que contiene los archivos generados cuando no pasas out_path. Cada llamada mutante se ejecuta dentro de un bloqueo de asesoramiento en .../docx/.lock, por lo que dos clientes en un directorio de datos no pueden asignar el mismo número de referencia ni perder un registro. Los guardados van a un archivo temporal y se renombran en su lugar.

Si uno de esos archivos JSON es ilegible o no es JSON válido, nunca se trata como "vacío". El archivo se mueve a un lado byte por byte como <name>.json.corrupt-<timestamp>, se escribe un marcador <name>.json.corrupt y cada herramienta devuelve data file is corrupt; moved to ...; nothing was written hasta que restaures una copia buena y elimines el marcador.

Los números de referencia son PROP-YYYY-NNNN para propuestas y AGR-YYYY-NNNN para acuerdos. El contador se escribe antes de que se almacene el registro, por lo que un fallo quema un número en lugar de reutilizar uno, y los números existentes se escanean para que un registro restaurado nunca pueda devolver una referencia que ya está en un documento enviado.

Límites y advertencias honestas

  • No PDF output. Use doc_to_html and print. See the section above for why.
  • doc_read reads .docx only. Legacy .doc, .rtf and Pages files are refused with a message that says so.
  • doc_read extracts text structure: headings, paragraphs, lists and tables. It does not report fonts, colours, comments, tracked changes, footnotes or embedded images.
  • doc_fill_template keeps the first run's formatting for the whole paragraph it rewrites. A paragraph that mixes bold and regular text around a placeholder comes back in the first run's formatting.
  • contract_create writes a drafting skeleton with [BRACKETED PLACEHOLDERS] and says on the document itself that it is a template and not legal advice. Nothing here has been reviewed by a lawyer in any jurisdiction.
  • The free-tier limit of 3 counts proposals and contracts together, per calendar month, and resets on the 1st. Everything else stays unlimited when it closes.

Privacidad

Todos los datos permanecen locales. El servidor lee y escribe archivos en tu máquina, almacena su registro en tu directorio de datos, y no realiza 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-invoice, mismo perfil de business_set; la propuesta que aceptaste se convierte en la factura que envías.
  • mcp-time-tracker, el prompt de write_proposal_from_hours convierte las horas de invoice_summary en una propuesta con precio.
  • mcp-expense-tracker, cotiza un proyecto con sus costos de traspaso ya contabilizados.
  • office-suite, varios servidores detrás de una sola instalación, una sola entrada de configuración.

Solución de problemas

  • npx se cuelga o no encuentra el paquete: la publicación npm para este paquete está pendiente. Usa el paquete .mcpb o la ruta de clonar y compilar de arriba hasta que esté disponible.
  • "Wrote ... .docx" pero Word no lo abre: verifica que la ruta no esté dentro de una carpeta sincronizada que aún se estuviera subiendo. El archivo está completo cuando la herramienta regresa; nada se escribe de forma incremental.
  • Un marcador de posición no se reemplazó: llama a doc_fill_template sin values para listar lo que la plantilla realmente contiene. Los nombres se comparan exactamente, se ignora el espacio en blanco dentro de {{ }}, y la respuesta nombra cada clave que pasaste y que la plantilla no tiene.
  • El membrete muestra "Your business": ejecuta business_set una vez. Los documentos nunca se bloquean por un perfil faltante; la respuesta dice que el bloque del remitente es un marcador de posición.
  • Sin logotipo en el documento: el logotipo es una función Pro, y logo_path debe existir y ser un PNG, JPG o GIF.
  • Versión de Node: requiere Node >= 18. Verifica con node -v.

Licencia MIT. Soporte: support@zovo.one

Creado por theluckystrike.

Un perfil de negocio para toda la suite

Tu identidad se almacena una 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úralo una vez con business_set (invoice o docx) - nunca lo 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 dice en lugar de permitir que alguien improvise una dirección.

Preguntas frecuentes

¿Hay un servidor MCP para documentos de Word (.docx)?

Sí. El servidor docx en mcp.zovo.one crea archivos .docx desde Claude: documentos basados en plantillas, encabezados, tablas y formato, generación por lotes. Nivel gratuito, endpoint alojado o instalación .mcpb con un clic.

¿Cómo creo un .docx desde Claude?

Conecta https://mcp.zovo.one/mcp/docx y describe el documento — 'Crea una propuesta.docx con estas tres secciones y una tabla de precios.' El archivo se escribe en tu directorio de almacenamiento local.

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: