claude-code-hwp-mcp 0.2.0 → 0.2.2
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 +312 -244
- 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,397 +1,467 @@
|
|
|
1
1
|
# claude-code-hwp-mcp
|
|
2
2
|
|
|
3
|
-
Claude Code에서 한글(HWP) 문서를
|
|
4
|
-
pyhwpx COM API를 통해 문서 열기, 편집, 분석, 저장, 변환까지 **85개+ 도구**를 제공합니다.
|
|
3
|
+
Claude Code와 Claude Desktop에서 한글(HWP) 문서를 AI로 자동 편집하는 MCP 서버입니다.
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
85개 이상의 도구로 문서 열기, 표 채우기, 텍스트 편집, 서식 설정, PDF 변환까지 모두 자동화할 수 있습니다.
|
|
6
|
+
|
|
7
|
+
> Windows 전용 | 한글 2014 이상 | Python 3.8+ | Claude Code + Claude Desktop 지원
|
|
7
8
|
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
##
|
|
11
|
+
## 설치 가이드 (처음 설정하는 분)
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
- [Claude Code 설정](#claude-code-설정)
|
|
14
|
-
- [Claude Desktop 설정](#claude-desktop-설정)
|
|
15
|
-
- [사용 방법](#사용-방법)
|
|
16
|
-
- [기능 목록 (85개+)](#기능-목록-85개)
|
|
17
|
-
- [아키텍처](#아키텍처)
|
|
18
|
-
- [문제 해결](#문제-해결)
|
|
13
|
+
아래 순서대로 따라하세요. 5분이면 완료됩니다.
|
|
19
14
|
|
|
20
|
-
|
|
15
|
+
### Step 1. Python 설치
|
|
21
16
|
|
|
22
|
-
|
|
17
|
+
**반드시 python.org 공식 버전을 설치하세요.**
|
|
23
18
|
|
|
24
|
-
|
|
19
|
+
1. https://www.python.org/downloads/ 에 접속
|
|
20
|
+
2. "Download Python 3.x.x" 버튼 클릭
|
|
21
|
+
3. 설치 화면에서 **"Add Python to PATH" 체크박스를 반드시 체크**
|
|
22
|
+
4. "Install Now" 클릭
|
|
25
23
|
|
|
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 버전 설치 |
|
|
24
|
+
> **Microsoft Store 버전 Python은 사용하지 마세요.** Store 버전은 패키지가 격리된 경로에 설치되어 pyhwpx를 인식하지 못합니다. 이미 Store 버전이 설치되어 있다면 [Microsoft Store Python 문제 해결](#microsoft-store-python-문제) 섹션을 참고하세요.
|
|
32
25
|
|
|
33
|
-
|
|
26
|
+
설치 확인 (명령 프롬프트에서):
|
|
34
27
|
|
|
35
28
|
```bash
|
|
36
|
-
|
|
29
|
+
python --version
|
|
37
30
|
```
|
|
38
31
|
|
|
39
|
-
|
|
32
|
+
`Python 3.x.x`가 출력되면 성공입니다.
|
|
33
|
+
|
|
34
|
+
### Step 2. Python 패키지 설치
|
|
35
|
+
|
|
36
|
+
명령 프롬프트(cmd)를 열고 아래를 실행하세요:
|
|
40
37
|
|
|
41
|
-
**방법 A: npm 글로벌 설치 (권장)**
|
|
42
38
|
```bash
|
|
43
|
-
|
|
39
|
+
pip install pyhwpx pywin32
|
|
44
40
|
```
|
|
45
41
|
|
|
46
|
-
|
|
42
|
+
설치 확인:
|
|
43
|
+
|
|
47
44
|
```bash
|
|
48
|
-
|
|
49
|
-
cd claude-code-hwp-mcp
|
|
50
|
-
npm install
|
|
51
|
-
npm run build
|
|
45
|
+
pip show pyhwpx
|
|
52
46
|
```
|
|
53
47
|
|
|
54
|
-
###
|
|
48
|
+
### Step 3. Node.js 설치
|
|
55
49
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
50
|
+
1. https://nodejs.org/ 에 접속
|
|
51
|
+
2. LTS 버전 다운로드 후 설치
|
|
52
|
+
|
|
53
|
+
### Step 4. MCP 서버 설치
|
|
54
|
+
|
|
55
|
+
명령 프롬프트에서:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm install -g claude-code-hwp-mcp
|
|
62
59
|
```
|
|
63
60
|
|
|
61
|
+
### Step 5. Claude에 MCP 서버 연결
|
|
62
|
+
|
|
63
|
+
사용하는 Claude 앱에 따라 아래 설정을 진행하세요:
|
|
64
|
+
|
|
65
|
+
- **Claude Code** 사용자 → [Claude Code 설정](#claude-code-설정) 섹션으로
|
|
66
|
+
- **Claude Desktop** 사용자 → [Claude Desktop 설정](#claude-desktop-설정) 섹션으로
|
|
67
|
+
|
|
64
68
|
---
|
|
65
69
|
|
|
66
70
|
## Claude Code 설정
|
|
67
71
|
|
|
68
|
-
|
|
72
|
+
### 설정 파일 열기
|
|
73
|
+
|
|
74
|
+
Claude Code 터미널에서 설정 파일을 엽니다. 파일 위치:
|
|
75
|
+
|
|
76
|
+
- Windows: `C:\Users\사용자이름\.claude\settings.json`
|
|
77
|
+
- 또는 `~/.claude/settings.json`
|
|
78
|
+
|
|
79
|
+
### 설정 추가
|
|
80
|
+
|
|
81
|
+
`settings.json` 파일에 아래 내용을 추가하세요:
|
|
69
82
|
|
|
70
|
-
**npm 글로벌 설치한 경우:**
|
|
71
83
|
```json
|
|
72
84
|
{
|
|
73
85
|
"mcpServers": {
|
|
74
|
-
"hwp-
|
|
75
|
-
"command": "hwp-mcp"
|
|
76
|
-
"args": []
|
|
86
|
+
"claude-code-hwp-mcp": {
|
|
87
|
+
"command": "hwp-mcp"
|
|
77
88
|
}
|
|
78
89
|
}
|
|
79
90
|
}
|
|
80
91
|
```
|
|
81
92
|
|
|
82
|
-
|
|
93
|
+
이미 다른 MCP 서버가 등록되어 있다면 `mcpServers` 안에 추가합니다:
|
|
94
|
+
|
|
83
95
|
```json
|
|
84
96
|
{
|
|
85
97
|
"mcpServers": {
|
|
86
|
-
"
|
|
87
|
-
"command": "
|
|
88
|
-
|
|
98
|
+
"기존-서버": {
|
|
99
|
+
"command": "기존-명령"
|
|
100
|
+
},
|
|
101
|
+
"claude-code-hwp-mcp": {
|
|
102
|
+
"command": "hwp-mcp"
|
|
89
103
|
}
|
|
90
104
|
}
|
|
91
105
|
}
|
|
92
106
|
```
|
|
93
107
|
|
|
94
|
-
|
|
108
|
+
### GitHub 클론 방식으로 설치한 경우
|
|
109
|
+
|
|
110
|
+
npm 글로벌 설치 대신 GitHub에서 클론한 경우:
|
|
111
|
+
|
|
95
112
|
```json
|
|
96
113
|
{
|
|
97
114
|
"mcpServers": {
|
|
98
|
-
"hwp-
|
|
99
|
-
"command": "
|
|
100
|
-
"args": ["
|
|
115
|
+
"claude-code-hwp-mcp": {
|
|
116
|
+
"command": "node",
|
|
117
|
+
"args": ["C:\\claude-code-hwp-mcp\\dist\\index.js"]
|
|
101
118
|
}
|
|
102
119
|
}
|
|
103
120
|
}
|
|
104
121
|
```
|
|
105
122
|
|
|
123
|
+
`args`의 경로를 실제 클론한 위치로 변경하세요.
|
|
124
|
+
|
|
106
125
|
---
|
|
107
126
|
|
|
108
127
|
## Claude Desktop 설정
|
|
109
128
|
|
|
110
|
-
|
|
129
|
+
### Step 1. 설정 파일 찾기
|
|
130
|
+
|
|
131
|
+
Windows 탐색기에서 주소창에 아래를 입력하고 Enter:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
%APPDATA%\Claude
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
`Claude` 폴더가 열립니다.
|
|
138
|
+
|
|
139
|
+
### Step 2. 설정 파일 만들기 또는 열기
|
|
140
|
+
|
|
141
|
+
해당 폴더에 `claude_desktop_config.json` 파일이 있으면 메모장으로 엽니다.
|
|
142
|
+
|
|
143
|
+
파일이 없으면 새로 만드세요:
|
|
144
|
+
1. 폴더에서 마우스 우클릭 > 새로 만들기 > 텍스트 문서
|
|
145
|
+
2. 파일 이름을 `claude_desktop_config.json`으로 변경 (확장자 `.txt`가 아닌 `.json`)
|
|
146
|
+
|
|
147
|
+
### Step 3. 설정 내용 입력
|
|
148
|
+
|
|
149
|
+
파일에 아래 내용을 그대로 붙여넣으세요:
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"mcpServers": {
|
|
154
|
+
"claude-code-hwp-mcp": {
|
|
155
|
+
"command": "hwp-mcp"
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Step 4. (선택) Python 경로 직접 지정
|
|
162
|
+
|
|
163
|
+
Python이 여러 개 설치되어 있거나 Microsoft Store Python 문제가 있을 경우, Python 경로를 명시적으로 지정할 수 있습니다:
|
|
111
164
|
|
|
112
165
|
```json
|
|
113
166
|
{
|
|
114
167
|
"mcpServers": {
|
|
115
|
-
"hwp-
|
|
168
|
+
"claude-code-hwp-mcp": {
|
|
116
169
|
"command": "hwp-mcp",
|
|
117
|
-
"
|
|
170
|
+
"env": {
|
|
171
|
+
"PYTHON_PATH": "C:\\Users\\사용자이름\\AppData\\Local\\Programs\\Python\\Python313\\python.exe"
|
|
172
|
+
}
|
|
118
173
|
}
|
|
119
174
|
}
|
|
120
175
|
}
|
|
121
176
|
```
|
|
122
177
|
|
|
123
|
-
|
|
124
|
-
|
|
178
|
+
본인의 Python 경로를 확인하려면 명령 프롬프트에서:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
python -c "import sys; print(sys.executable)"
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
출력된 경로를 `PYTHON_PATH` 값으로 사용하세요.
|
|
185
|
+
|
|
186
|
+
### Step 5. Claude Desktop 재시작
|
|
187
|
+
|
|
188
|
+
설정 파일을 저장한 후 **Claude Desktop을 완전히 종료했다가 다시 실행**하세요. (트레이에서도 완전 종료)
|
|
189
|
+
|
|
190
|
+
### Step 6. 연결 확인
|
|
191
|
+
|
|
192
|
+
Claude Desktop에서 아래와 같이 입력하세요:
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
hwp_check_setup 실행해줘
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
모든 항목에 체크 표시가 나오면 성공입니다.
|
|
125
199
|
|
|
126
200
|
---
|
|
127
201
|
|
|
128
|
-
## 사용
|
|
202
|
+
## 사용 전 반드시 확인
|
|
203
|
+
|
|
204
|
+
**한글(HWP) 프로그램이 실행 중이어야 합니다.**
|
|
205
|
+
|
|
206
|
+
MCP 서버는 한글 프로그램의 COM API를 통해 문서를 제어합니다. 한글이 열려 있지 않으면 문서 관련 도구가 동작하지 않습니다.
|
|
129
207
|
|
|
130
|
-
|
|
208
|
+
사용 순서:
|
|
209
|
+
1. 한글(HWP) 프로그램을 실행합니다
|
|
210
|
+
2. 빈 문서가 열린 상태로 둡니다
|
|
211
|
+
3. Claude Code 또는 Claude Desktop에서 작업을 시작합니다
|
|
131
212
|
|
|
132
|
-
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## 사용 예시
|
|
216
|
+
|
|
217
|
+
Claude에게 자연어로 요청하면 됩니다:
|
|
133
218
|
|
|
134
219
|
```
|
|
135
220
|
"C:/문서/사업계획서.hwp 파일을 열어서 분석해줘"
|
|
136
221
|
"표의 계약금액 칸에 50,000,000원을 채워줘"
|
|
137
222
|
"문서를 PDF로 변환해줘"
|
|
223
|
+
"작성요령 텍스트 삭제해줘"
|
|
224
|
+
"참고자료.xlsx를 읽어서 양식.hwp의 표를 자동으로 채워줘"
|
|
225
|
+
"직원_명단.xlsx의 각 행으로 위촉장.hwp를 개별 생성해줘"
|
|
138
226
|
```
|
|
139
227
|
|
|
140
|
-
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 문제 해결
|
|
231
|
+
|
|
232
|
+
### Microsoft Store Python 문제
|
|
233
|
+
|
|
234
|
+
**증상**: hwp_check_setup에서 "pyhwpx 미설치" 또는 "한글 미설치"로 표시되지만 실제로는 설치되어 있음
|
|
141
235
|
|
|
236
|
+
**진단**: 명령 프롬프트에서 아래를 실행하세요:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
python -c "import sys; print(sys.executable)"
|
|
142
240
|
```
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
4. "작성요령 텍스트 삭제해줘"
|
|
147
|
-
5. "저장하고 PDF로도 내보내줘"
|
|
241
|
+
|
|
242
|
+
출력 경로에 `WindowsApps`가 포함되어 있으면 Microsoft Store 버전입니다:
|
|
243
|
+
|
|
148
244
|
```
|
|
245
|
+
C:\Users\사용자\AppData\Local\Microsoft\WindowsApps\python.exe (Store 버전)
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**해결 방법 A (권장): python.org 버전으로 재설치**
|
|
249
|
+
|
|
250
|
+
1. Windows 설정 > 앱 > "Python"을 찾아서 제거
|
|
251
|
+
2. https://www.python.org/downloads/ 에서 다시 설치
|
|
252
|
+
3. 설치 시 "Add Python to PATH" 반드시 체크
|
|
253
|
+
4. `pip install pyhwpx pywin32` 다시 실행
|
|
149
254
|
|
|
150
|
-
|
|
255
|
+
**해결 방법 B: Claude 설정에서 Python 경로 지정**
|
|
151
256
|
|
|
257
|
+
Store Python을 유지한 채, MCP 설정에서 직접 경로를 지정합니다:
|
|
258
|
+
|
|
259
|
+
```json
|
|
260
|
+
{
|
|
261
|
+
"mcpServers": {
|
|
262
|
+
"claude-code-hwp-mcp": {
|
|
263
|
+
"command": "hwp-mcp",
|
|
264
|
+
"env": {
|
|
265
|
+
"PYTHON_PATH": "C:\\Users\\사용자\\AppData\\Local\\Programs\\Python\\Python313\\python.exe"
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
152
270
|
```
|
|
153
|
-
|
|
271
|
+
|
|
272
|
+
### Python을 찾을 수 없습니다
|
|
273
|
+
|
|
274
|
+
python.org에서 Python 3.8+을 설치하세요. 설치 시 "Add Python to PATH" 체크 필수입니다. 설치 후 명령 프롬프트를 새로 열어야 합니다.
|
|
275
|
+
|
|
276
|
+
### pyhwpx 모듈을 찾을 수 없습니다
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
pip install pyhwpx pywin32
|
|
154
280
|
```
|
|
155
|
-
→ `hwp_auto_fill_from_reference` 도구가 엑셀 헤더를 표 라벨과 자동 매칭합니다.
|
|
156
281
|
|
|
157
|
-
###
|
|
282
|
+
### COM class not registered
|
|
283
|
+
|
|
284
|
+
한컴오피스 한글을 설치하세요. 설치 후 한글을 한번 실행하여 초기 설정을 완료하세요.
|
|
285
|
+
|
|
286
|
+
### RPC 서버를 사용할 수 없습니다
|
|
287
|
+
|
|
288
|
+
한글 프로그램을 닫고 다시 시도하세요. 작업 관리자(Ctrl+Shift+Esc)에서 Hwp.exe 프로세스가 남아있으면 종료 후 재시도하세요.
|
|
289
|
+
|
|
290
|
+
### 환경 자동 진단
|
|
291
|
+
|
|
292
|
+
Claude에게 요청하세요:
|
|
158
293
|
|
|
159
294
|
```
|
|
160
|
-
"
|
|
295
|
+
"hwp_check_setup 실행해줘"
|
|
161
296
|
```
|
|
162
|
-
|
|
297
|
+
|
|
298
|
+
Python 경로, pyhwpx 설치 여부, 한글 프로그램 설치 및 실행 상태를 자동으로 확인합니다.
|
|
163
299
|
|
|
164
300
|
---
|
|
165
301
|
|
|
166
302
|
## 기능 목록 (85개+)
|
|
167
303
|
|
|
168
|
-
###
|
|
304
|
+
### 환경/문서 관리 (6개)
|
|
169
305
|
|
|
170
306
|
| 도구 | 설명 |
|
|
171
307
|
|------|------|
|
|
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 내보내기 |
|
|
308
|
+
| hwp_check_setup | Python/pyhwpx/한글 설치 상태 자동 진단 |
|
|
309
|
+
| hwp_list_files | 디렉토리 내 HWP/HWPX 파일 목록 |
|
|
310
|
+
| hwp_open_document | HWP 문서 열기 (자동 백업) |
|
|
311
|
+
| hwp_close_document | 문서 닫기 |
|
|
312
|
+
| hwp_save_document | 문서 저장 (HWP/HWPX/PDF/DOCX) |
|
|
313
|
+
| hwp_export_pdf | PDF 내보내기 |
|
|
183
314
|
|
|
184
315
|
### 문서 분석 (16개)
|
|
185
316
|
|
|
186
317
|
| 도구 | 설명 |
|
|
187
318
|
|------|------|
|
|
188
|
-
|
|
|
189
|
-
|
|
|
190
|
-
|
|
|
191
|
-
|
|
|
192
|
-
|
|
|
193
|
-
|
|
|
194
|
-
|
|
|
195
|
-
|
|
|
196
|
-
|
|
|
197
|
-
|
|
|
198
|
-
|
|
|
199
|
-
|
|
|
200
|
-
|
|
|
201
|
-
|
|
|
202
|
-
|
|
|
203
|
-
|
|
|
319
|
+
| hwp_analyze_document | 전체 구조 분석 (표, 필드, 텍스트) |
|
|
320
|
+
| hwp_get_document_text | 문서 전문 텍스트 추출 |
|
|
321
|
+
| hwp_get_document_info | 페이지수, 파일 정보 등 메타데이터 |
|
|
322
|
+
| hwp_get_tables | 표 데이터 조회 |
|
|
323
|
+
| hwp_map_table_cells | 표 셀 탭 인덱스 매핑 (병합 셀 대응) |
|
|
324
|
+
| hwp_get_cell_format | 특정 셀의 서식 정보 |
|
|
325
|
+
| hwp_get_table_format_summary | 표 전체 서식 요약 |
|
|
326
|
+
| hwp_get_fields | 양식 필드 목록 |
|
|
327
|
+
| hwp_get_as_markdown | 문서를 마크다운으로 변환 |
|
|
328
|
+
| hwp_get_page_text | 특정 페이지 텍스트 추출 |
|
|
329
|
+
| hwp_text_search | 텍스트 검색 |
|
|
330
|
+
| hwp_form_detect | 양식 빈칸/체크박스 자동 감지 |
|
|
331
|
+
| hwp_extract_style_profile | 양식 서식 프로파일 추출 |
|
|
332
|
+
| hwp_image_extract | 문서 내 이미지 추출 |
|
|
333
|
+
| hwp_document_split | 페이지별 문서 분할 |
|
|
334
|
+
| hwp_read_reference | 참고자료 읽기 (Excel/CSV/TXT/JSON) |
|
|
204
335
|
|
|
205
336
|
### 텍스트 편집 (18개)
|
|
206
337
|
|
|
207
338
|
| 도구 | 설명 |
|
|
208
339
|
|------|------|
|
|
209
|
-
|
|
|
210
|
-
|
|
|
211
|
-
|
|
|
212
|
-
|
|
|
213
|
-
|
|
|
214
|
-
|
|
|
215
|
-
|
|
|
216
|
-
|
|
|
217
|
-
|
|
|
218
|
-
|
|
|
219
|
-
|
|
|
220
|
-
|
|
|
221
|
-
|
|
|
222
|
-
|
|
|
223
|
-
|
|
|
224
|
-
|
|
|
225
|
-
|
|
|
226
|
-
|
|
|
340
|
+
| hwp_insert_text | 텍스트 삽입 (색상/볼드/서식) |
|
|
341
|
+
| hwp_insert_markdown | 마크다운을 HWP 서식으로 변환 삽입 |
|
|
342
|
+
| hwp_insert_heading | 제목 삽입 (H1~H6 + 자동 순번) |
|
|
343
|
+
| hwp_find_replace | 찾기/바꾸기 |
|
|
344
|
+
| hwp_find_replace_multi | 다건 찾기/바꾸기 |
|
|
345
|
+
| hwp_find_replace_nth | N번째 항목만 찾기/바꾸기 |
|
|
346
|
+
| hwp_find_and_append | 특정 텍스트 뒤에 내용 추가 |
|
|
347
|
+
| hwp_set_paragraph_style | 문단 서식 (정렬, 줄간격, 들여쓰기) |
|
|
348
|
+
| hwp_indent | 들여쓰기 |
|
|
349
|
+
| hwp_outdent | 내어쓰기 |
|
|
350
|
+
| hwp_insert_page_break | 페이지 나누기 |
|
|
351
|
+
| hwp_insert_page_num | 쪽 번호 삽입 |
|
|
352
|
+
| hwp_insert_date_code | 날짜 자동 삽입 |
|
|
353
|
+
| hwp_insert_footnote | 각주 삽입 |
|
|
354
|
+
| hwp_insert_endnote | 미주 삽입 |
|
|
355
|
+
| hwp_insert_hyperlink | 하이퍼링크 삽입 |
|
|
356
|
+
| hwp_insert_auto_num | 자동 번호매기기 |
|
|
357
|
+
| hwp_insert_memo | 메모 삽입 |
|
|
227
358
|
|
|
228
359
|
### 표 편집 (18개)
|
|
229
360
|
|
|
230
361
|
| 도구 | 설명 |
|
|
231
362
|
|------|------|
|
|
232
|
-
|
|
|
233
|
-
|
|
|
234
|
-
|
|
|
235
|
-
|
|
|
236
|
-
|
|
|
237
|
-
|
|
|
238
|
-
|
|
|
239
|
-
|
|
|
240
|
-
|
|
|
241
|
-
|
|
|
242
|
-
|
|
|
243
|
-
|
|
|
244
|
-
|
|
|
245
|
-
|
|
|
246
|
-
|
|
|
247
|
-
|
|
|
248
|
-
|
|
|
249
|
-
|
|
|
363
|
+
| hwp_fill_table_cells | 표 셀 채우기 (탭/라벨/좌표) |
|
|
364
|
+
| hwp_fill_fields | 양식 필드 채우기 |
|
|
365
|
+
| hwp_table_create_from_data | 2D 배열로 표 생성 |
|
|
366
|
+
| hwp_table_insert_from_csv | CSV/Excel에서 표 생성 |
|
|
367
|
+
| hwp_table_add_row | 행 추가 |
|
|
368
|
+
| hwp_table_add_column | 열 추가 |
|
|
369
|
+
| hwp_table_delete_row | 행 삭제 |
|
|
370
|
+
| hwp_table_delete_column | 열 삭제 |
|
|
371
|
+
| hwp_table_merge_cells | 셀 병합 |
|
|
372
|
+
| hwp_table_split_cell | 셀 분할 |
|
|
373
|
+
| hwp_table_distribute_width | 셀 너비 균등 분배 |
|
|
374
|
+
| hwp_table_swap_type | 행/열 교환 |
|
|
375
|
+
| hwp_table_formula_sum | 합계 수식 |
|
|
376
|
+
| hwp_table_formula_avg | 평균 수식 |
|
|
377
|
+
| hwp_table_to_csv | 표를 CSV로 내보내기 |
|
|
378
|
+
| hwp_table_to_json | 표를 JSON으로 내보내기 |
|
|
379
|
+
| hwp_set_cell_color | 셀 배경색 설정 |
|
|
380
|
+
| hwp_set_table_border | 표 테두리 스타일 설정 |
|
|
250
381
|
|
|
251
382
|
### 이미지/레이아웃 (5개)
|
|
252
383
|
|
|
253
384
|
| 도구 | 설명 |
|
|
254
385
|
|------|------|
|
|
255
|
-
|
|
|
256
|
-
|
|
|
257
|
-
|
|
|
258
|
-
|
|
|
259
|
-
|
|
|
386
|
+
| hwp_insert_picture | 이미지 삽입 |
|
|
387
|
+
| hwp_set_background_picture | 배경 이미지 설정 |
|
|
388
|
+
| hwp_insert_line | 선(줄) 삽입 |
|
|
389
|
+
| hwp_break_section | 섹션 나누기 |
|
|
390
|
+
| hwp_break_column | 다단 나누기 |
|
|
260
391
|
|
|
261
|
-
### 스마트/복합 도구 (
|
|
392
|
+
### 스마트/복합 도구 (16개)
|
|
262
393
|
|
|
263
394
|
| 도구 | 설명 |
|
|
264
395
|
|------|------|
|
|
265
|
-
|
|
|
266
|
-
|
|
|
267
|
-
|
|
|
268
|
-
|
|
|
269
|
-
|
|
|
270
|
-
|
|
|
271
|
-
|
|
|
272
|
-
|
|
|
273
|
-
|
|
|
274
|
-
|
|
|
275
|
-
|
|
|
276
|
-
|
|
|
277
|
-
|
|
|
278
|
-
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
| 도구 | 설명 |
|
|
283
|
-
|------|------|
|
|
284
|
-
| `hwp_toggle_checkbox` | 체크박스 전환 (□→■) |
|
|
285
|
-
| `hwp_inspect_com_object` | [개발용] COM 객체 속성 조회 |
|
|
396
|
+
| hwp_smart_analyze | AI용 심층 분석 (문서 유형 추론) |
|
|
397
|
+
| hwp_smart_fill | 서식 감지 후 보존하며 채우기 |
|
|
398
|
+
| hwp_auto_fill_from_reference | Excel에서 자동 매핑 후 채우기 |
|
|
399
|
+
| hwp_auto_map_reference | 참고자료 헤더와 표 라벨 자동 매핑 |
|
|
400
|
+
| hwp_generate_multi_documents | 다건 문서 일괄 생성 |
|
|
401
|
+
| hwp_generate_toc | 목차 자동 생성 |
|
|
402
|
+
| hwp_create_gantt_chart | 간트차트 추진일정 표 생성 |
|
|
403
|
+
| hwp_document_merge | 여러 문서 병합 |
|
|
404
|
+
| hwp_document_summary | 문서 요약 정보 |
|
|
405
|
+
| hwp_privacy_scan | 개인정보 자동 감지 |
|
|
406
|
+
| hwp_batch_convert | HWP 일괄 변환 |
|
|
407
|
+
| hwp_compare_documents | 두 문서 비교 |
|
|
408
|
+
| hwp_word_count | 글자수/단어수/페이지수 |
|
|
409
|
+
| hwp_delete_guide_text | 작성요령 자동 삭제 |
|
|
410
|
+
| hwp_toggle_checkbox | 체크박스 전환 |
|
|
411
|
+
| hwp_inspect_com_object | [개발용] COM 객체 속성 조회 |
|
|
286
412
|
|
|
287
413
|
### HWPX 도구 (4개, 한글 프로그램 없이 동작)
|
|
288
414
|
|
|
289
415
|
| 도구 | 설명 |
|
|
290
416
|
|------|------|
|
|
291
|
-
|
|
|
292
|
-
|
|
|
293
|
-
|
|
|
294
|
-
|
|
|
417
|
+
| hwp_template_list | 문서 템플릿 목록 (22종) |
|
|
418
|
+
| hwp_document_create | 빈 HWPX 문서 생성 |
|
|
419
|
+
| hwp_template_generate | 템플릿 기반 문서 생성 |
|
|
420
|
+
| hwp_xml_edit_text | HWPX XML 직접 텍스트 편집 |
|
|
295
421
|
|
|
296
422
|
### 내보내기 (2개)
|
|
297
423
|
|
|
298
424
|
| 도구 | 설명 |
|
|
299
425
|
|------|------|
|
|
300
|
-
|
|
|
301
|
-
|
|
|
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 직접 편집 (한글 프로그램 없이)
|
|
426
|
+
| hwp_export_docx | DOCX(Word) 내보내기 |
|
|
427
|
+
| hwp_export_html | HTML 내보내기 |
|
|
328
428
|
|
|
329
429
|
---
|
|
330
430
|
|
|
331
431
|
## Toolset 모드
|
|
332
432
|
|
|
333
|
-
토큰
|
|
433
|
+
토큰 절약이 필요하면 minimal 모드를 사용하세요 (15개 핵심 도구만 로드):
|
|
334
434
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
435
|
+
```json
|
|
436
|
+
{
|
|
437
|
+
"mcpServers": {
|
|
438
|
+
"claude-code-hwp-mcp": {
|
|
439
|
+
"command": "hwp-mcp",
|
|
440
|
+
"args": ["--toolset=minimal"]
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
342
444
|
```
|
|
343
445
|
|
|
344
446
|
---
|
|
345
447
|
|
|
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
|
-
### 자동 진단
|
|
448
|
+
## 아키텍처
|
|
377
449
|
|
|
378
|
-
Claude에게 요청하세요:
|
|
379
450
|
```
|
|
380
|
-
|
|
451
|
+
Claude Code / Claude Desktop
|
|
452
|
+
| MCP Protocol (stdio)
|
|
453
|
+
MCP Server (Node.js/TypeScript)
|
|
454
|
+
| child_process (JSON stdin/stdout)
|
|
455
|
+
Python Bridge (hwp_service.py + pyhwpx)
|
|
456
|
+
| COM API
|
|
457
|
+
한글(HWP) 프로그램
|
|
381
458
|
```
|
|
382
|
-
→ Python, pyhwpx, 한글 설치 상태를 자동으로 확인하고 안내합니다.
|
|
383
459
|
|
|
384
460
|
---
|
|
385
461
|
|
|
386
462
|
## 지원 한글 버전
|
|
387
463
|
|
|
388
|
-
|
|
389
|
-
|-----------|------|
|
|
390
|
-
| 한글 2014 | ✅ |
|
|
391
|
-
| 한글 2018 | ✅ |
|
|
392
|
-
| 한글 2020 | ✅ |
|
|
393
|
-
| 한글 2022 | ✅ |
|
|
394
|
-
| 한글 2024 | ✅ |
|
|
464
|
+
한글 2014, 2018, 2020, 2022, 2024 모두 지원합니다.
|
|
395
465
|
|
|
396
466
|
---
|
|
397
467
|
|
|
@@ -399,8 +469,6 @@ Claude에게 요청하세요:
|
|
|
399
469
|
|
|
400
470
|
MIT License
|
|
401
471
|
|
|
402
|
-
---
|
|
403
|
-
|
|
404
472
|
## 관련 링크
|
|
405
473
|
|
|
406
474
|
- [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.2',
|
|
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.2",
|
|
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
|