docx-comparison-mcp
Generates Word documents for comparison tables and specifications from structured JSON data. Supports both stdio mode for Claude Desktop/Code and HTTP mode for AI frameworks like Dify and LangFlow.
README
docx-comparison-mcp
A3横向き 新旧比較表 / A4縦向き 仕様書 Word ドキュメント生成 MCP サーバー
Dify / LangFlow / LangChain / Claude Desktop など任意の AI フレームワークから呼び出せる、ローカル MCP サーバーです。
設計思想:GET schema → POST generate
excel-mcp と同じ「スキーマをまず取得してから生成する」パターンを採用しています。
ただし excel-mcp との根本的な違いがあります:
| excel-mcp | docx-mcp | |
|---|---|---|
| スキーマの由来 | 実行時に Excel ファイルのヘッダー行を読む(動的) | コンパイル時に固定された出力フォーマット(静的) |
| 「書き込み先」 | 決まった Excel ファイル(常に同じパス) | 毎回新規生成(PDF アップロードのたびに新しいドキュメント) |
| append 概念 | あり(既存行に追記) | なし(PDF 1回 = 新しい docx 1本) |
Dify ワークフローでの位置づけ:
[HTTP ノード] GET /schema/comparison
↓ prompt_context(列定義の代わりに出力フォーマット定義)
[LLM ノード] アップロードされた PDF を Gemini が読む + schema context を注入
↓ { doc_title, sections: [...] } の JSON
[HTTP ノード] POST /generate { spec: { ... } }
↓ download_url
[End]
prompt_context フィールドは Dify の LLM ノードのシステムプロンプトにそのまま貼り付けられる形式になっています。
機能
- A3横向き、旧/新/備考 3列フォーマット(新旧比較表)
- A4縦向き、表紙・制定改廃経歴表・本文(仕様書)
- 赤字テキスト(変更・追加箇所)
- 青い下線付き Word コメントアンカー
- 複数セクション対応(表紙、制定改廃経歴、各条項)
- stdio モード(Claude Desktop / Claude Code 向け)
- HTTP モード(Dify / LangFlow 向け)
セットアップ
# 1. 依存パッケージのインストール
npm install
# 2. テスト実行
npm test
# → test-output.docx が生成されます
# 3a. MCP (stdio) モード起動 — Claude Desktop / Claude Code 向け
npm start
# 3b. HTTP モード起動 — Dify / LangFlow / REST 向け
npm run start:http
# → http://localhost:3456 で起動
Claude Desktop への登録
~/.claude/claude_desktop_config.json に追加:
{
"mcpServers": {
"docx-comparison": {
"command": "node",
"args": ["/absolute/path/to/docx-mcp/src/index.js"],
"env": {
"OUTPUT_DIR": "/Users/yourname/Desktop/docx-output"
}
}
}
}
エンドポイント一覧
| メソッド | パス | 説明 |
|---|---|---|
GET |
/health |
サーバー死活確認 |
GET |
/schema |
API ドキュメント(静的) |
GET |
/schema/comparison |
新旧比較表の LLM 注入用スキーマ |
GET |
/schema/manual |
仕様書の LLM 注入用スキーマ |
POST |
/generate |
新旧比較表の生成(ローカル保存) |
POST |
/generate/download |
新旧比較表の生成(ファイル直接ストリーム) |
POST |
/generate/manual |
仕様書の生成(ローカル保存) |
POST |
/generate/manual/download |
仕様書の生成(ファイル直接ストリーム) |
GET /schema/comparison — 新旧比較表スキーマ
LLM に注入するフォーマット定義を返します。prompt_context フィールドを Dify の LLM ノードのシステムプロンプトに貼り付けてください。
レスポンス概要:
{
"doc_type": "comparison",
"description": "新旧比較表(A3横、旧/新/備考 3カラム)Word文書の生成スキーマ",
"prompt_context": "## 新旧比較表 生成形式\n\nPOST /generate に渡す spec を...",
"required_fields": ["doc_title", "sections"],
"sections_schema": { ... },
"paragraph_schema": { ... },
"example": { ... }
}
GET /schema/manual — 仕様書スキーマ
{
"doc_type": "manual",
"description": "仕様書(A4縦、表紙・経歴表・本文)Word文書の生成スキーマ",
"prompt_context": "## 仕様書 生成形式\n\nPOST /generate/manual に渡す spec を...",
"required_fields": ["doc_title", "sections"],
"sections_schema": { ... },
"history_schema": { ... },
"example": { ... }
}
Dify ワークフロー統合パターン
新旧比較表(PDF 比較)
[ファイルアップロード] ユーザーが PDF をアップロード
↓
[HTTP ノード] GET /schema/comparison
↓ body.prompt_context を変数に格納
[LLM ノード]
システムプロンプト: {{schema_prompt_context}}
ユーザーメッセージ: {{uploaded_pdf_content}}
↓ spec JSON(新旧比較表形式)
[HTTP ノード] POST /generate { "spec": {{llm_output}} }
↓ { "download_url": "http://...", "filename": "...", "sections": N }
[End]
Gemini はアップロードされた PDF をマルチモーダルで読み取ります。サーバー側での PDF パースは不要です。
仕様書生成
[HTTP ノード] GET /schema/manual
↓ prompt_context
[LLM ノード] 仕様書内容の構造化
[HTTP ノード] POST /generate/manual { "spec": {...} }
JSON スペック仕様(新旧比較表)
段落スペック(old_paragraphs / new_paragraphs の各要素)
{
"text": "テキスト(シンプルな場合)",
"segments": [
{ "text": "通常テキスト" },
{ "text": "赤い変更箇所", "color": "red", "underline": true },
{ "text": "続き" }
],
"bold": false,
"color": "black",
"underline": false,
"align": "justify",
"indent": 0,
"sz": 19
}
text と segments はどちらか一方を使います。segments は1段落内に複数フォーマットが混在する場合に使います。
コメントアンカー
{
"anchor": "作業手順確認書類",
"text": "名称変更:作業手順確認書類→作業安全確認表",
"column": "old"
}
anchor: コメントをつけたいテキスト(完全一致)text: Word コメントバルーンに表示される内容column:"old"|"new"|"both"
LangFlow / Python での使用例
import requests
# 1. スキーマ取得(Dify HTTP ノードの代替)
schema = requests.get("http://localhost:3456/schema/comparison").json()
print(schema["prompt_context"]) # → LLM に注入するテキスト
# 2. 新旧比較表生成
spec = {
"doc_title": "通信関係請負工事共通仕様書 比較表",
"sections": [
{
"id": "section19",
"title": "【19.施工方法】",
"status": "changed",
"old_paragraphs": [{"text": "19.施工方法および工事工程", "bold": True}],
"new_paragraphs": [{"text": "20.施工方法および工事工程", "bold": True}],
"notes": ["・名称変更に伴う見直し"],
"comments": [{"anchor": "作業手順確認書類", "text": "名称変更", "column": "old"}],
}
]
}
# ローカル保存 + パス返却
response = requests.post("http://localhost:3456/generate", json={
"spec": spec,
"output_filename": "比較表_第3回改正",
})
print(response.json())
# → {"success": true, "path": ".../比較表_第3回改正.docx", "download_url": "...", ...}
ファイル構成
docx-mcp/
├── src/
│ ├── index.js # MCP stdio サーバー(Claude Desktop / Code)
│ ├── http-server.js # HTTP REST サーバー(Dify / LangFlow)
│ ├── docx-generator.js # コア: JSON → 新旧比較表 .docx 変換エンジン
│ ├── manual-generator.js # コア: JSON → 仕様書 .docx 変換エンジン
│ ├── schema.js # Zod バリデーション + LLM 注入用スキーマ定義
│ └── test.js # テスト
├── docs/
│ └── dify-tool.yaml # Dify Custom Tool / OpenAPI 定義
├── package.json
└── README.md
環境変数
| 変数 | デフォルト | 説明 |
|---|---|---|
OUTPUT_DIR |
~/Desktop/docx-output |
生成ファイルの保存先 |
PORT |
3456 |
HTTP モードのポート番号 |
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。