Skip to main content
Glama
Mavline

docx_mcp_server_ts

by Mavline

DOCX MCP Server

Ein umfassender, auf TypeScript basierender MCP-Server (Model Context Protocol) für die universelle DOCX-Verarbeitung mit vollständiger OOXML-Unterstützung. Verarbeiten Sie Word-Dokumente programmgesteuert mit Unterstützung für Text, Tabellen, Bilder, Kopf- und Fußzeilen, SDTs, Kommentare und mehr.

Funktionen

  • Vollständiger OOXML-Zugriff: DOCX-Teile auf ZIP-Ebene lesen/schreiben mit vollständiger Namespace-Unterstützung

  • Textoperationen: Text extrahieren, finden und ersetzen mit minimaler Diff-Erhaltung

  • Tabellenverwaltung: Zeilen einfügen/löschen, Zellen ändern, Zusammenführungs-/Teilungsoperationen

  • Bildverarbeitung: Inline-/positionierte Bilder mit EMU-basierter Größenanpassung hinzufügen

  • Strukturierte Datentags (SDT): Zugriff auf Inhaltssteuerelemente nach Tag oder Alias

  • Kopf-/Fußzeilen: Abschnittskopf- und -fußzeilen auflisten und ändern

  • Änderungsnachverfolgung: Revisionen annehmen/ablehnen, Einfügungen/Löschungen behandeln

  • Kommentare: Dokumentkommentare verwalten

  • Metadaten: Kern- und Anwendungseigenschaften lesen/schreiben

  • LRU-Caching: Effiziente Speicherverwaltung mit Teil-Caching

  • Verlustfreies XML: Erhält die Dokumentstruktur mit fast-xml-parser

Related MCP server: mcp-office-parser

Installation

npm install
npm run build

Schnellstart

Server starten

npm start

Der Server lauscht über stdin/stdout auf MCP-Protokollnachrichten.

Installation & Konfiguration

Claude Code CLI

claude mcp install docx \
  --command node \
  --args /full/path/to/docx_mcp_server_ts/dist/index.js \
  --env LOG_LEVEL=INFO

~/.claude.json (für Claude Code)

Bearbeiten Sie ~/.claude.json und fügen Sie Folgendes im Abschnitt "projects" hinzu:

{
  "projects": {
    "/full/path/to/docx_mcp_server_ts": {
      "mcpServers": {
        "docx": {
          "command": "node",
          "args": ["/full/path/to/docx_mcp_server_ts/dist/index.js"],
          "env": {
            "LOG_LEVEL": "INFO"
          }
        }
      }
    }
  }
}

Beispiel für Linux/WSL:

{
  "projects": {
    "/mnt/c/Users/pavelk/Desktop/Projects/MCP-servers/docx_mcp_server_ts": {
      "mcpServers": {
        "docx": {
          "command": "node",
          "args": ["/mnt/c/Users/pavelk/Desktop/Projects/MCP-servers/docx_mcp_server_ts/dist/index.js"],
          "env": {
            "LOG_LEVEL": "INFO"
          }
        }
      }
    }
  }
}

MCP-Tools

Dokumentverwaltung

docx.open

Öffnet ein DOCX-Dokument aus einer Datei oder einem Base64-Puffer.

Eingabe:

{
  "path": "/path/to/document.docx",
  "bufferBase64": "..."  // OR provide base64 data
}

Ausgabe:

{
  "docId": "uuid-string",
  "parts": ["word/document.xml", ...],
  "props": { "core": {}, "app": {} }
}

docx.close

Schließt ein Dokument und gibt Ressourcen frei.

Eingabe: { "docId": "uuid" }

docx.save

Speichert ein Dokument in einer Datei oder gibt es als Base64 zurück.

Eingabe:

{
  "docId": "uuid",
  "path": "/output/path.docx",  // optional
  "returnBase64": true  // optional
}

docx.list_parts

Listet alle Teile des Dokuments auf.

docx.part_read / docx.part_write

Liest/schreibt einzelne XML-Teile für den Low-Level-Zugriff.

Textoperationen

docx.get_text

Extrahiert den gesamten Text aus dem Dokument.

Eingabe: { "docId": "uuid", "scope": "document|headers|footers|all" }

docx.replace_text

Ersetzt Text, wobei die Run-Struktur erhalten bleibt.

Eingabe:

{
  "docId": "uuid",
  "match": "search text",
  "replace": "replacement",
  "mode": "literal|regex",
  "where": "document|headers|footers|all"
}

Ausgabe: { "replaced": 5 }

docx.find

Findet Text mit Kontext.

Ausgabe:

