smithery verified Safe content atomic container

ν•œκΈ€ mcp hwpx MCP Server

<p align="center"> <h1 align="center">πŸ“„ hwpx-mcp-server</h1> <p align="center"> <strong>ν•œκΈ€(HWPX) λ¬Έμ„œλ₯Ό AI둜 μžλ™ν™”ν•˜λŠ” MCP μ„œλ²„</strong> </p> <p align="center"> ν•œκΈ€ μ›Œλ“œν”„λ‘œμ„Έμ„œ 없이 Β· 순수 파이썬 Β· 크둜슀 ν”Œλž«νΌ </p> <p align="center"> <a href="https://pypi.org/project/hwpx-mcp-server/"><img src="https://img.shields.io/pypi/v/hwpx-mcp-server?style=flat-square&color=blue" alt="PyPI"></a> <a href="https://pypi.org/project/hwpx-mcp-server/"><img src="https://img.shields.io/pypi/pyversions/hwpx-mcp-server?style=flat-square" alt="Python"></a> <a href="https://github.com/airmang/hwpx-mcp-server/blob/main/LICENSE"><img src="https://img.shields.io/github/license/airmang/hwpx-mcp-server?style=flat-square" alt="License"></a> <a href="https://github.com/airmang/hwpx-mcp-server/actions"><img src="https://img.shields.io/github/actions/workflow/status/airmang/hwpx-mcp-server/test.yml?style=flat-square&label=tests" alt="Tests"></a> </p> </p> --- **hwpx-mcp-server**λŠ” [Model Context Protocol(MCP)](https://modelcontextprotocol.io) ν‘œμ€€μ„ λ”°λ₯΄λŠ” μ„œλ²„λ‘œ, [python-hwpx](https://github.com/airmang/python-hwpx) κΈ°λ°˜μ—μ„œ HWPX λ¬Έμ„œμ˜ μ—΄λžŒ Β· 검색 Β· νŽΈμ§‘ Β· μ €μž₯을 AI ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 직접 μˆ˜ν–‰ν•  수 있게 ν•©λ‹ˆλ‹€. > **Note** β€” 이 μ„œλ²„λŠ” Open XML 기반 `.hwpx` 포맷을 μ§€μ›ν•©λ‹ˆλ‹€. λ ˆκ±°μ‹œ λ°”μ΄λ„ˆλ¦¬ `.hwp` 포맷은 직접 νŽΈμ§‘ λŒ€μƒμ΄ μ•„λ‹™λ‹ˆλ‹€. <br> ## Why? κ΅­λ‚΄ κ³΅κ³΅κΈ°κ΄€Β·ν•™κ΅Β·κΈ°μ—…μ—μ„œλŠ” ν•œκΈ€ λ¬Έμ„œ 기반 업무가 맀우 λ§Žμ§€λ§Œ, μžλ™ν™”λŠ” μ˜€λž«λ™μ•ˆ OS/ν”„λ‘œκ·Έλž¨ μ˜μ‘΄μ„±μ΄ μ»ΈμŠ΅λ‹ˆλ‹€. **hwpx-mcp-server**λŠ” 이 μ œμ•½μ„ μ€„μ΄λŠ” 데 μ΄ˆμ μ„ 맞μΆ₯λ‹ˆλ‹€. - βœ… **OS 무관** β€” Windows, macOS, Linuxμ—μ„œ λ™μž‘ - βœ… **ν•œκΈ€ μ›Œλ“œν”„λ‘œμ„Έμ„œ λΆˆν•„μš”** β€” 순수 파이썬 기반 처리 - βœ… **AI λ„€μ΄ν‹°λΈŒ** β€” Claude Desktop, VS Code, Gemini CLI λ“± MCP ν΄λΌμ΄μ–ΈνŠΈμ™€ 직접 μ—°κ²° - βœ… **Stateless κΈ°λ³Έ 섀계** β€” 도ꡬ ν˜ΈμΆœλ§ˆλ‹€ `filename`을 λͺ…μ‹œν•΄ μΌκ΄€μ μœΌλ‘œ μ‹€ν–‰ <br> ## Use Cases - μ‹€μ „ μ‚¬μš© 사둀 9개 보기: [`docs/use-cases.md`](docs/use-cases.md) - μ’…ν•© ν…ŒμŠ€νŠΈ 리포트: [`tests/hwpx_mcp_report_updated.md`](tests/hwpx_mcp_report_updated.md) <br> ## Quick Start ### 1. μ„€μΉ˜ & μ‹€ν–‰ [uv](https://docs.astral.sh/uv/getting-started/installation/) κΈ°μ€€: ```bash uvx hwpx-mcp-server ``` λ˜λŠ” pip μ„€μΉ˜: ```bash pip install hwpx-mcp-server hwpx-mcp-server ``` μš”κ΅¬μ‚¬ν•­: - `Python >= 3.10` - `python-hwpx >= 1.9` ### 2. MCP ν΄λΌμ΄μ–ΈνŠΈ μ„€μ • <details> <summary><b>Claude Desktop</b></summary> `claude_desktop_config.json`: ```json { "mcpServers": { "hwpx": { "command": "uvx", "args": ["hwpx-mcp-server"] } } } ``` </details> <details> <summary><b>Gemini CLI</b></summary> `~/.gemini/settings.json`: ```json { "mcpServers": { "hwpx": { "command": "uvx", "args": ["hwpx-mcp-server"] } } } ``` </details> <details> <summary><b>VS Code (Copilot Chat)</b></summary> `.vscode/mcp.json`: ```json { "servers": { "hwpx": { "command": "uvx", "args": ["hwpx-mcp-server"] } } } ``` </details> <details> <summary><b>Cursor / Windsurf</b></summary> 각 에디터 MCP μ„€μ • νŒŒμΌμ— λ™μΌν•œ 블둝을 μΆ”κ°€: ```json { "mcpServers": { "hwpx": { "command": "uvx", "args": ["hwpx-mcp-server"] } } } ``` </details> ### 3. 전솑 λͺ¨λ“œ 선택 (Stdio + Streamable HTTP) κΈ°λ³Έ `stdio` μ‚¬μš©μ€ κΈ°μ‘΄κ³Ό λ™μΌν•©λ‹ˆλ‹€. ```bash hwpx-mcp-server ``` λ™μΌν•œ MCP 도ꡬ μ„ΈνŠΈλ₯Ό Streamable HTTP둜 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ```bash hwpx-mcp-server --transport streamable-http --host 127.0.0.1 --port 8000 ``` ν™˜κ²½ λ³€μˆ˜λ‘œλ„ λ™μΌν•˜κ²Œ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€. - `HWPX_MCP_TRANSPORT` (`stdio` λ˜λŠ” `streamable-http`) - `HWPX_MCP_HOST` (κΈ°λ³Έκ°’: `127.0.0.1`) - `HWPX_MCP_PORT` (κΈ°λ³Έκ°’: `8000`) > μ°Έκ³ : HTTP 인증은 ν˜„μž¬ 개발 편의 μ€‘μ‹¬μœΌλ‘œ λ‹¨μˆœν•˜κ²Œ μœ μ§€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œλ•μ…˜μš© 인증 훅은 μ„œλ²„ μ§„μž…μ μ— TODO둜 λ‚¨κ²¨λ‘μ—ˆμŠ΅λ‹ˆλ‹€. <br> ## Features κΈ°λ³Έ λͺ¨λ“œμ—μ„œ 30개 도ꡬ, κ³ κΈ‰ λͺ¨λ“œ(`HWPX_MCP_ADVANCED=1`)μ—μ„œ μΆ”κ°€ 10개 도ꡬ가 ν™œμ„±ν™”λ©λ‹ˆλ‹€. ### πŸ“– 읽기 & 탐색 | 도ꡬ | μ„€λͺ… | |---|---| | `get_document_info` | λ¬Έμ„œ 메타데이터/μ„Ήμ…˜/문단/ν‘œ 개수 쑰회 | | `get_document_text` | λ¬Έμ„œ 전체 ν…μŠ€νŠΈ μΆ”μΆœ (`max_chars` 지원) | | `get_document_outline` | 제λͺ©/κ°œμš” ꡬ쑰 μΆ”μΆœ | | `get_paragraph_text` | νŠΉμ • 문단 ν…μŠ€νŠΈ 쑰회 | | `get_paragraphs_text` | 문단 λ²”μœ„ 쑰회 | | `list_available_documents` | 폴더 λ‚΄ `.hwpx` 파일 λͺ©λ‘ 쑰회 | ### 🧾 λ³€ν™˜ & μΆ”μΆœ (μž…λ ₯ νŽ˜μ΄λ‘œλ“œ 기반) | 도ꡬ | μ„€λͺ… | |---|---| | `hwpx_to_markdown` | HWPX μž…λ ₯을 Markdown으둜 λ³€ν™˜ | | `hwpx_to_html` | HWPX μž…λ ₯을 HTML둜 λ³€ν™˜ | | `hwpx_extract_json` | HWPX ꡬ쑰λ₯Ό JSON으둜 μΆ”μΆœ | 곡톡 μž…λ ₯ κ·œμΉ™: - μž…λ ₯ μ†ŒμŠ€λŠ” `hwpx_base64` λ˜λŠ” `url` 쀑 μ •ν™•νžˆ ν•˜λ‚˜λ§Œ ν—ˆμš© - `url`은 `https://...`만 ν—ˆμš© 곡톡 μ˜΅μ…˜: - `output`: `full` λ˜λŠ” `chunks` - `chunk_strategy`: `section` λ˜λŠ” `paragraph` - `max_chars_per_chunk`: 청크당 μ΅œλŒ€ 문자 수(κΈ°λ³Έκ°’: `HWPX_MCP_MAX_CHARS_PER_CHUNK` λ˜λŠ” `8000`) <details> <summary><b>λ³€ν™˜/μΆ”μΆœ 응닡 μ˜ˆμ‹œ</b></summary> #### `hwpx_to_markdown` ```json { "markdown": "# Title\n\nParagraph...", "chunks": ["..."], "meta": { "source_type": "base64", "section_count": 2, "paragraph_count": 10, "table_count": 1, "figure_caption_count": 1 } } ``` #### `hwpx_to_html` ```json { "html": "<!doctype html><html>...</html>", "chunks": ["<section>...</section>"], "meta": { "source_type": "url", "image_policy": "omitted" } } ``` #### `hwpx_extract_json` ```json { "doc": { "title": "Title", "toc": [{ "level": 1, "text": "Title", "paragraph_index": 0 }], "sections": [{ "index": 0, "title": "Title", "paragraphs": [] }], "tables": [], "figures": [] }, "chunks": [{ "chunk_index": 0, "strategy": "section", "section": {} }], "meta": { "source_type": "base64" } } ``` </details> ### πŸ”Ž 검색 & μΉ˜ν™˜ | 도ꡬ | μ„€λͺ… | |---|---| | `find_text` | ν‚€μ›Œλ“œ 검색 + μ»¨ν…μŠ€νŠΈ λ°˜ν™˜ | | `search_and_replace` | 단일 μΉ˜ν™˜ (split-run 보강) | | `batch_replace` | 닀쀑 μΉ˜ν™˜ 일괄 μ‹€ν–‰ | ### ✏️ νŽΈμ§‘ | 도ꡬ | μ„€λͺ… | |---|---| | `add_heading` | 제λͺ©(ν—€λ”©) 문단 μΆ”κ°€ | | `add_paragraph` / `insert_paragraph` / `delete_paragraph` | 문단 μΆ”κ°€/μ‚½μž…/μ‚­μ œ | | `add_page_break` | νŽ˜μ΄μ§€ λ‚˜λˆ„κΈ° μΆ”κ°€ | | `add_memo` / `remove_memo` | λ©”λͺ¨ μΆ”κ°€/제거 | | `copy_document` | λ¬Έμ„œ μ•ˆμ „ 볡사 | ### πŸ“Š ν‘œ | 도ꡬ | μ„€λͺ… | |---|---| | `add_table` / `get_table_text` | ν‘œ 생성/쑰회 | | `set_table_cell_text` | μ…€ ν…μŠ€νŠΈ μˆ˜μ • | | `merge_table_cells` / `split_table_cell` | μ…€ 병합/λΆ„ν•  | | `format_table` | ν‘œ 헀더 λ“± κΈ°λ³Έ μ„œμ‹ 적용 | ### 🎨 μŠ€νƒ€μΌ | 도ꡬ | μ„€λͺ… | |---|---| | `format_text` | ν…μŠ€νŠΈ λ²”μœ„ μ„œμ‹ 적용(κ΅΅κΈ°, κΈ°μšΈμž„, 밑쀄, 색상 λ“±) | | `create_custom_style` | μ»€μŠ€ν…€ μŠ€νƒ€μΌ 생성 | | `list_styles` | λ¬Έμ„œ μŠ€νƒ€μΌ λͺ©λ‘ 쑰회 | ### πŸ”¬ κ³ κΈ‰ (μ˜΅μ…˜) `HWPX_MCP_ADVANCED=1`일 λ•Œ ν™œμ„±ν™”: | 도ꡬ | μ„€λͺ… | |---|---| | `package_parts` | OPC 파트 λͺ©λ‘ 쑰회 | | `package_get_xml` / `package_get_text` | 파트 XML/ν…μŠ€νŠΈ 쑰회 | | `object_find_by_tag` / `object_find_by_attr` | XML μš”μ†Œ 검색 | | `plan_edit` / `preview_edit` / `apply_edit` | νŽΈμ§‘ κ³„νš/미리보기/적용 | | `validate_structure` / `lint_text_conventions` | ꡬ쑰 검증/ν…μŠ€νŠΈ 린트 | <br> ## Configuration | λ³€μˆ˜ | μ„€λͺ… | κΈ°λ³Έκ°’ | |---|---|---| | `HWPX_MCP_MAX_CHARS` | ν…μŠ€νŠΈ λ°˜ν™˜ 도ꡬ κΈ°λ³Έ μ΅œλŒ€ 길이 | `10000` | | `HWPX_MCP_MAX_CHARS_PER_CHUNK` | λ³€ν™˜/μΆ”μΆœ λ„κ΅¬μ˜ 청크 λΆ„ν•  κΈ°λ³Έ 길이 | `8000` | | `HWPX_MCP_AUTOBACKUP` | `1`이면 μ €μž₯ μ „ `.bak` λ°±μ—… 생성 | `1` | | `HWPX_MCP_ADVANCED` | `1`이면 κ³ κΈ‰ 도ꡬ ν™œμ„±ν™” | `0` | | `HWPX_MCP_TRANSPORT` | μ„œλ²„ 전솑 λͺ¨λ“œ (`stdio`, `streamable-http`) | `stdio` | | `HWPX_MCP_HOST` | HTTP 바인딩 호슀트 | `127.0.0.1` | | `HWPX_MCP_PORT` | HTTP 바인딩 포트 | `8000` | | `LOG_LEVEL` | 둜그 레벨 | `INFO` | ν™˜κ²½ λ³€μˆ˜ 포함 MCP μ„€μ • μ˜ˆμ‹œ: ```json { "mcpServers": { "hwpx": { "command": "uvx", "args": ["hwpx-mcp-server"], "env": { "HWPX_MCP_MAX_CHARS": "12000", "HWPX_MCP_MAX_CHARS_PER_CHUNK": "8000", "HWPX_MCP_AUTOBACKUP": "1", "HWPX_MCP_ADVANCED": "0", "HWPX_MCP_TRANSPORT": "stdio", "HWPX_MCP_HOST": "127.0.0.1", "HWPX_MCP_PORT": "8000", "LOG_LEVEL": "INFO" } } } } ``` <br> ## Advanced <details> <summary><b>πŸ“¦ OPC 파트 쑰회</b></summary> κ³ κΈ‰ λͺ¨λ“œμ—μ„œ λ¬Έμ„œ λ‚΄λΆ€ 파트λ₯Ό 직접 μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. - `package_parts` - `package_get_xml` - `package_get_text` </details> <details> <summary><b>🧭 νŽΈμ§‘ νŒŒμ΄ν”„λΌμΈ</b></summary> κ³ κΈ‰ λͺ¨λ“œμ—μ„œ `plan_edit β†’ preview_edit β†’ apply_edit` νλ¦„μœΌλ‘œ λ³€κ²½ κ³„νšμ„ κ²€ν† ν•˜κ³  μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. </details> <details> <summary><b>πŸ§ͺ ꡬ쑰/κ·œμΉ™ 검사</b></summary> κ³ κΈ‰ λͺ¨λ“œμ—μ„œ λ‹€μŒ 검사 도ꡬλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. - `validate_structure` - `lint_text_conventions` </details> <br> ## Testing ```bash # ν…ŒμŠ€νŠΈ μ˜μ‘΄μ„± μ„€μΉ˜ python -m pip install -e ".[test]" # 전체 ν…ŒμŠ€νŠΈ python -m pytest -q ``` 둜컬 κΈ°μ€€(2026-02-22) 전체 ν…ŒμŠ€νŠΈκ°€ ν†΅κ³Όν–ˆμŠ΅λ‹ˆλ‹€. - μ‹€μ „ μ‚¬μš© 사둀: `docs/use-cases.md` - μ’…ν•© 리포트: `tests/hwpx_mcp_report_updated.md` - νšŒκ·€ ν…ŒμŠ€νŠΈ: `tests/test_hwpx_report_regressions.py` <br> ## Architecture ```text hwpx-mcp-server β”œβ”€β”€ src/hwpx_mcp_server/ β”‚ β”œβ”€β”€ server.py # Stateless MCP μ§„μž…μ  β”‚ β”œβ”€β”€ hwpx_ops.py # κ³ κΈ‰/λ‚΄λΆ€ μ—°μ‚° 래퍼 β”‚ β”œβ”€β”€ core/ # 문단/ν‘œ/검색/μ„œμ‹ 핡심 둜직 β”‚ β”œβ”€β”€ tools.py # ν™•μž₯ 도ꡬ μŠ€ν‚€λ§ˆ/μ •μ˜ β”‚ └── schema/ # JSON μŠ€ν‚€λ§ˆ λΉŒλ”/정리기 β”œβ”€β”€ tests/ # λ‹¨μœ„ + E2E + νšŒκ·€ ν…ŒμŠ€νŠΈ └── pyproject.toml ``` <br> ## Comparison | | hwpx-mcp-server | hwp(λ°”μ΄λ„ˆλ¦¬) COM μžλ™ν™” 계열 | |---|---|---| | λŒ€μƒ 포맷 | `.hwpx` (Open XML) | `.hwp` (λ°”μ΄λ„ˆλ¦¬) 쀑심 | | OS | Windows Β· macOS Β· Linux | λŒ€μ²΄λ‘œ Windows 쀑심 | | ν•œκΈ€ ν”„λ‘œκ·Έλž¨ 의쑴 | λΆˆν•„μš” | ν•„μš”ν•œ κ²½μš°κ°€ 많음 | | 연동 방식 | MCP + 파이썬 라이브러리 | λ°μŠ€ν¬ν†± μ•± μžλ™ν™” | <br> ## Contributing κΈ°μ—¬λ₯Ό ν™˜μ˜ν•©λ‹ˆλ‹€. 1. Fork ν›„ 브랜치 생성 2. λ³€κ²½ + ν…ŒμŠ€νŠΈ μΆ”κ°€/μˆ˜μ • 3. `pytest -q` 톡과 확인 ν›„ PR <br> ## License [MIT](LICENSE) Β© κ³ κ·œν˜„ (Kyuhyun Koh) <br> ## Author **κ³ κ·œν˜„** β€” 광ꡐ고등학ꡐ 정보·컴퓨터 ꡐ사 - βœ‰οΈ [kokyuhyun@hotmail.com](mailto:kokyuhyun@hotmail.com) - πŸ™ [@airmang](https://github.com/airmang)

Cognium trust score
94%
Tier
Verified

Composite of vulnerability cleanliness, spec conformance, provenance, stability, and usage signals β€” scanned and weighted by Cognium. Human and agent signals are tracked separately. Last scanned 2026-09-28.

Scan details: Circle-IR · 2026-09-28 · Appeal

View full trust & usage report β†’

Metadata

Version
1.0.0
Skill type
atomic
Execution layer
container
Category
version-control
Source
Smithery
Author type
human
Last scanned
2026-09-28
Updated
2026-09-28
View source Find related skills

Use via MCP

MCP

Resolve ν•œκΈ€ mcp hwpx MCP Server from your agent

Streamable HTTP transport at https://api.skillsregistry.net/mcp. No auth for read tools. Discovery: .well-known/mcp.json.

One command in your shell β€” Claude Code wires it up and verifies the connection. Run /mcp in any session to confirm.

claude mcp add --transport http --scope user skillsregistry https://api.skillsregistry.net/mcp
Swap --scope user for --scope project to commit it to .mcp.json.

Search SkillsRegistry