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"
}
}
}
}엔드포인트 목록
메서드 | 경로 | 설명 |
|
| 서버 상태 확인 |
|
| API 문서 (정적) |
|
| 신구 대비표 LLM 주입용 스키마 |
|
| 사양서 LLM 주입용 스키마 |
|
| 신구 대비표 생성 (로컬 저장) |
|
| 신구 대비표 생성 (파일 직접 스트림) |
|
| 사양서 생성 (로컬 저장) |
|
| 사양서 생성 (파일 직접 스트림) |
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는 한 단락 내에 여러 형식이 혼재할 경우 사용합니다.
댓글 앵커
{
"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환경 변수
변수 | 기본값 | 설명 |
|
| 생성 파일 저장 경로 |
|
| HTTP 모드 포트 번호 |
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/bailangcheng818/docx-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