{
  "hits": [
    {
      "text": "found text",
      "context": "...found text...",
      "offset": 150
    }
  ]
}

Tabellenoperationen

docx.tables_list

Listet alle Tabellen mit ihren Dimensionen auf.

Ausgabe:

{
  "tables": [
    {
      "tableXPath": "//w:tbl[1]",
      "rows": 5,
      "colsApprox": 3
    }
  ]
}

docx.table_edit

Führt Tabellenoperationen aus.

Eingabe:

{
  "docId": "uuid",
  "tableXPath": "//w:tbl[1]",
  "op": {
    "kind": "setCellText",
    "row": 0,
    "col": 0,
    "text": "new value"
  }
}

Unterstützte Operationen:

  • { "kind": "setCellText", "row": number, "col": number, "text": string }

  • { "kind": "insertRow", "at": number }

  • { "kind": "deleteRow", "at": number }

  • { "kind": "insertCol", "at": number }

  • { "kind": "deleteCol", "at": number }

Strukturierte Datentags (SDT)

docx.sdt_get

Ruft den Inhalt eines Inhaltssteuerelements ab.

Eingabe: { "docId": "uuid", "tagOrAlias": "control_tag" }

Ausgabe:

{
  "xml": "<w:p>...</w:p>",
  "textPreview": "Control content..."
}

docx.sdt_put

Aktualisiert ein Inhaltssteuerelement.

Eingabe:

{
  "docId": "uuid",
  "tagOrAlias": "control_tag",
  "xmlFragment": "<w:p>...</w:p>"
}

Bildoperationen

docx.images_list

Listet alle Bilder mit Metadaten auf.

Ausgabe:

{
  "images": [
    {
      "rId": "rId4",
      "path": "word/media/image1.png",
      "sizeEMU": { "cx": 914400, "cy": 914400 }
    }
  ]
}

docx.image_add

Fügt ein Bild inline oder verankert ein.

Eingabe:

{
  "docId": "uuid",
  "target": {
    "afterParagraphXPath": "//w:p[1]",
    "sdtTagOrAlias": "imageControl"  // OR use SDT
  },
  "image": {
    "path": "/local/image.png",
    "base64": "...",  // OR base64 data
    "filename": "image.png",
    "contentType": "image/png"
  },
  "placement": {
    "kind": "inline"  // OR { "kind": "anchor", "xEMU": 0, "yEMU": 0 }
  },
  "size": {
    "widthMM": 50,
    "heightMM": 50
  },
  "altText": "Description"
}

docx.image_update_position

Aktualisiert Position/Größe eines verankerten Bildes.

Erweiterte Operationen

docx.styles_get / docx.styles_set

Liest/schreibt styles.xml

docx.numbering_get / docx.numbering_set

Liest/schreibt numbering.xml

docx.headers_footers_list

Listet Kopf- und Fußzeilen mit Abschnittsinformationen auf.

docx.headers_footers_get / docx.headers_footers_set

Liest/schreibt eine bestimmte Kopf- oder Fußzeile.

docx.comments_list / docx.comments_add / docx.comments_delete

Verwaltet Dokumentkommentare.

docx.changes_accept_all

Akzeptiert alle nachverfolgten Änderungen (entfernt w:del, entpackt w:ins).

Ausgabe: { "removedDel": 3, "flattenedIns": 5 }

docx.metadata_get / docx.metadata_set

Liest/schreibt Dokumenteigenschaften (core.xml, app.xml).

Größenumrechnungen

Der Server führt EMU-Umrechnungen (English Metric Unit) intern durch:

  • 1 Zoll = 914.400 EMU

  • 1 mm ≈ 36.000 EMU

  • 1 Punkt ≈ 12.700 EMU

Beispiele

Text extrahieren und ersetzen

// Open document
const openResult = await client.call('docx.open', {
  path: '/tmp/document.docx'
});
const docId = openResult.docId;

// Get text
const textResult = await client.call('docx.get_text', { docId });
console.log(textResult.text);

// Replace text
await client.call('docx.replace_text', {
  docId,
  match: 'old text',
  replace: 'new text',
  mode: 'literal'
});

// Save
await client.call('docx.save', {
  docId,
  path: '/tmp/document-modified.docx'
});

// Close
await client.call('docx.close', { docId });

Tabelle ändern

// List tables
const tablesResult = await client.call('docx.tables_list', { docId });
const tableXPath = tablesResult.tables[0].tableXPath;

// Update cell
await client.call('docx.table_edit', {
  docId,
  tableXPath,
  op: {
    kind: 'setCellText',
    row: 0,
    col: 0,
    text: 'Updated Value'
  }
});

