hwp-form-automation-mcp

hwp-form-automation-mcp

Automates Hancom Office HWP forms via COM, converting, extracting, field-filling, and exporting to PDF, preserving original formatting for Korean government and school documents.

Category
访问服务器

README

hwp-form-automation-mcp

한컴오피스 한/글 데스크톱을 COM으로 자동화해, 정부·학교 HWP/HWPX 양식의 변환 → 추출 → 필드화 → 값 채우기 → PDF 출력 전 과정을 8개 도구로 노출하는 로컬 MCP 서버.

English: A local MCP server that automates the Hancom Office (HWP) word processor via COM to fill Korean government/school forms end-to-end: convert .hwp.hwpx, extract text/fields, turn {{placeholder}} marks into real form fields, fill them with data, and export the final PDF — with original formatting perfectly preserved. Requires Windows + a licensed Hancom Office installation. Documentation below is in Korean, as is its audience.

왜 이 도구인가

정부·학교의 HWP 양식은 서식이 복잡해서, 파서(파일을 직접 읽는 라이브러리)로 채우면 서식이 깨지기 일쑤다. 이 서버는 진짜 한/글 엔진으로 문서를 열고 채우므로 원본 서식이 완벽하게 보존되고, 최종 제출용 PDF까지 한 흐름으로 나온다. LLM(Claude)이 양식의 의미를 분석해 {{필드명}} 자리표시자를 삽입하면, 엔진이 기계적 변환·채움·출력을 담당하는 분업 구조다.

요구사항

  • Windows 10+ / 로그인된 인터랙티브 데스크톱 세션 (한/글은 진짜 headless가 없음)
  • 한컴오피스(한/글) 설치 + 활성 라이선스 — 검증 환경: 한컴오피스 2024
  • Python 3.10+ — 검증: 3.12
  • Claude Code 또는 임의의 MCP 클라이언트

설치

git clone https://github.com/Feynman520/d01-p01-hwp-form-automation-mcp.git
cd d01-p01-hwp-form-automation-mcp
py -3.12 -m venv .venv          # 또는: python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt

Claude Code 등록

클론한 폴더 안에서 아래 한 줄 실행 (절대경로가 박히므로 이후 어디서든 동작):

claude mcp add hwp-automation --scope user -- "$PWD\.venv\Scripts\python.exe" "$PWD\server.py"

--scope user는 모든 프로젝트에서 사용 가능. 한 프로젝트에서만 쓰려면 --scope project.

동작 검증 (권장 순서)

$py = ".\.venv\Scripts\python.exe"
$env:PYTHONUTF8 = "1"
& $py tests\smoke_com.py      # COM·필드·HWPX/PDF·보안팝업차단 1차 검증
& $py tests\e2e_engine.py     # ①~⑥ 전체 파이프라인 검증
& $py tests\server_tools.py   # MCP 8개 도구 등록 검증(한/글 미기동)
& $py tests\mcp_client.py     # 실제 stdio 전송으로 서버 통합 검증

도구 (6 + 진단 2)

# 도구 입력 → 출력
convert_hwp_to_hwpx src_path(.hwp), out_path(.hwpx){out_path}
extract_hwpx path(.hwpx){text, fields, field_names, tables, table_count}
insert_fields_by_bracket path(.hwpx, {{}}자리표시자), out_path{out_path, field_names}
fill_fields path, data{필드명:값}, out_path{out_path, filled, unknown_fields, available_fields}
save_hwpx src_path, out_path(.hwpx){out_path} (정규화/확정)
convert_hwpx_to_pdf src_path(.hwpx), out_path(.pdf){out_path}
hwp_health {alive, hangul_version}
restart_session {alive} (COM 오류 복구)

파이프라인

정부 HWP ─①→ HWPX ─②→ (LLM 분석: 칸에 {{필드명}} 자리표시자 삽입)
        ─③→ 필드화 템플릿(.hwpx)  ── 양식당 1회 제작·재사용
        ─④→ 값 채움 ─⑤→ 완성본(.hwpx) ─⑥→ 제출용 PDF
  • ①~③: 양식 종류당 1회(템플릿 자산). ④~⑥: 신청 건마다 반복.
  • 역할 분담: 기계적 변환·추출·저장 = 엔진(pyhwpx), 의미 분석·필드 매핑 = LLM.

아키텍처 핵심

  • 단일 STA 워커 스레드(engine/session.py): win32com COM은 STA에 묶이고 FastMCP는 async 스레드를 옮겨다니므로, 모든 한/글 호출을 전용 스레드 1개에 직렬화한다.
  • 세션 지연 초기화: 첫 도구 호출 시 한/글 기동, 서버 종료 시 닫음. 1개 인스턴스 재사용.
  • 보안 팝업 차단: ensure_security_module()이 번들 FilePathCheckerModule.dll을 레지스트리(HKCU\Software\HNC\HwpAutomation\Modules)에 선등록해, 자동화 시 뜨는 파일 접근 승인 팝업을 차단한다. (pyhwpx 1.7.2의 register_regedit 버그 우회 구현.)

⚠️ security/FilePathCheckerModule.dll한컴이 제작·배포하는 보안모듈입니다 (pyhwpx PyPI 패키지에도 동일 파일이 포함되어 배포됨). 설치 편의를 위해 함께 담았으며 본 리포의 MIT 라이선스 대상이 아닙니다 — 해당 파일의 권리는 한컴에 있습니다.

한계

  • 무인/서비스 세션 부적합(데스크톱 세션 필요). 한/글 라이선스 만료 시 자동화도 중단.
  • 동일 이름 필드는 fill_fields가 모두 같은 값으로 채움 → 값이 달라야 하면 ③ 단계에서 유일한 이름을 부여할 것.
  • 표 추출(tables)은 best-effort. 복잡한 양식은 extracttext/fields를 우선 활용.

라이선스

MIT (단, 위 한컴 보안모듈 DLL 제외)

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选