claude-code-hwp-mcp 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +409 -0
  2. package/dist/hwp-bridge.d.ts +67 -0
  3. package/dist/hwp-bridge.js +320 -0
  4. package/dist/hwpx-engine.d.ts +39 -0
  5. package/dist/hwpx-engine.js +187 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +54 -0
  8. package/dist/prompts/hwp-prompts.d.ts +2 -0
  9. package/dist/prompts/hwp-prompts.js +368 -0
  10. package/dist/resources/document-resources.d.ts +3 -0
  11. package/dist/resources/document-resources.js +109 -0
  12. package/dist/server.d.ts +12 -0
  13. package/dist/server.js +29 -0
  14. package/dist/tools/analysis-tools.d.ts +4 -0
  15. package/dist/tools/analysis-tools.js +414 -0
  16. package/dist/tools/composite-tools.d.ts +3 -0
  17. package/dist/tools/composite-tools.js +664 -0
  18. package/dist/tools/document-tools.d.ts +3 -0
  19. package/dist/tools/document-tools.js +264 -0
  20. package/dist/tools/editing-tools.d.ts +4 -0
  21. package/dist/tools/editing-tools.js +916 -0
  22. package/package.json +31 -0
  23. package/python/__pycache__/hwp_analyzer.cpython-313.pyc +0 -0
  24. package/python/__pycache__/hwp_editor.cpython-313.pyc +0 -0
  25. package/python/__pycache__/hwp_service.cpython-313.pyc +0 -0
  26. package/python/__pycache__/privacy_scanner.cpython-313.pyc +0 -0
  27. package/python/__pycache__/ref_reader.cpython-313.pyc +0 -0
  28. package/python/__pycache__/test_integration.cpython-313.pyc +0 -0
  29. package/python/hwp_analyzer.py +544 -0
  30. package/python/hwp_editor.py +933 -0
  31. package/python/hwp_service.py +1291 -0
  32. package/python/privacy_scanner.py +115 -0
  33. package/python/ref_reader.py +115 -0
  34. package/python/requirements.txt +2 -0