// Insert row
await client.call('docx.table_edit', {
  docId,
  tableXPath,
  op: {
    kind: 'insertRow',
    at: 1
  }
});

Bild hinzufügen

const fs = require('fs').promises;

const imageBuffer = await fs.readFile('/path/to/image.png');
const base64 = imageBuffer.toString('base64');

await client.call('docx.image_add', {
  docId,
  target: {
    afterParagraphXPath: '//w:p[1]'
  },
  image: {
    base64,
    filename: 'image.png',
    contentType: 'image/png'
  },
  placement: {
    kind: 'inline'
  },
  size: {
    widthMM: 100,
    heightMM: 75
  },
  altText: 'My image'
});

Architektur

src/
├── index.ts              # MCP server entry point
├── logger.ts             # Logging utility
├── errors.ts             # Error types and codes
├── ooxml/
│   ├── namespaces.ts     # OOXML constants and namespaces
│   ├── emu.ts            # Unit conversion utilities
│   ├── dom.ts            # XML DOM utilities (xmldom + fontoxpath)
│   ├── xmlParser.ts      # FXP parser with order preservation
│   ├── parts.ts          # ZIP part reading/writing
│   ├── rels.ts           # Relationship management
│   ├── text.ts           # Text operations with diff-match-patch
│   ├── tables.ts         # Table manipulation
│   ├── sdt.ts            # Structured Data Tags
│   ├── drawings.ts       # Image handling
│   ├── headersFooters.ts # Header/footer operations
│   ├── comments.ts       # Comment management
│   ├── changes.ts        # Track changes handling
│   ├── styles.ts         # Styles XML access
│   └── numbering.ts      # Numbering XML access
├── store/
│   ├── types.ts          # Store type definitions
│   └── docStore.ts       # Document store with LRU cache
└── mcp/
    └── tools.ts          # MCP tool implementations

Leistung

  • Speicher: Der LRU-Cache begrenzt die Anzahl der Teile pro Dokument auf 50 zwischengespeicherte Elemente

  • Gesamtgröße: Unterstützt Dokumente bis zu 100 MB im Arbeitsspeicher

  • Partieller Zugriff: Nur angeforderte Teile werden aus der ZIP-Datei geparst

  • Minimale Diffs: Textersetzungen erhalten nach Möglichkeit die Run-Struktur

Einschränkungen

  • Seitenlayoutberechnungen werden nicht durchgeführt (Word-Rendering-Engine erforderlich)

  • Erweiterte DrawingML-Transformationen sind schreibgeschützt

  • VBA-Makros und eingebettete OLE-Objekte werden nicht unterstützt

  • Extrem große Dokumente (>500MB) erfordern möglicherweise Streaming

Entwicklung

# Install dependencies
npm install

# Type check
npm run type-check

# Build
npm run build

# Run dev server
npm run dev

# Debug with inspector
npm run dev:debug

Protokollierung

Steuern Sie die Protokollebene über eine Umgebungsvariable:

LOG_LEVEL=DEBUG npm start     # Verbose
LOG_LEVEL=INFO npm start      # Default
LOG_LEVEL=WARN npm start      # Warnings only
LOG_LEVEL=ERROR npm start     # Errors only

Protokollunterstützung

  • Transport: stdio

  • Protokoll: MCP (Model Context Protocol)

  • Handler: @modelcontextprotocol/sdk

Lizenz

MIT

Ressourcen

Install Server
A
license - permissive license
C
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    An MCP server for reading, editing, and validating Microsoft Word documents with specialized support for track changes, comments, and footnotes. It enables structural auditing, heading extraction, and precise OOXML-level document manipulation through natural language tools.
    100
    42
    MIT
  • A
    license
    D
    quality
    D
    maintenance
    Enables reading, writing, editing, and converting Office documents (ODT, DOCX, ODS, XLSX, PDF, etc.) using MCP tools, with no external dependencies.
    11
    31
    MIT
  • A
    license
    C
    quality
    D
    maintenance
    A unified MCP server for document processing that enables creating, editing, and converting Word documents (DOCX), PDFs, Markdown, and images, with support for templates, formatting, and batch operations.
    100
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to generate, edit, validate, and render Word documents programmatically via MCP, ensuring correct OOXML structure and style.
    3
    MIT

View all related MCP servers

Related MCP Connectors

  • Use your own Word templates to convert Markdown → DOCX/PDF/HTML from any MCP-compatible AI.

  • Google Docs MCP Pack — read, create, and edit Google Docs via OAuth.

  • Normalize and convert more than 400 file types via TweekIT's hosted MCP streamable HTTP endpoint.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Mavline/docx_mcp_server_ts'

If you have feedback or need assistance with the MCP directory API, please join our Discord server