Docx MCP

Transforme um chat em um documento Word real: propostas, orçamentos, contratos e cartas como arquivos .docx, além de ler e preencher modelos .docx existentes. Tudo permanece na sua máquina.

Documentação

Crie documentos .docx do Word a partir do Claude

Servidor MCP para documentos do Word: criação de arquivos docx e criação de um documento do Word a partir de um chat. Documentos reais do Word a partir de chat: propostas, contratos, cotações.

Funciona com Claude Desktop, Claude Code, Cursor e qualquer cliente do Model Context Protocol. Roda na sua própria máquina ou hospedado, sem instalação.

Página do produto: https://mcp.zovo.one/s/docx — o que faz, as ferramentas que expõe e um endpoint de token ao vivo.

Instalação

Hospedado, nada para instalar. Obtenha um token em https://mcp.zovo.one/mcp/connect (a página de conexão) ou https://mcp.zovo.one/mcp/token (o mesmo token como JSON); um token anônimo gratuito é emitido na hora e uma chave Pro funciona da mesma forma. Em seguida, aponte um cliente MCP para https://mcp.zovo.one/mcp/docx via streamable-http e envie o token como Authorization: Bearer <token>.

Se o seu cliente não puder definir cabeçalhos, coloque o token no caminho: https://mcp.zovo.one/mcp/docx/t/<token>. Ambas as formas funcionam. A URL simples sem token responde 401 em tools/call, então o token não é opcional.

Claude Desktop, um clique. Baixe docx.mcpb do último lançamento e clique duas vezes nele.