package/README.md ADDED
@@ -0,0 +1,409 @@
1
+ # claude-code-hwp-mcp
2
+
3
+ Claude Code에서 한글(HWP) 문서를 직접 제어하는 MCP 서버입니다.
4
+ pyhwpx COM API를 통해 문서 열기, 편집, 분석, 저장, 변환까지 **85개+ 도구**를 제공합니다.
5
+
6
+ > **Windows 전용** | 한글(HWP) 2014 이상 | Python 3.8+ | Claude Code / Claude Desktop 지원
7
+
8
+ ---
9
+
10
+ ## 목차
11
+
12
+ - [설치 방법](#설치-방법)
13
+ - [Claude Code 설정](#claude-code-설정)
14
+ - [Claude Desktop 설정](#claude-desktop-설정)
15
+ - [사용 방법](#사용-방법)
16
+ - [기능 목록 (85개+)](#기능-목록-85개)
17
+ - [아키텍처](#아키텍처)
18
+ - [문제 해결](#문제-해결)
19
+
20
+ ---
21
+
22
+ ## 설치 방법
23
+
24
+ ### 1단계: 사전 요구사항 설치
25
+
26
+ | 요구사항 | 설치 방법 |
27
+ |----------|-----------|
28
+ | **Windows 10/11** | macOS/Linux는 지원하지 않습니다 (COM API 기반) |
29
+ | **한글(HWP) 프로그램** | 한컴오피스 한글 2014 이상. 설치 후 한번 실행하여 초기 설정 완료 |
30
+ | **Python 3.8+** | [python.org](https://www.python.org/downloads/)에서 설치. **설치 시 "Add Python to PATH" 반드시 체크** |
31
+ | **Node.js 18+** | [nodejs.org](https://nodejs.org/)에서 LTS 버전 설치 |
32
+
33
+ ### 2단계: Python 패키지 설치
34
+
35
+ ```bash
36
+ pip install pyhwpx pywin32
37
+ ```
38
+
39
+ ### 3단계: MCP 서버 설치
40
+
41
+ **방법 A: npm 글로벌 설치 (권장)**
42
+ ```bash
43
+ npm install -g claude-code-hwp-mcp
44
+ ```
45
+
46
+ **방법 B: GitHub에서 직접 클론**
47
+ ```bash
48
+ git clone https://github.com/gmlcjf0326/claude-code-hwp-mcp.git
49
+ cd claude-code-hwp-mcp
50
+ npm install
51
+ npm run build
52
+ ```
53
+
54
+ ### 4단계: 환경 확인
55
+
56
+ 설치 후 `hwp_check_setup` 도구를 호출하면 환경을 자동 진단합니다:
57
+ ```
58
+ ✅ Python 3.11.5
59
+ ✅ pyhwpx installed
60
+ ✅ 한글(HWP) 프로그램
61
+ → 모든 요구사항이 충족되었습니다.
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Claude Code 설정
67
+
68
+ `~/.claude/settings.json`에 MCP 서버를 등록합니다:
69
+
70
+ **npm 글로벌 설치한 경우:**
71
+ ```json
72
+ {
73
+ "mcpServers": {
74
+ "hwp-studio": {
75
+ "command": "hwp-mcp",
76
+ "args": []
77
+ }
78
+ }
79
+ }
80
+ ```
81
+
82
+ **GitHub 클론한 경우:**
83
+ ```json
84
+ {
85
+ "mcpServers": {
86
+ "hwp-studio": {
87
+ "command": "node",
88
+ "args": ["C:/경로/claude-code-hwp-mcp/dist/index.js"]
89
+ }
90
+ }
91
+ }
92
+ ```
93
+
94
+ **토큰 절약 모드 (도구 15개만 로드):**
95
+ ```json
96
+ {
97
+ "mcpServers": {
98
+ "hwp-studio": {
99
+ "command": "hwp-mcp",
100
+ "args": ["--toolset=minimal"]
101
+ }
102
+ }
103
+ }
104
+ ```
105
+
106
+ ---
107
+
108
+ ## Claude Desktop 설정
109
+
110
+ `claude_desktop_config.json`에 추가:
111
+
112
+ ```json
113
+ {
114
+ "mcpServers": {
115
+ "hwp-studio": {
116
+ "command": "hwp-mcp",
117
+ "args": []
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ 설정 파일 위치:
124
+ - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
125
+
126
+ ---
127
+
128
+ ## 사용 방법
129
+
130
+ ### 기본 흐름
131
+
132
+ Claude Code에서 자연어로 요청하면 됩니다:
133
+
134
+ ```
135
+ "C:/문서/사업계획서.hwp 파일을 열어서 분석해줘"
136
+ "표의 계약금액 칸에 50,000,000원을 채워줘"
137
+ "문서를 PDF로 변환해줘"
138
+ ```
139
+
140
+ ### 예시: 공문서 양식 채우기
141
+
142
+ ```
143
+ 1. "C:/양식/과업지시서.hwp 열어줘"
144
+ 2. "문서 구조를 분석해줘"
145
+ 3. "표에서 '사업명' 칸에 'AI 문서 자동화 프로젝트'를 채워줘"
146
+ 4. "작성요령 텍스트 삭제해줘"
147
+ 5. "저장하고 PDF로도 내보내줘"
148
+ ```
149
+
150
+ ### 예시: 엑셀 데이터로 자동 채우기
151
+
152
+ ```
153
+ "참고자료.xlsx를 읽어서 양식.hwp의 표를 자동으로 채워줘"
154
+ ```
155
+ → `hwp_auto_fill_from_reference` 도구가 엑셀 헤더를 표 라벨과 자동 매칭합니다.
156
+
157
+ ### 예시: 다건 문서 생성
158
+
159
+ ```
160
+ "직원_명단.xlsx의 각 행으로 위촉장.hwp를 개별 생성해줘"
161
+ ```
162
+ → `hwp_generate_multi_documents`가 행마다 별도 HWP 파일을 생성합니다.
163
+
164
+ ---
165
+
166
+ ## 기능 목록 (85개+)
167
+
168
+ ### 환경/진단 (1개)
169
+
170
+ | 도구 | 설명 |
171
+ |------|------|
172
+ | `hwp_check_setup` | Python/pyhwpx/한글 설치 상태 진단 및 안내 |
173
+
174
+ ### 문서 관리 (5개)
175
+
176
+ | 도구 | 설명 |
177
+ |------|------|
178
+ | `hwp_list_files` | 디렉토리 내 HWP/HWPX 파일 목록 |
179
+ | `hwp_open_document` | HWP 문서 열기 (자동 백업) |
180
+ | `hwp_close_document` | 문서 닫기 |
181
+ | `hwp_save_document` | 문서 저장 (HWP/HWPX/PDF/DOCX) |
182
+ | `hwp_export_pdf` | PDF 내보내기 |
183
+
184
+ ### 문서 분석 (16개)
185
+
186
+ | 도구 | 설명 |
187
+ |------|------|
188
+ | `hwp_analyze_document` | 전체 구조 분석 (표, 필드, 텍스트) |
189
+ | `hwp_get_document_text` | 문서 전문 텍스트 추출 |
190
+ | `hwp_get_document_info` | 페이지수, 파일 정보 등 메타데이터 |
191
+ | `hwp_get_tables` | 표 데이터 조회 |
192
+ | `hwp_map_table_cells` | 표 셀 탭 인덱스 매핑 (병합 셀 대응) |
193
+ | `hwp_get_cell_format` | 특정 셀의 서식 정보 |
194
+ | `hwp_get_table_format_summary` | 표 전체 서식 요약 |
195
+ | `hwp_get_fields` | 양식 필드 목록 |
196
+ | `hwp_get_as_markdown` | 문서를 마크다운으로 변환 |
197
+ | `hwp_get_page_text` | 특정 페이지 텍스트 추출 |
198
+ | `hwp_text_search` | 텍스트 검색 |
199
+ | `hwp_form_detect` | 양식 빈칸/체크박스 자동 감지 |
200
+ | `hwp_extract_style_profile` | 양식 서식 프로파일 추출 |
201
+ | `hwp_image_extract` | 문서 내 이미지 추출 |
202
+ | `hwp_document_split` | 페이지별 문서 분할 |
203
+ | `hwp_read_reference` | 참고자료 읽기 (Excel/CSV/TXT/JSON) |
204
+
205
+ ### 텍스트 편집 (18개)
206
+
207
+ | 도구 | 설명 |
208
+ |------|------|
209
+ | `hwp_insert_text` | 텍스트 삽입 (색상/볼드/서식 지정) |
210
+ | `hwp_insert_markdown` | 마크다운 → HWP 서식 변환 삽입 |
211
+ | `hwp_insert_heading` | 제목 삽입 (H1~H6 + 자동 순번) |
212
+ | `hwp_find_replace` | 찾기/바꾸기 |
213
+ | `hwp_find_replace_multi` | 다건 찾기/바꾸기 |
214
+ | `hwp_find_replace_nth` | N번째 항목만 찾기/바꾸기 |
215
+ | `hwp_find_and_append` | 특정 텍스트 뒤에 내용 추가 |
216
+ | `hwp_set_paragraph_style` | 문단 서식 설정 (정렬, 줄간격, 들여쓰기) |
217
+ | `hwp_indent` | 들여쓰기 |
218
+ | `hwp_outdent` | 내어쓰기 |
219
+ | `hwp_insert_page_break` | 페이지 나누기 |
220
+ | `hwp_insert_page_num` | 쪽 번호 삽입 (형식 지정) |
221
+ | `hwp_insert_date_code` | 날짜 자동 삽입 |
222
+ | `hwp_insert_footnote` | 각주 삽입 |
223
+ | `hwp_insert_endnote` | 미주 삽입 |
224
+ | `hwp_insert_hyperlink` | 하이퍼링크 삽입 |
225
+ | `hwp_insert_auto_num` | 자동 번호매기기 |
226
+ | `hwp_insert_memo` | 메모 삽입 |
227
+
228
+ ### 표 편집 (18개)
229
+
230
+ | 도구 | 설명 |
231
+ |------|------|
232
+ | `hwp_fill_table_cells` | 표 셀 채우기 (탭/라벨/좌표 기반) |
233
+ | `hwp_fill_fields` | 양식 필드 채우기 |
234
+ | `hwp_table_create_from_data` | 2D 배열로 표 생성 (헤더 자동 스타일링) |
235
+ | `hwp_table_insert_from_csv` | CSV/Excel에서 표 생성 |
236
+ | `hwp_table_add_row` | 행 추가 |
237
+ | `hwp_table_add_column` | 열 추가 |
238
+ | `hwp_table_delete_row` | 행 삭제 |
239
+ | `hwp_table_delete_column` | 열 삭제 |
240
+ | `hwp_table_merge_cells` | 셀 병합 |
241
+ | `hwp_table_split_cell` | 셀 분할 |
242
+ | `hwp_table_distribute_width` | 셀 너비 균등 분배 |
243
+ | `hwp_table_swap_type` | 행/열 교환 |
244
+ | `hwp_table_formula_sum` | 합계 수식 |
245
+ | `hwp_table_formula_avg` | 평균 수식 |
246
+ | `hwp_table_to_csv` | 표 → CSV 내보내기 |
247
+ | `hwp_table_to_json` | 표 → JSON 내보내기 |
248
+ | `hwp_set_cell_color` | 셀 배경색 설정 |
249
+ | `hwp_set_table_border` | 표 테두리 스타일 설정 |
250
+
251
+ ### 이미지/레이아웃 (5개)
252
+
253
+ | 도구 | 설명 |
254
+ |------|------|
255
+ | `hwp_insert_picture` | 이미지 삽입 |
256
+ | `hwp_set_background_picture` | 배경 이미지 설정 |
257
+ | `hwp_insert_line` | 선(줄) 삽입 |
258
+ | `hwp_break_section` | 섹션 나누기 |
259
+ | `hwp_break_column` | 다단 나누기 |
260
+
261
+ ### 스마트/복합 도구 (14개)
262
+
263
+ | 도구 | 설명 |
264
+ |------|------|
265
+ | `hwp_smart_analyze` | AI용 심층 분석 (문서 유형 추론 + 서식 프로파일) |
266
+ | `hwp_smart_fill` | 기존 서식 감지 후 보존하며 채우기 |
267
+ | `hwp_auto_fill_from_reference` | 참고자료(Excel) → 자동 매핑 → 채우기 |
268
+ | `hwp_auto_map_reference` | 참고자료 헤더 ↔ 표 라벨 자동 매핑 |
269
+ | `hwp_generate_multi_documents` | 다건 문서 일괄 생성 |
270
+ | `hwp_generate_toc` | 목차 자동 생성 |
271
+ | `hwp_create_gantt_chart` | 간트차트 추진일정 표 생성 |
272
+ | `hwp_document_merge` | 여러 문서 병합 |
273
+ | `hwp_document_summary` | 문서 요약 정보 |
274
+ | `hwp_privacy_scan` | 개인정보(주민번호, 전화번호 등) 자동 감지 |
275
+ | `hwp_batch_convert` | 폴더 내 HWP 일괄 변환 |
276
+ | `hwp_compare_documents` | 두 문서 비교 |
277
+ | `hwp_word_count` | 글자수/단어수/페이지수 |
278
+ | `hwp_delete_guide_text` | 작성요령/가이드 텍스트 자동 삭제 |
279
+
280
+ ### 양식 도구 (2개)
281
+
282
+ | 도구 | 설명 |
283
+ |------|------|
284
+ | `hwp_toggle_checkbox` | 체크박스 전환 (□→■) |
285
+ | `hwp_inspect_com_object` | [개발용] COM 객체 속성 조회 |
286
+
287
+ ### HWPX 도구 (4개, 한글 프로그램 없이 동작)
288
+
289
+ | 도구 | 설명 |
290
+ |------|------|
291
+ | `hwp_template_list` | 문서 템플릿 목록 (22종) |
292
+ | `hwp_document_create` | 빈 HWPX 문서 생성 |
293
+ | `hwp_template_generate` | 템플릿 기반 문서 생성 |
294
+ | `hwp_xml_edit_text` | HWPX XML 직접 텍스트 편집 |
295
+
296
+ ### 내보내기 (2개)
297
+
298
+ | 도구 | 설명 |
299
+ |------|------|
300
+ | `hwp_export_docx` | DOCX(Word) 내보내기 |
301
+ | `hwp_export_html` | HTML 내보내기 |
302
+
303
+ ---
304
+
305
+ ## 아키텍처
306
+
307
+ ```
308
+ Claude Code / Claude Desktop
309
+ ↓ MCP Protocol (stdio)
310
+ MCP Server (Node.js/TypeScript)
311
+ ├── document-tools.ts (문서 관리 6개)
312
+ ├── analysis-tools.ts (분석 16개)
313
+ ├── editing-tools.ts (편집 51개)
314
+ └── composite-tools.ts (복합 20개)
315
+ ↓ child_process (JSON stdin/stdout)
316
+ Python Bridge (hwp_service.py)
317
+ ├── hwp_editor.py (편집 함수)
318
+ ├── hwp_analyzer.py (분석 함수)
319
+ ├── privacy_scanner.py (개인정보 스캔)
320
+ └── ref_reader.py (참고자료 리더)
321
+ ↓ COM API
322
+ 한글(HWP) 프로그램
323
+ ```
324
+
325
+ - **MCP 서버**: TypeScript, `@modelcontextprotocol/sdk` 기반
326
+ - **Python 브릿지**: pyhwpx를 통한 COM API 제어
327
+ - **HWPX 엔진**: `@xmldom/xmldom` + `jszip`으로 XML 직접 편집 (한글 프로그램 없이)
328
+
329
+ ---
330
+
331
+ ## Toolset 모드
332
+
333
+ 토큰 사용량을 줄이려면 `--toolset` 옵션을 사용하세요:
334
+
335
+ | 모드 | 도구 수 | 용도 |
336
+ |------|---------|------|
337
+ | `minimal` | 15개 | 토큰 절약. 문서 열기/닫기, 표 채우기, 찾기/바꾸기 등 핵심만 |
338
+ | `standard` | 85개+ | 전체 기능 (기본값) |
339
+
340
+ ```bash
341
+ hwp-mcp --toolset=minimal
342
+ ```
343
+
344
+ ---
345
+
346
+ ## 문제 해결
347
+
348
+ ### "Python을 찾을 수 없습니다"
349
+
350
+ ```bash
351
+ # Python이 PATH에 있는지 확인
352
+ python --version
353
+
354
+ # 없다면 python.org에서 설치 (Add to PATH 체크)
355
+ # 설치 후 터미널을 다시 열어야 합니다
356
+ ```
357
+
358
+ ### "pyhwpx 모듈을 찾을 수 없습니다"
359
+
360
+ ```bash
361
+ pip install pyhwpx pywin32
362
+ ```
363
+
364
+ ### "COM class not registered"
365
+
366
+ 한글(HWP) 프로그램이 설치되어 있지 않거나 COM 등록이 안 된 상태입니다.
367
+ - 한컴오피스 한글을 설치하세요
368
+ - 설치 후 한글을 한번 실행하여 초기 설정을 완료하세요
369
+
370
+ ### "RPC 서버를 사용할 수 없습니다"
371
+
372
+ 한글 프로그램이 응답하지 않는 상태입니다.
373
+ - 한글을 닫고 다시 시도하세요
374
+ - 작업 관리자에서 `HWP.exe` 프로세스가 남아있다면 종료하세요
375
+
376
+ ### 자동 진단
377
+
378
+ Claude에게 요청하세요:
379
+ ```
380
+ "hwp_check_setup 실행해줘"
381
+ ```
382
+ → Python, pyhwpx, 한글 설치 상태를 자동으로 확인하고 안내합니다.
383
+
384
+ ---
385
+
386
+ ## 지원 한글 버전
387
+
388
+ | 한글 버전 | 지원 |
389
+ |-----------|------|
390
+ | 한글 2014 | ✅ |
391
+ | 한글 2018 | ✅ |
392
+ | 한글 2020 | ✅ |
393
+ | 한글 2022 | ✅ |
394
+ | 한글 2024 | ✅ |
395
+
396
+ ---
397
+
398
+ ## 라이선스
399
+
400
+ MIT License
401
+
402
+ ---
403
+
404
+ ## 관련 링크
405
+
406
+ - [MCP (Model Context Protocol)](https://modelcontextprotocol.io/)
407
+ - [Claude Code](https://claude.ai/claude-code)
408
+ - [pyhwpx](https://pypi.org/project/pyhwpx/)
409
+ - [한컴오피스](https://www.hancom.com/)
@@ -0,0 +1,67 @@
1
+ interface HwpResponse {
2
+ id: string;
3
+ success: boolean;
4
+ data?: unknown;
5
+ error?: string;
6
+ }
7
+ export interface BridgeState {
8
+ pythonRunning: boolean;
9
+ currentDocumentPath: string | null;
10
+ currentDocumentFormat: string | null;
11
+ lastAnalysis: unknown | null;
12
+ uptimeMs: number;
13
+ }
14
+ export interface PrerequisiteResult {
15
+ ok: boolean;
16
+ python: {
17
+ found: boolean;
18
+ version?: string;
19
+ error?: string;
20
+ guide?: string;
21
+ };
22
+ pyhwpx: {
23
+ found: boolean;
24
+ version?: string;
25
+ error?: string;
26
+ guide?: string;
27
+ };
28
+ hwp: {
29
+ found: boolean;
30
+ error?: string;
31
+ guide?: string;
32
+ };
33
+ os: {
34
+ ok: boolean;
35
+ platform: string;
36
+ error?: string;
37
+ };
38
+ }
39
+ export declare class HwpBridge {
40
+ private process;
41
+ private requestId;
42
+ private pending;
43
+ private buffer;
44
+ private readonly MAX_BUFFER_SIZE;
45
+ private startPromise;
46
+ private pythonRunning;
47
+ private currentDocumentPath;
48
+ private currentDocumentFormat;
49
+ private lastAnalysis;
50
+ private lastError;
51
+ private startTime;
52
+ private getPythonScriptDir;
53
+ private findPython;
54
+ ensureRunning(): Promise<void>;
55
+ private start;
56
+ private processBuffer;
57
+ send(method: string, params: Record<string, unknown>, timeoutMs?: number): Promise<HwpResponse>;
58
+ shutdown(): Promise<void>;
59
+ private rejectAllPending;
60
+ checkPrerequisites(): Promise<PrerequisiteResult>;
61
+ getState(): BridgeState;
62
+ setCurrentDocument(filePath: string | null): void;
63
+ getCurrentDocument(): string | null;
64
+ getCachedAnalysis(): unknown | null;
65
+ setCachedAnalysis(data: unknown): void;
66
+ }
67
+ export {};