docx4j Word documents

Registre officiel Productivité

Read, convert and fill Word (.docx) documents: templates, Markdown/HTML in and out, PDF with math.

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

MCPB package https://github.com/plutext/docx4j-mcp/releases/download/v0.2.0/docx4j-mcp.mcpb
OCI package ghcr.io/plutext/docx4j-mcp:0.2.0
Claude Code
claude mcp add docx4j-word-documents -- docker run -i --rm ghcr.io/plutext/docx4j-mcp:0.2.0
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "docx4j-word-documents": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "ghcr.io/plutext/docx4j-mcp:0.2.0"
            ]
        }
    }
}

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. docx4j-mcp
  2. Build
  3. Run
  4. Releasing
  5. Tools
  6. Example (Claude Code)
  7. Licence

docx4j-mcp

A Model Context Protocol server that exposes docx4j's engine to AI agents: read, convert and fill Word (.docx) documents from Claude Desktop, Claude Code, or any MCP client.

Engine: docx4j 17.1.0 (the server versions independently; the bundled docx4j version is in the pom, the server's startup log, and its MCP instructions).

MCP protocol: 2025-11-25 (Java SDK 2.0.1, the newest available). Clients speaking the 2026-07-28 spec work if they implement its dual-era fallback: the server/discover probe gets a clean JSON-RPC -32601 and the client falls back to initialize (verified over stdio). A modern-only client with no fallback cannot connect until the SDK's 2026-07-28 support (milestone 2.2) ships, at which point this server will migrate.

Status: phase 3 — all tools work over stdio against released docx4j 17.0.4; packaged as a runnable jar, an .mcpb bundle, an OCI image and a Claude Code plugin. The plan, tool surface and phasing are in CR-mcp-server.md.

Build

Requires JDK 17+. All docx4j dependencies (docx4j 17.1.0, ImportXHTML 17.0.4) come from Maven Central.

mvn package            # -> target/docx4j-mcp.jar (shaded, runnable)
mvn test               # JUnit 5 tests against the tool handlers directly

Run

java -jar target/docx4j-mcp.jar --root /path/to/documents [--root ...] [--max-inline-chars N]

Bare directory arguments are also accepted as roots (this is what the .mcpb bundle's folder picker passes).

Claude Desktop, one click

Install docx4j-mcp.mcpb from the GitHub release (Settings → Extensions), pick the folders the server may touch, done. Built locally with packaging/build-mcpb.sh. Requires Java 17+ on your PATH.

Docker
docker run -i --rm -v /path/to/documents:/data ghcr.io/plutext/docx4j-mcp

(paths in tool calls are then container paths under /data; packaging/docker/Dockerfile to build locally).

Claude Code plugin

packaging/claude-plugin/ bundles the server config and a skill for the template/authoring workflows. Set DOCX4J_MCP_JAR (path to the jar) and optionally DOCX4J_MCP_ROOTS.

Releasing

Tag vX.Y.Z: .github/workflows/release.yml builds jar + mcpb, attaches them to the GitHub release, pushes ghcr.io/plutext/docx4j-mcp, and publishes server.json (sha filled in) to the official MCP registry via GitHub OIDC.

Every file path an agent passes must resolve inside one of the --root directories (symlinks are resolved first). There is no default root; the server refuses to start without one. Logging goes to stderr; stdout is the protocol. Tools that return text inline cap it at --max-inline-chars (default 200000) and otherwise write to output_path or truncate with a marker.

Claude Code (.mcp.json in your project)
{
  "mcpServers": {
    "docx4j": {
      "command": "java",
      "args": ["-jar", "/path/to/docx4j-mcp.jar", "--root", "/path/to/documents"]
    }
  }
}
Claude Desktop (claude_desktop_config.json)
{
  "mcpServers": {
    "docx4j": {
      "command": "java",
      "args": ["-jar", "/path/to/docx4j-mcp.jar", "--root", "/Users/you/Documents"]
    }
  }
}

Tools

ToolWhat it does
describe_templateWhat data a template wants: skeleton XML + xpaths/conditions (OpenDoPE, bound content controls) or MERGEFIELD names and format switches (mail merge). Call before fill_template.
fill_templateFill a template, preserving its formatting. data is an XML string (OpenDoPE / bound controls; repeats and conditions processed) or a JSON object (mail merge).
convert_to_pdfdocx → PDF via XSL-FO / Apache FOP; equations and WMF/EMF drawings rendered as vectors; optional update_toc; reports font substitutions. Bundles metric-compatible fonts (Carlito, Caladea, Liberation, Tinos…).
markdown_to_docxMarkdown → properly styled docx (headings, numbering, GFM tables, footnotes, task lists, TeX math). Optional styles_template_path.
docx_to_markdowndocx → Markdown (structure preserved). Options: tracked_changes accept/markup, image_dir_path.
html_to_docxHTML → docx via docx4j-ImportXHTML. Loose HTML accepted (normalised with jsoup); h1–h6 map to heading styles; optional styles_template_path; mode: altchunk embeds the HTML for Word to convert on open. Remote images/stylesheets are never fetched.
convert_to_htmldocx → standalone HTML (visitor exporter; image_dir_path for images; optional update_toc).
extract_textPlain text, one line per paragraph/table.

Mathematics is supported end to end: TeX math in Markdown ($..$) and MathML in HTML become real, editable Word equations (OMML), and equations render in PDF (via jeuclid/FOP, no LaTeX toolchain) and HTML (native MathML, no JavaScript) output. Known limitation: a very long single display equation is one atomic graphic in PDF and does not line-wrap.

Writers take output_path and refuse to overwrite unless overwrite: true.

Example (Claude Code)

Use describe_template on contracts/nda-template.docx, then fill it for Acme Pty Ltd and write contracts/nda-acme.docx, then convert that to PDF.

The agent gets the skeleton XML (or MERGEFIELD names), fills it, and calls fill_template and convert_to_pdf; the results tell it what was written and which fonts were substituted.

Licence

Apache License 2.0.

Questions fréquentes

Qu'est-ce que docx4j Word documents ?

Read, convert and fill Word (.docx) documents: templates, Markdown/HTML in and out, PDF with math.

Comment installer docx4j Word documents ?

Suivez les étapes d'installation de sa documentation, affichée sur cette page et dans son dépôt.

Faut-il une clé API pour docx4j Word documents ?

Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.

docx4j Word documents est-il open source ?

Son code est public sur GitHub, mais le dépôt ne déclare pas de licence standard.

Qui maintient docx4j Word documents ?

Il est publié par plutext. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.