claude-code-hwp-mcp 0.2.0 → 0.2.1
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.
- package/README.md +176 -250
- package/dist/hwp-bridge.d.ts +2 -0
- package/dist/hwp-bridge.js +25 -7
- package/dist/index.js +2 -2
- package/dist/tools/document-tools.js +20 -5
- package/package.json +4 -2
- package/python/__pycache__/hwp_analyzer.cpython-313.pyc +0 -0
- package/python/__pycache__/hwp_editor.cpython-313.pyc +0 -0
- package/python/__pycache__/hwp_service.cpython-313.pyc +0 -0
- package/python/__pycache__/privacy_scanner.cpython-313.pyc +0 -0
- package/python/__pycache__/ref_reader.cpython-313.pyc +0 -0
- package/python/__pycache__/test_integration.cpython-313.pyc +0 -0
package/README.md
CHANGED
|
@@ -1,49 +1,57 @@
|
|
|
1
1
|
# claude-code-hwp-mcp
|
|
2
2
|
|
|
3
|
-
Claude Code에서 한글(HWP) 문서를 직접 제어하는 MCP
|
|
3
|
+
Claude Code / Claude Desktop에서 한글(HWP) 문서를 직접 제어하는 MCP 서버.
|
|
4
4
|
pyhwpx COM API를 통해 문서 열기, 편집, 분석, 저장, 변환까지 **85개+ 도구**를 제공합니다.
|
|
5
5
|
|
|
6
|
-
> **Windows 전용** | 한글
|
|
6
|
+
> **Windows 전용** | 한글 2014 이상 | Python 3.8+ | Claude Code & Claude Desktop 지원
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
## 빠른 시작
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
```bash
|
|
11
|
+
# 1. Python 패키지 설치
|
|
12
|
+
pip install pyhwpx pywin32
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- [Claude Desktop 설정](#claude-desktop-설정)
|
|
15
|
-
- [사용 방법](#사용-방법)
|
|
16
|
-
- [기능 목록 (85개+)](#기능-목록-85개)
|
|
17
|
-
- [아키텍처](#아키텍처)
|
|
18
|
-
- [문제 해결](#문제-해결)
|
|
14
|
+
# 2. MCP 서버 설치
|
|
15
|
+
npm install -g claude-code-hwp-mcp
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
# 3. 한글(HWP) 프로그램을 실행하고 빈 문서를 열어둡니다
|
|
18
|
+
|
|
19
|
+
# 4. Claude Code 또는 Claude Desktop에서 사용
|
|
20
|
+
```
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## 사전 요구사항
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
| 요구사항 | 설치 방법 | 비고 |
|
|
25
|
+
|----------|-----------|------|
|
|
26
|
+
| Windows 10/11 | - | macOS/Linux 미지원 (COM API 기반) |
|
|
27
|
+
| 한글(HWP) | 한컴오피스 설치 | 한글 2014, 2018, 2020, 2022, 2024 지원 |
|
|
28
|
+
| Python 3.8+ | [python.org](https://www.python.org/downloads/) | **반드시 python.org에서 설치** |
|
|
29
|
+
| Node.js 18+ | [nodejs.org](https://nodejs.org/) | LTS 버전 권장 |
|
|
25
30
|
|
|
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 버전 설치 |
|
|
31
|
+
### Python 설치 시 주의사항
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
**python.org 공식 버전을 설치하세요.** Microsoft Store 버전(WindowsApps 경로)은 pyhwpx가 정상 동작하지 않을 수 있습니다.
|
|
34
34
|
|
|
35
|
+
설치 화면에서 **"Add Python to PATH"를 반드시 체크**하세요.
|
|
36
|
+
|
|
37
|
+
설치 확인:
|
|
35
38
|
```bash
|
|
36
|
-
|
|
39
|
+
python --version
|
|
40
|
+
pip show pyhwpx
|
|
37
41
|
```
|
|
38
42
|
|
|
39
|
-
|
|
43
|
+
## 설치
|
|
44
|
+
|
|
45
|
+
### 방법 A: npm 글로벌 설치 (권장)
|
|
40
46
|
|
|
41
|
-
**방법 A: npm 글로벌 설치 (권장)**
|
|
42
47
|
```bash
|
|
43
48
|
npm install -g claude-code-hwp-mcp
|
|
44
49
|
```
|
|
45
50
|
|
|
46
|
-
|
|
51
|
+
설치 후 pyhwpx가 없으면 자동으로 안내 메시지가 표시됩니다.
|
|
52
|
+
|
|
53
|
+
### 방법 B: GitHub 클론
|
|
54
|
+
|
|
47
55
|
```bash
|
|
48
56
|
git clone https://github.com/gmlcjf0326/claude-code-hwp-mcp.git
|
|
49
57
|
cd claude-code-hwp-mcp
|
|
@@ -51,356 +59,274 @@ npm install
|
|
|
51
59
|
npm run build
|
|
52
60
|
```
|
|
53
61
|
|
|
54
|
-
### 4단계: 환경 확인
|
|
55
|
-
|
|
56
|
-
설치 후 `hwp_check_setup` 도구를 호출하면 환경을 자동 진단합니다:
|
|
57
|
-
```
|
|
58
|
-
✅ Python 3.11.5
|
|
59
|
-
✅ pyhwpx installed
|
|
60
|
-
✅ 한글(HWP) 프로그램
|
|
61
|
-
→ 모든 요구사항이 충족되었습니다.
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
62
|
## Claude Code 설정
|
|
67
63
|
|
|
68
|
-
`~/.claude/settings.json
|
|
64
|
+
`~/.claude/settings.json` 파일에 추가:
|
|
69
65
|
|
|
70
|
-
**npm 글로벌 설치한 경우:**
|
|
71
66
|
```json
|
|
72
67
|
{
|
|
73
68
|
"mcpServers": {
|
|
74
|
-
"hwp-
|
|
75
|
-
"command": "hwp-mcp"
|
|
76
|
-
"args": []
|
|
69
|
+
"claude-code-hwp-mcp": {
|
|
70
|
+
"command": "hwp-mcp"
|
|
77
71
|
}
|
|
78
72
|
}
|
|
79
73
|
}
|
|
80
74
|
```
|
|
81
75
|
|
|
82
|
-
|
|
76
|
+
GitHub 클론 방식:
|
|
77
|
+
|
|
83
78
|
```json
|
|
84
79
|
{
|
|
85
80
|
"mcpServers": {
|
|
86
|
-
"hwp-
|
|
81
|
+
"claude-code-hwp-mcp": {
|
|
87
82
|
"command": "node",
|
|
88
|
-
"args": ["C
|
|
83
|
+
"args": ["C:/claude-code-hwp-mcp/dist/index.js"]
|
|
89
84
|
}
|
|
90
85
|
}
|
|
91
86
|
}
|
|
92
87
|
```
|
|
93
88
|
|
|
94
|
-
|
|
89
|
+
Python 경로를 직접 지정하려면:
|
|
90
|
+
|
|
95
91
|
```json
|
|
96
92
|
{
|
|
97
93
|
"mcpServers": {
|
|
98
|
-
"hwp-
|
|
94
|
+
"claude-code-hwp-mcp": {
|
|
99
95
|
"command": "hwp-mcp",
|
|
100
|
-
"
|
|
96
|
+
"env": {
|
|
97
|
+
"PYTHON_PATH": "C:/Python313/python.exe"
|
|
98
|
+
}
|
|
101
99
|
}
|
|
102
100
|
}
|
|
103
101
|
}
|
|
104
102
|
```
|
|
105
103
|
|
|
106
|
-
---
|
|
107
|
-
|
|
108
104
|
## Claude Desktop 설정
|
|
109
105
|
|
|
110
|
-
|
|
106
|
+
`%APPDATA%\Claude\claude_desktop_config.json` 파일에 추가:
|
|
111
107
|
|
|
112
108
|
```json
|
|
113
109
|
{
|
|
114
110
|
"mcpServers": {
|
|
115
|
-
"hwp-
|
|
116
|
-
"command": "hwp-mcp"
|
|
117
|
-
"args": []
|
|
111
|
+
"claude-code-hwp-mcp": {
|
|
112
|
+
"command": "hwp-mcp"
|
|
118
113
|
}
|
|
119
114
|
}
|
|
120
115
|
}
|
|
121
116
|
```
|
|
122
117
|
|
|
123
|
-
|
|
124
|
-
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
118
|
+
## 사용 전 반드시 확인
|
|
125
119
|
|
|
126
|
-
|
|
120
|
+
**한글(HWP) 프로그램이 실행 중이어야 합니다.** MCP 서버는 한글 프로그램의 COM API를 통해 문서를 제어하므로, 한글이 열려 있지 않으면 도구가 동작하지 않습니다.
|
|
127
121
|
|
|
128
|
-
|
|
122
|
+
1. 한글(HWP) 프로그램 실행
|
|
123
|
+
2. 빈 문서 하나 열어두기
|
|
124
|
+
3. Claude에서 작업 시작
|
|
129
125
|
|
|
130
|
-
|
|
126
|
+
환경 진단이 필요하면:
|
|
127
|
+
```
|
|
128
|
+
"hwp_check_setup 실행해줘"
|
|
129
|
+
```
|
|
131
130
|
|
|
132
|
-
|
|
131
|
+
## 사용 예시
|
|
133
132
|
|
|
134
133
|
```
|
|
135
134
|
"C:/문서/사업계획서.hwp 파일을 열어서 분석해줘"
|
|
136
135
|
"표의 계약금액 칸에 50,000,000원을 채워줘"
|
|
137
136
|
"문서를 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
|
-
```
|
|
137
|
+
"작성요령 텍스트 삭제해줘"
|
|
153
138
|
"참고자료.xlsx를 읽어서 양식.hwp의 표를 자동으로 채워줘"
|
|
154
|
-
```
|
|
155
|
-
→ `hwp_auto_fill_from_reference` 도구가 엑셀 헤더를 표 라벨과 자동 매칭합니다.
|
|
156
|
-
|
|
157
|
-
### 예시: 다건 문서 생성
|
|
158
|
-
|
|
159
|
-
```
|
|
160
139
|
"직원_명단.xlsx의 각 행으로 위촉장.hwp를 개별 생성해줘"
|
|
161
140
|
```
|
|
162
|
-
→ `hwp_generate_multi_documents`가 행마다 별도 HWP 파일을 생성합니다.
|
|
163
|
-
|
|
164
|
-
---
|
|
165
141
|
|
|
166
142
|
## 기능 목록 (85개+)
|
|
167
143
|
|
|
168
|
-
###
|
|
144
|
+
### 환경/문서 관리 (6개)
|
|
169
145
|
|
|
170
146
|
| 도구 | 설명 |
|
|
171
147
|
|------|------|
|
|
172
|
-
|
|
|
173
|
-
|
|
174
|
-
|
|
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 내보내기 |
|
|
148
|
+
| hwp_check_setup | Python/pyhwpx/한글 설치 상태 진단 |
|
|
149
|
+
| hwp_list_files | 디렉토리 내 HWP/HWPX 파일 목록 |
|
|
150
|
+
| hwp_open_document | HWP 문서 열기 (자동 백업) |
|
|
151
|
+
| hwp_close_document | 문서 닫기 |
|
|
152
|
+
| hwp_save_document | 문서 저장 (HWP/HWPX/PDF/DOCX) |
|
|
153
|
+
| hwp_export_pdf | PDF 내보내기 |
|
|
183
154
|
|
|
184
155
|
### 문서 분석 (16개)
|
|
185
156
|
|
|
186
157
|
| 도구 | 설명 |
|
|
187
158
|
|------|------|
|
|
188
|
-
|
|
|
189
|
-
|
|
|
190
|
-
|
|
|
191
|
-
|
|
|
192
|
-
|
|
|
193
|
-
|
|
|
194
|
-
|
|
|
195
|
-
|
|
|
196
|
-
|
|
|
197
|
-
|
|
|
198
|
-
|
|
|
199
|
-
|
|
|
200
|
-
|
|
|
201
|
-
|
|
|
202
|
-
|
|
|
203
|
-
|
|
|
159
|
+
| hwp_analyze_document | 전체 구조 분석 (표, 필드, 텍스트) |
|
|
160
|
+
| hwp_get_document_text | 문서 전문 텍스트 추출 |
|
|
161
|
+
| hwp_get_document_info | 페이지수, 파일 정보 등 메타데이터 |
|
|
162
|
+
| hwp_get_tables | 표 데이터 조회 |
|
|
163
|
+
| hwp_map_table_cells | 표 셀 탭 인덱스 매핑 (병합 셀 대응) |
|
|
164
|
+
| hwp_get_cell_format | 특정 셀의 서식 정보 |
|
|
165
|
+
| hwp_get_table_format_summary | 표 전체 서식 요약 |
|
|
166
|
+
| hwp_get_fields | 양식 필드 목록 |
|
|
167
|
+
| hwp_get_as_markdown | 문서를 마크다운으로 변환 |
|
|
168
|
+
| hwp_get_page_text | 특정 페이지 텍스트 추출 |
|
|
169
|
+
| hwp_text_search | 텍스트 검색 |
|
|
170
|
+
| hwp_form_detect | 양식 빈칸/체크박스 자동 감지 |
|
|
171
|
+
| hwp_extract_style_profile | 양식 서식 프로파일 추출 |
|
|
172
|
+
| hwp_image_extract | 문서 내 이미지 추출 |
|
|
173
|
+
| hwp_document_split | 페이지별 문서 분할 |
|
|
174
|
+
| hwp_read_reference | 참고자료 읽기 (Excel/CSV/TXT/JSON) |
|
|
204
175
|
|
|
205
176
|
### 텍스트 편집 (18개)
|
|
206
177
|
|
|
207
178
|
| 도구 | 설명 |
|
|
208
179
|
|------|------|
|
|
209
|
-
|
|
|
210
|
-
|
|
|
211
|
-
|
|
|
212
|
-
|
|
|
213
|
-
|
|
|
214
|
-
|
|
|
215
|
-
|
|
|
216
|
-
|
|
|
217
|
-
|
|
|
218
|
-
|
|
|
219
|
-
|
|
|
220
|
-
|
|
|
221
|
-
|
|
|
222
|
-
|
|
|
223
|
-
|
|
|
224
|
-
|
|
|
225
|
-
|
|
|
226
|
-
|
|
|
180
|
+
| hwp_insert_text | 텍스트 삽입 (색상/볼드/서식) |
|
|
181
|
+
| hwp_insert_markdown | 마크다운을 HWP 서식으로 변환 삽입 |
|
|
182
|
+
| hwp_insert_heading | 제목 삽입 (H1~H6 + 자동 순번) |
|
|
183
|
+
| hwp_find_replace | 찾기/바꾸기 |
|
|
184
|
+
| hwp_find_replace_multi | 다건 찾기/바꾸기 |
|
|
185
|
+
| hwp_find_replace_nth | N번째 항목만 찾기/바꾸기 |
|
|
186
|
+
| hwp_find_and_append | 특정 텍스트 뒤에 내용 추가 |
|
|
187
|
+
| hwp_set_paragraph_style | 문단 서식 (정렬, 줄간격, 들여쓰기) |
|
|
188
|
+
| hwp_indent | 들여쓰기 |
|
|
189
|
+
| hwp_outdent | 내어쓰기 |
|
|
190
|
+
| hwp_insert_page_break | 페이지 나누기 |
|
|
191
|
+
| hwp_insert_page_num | 쪽 번호 삽입 |
|
|
192
|
+
| hwp_insert_date_code | 날짜 자동 삽입 |
|
|
193
|
+
| hwp_insert_footnote | 각주 삽입 |
|
|
194
|
+
| hwp_insert_endnote | 미주 삽입 |
|
|
195
|
+
| hwp_insert_hyperlink | 하이퍼링크 삽입 |
|
|
196
|
+
| hwp_insert_auto_num | 자동 번호매기기 |
|
|
197
|
+
| hwp_insert_memo | 메모 삽입 |
|
|
227
198
|
|
|
228
199
|
### 표 편집 (18개)
|
|
229
200
|
|
|
230
201
|
| 도구 | 설명 |
|
|
231
202
|
|------|------|
|
|
232
|
-
|
|
|
233
|
-
|
|
|
234
|
-
|
|
|
235
|
-
|
|
|
236
|
-
|
|
|
237
|
-
|
|
|
238
|
-
|
|
|
239
|
-
|
|
|
240
|
-
|
|
|
241
|
-
|
|
|
242
|
-
|
|
|
243
|
-
|
|
|
244
|
-
|
|
|
245
|
-
|
|
|
246
|
-
|
|
|
247
|
-
|
|
|
248
|
-
|
|
|
249
|
-
|
|
|
203
|
+
| hwp_fill_table_cells | 표 셀 채우기 (탭/라벨/좌표) |
|
|
204
|
+
| hwp_fill_fields | 양식 필드 채우기 |
|
|
205
|
+
| hwp_table_create_from_data | 2D 배열로 표 생성 |
|
|
206
|
+
| hwp_table_insert_from_csv | CSV/Excel에서 표 생성 |
|
|
207
|
+
| hwp_table_add_row | 행 추가 |
|
|
208
|
+
| hwp_table_add_column | 열 추가 |
|
|
209
|
+
| hwp_table_delete_row | 행 삭제 |
|
|
210
|
+
| hwp_table_delete_column | 열 삭제 |
|
|
211
|
+
| hwp_table_merge_cells | 셀 병합 |
|
|
212
|
+
| hwp_table_split_cell | 셀 분할 |
|
|
213
|
+
| hwp_table_distribute_width | 셀 너비 균등 분배 |
|
|
214
|
+
| hwp_table_swap_type | 행/열 교환 |
|
|
215
|
+
| hwp_table_formula_sum | 합계 수식 |
|
|
216
|
+
| hwp_table_formula_avg | 평균 수식 |
|
|
217
|
+
| hwp_table_to_csv | 표를 CSV로 내보내기 |
|
|
218
|
+
| hwp_table_to_json | 표를 JSON으로 내보내기 |
|
|
219
|
+
| hwp_set_cell_color | 셀 배경색 설정 |
|
|
220
|
+
| hwp_set_table_border | 표 테두리 스타일 설정 |
|
|
250
221
|
|
|
251
222
|
### 이미지/레이아웃 (5개)
|
|
252
223
|
|
|
253
224
|
| 도구 | 설명 |
|
|
254
225
|
|------|------|
|
|
255
|
-
|
|
|
256
|
-
|
|
|
257
|
-
|
|
|
258
|
-
|
|
|
259
|
-
|
|
|
260
|
-
|
|
261
|
-
### 스마트/복합 도구 (14개)
|
|
226
|
+
| hwp_insert_picture | 이미지 삽입 |
|
|
227
|
+
| hwp_set_background_picture | 배경 이미지 설정 |
|
|
228
|
+
| hwp_insert_line | 선(줄) 삽입 |
|
|
229
|
+
| hwp_break_section | 섹션 나누기 |
|
|
230
|
+
| hwp_break_column | 다단 나누기 |
|
|
262
231
|
|
|
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개)
|
|
232
|
+
### 스마트/복합 도구 (16개)
|
|
281
233
|
|
|
282
234
|
| 도구 | 설명 |
|
|
283
235
|
|------|------|
|
|
284
|
-
|
|
|
285
|
-
|
|
|
236
|
+
| hwp_smart_analyze | AI용 심층 분석 (문서 유형 추론) |
|
|
237
|
+
| hwp_smart_fill | 서식 감지 후 보존하며 채우기 |
|
|
238
|
+
| hwp_auto_fill_from_reference | Excel에서 자동 매핑 후 채우기 |
|
|
239
|
+
| hwp_auto_map_reference | 참고자료 헤더와 표 라벨 자동 매핑 |
|
|
240
|
+
| hwp_generate_multi_documents | 다건 문서 일괄 생성 |
|
|
241
|
+
| hwp_generate_toc | 목차 자동 생성 |
|
|
242
|
+
| hwp_create_gantt_chart | 간트차트 추진일정 표 생성 |
|
|
243
|
+
| hwp_document_merge | 여러 문서 병합 |
|
|
244
|
+
| hwp_document_summary | 문서 요약 정보 |
|
|
245
|
+
| hwp_privacy_scan | 개인정보 자동 감지 |
|
|
246
|
+
| hwp_batch_convert | HWP 일괄 변환 |
|
|
247
|
+
| hwp_compare_documents | 두 문서 비교 |
|
|
248
|
+
| hwp_word_count | 글자수/단어수/페이지수 |
|
|
249
|
+
| hwp_delete_guide_text | 작성요령 자동 삭제 |
|
|
250
|
+
| hwp_toggle_checkbox | 체크박스 전환 |
|
|
251
|
+
| hwp_inspect_com_object | [개발용] COM 객체 속성 조회 |
|
|
286
252
|
|
|
287
253
|
### HWPX 도구 (4개, 한글 프로그램 없이 동작)
|
|
288
254
|
|
|
289
255
|
| 도구 | 설명 |
|
|
290
256
|
|------|------|
|
|
291
|
-
|
|
|
292
|
-
|
|
|
293
|
-
|
|
|
294
|
-
|
|
|
257
|
+
| hwp_template_list | 문서 템플릿 목록 (22종) |
|
|
258
|
+
| hwp_document_create | 빈 HWPX 문서 생성 |
|
|
259
|
+
| hwp_template_generate | 템플릿 기반 문서 생성 |
|
|
260
|
+
| hwp_xml_edit_text | HWPX XML 직접 텍스트 편집 |
|
|
295
261
|
|
|
296
262
|
### 내보내기 (2개)
|
|
297
263
|
|
|
298
264
|
| 도구 | 설명 |
|
|
299
265
|
|------|------|
|
|
300
|
-
|
|
|
301
|
-
|
|
|
302
|
-
|
|
303
|
-
---
|
|
266
|
+
| hwp_export_docx | DOCX(Word) 내보내기 |
|
|
267
|
+
| hwp_export_html | HTML 내보내기 |
|
|
304
268
|
|
|
305
269
|
## 아키텍처
|
|
306
270
|
|
|
307
271
|
```
|
|
308
272
|
Claude Code / Claude Desktop
|
|
309
|
-
|
|
273
|
+
| MCP Protocol (stdio)
|
|
310
274
|
MCP Server (Node.js/TypeScript)
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
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) 프로그램
|
|
275
|
+
| child_process (JSON stdin/stdout)
|
|
276
|
+
Python Bridge (hwp_service.py + pyhwpx)
|
|
277
|
+
| COM API
|
|
278
|
+
한글(HWP) 프로그램
|
|
323
279
|
```
|
|
324
280
|
|
|
325
|
-
- **MCP 서버**: TypeScript, `@modelcontextprotocol/sdk` 기반
|
|
326
|
-
- **Python 브릿지**: pyhwpx를 통한 COM API 제어
|
|
327
|
-
- **HWPX 엔진**: `@xmldom/xmldom` + `jszip`으로 XML 직접 편집 (한글 프로그램 없이)
|
|
328
|
-
|
|
329
|
-
---
|
|
330
|
-
|
|
331
281
|
## Toolset 모드
|
|
332
282
|
|
|
333
|
-
토큰
|
|
283
|
+
토큰 절약이 필요하면 minimal 모드를 사용하세요 (15개 핵심 도구만 로드):
|
|
334
284
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
285
|
+
```json
|
|
286
|
+
{
|
|
287
|
+
"mcpServers": {
|
|
288
|
+
"claude-code-hwp-mcp": {
|
|
289
|
+
"command": "hwp-mcp",
|
|
290
|
+
"args": ["--toolset=minimal"]
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
342
294
|
```
|
|
343
295
|
|
|
344
|
-
---
|
|
345
|
-
|
|
346
296
|
## 문제 해결
|
|
347
297
|
|
|
348
|
-
###
|
|
298
|
+
### Python을 찾을 수 없습니다
|
|
349
299
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
python --version
|
|
353
|
-
|
|
354
|
-
# 없다면 python.org에서 설치 (Add to PATH 체크)
|
|
355
|
-
# 설치 후 터미널을 다시 열어야 합니다
|
|
356
|
-
```
|
|
300
|
+
python.org에서 Python 3.8+을 설치하세요. 설치 시 "Add Python to PATH" 체크 필수.
|
|
301
|
+
Microsoft Store 버전은 권장하지 않습니다.
|
|
357
302
|
|
|
358
|
-
###
|
|
303
|
+
### pyhwpx 모듈을 찾을 수 없습니다
|
|
359
304
|
|
|
360
305
|
```bash
|
|
361
306
|
pip install pyhwpx pywin32
|
|
362
307
|
```
|
|
363
308
|
|
|
364
|
-
|
|
309
|
+
여러 Python이 설치된 경우 경로를 확인하세요:
|
|
310
|
+
```bash
|
|
311
|
+
python -c "import sys; print(sys.executable)"
|
|
312
|
+
```
|
|
365
313
|
|
|
366
|
-
|
|
367
|
-
- 한컴오피스 한글을 설치하세요
|
|
368
|
-
- 설치 후 한글을 한번 실행하여 초기 설정을 완료하세요
|
|
314
|
+
### COM class not registered
|
|
369
315
|
|
|
370
|
-
|
|
316
|
+
한컴오피스 한글을 설치하세요. 설치 후 한글을 한번 실행하여 초기 설정을 완료하세요.
|
|
371
317
|
|
|
372
|
-
|
|
373
|
-
- 한글을 닫고 다시 시도하세요
|
|
374
|
-
- 작업 관리자에서 `HWP.exe` 프로세스가 남아있다면 종료하세요
|
|
318
|
+
### RPC 서버를 사용할 수 없습니다
|
|
375
319
|
|
|
376
|
-
|
|
320
|
+
한글을 닫고 다시 시도하세요. 작업 관리자에서 Hwp.exe 프로세스가 남아있으면 종료하세요.
|
|
377
321
|
|
|
378
|
-
|
|
379
|
-
```
|
|
380
|
-
"hwp_check_setup 실행해줘"
|
|
381
|
-
```
|
|
382
|
-
→ Python, pyhwpx, 한글 설치 상태를 자동으로 확인하고 안내합니다.
|
|
322
|
+
### 한글이 열려있는데도 안 됩니다
|
|
383
323
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
## 지원 한글 버전
|
|
387
|
-
|
|
388
|
-
| 한글 버전 | 지원 |
|
|
389
|
-
|-----------|------|
|
|
390
|
-
| 한글 2014 | ✅ |
|
|
391
|
-
| 한글 2018 | ✅ |
|
|
392
|
-
| 한글 2020 | ✅ |
|
|
393
|
-
| 한글 2022 | ✅ |
|
|
394
|
-
| 한글 2024 | ✅ |
|
|
395
|
-
|
|
396
|
-
---
|
|
324
|
+
한글 프로그램이 실행 중이어야 COM 연결이 됩니다. hwp_check_setup으로 진단하세요.
|
|
397
325
|
|
|
398
326
|
## 라이선스
|
|
399
327
|
|
|
400
328
|
MIT License
|
|
401
329
|
|
|
402
|
-
---
|
|
403
|
-
|
|
404
330
|
## 관련 링크
|
|
405
331
|
|
|
406
332
|
- [MCP (Model Context Protocol)](https://modelcontextprotocol.io/)
|
package/dist/hwp-bridge.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export interface PrerequisiteResult {
|
|
|
16
16
|
python: {
|
|
17
17
|
found: boolean;
|
|
18
18
|
version?: string;
|
|
19
|
+
path?: string;
|
|
19
20
|
error?: string;
|
|
20
21
|
guide?: string;
|
|
21
22
|
};
|
|
@@ -30,6 +31,7 @@ export interface PrerequisiteResult {
|
|
|
30
31
|
error?: string;
|
|
31
32
|
guide?: string;
|
|
32
33
|
};
|
|
34
|
+
hwpRunning: boolean;
|
|
33
35
|
os: {
|
|
34
36
|
ok: boolean;
|
|
35
37
|
platform: string;
|
package/dist/hwp-bridge.js
CHANGED
|
@@ -235,6 +235,7 @@ export class HwpBridge {
|
|
|
235
235
|
python: { found: false },
|
|
236
236
|
pyhwpx: { found: false },
|
|
237
237
|
hwp: { found: false },
|
|
238
|
+
hwpRunning: false,
|
|
238
239
|
os: { ok: process.platform === 'win32', platform: process.platform },
|
|
239
240
|
};
|
|
240
241
|
if (!result.os.ok) {
|
|
@@ -242,16 +243,26 @@ export class HwpBridge {
|
|
|
242
243
|
return result;
|
|
243
244
|
}
|
|
244
245
|
const pythonExe = this.findPython();
|
|
245
|
-
// 1) Python 체크
|
|
246
|
+
// 1) Python 체크 — 경로 + 버전 + Microsoft Store 감지
|
|
246
247
|
try {
|
|
247
|
-
const { stdout } = await execFileAsync(pythonExe, ['
|
|
248
|
-
const
|
|
249
|
-
|
|
248
|
+
const { stdout } = await execFileAsync(pythonExe, ['-c', 'import sys; print(sys.version.split()[0]); print(sys.executable)'], { timeout: 5000 });
|
|
249
|
+
const lines = stdout.trim().split(/\r?\n/);
|
|
250
|
+
const ver = lines[0];
|
|
251
|
+
const exePath = lines[1] || '';
|
|
252
|
+
const isStorePython = exePath.includes('WindowsApps');
|
|
253
|
+
result.python = {
|
|
254
|
+
found: true,
|
|
255
|
+
version: ver,
|
|
256
|
+
path: exePath,
|
|
257
|
+
guide: isStorePython
|
|
258
|
+
? `Microsoft Store Python 감지 (${exePath}). pyhwpx가 인식되지 않을 수 있습니다.\n→ python.org에서 재설치를 권장합니다: https://www.python.org/downloads/`
|
|
259
|
+
: undefined,
|
|
260
|
+
};
|
|
250
261
|
}
|
|
251
262
|
catch {
|
|
252
263
|
result.python = {
|
|
253
264
|
found: false,
|
|
254
|
-
guide: 'Python 3.8+ 설치 필요\n→ https://www.python.org/downloads
|
|
265
|
+
guide: 'Python 3.8+ 설치 필요\n→ https://www.python.org/downloads/ 에서 설치\n→ 설치 시 "Add Python to PATH" 반드시 체크\n→ Microsoft Store 버전이 아닌 python.org 공식 버전 권장\n→ 설치 후 터미널 재시작',
|
|
255
266
|
};
|
|
256
267
|
return result;
|
|
257
268
|
}
|
|
@@ -263,7 +274,7 @@ export class HwpBridge {
|
|
|
263
274
|
catch {
|
|
264
275
|
result.pyhwpx = {
|
|
265
276
|
found: false,
|
|
266
|
-
guide:
|
|
277
|
+
guide: `pyhwpx 패키지 설치 필요\n→ 감지된 Python: ${result.python.path || pythonExe}\n→ 터미널에서 실행: pip install pyhwpx pywin32`,
|
|
267
278
|
};
|
|
268
279
|
return result;
|
|
269
280
|
}
|
|
@@ -281,10 +292,17 @@ export class HwpBridge {
|
|
|
281
292
|
};
|
|
282
293
|
}
|
|
283
294
|
else {
|
|
284
|
-
// COM은 등록되어 있지만 다른 에러 (이미 실행 중 등) → 설치는 된 것
|
|
285
295
|
result.hwp = { found: true };
|
|
286
296
|
}
|
|
287
297
|
}
|
|
298
|
+
// 4) 한글 프로세스 실행 여부 체크
|
|
299
|
+
try {
|
|
300
|
+
const { stdout } = await execFileAsync('tasklist', ['/FI', 'IMAGENAME eq Hwp.exe', '/NH'], { timeout: 5000 });
|
|
301
|
+
result.hwpRunning = stdout.includes('Hwp.exe');
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
result.hwpRunning = false;
|
|
305
|
+
}
|
|
288
306
|
result.ok = result.python.found && result.pyhwpx.found && result.hwp.found;
|
|
289
307
|
return result;
|
|
290
308
|
}
|
package/dist/index.js
CHANGED
|
@@ -19,8 +19,8 @@ const resolvedToolset = validToolsets.includes(toolset)
|
|
|
19
19
|
: 'standard';
|
|
20
20
|
const bridge = new HwpBridge();
|
|
21
21
|
const server = new McpServer({
|
|
22
|
-
name: 'hwp-
|
|
23
|
-
version: '0.2.
|
|
22
|
+
name: 'claude-code-hwp-mcp',
|
|
23
|
+
version: '0.2.1',
|
|
24
24
|
});
|
|
25
25
|
setupServer(server, bridge, resolvedToolset);
|
|
26
26
|
const transport = new StdioServerTransport();
|
|
@@ -87,7 +87,10 @@ export function registerDocumentTools(server, bridge) {
|
|
|
87
87
|
items.push(`❌ OS: ${prereq.os.error}`);
|
|
88
88
|
}
|
|
89
89
|
if (prereq.python.found) {
|
|
90
|
-
|
|
90
|
+
let pyInfo = `✅ Python ${prereq.python.version} (${prereq.python.path || 'unknown'})`;
|
|
91
|
+
if (prereq.python.guide)
|
|
92
|
+
pyInfo += `\n ⚠️ ${prereq.python.guide}`;
|
|
93
|
+
items.push(pyInfo);
|
|
91
94
|
}
|
|
92
95
|
else {
|
|
93
96
|
items.push(`❌ Python 미설치\n ${prereq.python.guide}`);
|
|
@@ -99,16 +102,28 @@ export function registerDocumentTools(server, bridge) {
|
|
|
99
102
|
items.push(`❌ pyhwpx 미설치\n ${prereq.pyhwpx.guide}`);
|
|
100
103
|
}
|
|
101
104
|
if (prereq.hwp.found) {
|
|
102
|
-
items.push('✅ 한글(HWP) 프로그램');
|
|
105
|
+
items.push('✅ 한글(HWP) 프로그램 설치됨');
|
|
103
106
|
}
|
|
104
107
|
else if (prereq.pyhwpx.found) {
|
|
105
108
|
items.push(`❌ 한글(HWP) 미설치\n ${prereq.hwp.guide}`);
|
|
106
109
|
}
|
|
110
|
+
// 한글 실행 여부
|
|
111
|
+
if (prereq.hwp.found) {
|
|
112
|
+
if (prereq.hwpRunning) {
|
|
113
|
+
items.push('✅ 한글(HWP) 실행 중');
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
items.push('⚠️ 한글(HWP)이 실행되지 않았습니다. 문서 작업 전 한글을 먼저 실행하세요.');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const allReady = prereq.ok && prereq.hwpRunning;
|
|
107
120
|
return { content: [{ type: 'text', text: JSON.stringify({
|
|
108
|
-
status: prereq.ok ? '
|
|
109
|
-
message:
|
|
121
|
+
status: allReady ? 'ready' : prereq.ok ? 'hwp_not_running' : 'not_ready',
|
|
122
|
+
message: allReady
|
|
110
123
|
? '모든 요구사항이 충족되었습니다. HWP 도구를 사용할 수 있습니다.'
|
|
111
|
-
:
|
|
124
|
+
: prereq.ok
|
|
125
|
+
? '한글(HWP) 프로그램을 실행한 후 다시 시도하세요.'
|
|
126
|
+
: '아래 항목을 설치한 후 다시 시도하세요.',
|
|
112
127
|
details: prereq,
|
|
113
128
|
summary: items.join('\n'),
|
|
114
129
|
}) }] };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-code-hwp-mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "MCP server for HWP (한글) document automation via pyhwpx COM API. 85+ tools for document editing, analysis, and AI-powered filling.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,10 +9,12 @@
|
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist/",
|
|
12
|
-
"python
|
|
12
|
+
"python/*.py",
|
|
13
|
+
"python/requirements.txt"
|
|
13
14
|
],
|
|
14
15
|
"scripts": {
|
|
15
16
|
"build": "tsc",
|
|
17
|
+
"postinstall": "node -e \"try{require('child_process').execSync('python -c \\\"import pyhwpx\\\"',{stdio:'ignore'})}catch{console.log('\\n[claude-code-hwp-mcp] pyhwpx 미설치. 실행하세요: pip install pyhwpx pywin32\\n')}\"",
|
|
16
18
|
"prepublishOnly": "npm run build",
|
|
17
19
|
"start": "node dist/index.js",
|
|
18
20
|
"dev": "tsx src/index.ts"
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|