A partir do código-fonte. O espelho é autocontido: cada dependência @theluckystrike/* é incluída, então um clone novo compila sem configuração extra.

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

Em seguida, aponte seu cliente para o ponto de entrada compilado:

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

@theluckystrike/mcp-docx ainda não está publicado no npm, então um comando npx -y @theluckystrike/mcp-docx falhará. Os três caminhos acima são os que funcionam e cada um é testado pelo CI.

docx demo

Espelho somente leitura de mcp-servers/servers/docx. Veja MIRROR.md.

Diga "escreva uma proposta para a Beta Corp, reforma do checkout, 4.500 EUR, três fases" e receba um .docx real que você pode enviar. Este servidor MCP escreve documentos do Word a partir de chat, propostas, cotações, acordos de serviço, declarações de trabalho e cartas, com seu papel timbrado, títulos, listas com marcadores e numeradas e tabelas. Ele também converte markdown em .docx, lê um .docx existente de volta como texto e estrutura, e preenche {{placeholders}} em um modelo que você já usa, mantendo cada estilo, tabela, cabeçalho e imagem do original. Tudo roda localmente: sem upload, sem conta, sem dependência nativa.

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

Documentos reais do Word a partir de chat, propostas, contratos e cartas, sem um site de modelos ou assinatura de escritório.

Instalação em 60 segundos

A publicação no npm para @theluckystrike/mcp-docx está pendente. Até lá, o pacote de um clique .mcpb ou um clone+compilação é o caminho que funciona, ambos verificados abaixo.

Um clique (.mcpb): baixe docx.mcpb do último lançamento e clique duas vezes nele no 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"]
    }
  }
}

O formulário npx acima começa a funcionar no momento em que o pacote é publicado. Até lá, use o pacote .mcpb acima, ou compile a partir do código-fonte com exatamente estes três 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

Em seguida, aponte o command do seu cliente para node com um argumento: o caminho absoluto para servers/docx/dist/index.js.

Para executar no modo Pro, defina MCP_LICENSE_KEY no mesmo bloco de configuração, ou chame license_activate uma vez com sua chave.

Ferramentas

FerramentaO que faz
business_setArmazena o perfil do remetente impresso em cada documento: nome, endereço, e-mail, ID de IVA, IBAN, banco, logotipo, cor do papel timbrado, moeda padrão, taxa de imposto, condições de pagamento. Mesmo conjunto de campos do mcp-invoice, então um perfil serve para ambos
doc_createEscreve um .docx a partir de seções: títulos, parágrafos, listas com marcadores, listas numeradas e tabelas. Layouts: plain, letter (bloco do remetente, data, destinatário) e proposal (faixa de papel timbrado, título de capa)
doc_from_markdownMarkdown para .docx: títulos ATX, parágrafos, listas com marcadores e numeradas (recuo mantido, até os nove níveis do Word), tabelas de pipe GFM, blocos de código cercados como monoespaçados, e **bold** / *italic* / `código` inline
doc_readExtrai texto, títulos com níveis, itens de lista e tabelas de qualquer .docx existente, na ordem do documento. format: "json" retorna a estrutura de blocos
doc_to_htmlConverte um .docx em HTML semântico com uma folha de estilos de impressão. Esta é a rota para PDF — veja a nota abaixo
doc_fill_templateSubstitui {{placeholders}} em um .docx e escreve um novo arquivo, mantendo cada estilo, tabela, cabeçalho, rodapé e imagem. Chamado sem values, lista os espaços reservados que o modelo contém
proposal_createUma proposta pronta para o cliente: resumo, escopo, entregas, tabela de cronograma, preço, condições, validade e bloco de assinatura, com um número de referência que nunca é reutilizado
proposal_updateReescreve uma proposta existente no lugar a partir de sua referência: apenas os campos que você passa mudam, o resto vem dos dados estruturados armazenados com o documento, e o arquivo e o número de referência permanecem os mesmos
contract_createUm esqueleto simples de acordo de serviço freelance: partes, serviços, prazo, honorários, propriedade intelectual, confidencialidade, status de contratante, rescisão, responsabilidade, lei aplicável. Um modelo com espaços reservados rotulados para um advogado, não aconselhamento jurídico
license_statusMostra o modo gratuito ou Pro
license_activateAtiva uma chave Pro (verificada offline)

Recurso: docs://recent retorna os últimos 25 documentos escritos, do mais recente ao mais antigo, com tipo, cliente, referência e caminho. Prompt: write_proposal_from_hours transforma horas rastreadas (ou um invoice_summary do mcp-time-tracker) em uma proposta com preço.

Não há doc_to_pdf, e isso é deliberado

Todo caminho puramente em JavaScript do Word para PDF precisa de uma dependência nativa (LibreOffice, um binário Chromium, uma biblioteca de renderização C++) ou uma API em nuvem. Esta coleção não inclui nenhum dos dois, então npx funciona em qualquer máquina com Node e nada mais. doc_to_html escreve HTML semântico com uma folha de estilos de impressão: abra, imprima em PDF, e o resultado é o que você teria obtido. A descrição da ferramenta e a própria resposta da ferramenta dizem o mesmo, então o modelo não promete um PDF que não pode produzir.

O que você pode dizer

Você dizFerramenta
"Configure meu papel timbrado: Acme Consulting, 1 Road Warsaw, VAT PL1234567890."business_set
"Escreva uma proposta para a Beta Corp: reforma do checkout, 4.500 EUR, 50/50, três fases."proposal_create
"Elabore um acordo de serviço com a Beta Corp, 3.000 EUR mensais, começando em outubro."contract_create
"Transforme estas notas de reunião em um documento do Word."doc_from_markdown
"Escreva uma carta para a Beta Corp com uma pauta para terça-feira."doc_create com style: "letter"
"O que esta proposta.docx realmente diz?"doc_read
"Preencha meu modelo de NDA com os dados deste cliente."doc_fill_template
"Dê-me uma versão imprimível desse documento."doc_to_html

Exemplo prático

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

O arquivo abre no Word, Pages, LibreOffice e Google Docs: papel timbrado, título de capa, "Preparado para a Beta Corp", Resumo, Escopo do trabalho, Entregas, uma tabela de Cronograma, uma tabela de Investimento com EUR 4,500.00, as condições de pagamento e um bloco de assinatura para ambas as partes. Cada valor carrega seu código de moeda, sem números nus.

Gratuito vs Pro

GratuitoPro
doc_create, doc_from_markdown, doc_read, doc_to_htmlIlimitadoIlimitado
proposal_create, contract_create3 por mês civil, combinadosIlimitado
doc_fill_templateModelos com até 10 espaços reservadosQualquer modelo
RodapéCarrega "Gerado com mcp-docx por theluckystrike"Sem marca
Logotipo e cor do papel timbradoCor padrão, sem logotipoSeu logo_path e brand_color
Tabelas, listas, layouts de carta e proposta, numeração de referênciaSimSim

Pro é um pagamento único de $19, ou $39 para todos os servidores da coleção, vitalício.

Como o .docx é produzido e lido

Documentos são escritos com docx, um escritor OOXML puramente em JavaScript, sem módulo nativo, sem navegador headless, sem instalação de escritório.

Leitura e preenchimento de modelos não usam nenhuma dependência. Um .docx é um ZIP, então node:zlib o abre e uma pequena varredura de WordprocessingML extrai parágrafos, níveis de títulos (de w:pStyle), itens de lista e tabelas na ordem do documento. Listas numeradas são diferenciadas de marcadores resolvendo o w:numId de cada parágrafo contra word/numbering.xml, que é o único lugar onde essa distinção é registrada; sem isso, toda lista numerada é lida de volta como marcadores.

O preenchimento de modelos substitui no texto unido de cada parágrafo, não por execução. O Word rotineiramente quebra um espaço reservado que você digitou como {{client}} em três execuções ({{cli, ent}}, ...) após uma edição ou uma passagem de verificação ortográfica, e a substituição por execução perde esses silenciosamente; o documento volta com o espaço reservado ainda nele. O texto substituído vai para a primeira execução, mantendo sua formatação, e as execuções restantes desse parágrafo são esvaziadas. Cada outra parte do pacote é copiada byte por byte, então estilos, imagens, cabeçalhos, rodapés e configuração de seção sobrevivem. Um espaço reservado sem valor é deixado no lugar e relatado, nunca esvaziado.

Arquivos existentes nunca são sobrescritos

Toda ferramenta que escreve um arquivo (doc_create, doc_from_markdown, doc_to_html, doc_fill_template, proposal_create, contract_create) recusa um out_path que já existe e informa você:

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

O caminho é reservado com uma criação exclusiva, não uma verificação de existência, então dois processos escrevendo o mesmo out_path ao mesmo tempo não podem se sobrescrever: um vence, o outro é recusado e não escreve nada.

Quando você não passa um out_path, o nome do arquivo é derivado do título, e um caminho derivado nunca cai em um documento anterior: uma segunda proposta com o mesmo título é escrita como ...-2.docx. Para alterar uma proposta que você já enviou, use proposal_update {reference}: ele reescreve o mesmo arquivo a partir dos dados estruturados armazenados e mantém o número de referência.

A verificação ocorre antes de qualquer coisa ser construída ou escrita, então uma chamada recusada deixa o disco intocado e não queima nenhum número de referência. Passe overwrite: true quando substituir o arquivo for o que você deseja.

Caracteres que o Word não pode carregar

O XML 1.0 permite TAB, LF e CR, mas nenhum outro código de controle. Toda string que chega a word/document.xml é limpa primeiro: códigos de controle e pares substitutos não pareados são removidos, escapes literais \n tornam-se quebras de parágrafo reais e espaços em branco soltos são colapsados. Quando algo é removido, a ferramenta diz isso em sua resposta em vez de entregar um arquivo que o Word ofereceria para reparar.

Como armazena dados

O perfil de negócios, o registro de documentos e o contador de referências vivem em ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/docx/ como JSON simples, mais uma subpasta documents/ contendo os arquivos gerados quando você não passa out_path. Toda chamada mutável roda dentro de um bloqueio consultivo em .../docx/.lock, então dois clientes em um diretório de dados não podem alocar o mesmo número de referência ou perder um registro. Salvamentos vão para um arquivo temporário e são renomeados no lugar.

Se um desses arquivos JSON for ilegível ou não for JSON válido, ele nunca é tratado como "vazio". O arquivo é movido para o lado byte por byte como <name>.json.corrupt-<timestamp>, um marcador <name>.json.corrupt é escrito, e toda ferramenta retorna data file is corrupt; moved to ...; nothing was written até que você restaure uma cópia boa e exclua o marcador.

Números de referência são PROP-YYYY-NNNN para propostas e AGR-YYYY-NNNN para acordos. O contador é escrito antes do registro ser armazenado, então uma falha queima um número em vez de reutilizar um, e números existentes são verificados para que um registro restaurado nunca possa devolver uma referência que já está em um documento enviado.

Limites e ressalvas honestas

  • Sem saída em PDF. Use doc_to_html e imprima. Veja a seção acima para entender o motivo.
  • doc_read lê apenas .docx. Arquivos legados .doc, .rtf e Pages são recusados com uma mensagem que informa isso.
  • doc_read extrai a estrutura do texto: títulos, parágrafos, listas e tabelas. Ele não informa fontes, cores, comentários, alterações rastreadas, notas de rodapé ou imagens incorporadas.
  • doc_fill_template mantém a formatação da primeira execução para todo o parágrafo que reescreve. Um parágrafo que mistura texto em negrito e regular ao redor de um placeholder volta com a formatação da primeira execução.
  • contract_create escreve um esqueleto de rascunho com [BRACKETED PLACEHOLDERS] e diz no próprio documento que é um modelo e não aconselhamento jurídico. Nada aqui foi revisado por um advogado em qualquer jurisdição.
  • O limite do plano gratuito de 3 conta propostas e contratos juntos, por mês calendário, e é reiniciado no dia 1º. Todo o resto permanece ilimitado quando ele fecha.

Privacidade

Todos os dados permanecem locais. O servidor lê e grava arquivos na sua máquina, armazena seu registro no diretório de dados e não faz nenhuma solicitação de rede de qualquer tipo, nem para licenciamento (as chaves são verificadas offline), nem para fontes, nem para telemetria.

Combina com

  • mcp-invoice, mesmo formato de perfil business_set; a proposta que você aceitou vira a fatura que você envia.
  • mcp-time-tracker, o prompt write_proposal_from_hours transforma horas invoice_summary em uma proposta com preço.
  • mcp-expense-tracker, faça uma cotação de projeto com os custos de repasse já contabilizados.
  • office-suite, vários servidores em uma única instalação, uma entrada de configuração.

Solução de problemas

  • npx trava ou não encontra o pacote: a publicação npm deste pacote está pendente. Use o pacote .mcpb ou o caminho de clonar e compilar acima até que ele esteja disponível.
  • "Wrote ... .docx" mas o Word não abre: verifique se o caminho não está dentro de uma pasta sincronizada que ainda estava enviando. O arquivo está completo quando a ferramenta retorna; nada é gravado incrementalmente.
  • Um placeholder não foi substituído: chame doc_fill_template sem values para listar o que o modelo realmente contém. Os nomes são correspondidos exatamente, espaços em branco dentro de {{ }} são ignorados, e a resposta nomeia cada chave que você passou e que o modelo não possui.
  • O cabeçalho mostra "Your business": execute business_set uma vez. Documentos nunca são bloqueados por um perfil ausente; a resposta diz que o bloco do remetente é um placeholder.
  • Sem logotipo no documento: o logotipo é um recurso Pro, e logo_path deve existir e ser PNG, JPG ou GIF.
  • Versão do Node: requer Node >= 18. Verifique com node -v.

Licenciado sob MIT. Suporte: support@zovo.one

Construído por theluckystrike.

Um perfil de negócios para toda a suíte

Sua identidade é armazenada uma vez, em ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json, e cada servidor da suíte a lê: o emissor de faturas, o cabeçalho do docx, o emissor recorrente, a taxa de IVA padrão do expense-tracker, o fuso horário padrão do time-tracker e do timezone, e os cabeçalhos de currículo e contrato. Configure uma vez com business_set (invoice ou docx) - você nunca repete em nenhum outro lugar. Um endereço de e-mail só é obtido desse perfil ou de um argumento explícito; quando nenhum está armazenado, os documentos mostram [add: email] e a ferramenta informa isso em vez de deixar alguém improvisar um endereço.

Perguntas frequentes

Existe um servidor MCP para documentos do Word (.docx)?

Sim. O servidor docx em mcp.zovo.one cria arquivos .docx a partir do Claude: documentos baseados em modelos, títulos, tabelas e formatação, geração em lote. Plano gratuito, endpoint hospedado ou instalação .mcpb com um clique.

Como crio um .docx a partir do Claude?

Conecte https://mcp.zovo.one/mcp/docx e descreva o documento — 'Crie um proposal.docx com estas três seções e uma tabela de preços.' O arquivo é gravado no seu diretório de armazenamento local.

Use estes documentos como um servidor MCP

Qualquer cliente MCP (Claude, Cursor, Windsurf, VS Code) pode ler a documentação deste repositório diretamente via GitMCP — sem instalação: