Skip to main content
Glama
Mavline

DOCX MCP Server

by Mavline

DOCX MCP Server

Model Context Protocol (MCP) を実装した汎用 DOCX 処理サーバー。OOXML を完全にサポートします。

機能

  • 完全な OOXML サポート: すべての DOCX ドキュメントパーツ(document.xml、styles、numbering、ヘッダー/フッターなど)の読み書き

  • テキスト操作: リテラルまたは正規表現モードでのテキストの抽出、検索、置換

  • テーブル編集: 行と列の挿入/削除、セルの結合、セル内容の設定

  • 構造化データタグ (SDT): タグまたはエイリアスによるコンテンツコントロールの取得/設定

  • 画像: 画像の一覧表示、位置/サイズ制御付きのインラインまたはアンカー画像の挿入

  • コメントと変更: コメントの一覧表示、コメントの追加/削除、すべての変更履歴の承認

  • ドキュメントプロパティ: メタデータ(タイトル、作成者、件名など)の読み書き

  • LRU キャッシュ: ドキュメントパーツのメモリ効率の良いキャッシュ

  • Stdio トランスポート: stdin/stdout を介した MCP 通信

インストール

npm install
npm run build

実行

開発

npm run dev

本番

npm start

Claude Code を使用

claude mcp add --scope user --transport stdio docx -- node /path/to/dist/index.js

ツール

ドキュメント管理

docx.open

ファイルまたは base64 から DOCX ドキュメントを開く

{
  "docId": "uuid",
  "parts": ["word/document.xml", "word/styles.xml", ...],
  "partCount": 42,
  "props": { "core": {...}, "app": {...} }
}

docx.close

ドキュメントを閉じてアンロードする

docx.save

ドキュメントをファイルに保存するか、base64 として返す

パーツ管理

docx.list_parts

ドキュメント内のすべてのパーツを一覧表示する

docx.part_read

特定のパーツの生の XML を読み取る

docx.part_write

パーツの XML コンテンツを書き込む/更新する

テキスト操作

docx.get_text

ドキュメントからすべてのテキストを抽出する

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

docx.find

コンテキスト付きでテキストを検索する

{
  "docId": "uuid",
  "query": "search term",
  "mode": "literal" | "regex"
}

docx.replace_text

ドキュメント内のテキストを置換する

{
  "docId": "uuid",
  "match": "old text",
  "replace": "new text",
  "mode": "literal" | "regex"
}

テーブル

docx.tables_list

すべてのテーブルを寸法付きで一覧表示する

{
  "tables": [
    {
      "xpath": "/w:document/w:body/w:tbl[1]",
      "rows": 3,
      "colsApprox": 4
    }
  ]
}

docx.table_edit

テーブルの構造とコンテンツを変更する

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

操作:

  • setCellText(row, col, text) - セル内容を設定

  • insertRow(at) - 指定位置に行を挿入

  • deleteRow(at) - 行を削除

  • insertCol(at) - 指定位置に列を挿入

  • deleteCol(at) - 列を削除

構造化データ (SDT)

docx.sdt_get

タグまたはエイリアスでコンテンツコントロールの内容を取得する

docx.sdt_put

コンテンツコントロールを更新する

画像

docx.images_list

すべての画像をメタデータ付きで一覧表示する

docx.image_add

インラインまたはアンカーで画像を挿入する

スタイルと番号付け

docx.styles_get / docx.styles_set

styles.xml の読み書き

docx.numbering_get / docx.numbering_set

numbering.xml の読み書き

ヘッダー/フッター

docx.headers_footers_list

すべてのヘッダー/フッターパーツを一覧表示する

コメント

docx.comments_list

すべてのコメントを一覧表示する

docx.comments_add

新しいコメントを追加する

docx.changes_accept_all

ドキュメント内のすべての変更履歴を承認する

メタデータ

docx.metadata_get

ドキュメントのプロパティ(タイトル、作成者、作成日時、更新日時など)を取得する

テストシナリオ

1. 基本的な読み書き

# Open document
docx.open: { "path": "/path/to/document.docx" }

# Get text
docx.get_text: { "docId": "returned-id" }

# Replace text
docx.replace_text: {
  "docId": "returned-id",
  "match": "old text",
  "replace": "new text"
}

# Save
docx.save: { "docId": "returned-id", "returnBase64": true }

2. テーブル操作

# List tables
docx.tables_list: { "docId": "id" }

# Edit cell
docx.table_edit: {
  "docId": "id",
  "tableXPath": "/w:document/w:body/w:tbl[1]",
  "op": { "kind": "setCellText", "row": 0, "col": 0, "text": "Hello" }
}

3. 画像

# List images
docx.images_list: { "docId": "id" }

4. 変更履歴

# Accept all changes
docx.changes_accept_all: { "docId": "id" }

アーキテクチャ

src/
  index.ts                    # Entry point
  errors.ts                   # Error definitions
  logger.ts                   # Logging utilities
  ooxml/
    namespaces.ts            # XML namespace definitions
    emu.ts                    # EMU conversion utilities
    dom.ts                    # XML DOM utilities (xmldom + fontoxpath)
    xmlParser.ts              # fast-xml-parser wrapper
    parts.ts                  # DOCX ZIP part management
    rels.ts                   # Relationships management
    text.ts                   # Text extraction & replacement
    tables.ts                 # Table operations
    sdt.ts                    # Structured Data Tags
    drawings.ts               # Images & DrawingML
    headersFooters.ts         # Headers/Footers
    styles.ts                 # Style operations
    numbering.ts              # Numbering operations
    changes.ts                # Track changes
    comments.ts               # Comments
  store/
    types.ts                  # Type definitions
    docStore.ts               # Document store + LRU cache
  mcp/
    schemas.ts                # Tool input schemas
    tools.ts                  # Tool implementations
    server.ts                 # MCP server setup

依存関係

  • @modelcontextprotocol/sdk - MCP 実装

  • jszip - ZIP アーカイブ処理

  • fast-xml-parser - ロスレスの XML パース

  • @xmldom/xmldom - DOM 実装

  • fontoxpath - XPath クエリ

  • diff-match-patch - テキスト差分

  • lru-cache - メモリ効率の良いキャッシュ

  • uuid - ドキュメント ID の生成

パフォーマンスに関する注意事項

  • 最大 10 MB のドキュメントに対応

  • 100 パーツの制限と 1 GB のメモリ上限を持つ LRU キャッシュ

  • パーツはオンデマンドで読み込まれ、メモリに完全には読み込まれない

  • ダーティパーツ最適化: 変更されたパーツのみ ZIP に保存

  • XML 構造のディープコピーなし

制限事項

  • ヘッダー/フッター: 基本的なサポート(複雑なセクション構造は手動での調整が必要な場合があります)

  • コメント: 基本的な一覧/追加/削除(返信チェーンは完全にはサポートされていません)

  • 変更履歴: すべて承認は可能。詳細な変更の検査は制限されています

  • スタイル: 完全な XML の取得/設定。選択的なスタイルのマージは不可

  • EMU/サイズ: 計算はされますが、レンダリングされるジオメトリは Word のレイアウトエンジンに依存します

ライセンス

MIT

-
license - not tested
Not graded
quality - not tested
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 Connectors

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

  • OCR, transcription, file extraction, and image generation for AI agents via MCP.

  • MCP-native collaborative markdown editor with real-time AI document editing

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'

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