hwpx-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HWPX_TRACK_AUTHOR | No | 변경 추적 작성자 (Track-changes author). Default: `Claude` | Claude |
| HWPX_DEFAULT_PROFILE | No | 새 문서의 한글 버전 프로필 (Hangul version profile for new documents). Default: 들어 있는 기본 프로필 (the bundled default profile) | |
| HWPX_TABLE_PRESET_DIR | No | 표 마당(.tbl) 폴더 (Table preset (.tbl) folder). Default: 설치된 한글의 폴더 (the installed Hangul folder) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| documentA | 문서 열기·새로 만들기·저장·닫기·정보, 여러 편집을 한 트랜잭션으로 묶기(batch). action: new(target_version?); open(path); save(force?); save_as(path, overwrite?); close(discard?); revert(); list(); batch(calls); info(); meta(set?) |
| readB | 문서 읽기: 개요·본문·노드 속성·서식·찾기. action: outline(range?, depth?, offset?, limit?); text(range?, offset?, limit?); node(target); format(range); find(query, regex?, case?, whole_word?, range?, include_deleted?, limit?) |
| textB | 글 넣기·지우기·바꾸기·모두 바꾸기·복사·이동·자동 입력 코드. action: insert(at, text, style?, char?); delete(range); replace(range, text); replace_all(find, replace, regex?, case?, range?); copy(range, at, src?); move(range, at); insert_code(at, kind, format?, side_char?) |
| char_formatB | 글자 모양(글꼴·크기·색·진하게·밑줄 …). action: set(range, props); highlight(range, color?); reset(range); copy(from, to) |
| para_formatA | 문단 모양(정렬·여백·줄 간격·탭·테두리 …). action: set(range, props); reset(range); copy(from, to) |
| styleB | 스타일 정의·적용. action: list(); define(name, kind, eng_name?, base?, next?, char?, para?, numbering?); update(name, eng_name?, kind?, next?, char?, para?); apply(range, name); delete(name, replace_with?) |
| numberingC | 문단 번호·글머리표·개요 번호. action: define(kind, levels?, bullet?); apply(range, kind, def?, level?); level(range, set?, delta?); restart(at, start); remove(range); update(def, levels?, bullet?) |
| pageC | 쪽: 용지·여백·다단·쪽 번호·머리말/꼬리말·나누기·테두리·바탕쪽. action: setup(section, paper?, orientation?, margin?, gutter_type?); columns(at, count, type?, direction?, gap?, widths?, separator?); page_number(section, position, format?, side_char?, start?); header(section, pages?, op?); footer(section, pages?, op?); break(at, kind); border(section, pages?, border?, offset?, fill?, base?, include_header?, include_footer?); hide(at, items); section(section, start_page?, start_figure?, start_table?, start_equation?, hide_first?, text_direction?, line_grid?, char_grid?, line_numbers?, starts_on?, space_columns?, tab_stop?); master(section, pages?, op?) |
| tableC | 표: 만들기·셀·병합/나누기·행/열·서식·계산식·정렬. action: create(at, rows, cols, data?, col_widths?, row_heights?, own_paragraph?, frame?, margin?, caption?, header_rows?, style?); cell(cells, text?, data?); insert_rows(target, at_row, count?, where?); insert_cols(target, at_col, count?, where?); delete_rows(target, indices); delete_cols(target, indices); delete(target); merge(cells?, target?); split(target, rows?, cols?, at_row?); size(target?, cells?, col_widths?, row_heights?, width?, equalize?); cell_format(cells, border?, fill?, valign?, padding?, text_direction?, single_line?, protect?, editable_in_form?, name?, header?, fill_image?, fill_image_mode?); update(target, frame?, margin?, caption?, page_break?, repeat_header?, default_padding?, lock_size?); formula(target, expr, format?); recalc(target?); sort(target, keys, rows?, header_rows?); to_text(target, separator?); from_text(range, separator?, header_rows?); preset(target, name, apply_to?) |
| equationB | 수식(한글 수식 스크립트 또는 LaTeX). action: insert(at, script?, latex?, display?, number?, size?, color?, font?, baseline?, frame?, margin?, caption?); update(target, script?, latex?, size?, color?, font?, baseline?, frame?, margin?, caption?); delete(target); convert_latex(latex) |
| imageC | 그림. action: insert(at, path?, data?, frame?, margin?, inner_margin?, caption?, crop?, effect?, brightness?, contrast?, alpha?, flip?, rotation?, line?, effects?); update(target, reset_size?, frame?, margin?, inner_margin?, caption?, crop?, effect?, brightness?, contrast?, alpha?, flip?, rotation?, line?, effects?); replace(target, path?, data?); delete(target); extract(target, out_path) |
| shapeB | 도형·글상자·묶기. action: insert(at, kind, points?, text?, frame?, margin?, caption?, line?, fill?, shadow?, flip?, rotation?, round?, arc_type?, text_box?, fill_image?, fill_image_mode?); update(target, points?, frame?, margin?, caption?, line?, fill?, shadow?, flip?, rotation?, round?, arc_type?, text_box?, fill_image?, fill_image_mode?); delete(target); group(targets); ungroup(target) |
| chartC | 차트. action: insert(at, type, data, style?, stacked?, percent?, three_d?, frame?, margin?, caption?); update(target, type?, data?, style?, stacked?, percent?, three_d?, frame?, margin?, caption?); delete(target) |
| noteB | 각주·미주. action: insert(at, kind, text); update(target, text); delete(target); settings(section, kind, format?, start?, restart?, placement?, beneath_text?, separator?, separator_length?, spacing?, prefix?, suffix?, superscript?) |
| linkC | 하이퍼링크·책갈피·상호 참조. action: hyperlink(range, url?, bookmark?, op?); bookmark(name, at?, range?, op?); list(); cross_ref(at, show, target?, bookmark?, hyperlink?) |
| tocC | 차례. action: insert(at, source?, styles?, levels?, include?, page_numbers?, leader?, hyperlink?); rebuild(target); delete(target) |
| fieldC | 누름틀·셀 필드(양식 채우기). action: list(); get(name); set(value, name?, target?); set_many(values); insert(at, name, guide?, memo?, editable_in_form?); remove(name, keep_text?) |
| memoC | 메모. action: add(range, text, author?); update(target, text); delete(target); list() |
| trackB | 변경 추적. action: enable(on, author?); list(range?); accept(ids?, all?); reject(ids?, all?) |
| xmlB | 범용 XML 통로(의미 도구가 없는 속성). action: parts(); get(part, xpath, limit?); patch(part, xpath, op, xml?, name?, value?) |
| renderC | 한글 엔진: PDF·쪽 그림·검수·배치 질의·보기 창. action: pdf(out_path, pages?); page_image(page, dpi?); check(timeout?); layout(targets?); update_fields(); view(on); normalize(out_path) |
| convertC | .hwp → .hwpx 변환(한글 엔진). action: hwp_to_hwpx(path, out_path?, overwrite?) |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 22 tools
Each tool maps to a distinct resource or subsystem (table, image, shape, style, field, memo, etc.), and read vs text split extraction from mutation clearly. The catch-all xml tool overlaps conceptually with every semantic tool, creating some boundary ambiguity, but overall the roles are distinguishable.
Every tool name is a consistent single-word lowercase noun (page, text, table, image, style, field, memo), with actions expressed uniformly as parameters. The pattern is entirely predictable throughout.
22 tools is on the heavier side, but the domain (a full word-processor document model) genuinely spans text, formatting, tables, embedded objects, fields, and rendering. Each tool earns its place as a subsystem, though a few could conceivably be consolidated.
Coverage is comprehensive: document lifecycle, text editing, char/para/style formatting, tables, equations, images, shapes, charts, notes, links, TOC, fields, memos, page setup, track changes, render/convert. No obvious lifecycle gaps (create/read/update/delete exist across resources).