airmang

๐Ÿ“„ hwpx-mcp-server

Community airmang
Updated

MCP server for AI agents to read, edit, inspect, and validate local HWPX documents.

๐Ÿ“„ hwpx-mcp-server

AI ์—์ด์ „ํŠธ๊ฐ€ HWPX ๋ฌธ์„œ๋ฅผ ๋ฐ”๋กœ ์ฝ๊ณ , ์ฐพ๊ณ , ์ˆ˜์ •ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” MCP ์„œ๋ฒ„

ํ•œ๊ธ€ ์›Œ๋“œํ”„๋กœ์„ธ์„œ ์—†์ด ยท ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ยท ํฌ๋กœ์Šค ํ”Œ๋žซํผ

๐Ÿงฉ HWPX Stack (3์ข…)

๊ณ„์ธต ๋ ˆํฌ ์—ญํ• 
๐Ÿ“ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ python-hwpx ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ HWPX ํŒŒ์‹ฑยทํŽธ์ง‘ยท์ƒ์„ฑ ์ฝ”์–ด
๐Ÿ”Œ MCP ์„œ๋ฒ„ hwpx-mcp-server MCP ํด๋ผ์ด์–ธํŠธ(Claude Desktop, VS Code ๋“ฑ)์—์„œ HWPX ์กฐ์ž‘
๐ŸŽฏ ์—์ด์ „ํŠธ ์Šคํ‚ฌ hwpx-skill ์—์ด์ „ํŠธ๊ฐ€ HWPX๋ฅผ ๋ฐ”๋กœ ์“ฐ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ณต์‹ ์˜จ๋ณด๋”ฉ ์Šคํ‚ฌ

hwpx-mcp-server๋Š” ๋ชจ๋ธ ์ปจํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ(MCP) ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ์„œ๋ฒ„๋กœ, python-hwpx ๊ธฐ๋ฐ˜์—์„œ HWPX ๋ฌธ์„œ์˜ ์—ด๋žŒ ยท ๊ฒ€์ƒ‰ ยท ํŽธ์ง‘ ยท ์ถ”์ถœ์„ AI ํด๋ผ์ด์–ธํŠธ์—์„œ ์ง์ ‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ด ์„œ๋ฒ„๋Š” Open XML ๊ธฐ๋ฐ˜ .hwpx ํฌ๋งท์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ .hwp ํฌ๋งท์€ ์ง์ ‘ ํŽธ์ง‘ ๋Œ€์ƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ด ์„œ๋ฒ„๊ฐ€ ๋ฐ”๋กœ ํ•ด๊ฒฐํ•˜๋Š” ์ผ

  • Claude Desktop, VS Code, Gemini CLI ๊ฐ™์€ MCP ํด๋ผ์ด์–ธํŠธ์—์„œ HWPX๋ฅผ ๋ฐ”๋กœ ์ฝ๊ธฐ
  • ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“  ๋’ค ์•ˆ์ „ํ•˜๊ฒŒ ๊ฒ€์ƒ‰ยท์น˜ํ™˜ยทํ‘œ ํŽธ์ง‘ยท๋ฌธ๋‹จ ์ถ”๊ฐ€ ์ˆ˜ํ–‰
  • ๋ฌธ์„œ ๊ฐœ์š”, ํ‘œ ๋งต, ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ AI๊ฐ€ ์ง์ ‘ ์กฐํšŒํ•˜๊ณ  ํ›„์† ์ž‘์—…์œผ๋กœ ์—ฐ๊ฒฐ
  • ํ•œ๊ธ€ ์›Œ๋“œํ”„๋กœ์„ธ์„œ ์—†์ด ์„œ๋ฒ„ยทCIยท๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๊ฐ™์€ ํ๋ฆ„ ์œ ์ง€
  • ๊ณ ๊ธ‰ ๋ชจ๋“œ์—์„œ ๊ฒ€์ฆ, package inspection, edit planning๊นŒ์ง€ ํ™•์žฅ

Claude Desktop 5๋ถ„ ์—ฐ๊ฒฐ

์•„๋ž˜ ์„ค์ • ํ•˜๋‚˜๋งŒ ๋„ฃ์œผ๋ฉด Claude Desktop์—์„œ hwpx MCP ์„œ๋ฒ„๋ฅผ ๋ฐ”๋กœ ์žก๋Š”๋‹ค.

{
  "mcpServers": {
    "hwpx": {
      "command": "uvx",
      "args": ["hwpx-mcp-server"]
    }
  }
}

Screenshot placeholder: Claude Desktop ์„ค์ • ํ™”๋ฉด์—์„œ hwpx ์„œ๋ฒ„๊ฐ€ ํ™œ์„ฑํ™”๋œ ์žฅ๋ฉด์„ ์—ฌ๊ธฐ์— ๋„ฃ์„ ์˜ˆ์ •.

์™œ ํ•„์š”ํ•œ๊ฐ€?

๊ตญ๋‚ด ๊ณต๊ณต๊ธฐ๊ด€ยทํ•™๊ตยท๊ธฐ์—…์—์„œ๋Š” ํ•œ๊ธ€ ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ์—…๋ฌด๊ฐ€ ๋งŽ์ง€๋งŒ, ์ž๋™ํ™”๋Š” ์˜ค๋žซ๋™์•ˆ ์šด์˜์ฒด์ œ์™€ ํ”„๋กœ๊ทธ๋žจ์— ํฌ๊ฒŒ ์˜์กดํ–ˆ์Šต๋‹ˆ๋‹ค.

hwpx-mcp-server๋Š” ์ด ์ œ์•ฝ์„ ์ค„์ด๋Š” ๋ฐ ์ดˆ์ ์„ ๋‘ก๋‹ˆ๋‹ค.

  • โœ… ์šด์˜์ฒด์ œ ๋ฌด๊ด€ โ€” Windows, macOS, Linux์—์„œ ๋™์ž‘
  • โœ… ํ•œ๊ธ€ ์›Œ๋“œํ”„๋กœ์„ธ์„œ ๋ถˆํ•„์š” โ€” ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ
  • โœ… AI ์—ฐ๋™ ์ค‘์‹ฌ โ€” Claude Desktop, VS Code, Gemini CLI ๋“ฑ MCP ํด๋ผ์ด์–ธํŠธ์™€ ์ง์ ‘ ์—ฐ๊ฒฐ
  • โœ… ๋ฌธ์„œ ํŽธ์ง‘์„ ๋„๊ตฌ ํ˜ธ์ถœ๋กœ ํ‘œ์ค€ํ™” โ€” ์ฝ๊ธฐ, ํŽธ์ง‘, ๋ณต์ œ, ๊ฒ€์ฆ์„ MCP ๋„๊ตฌ ์ง‘ํ•ฉ์œผ๋กœ ๋…ธ์ถœ
  • โœ… ์‹ค์ „ ์ž‘์—… ํ๋ฆ„์— ๋งž์ถ˜ ์„ค๊ณ„ โ€” read, copy, edit, inspect, validate๋ฅผ ํ•œ ์„œ๋ฒ„ ํ‘œ๋ฉด์œผ๋กœ ์ •๋ฆฌ
  • โœ… ์ผ๊ด€๋œ ํ˜ธ์ถœ ๋ฐฉ์‹ โ€” ๋„๊ตฌ ํ˜ธ์ถœ๋งˆ๋‹ค filename์„ ๋ช…์‹œํ•˜๋Š” stateless ๊ตฌ์กฐ

์‚ฌ์šฉ ์‚ฌ๋ก€

  • ์‹ค์ „ ์‚ฌ์šฉ ์‚ฌ๋ก€: docs/use-cases.md
  • ์ข…ํ•ฉ ํ…Œ์ŠคํŠธ ๋ฆฌํฌํŠธ: tests/hwpx_mcp_report_updated.md

๋น ๋ฅธ ์‹œ์ž‘

1. ์„ค์น˜ ๋ฐ ์‹คํ–‰

uv ๊ธฐ์ค€:

uvx hwpx-mcp-server

๋˜๋Š” pip ์„ค์น˜ ํ›„ ์‹คํ–‰:

pip install hwpx-mcp-server
hwpx-mcp-server

์š”๊ตฌ ์‚ฌํ•ญ:

  • Python >= 3.10
  • python-hwpx >= 2.10.3

ํ˜„์žฌ ์ €์žฅ์†Œ ๊ธฐ์ค€ ๊ฒ€์ฆ ๋ฒ„์ „์€ python-hwpx 2.10.3์ž…๋‹ˆ๋‹ค (2026-06-09 ๊ฒ€์ฆ).์ตœ์†Œ ์ง€์› ๋ฒ„์ „์€ python-hwpx >= 2.10.3์ž…๋‹ˆ๋‹ค.

2. MCP ํด๋ผ์ด์–ธํŠธ ์„ค์ •

HWPX plugin companion launcher

The hwpx-plugins repository builds per-host bundles whose MCP launcher(plugins/<host>/hwpx-plugin/scripts/hwpx-mcp-server) can run this server. In local development,set HWPX_MCP_SERVER_REPO=/absolute/path/to/hwpx-mcp-server andPYTHON_HWPX_REPO=/absolute/path/to/python-hwpx when the repositories are not under a commonparent. The launcher otherwise discovers them by walking up from the bundle directory and usesuv run --project "$HWPX_MCP_SERVER_REPO" --with-editable "$PYTHON_HWPX_REPO" --with-editable "$HWPX_MCP_SERVER_REPO" hwpx-mcp-server.

Claude Desktop

claude_desktop_config.json

{
  "mcpServers": {
    "hwpx": {
      "command": "uvx",
      "args": ["hwpx-mcp-server"]
    }
  }
}
Gemini CLI

~/.gemini/settings.json

{
  "mcpServers": {
    "hwpx": {
      "command": "uvx",
      "args": ["hwpx-mcp-server"]
    }
  }
}
VS Code

.vscode/mcp.json

{
  "servers": {
    "hwpx": {
      "command": "uvx",
      "args": ["hwpx-mcp-server"]
    }
  }
}
Cursor / Windsurf

๊ฐ ์—๋””ํ„ฐ์˜ MCP ์„ค์ • ํŒŒ์ผ์— ๊ฐ™์€ ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

{
  "mcpServers": {
    "hwpx": {
      "command": "uvx",
      "args": ["hwpx-mcp-server"]
    }
  }
}

์ž‘์—…๋ณ„ ๋น ๋ฅธ ๊ฒฝ๋กœ

์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ๋„๊ตฌ๋ฅผ ์™ธ์šธ ํ•„์š”๋Š” ์—†๋‹ค. ๋ณดํ†ต์€ ์•„๋ž˜ ๋„ค ํ๋ฆ„ ์ค‘ ํ•˜๋‚˜๋กœ ์‹œ์ž‘ํ•˜๋ฉด ๋œ๋‹ค.

1. ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋ฌธ์„œ๋ฅผ ํŒŒ์•…ํ•  ๋•Œ

  1. get_document_info
  2. get_document_outline ๋˜๋Š” get_document_text
  3. find_text, get_table_text, get_table_map ๊ฐ™์€ ์ฝ๊ธฐ ๋„๊ตฌ๋กœ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋” ๋ณธ๋‹ค.

์ด ํ๋ฆ„์€ ์›๋ณธ์„ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

2. ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ๋•Œ

  1. copy_document๋กœ ์ž‘์—…์šฉ ์‚ฌ๋ณธ์„ ๋งŒ๋“ ๋‹ค.
  2. ์ฝ๊ธฐ ๋„๊ตฌ๋กœ ์ˆ˜์ • ๋Œ€์ƒ์„ ๋‹ค์‹œ ํ™•์ธํ•œ๋‹ค.
  3. search_and_replace, batch_replace, set_table_cell_text, add_paragraph ๊ฐ™์€ ๊ฐ€์žฅ ์ž‘์€ ๋ณ€๊ฒฝ ๋„๊ตฌ๋งŒ ์“ด๋‹ค.
  4. ์ˆ˜์ • ํ›„ ๋‹ค์‹œ ์ฝ๊ธฐ ๋„๊ตฌ๋กœ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•œ๋‹ค.
  5. ๋‚ฉํ’ˆ์ด๋‚˜ handoff๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๊ฒ€ํ† ๊ฐ€ ๋๋‚œ ๋ณต์‚ฌ๋ณธ ํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ ๋„˜๊ธด๋‹ค.

ํ•ต์‹ฌ์€ copy first, smallest edit, re-read after edits๋‹ค.

3. ๊ตฌ์กฐ ์ ๊ฒ€๊ณผ ๊ฒ€์ฆ์ด ๋ชฉ์ ์ผ ๋•Œ

  1. MCP ์„ค์ •์—์„œ HWPX_MCP_ADVANCED=1
  2. package_parts, package_get_xml, package_get_text๋กœ ๋‚ด๋ถ€ ํŒŒํŠธ๋ฅผ ๋ณธ๋‹ค.
  3. validate_structure, lint_text_conventions, plan_edit, preview_edit๋Š” ๊ธฐ๋ณธ ํŽธ์ง‘ ํ๋ฆ„๊ณผ ์„ž์ง€ ์•Š๊ณ  ์ ๊ฒ€/๊ฒ€์ฆ ๋‹จ๊ณ„์—์„œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

4. ํ•œ์ปด์—์„œ ์—ด๋ฆฌ์ง€ ์•Š๋Š” HWPX๋ฅผ ๋ณต๊ตฌํ•  ๋•Œ

  1. ์›๋ณธ์„ ์ง์ ‘ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  repair_hwpx(source_filename, output_filename)๋กœ ๋ณต๊ตฌ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ ๋‹ค.
  2. ์ผ๋ฐ˜ ZIP open์ด ์‹คํŒจํ•˜๊ฑฐ๋‚˜ central directory ์†์ƒ์ด ์˜์‹ฌ๋˜๋ฉด recover=true๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  3. ๋ฐ˜ํ™˜๊ฐ’์˜ crcOk, validatePackage.ok, reordered, recovered๋ฅผ ํ™•์ธํ•œ๋‹ค.
  4. ์ตœ์ข… handoff ์ „์—๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด Hancom Office HWP ๋˜๋Š” viewer๋กœ ์‹ค์ œ ์—ด๋žŒํ•œ๋‹ค.

์•ˆ์ „ํ•œ ์‚ฌ์šฉ ์›์น™

์ด ์„œ๋ฒ„์˜ ๊ณต๊ฐœ ํ‘œ๋ฉด์€ ํ˜„์žฌ README์— ์ ํžŒ MCP ๋„๊ตฌ ์ง‘ํ•ฉ์ด๋‹ค. ์›Œํฌํ”Œ๋กœ ๋ฌธ์„œ๋‚˜ ์Šคํ‚ฌ ์˜ˆ์‹œ๋Š” ์ด ๋„๊ตฌ๋“ค์„ ์กฐํ•ฉํ•˜๋Š” ์‚ฌ์šฉ ํŒจํ„ด์ด์ง€, ๋ณ„๋„์˜ ์ƒˆ public tool ๊ณ„์•ฝ์ด ์•„๋‹ˆ๋‹ค.

์‹ค์ „์—์„œ๋Š” ์•„๋ž˜ ์ˆœ์„œ๊ฐ€ ๊ฐ€์žฅ ์•ˆ์ „ํ•˜๋‹ค.

  1. ๋จผ์ € get_document_info, get_document_text, find_text ๊ฐ™์€ ์ฝ๊ธฐ ๋„๊ตฌ๋กœ ๋ฌธ์„œ๋ฅผ ํŒŒ์•…ํ•œ๋‹ค.
  2. ์ˆ˜์ • ์ „ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ณด์กดํ•ด์•ผ ํ•˜๋ฉด copy_document๋ฅผ ๋จผ์ € ํ˜ธ์ถœํ•œ๋‹ค.
  3. ์ˆ˜์ • ๋„๊ตฌ๋Š” ํ˜ธ์ถœ ์ฆ‰์‹œ ์ €์žฅ๋˜๋ฏ€๋กœ, ๊ฒ€ํ† ์šฉ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์›๋ณธ ๋Œ€์‹  ๋ณต์‚ฌ๋ณธ์—์„œ ์ž‘์—…ํ•œ๋‹ค.
  4. ๊ฒฐ๊ณผ๋ฌผ์„ ๋”ฐ๋กœ ๋„˜๊ฒจ์•ผ ํ•˜๋ฉด ๊ฒ€ํ† ๊ฐ€ ๋๋‚œ ๋ณต์‚ฌ๋ณธ ํŒŒ์ผ์„ handoff ๊ฒฝ๊ณ„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  5. package inspection, edit planning, validation์€ HWPX_MCP_ADVANCED=1์ผ ๋•Œ๋งŒ ์“ฐ๊ณ , ๊ธฐ๋ณธ ํ๋ฆ„๊ณผ ์„ž์–ด ์“ฐ์ง€ ์•Š๋Š”๋‹ค.

์งง๊ฒŒ ๋งํ•˜๋ฉด:

  • read first
  • copy before risky edits
  • mutating tools persist immediately
  • explicit handoff uses the reviewed copy
  • advanced mode๋Š” ์ ๊ฒ€/๊ฒ€์ฆ์šฉ์œผ๋กœ ๋ถ„๋ฆฌ

๋„๊ตฌ ๋™์ž‘ ๋น ๋ฅธ ๊ฐ๊ฐ

๊ตฌ๋ถ„ ๋Œ€ํ‘œ ๋„๊ตฌ ํŠน์ง•
ํŒŒ์ผ ๊ธฐ๋ฐ˜ ์ฝ๊ธฐ ์ „์šฉ get_document_info, get_document_text, get_paragraph_text, get_location_text, get_paragraphs_text, find_text, get_table_text, get_table_map, find_cell_by_label, list_styles, list_available_documents ๊ธฐ์กด .hwpx ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ํƒ์ƒ‰๋งŒ ํ•œ๋‹ค. ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
ํŒŒ์ผ ๊ธฐ๋ฐ˜ ์ฆ‰์‹œ ์ €์žฅ ์ƒ์„ฑ/ํŽธ์ง‘ create_document, create_document_from_plan, create_proposal_document, search_and_replace, batch_replace, replace_in_paragraph, replace_by_anchor, add_heading, add_paragraph, insert_paragraph, delete_paragraph, add_table, fill_by_path, set_table_cell_text, add_page_break, add_memo, add_memo_by_anchor, remove_memo, format_text, create_custom_style, merge_table_cells, split_table_cell, format_table ํ˜ธ์ถœ ๊ฒฐ๊ณผ๊ฐ€ ๊ณง ๋Œ€์ƒ ํŒŒ์ผ ๋ณ€๊ฒฝ์ด๋‹ค. ๊ฒ€ํ† ์šฉ์ด๋ฉด ๋จผ์ € ๋ณต์‚ฌ๋ณธ์—์„œ ์ž‘์—…ํ•œ๋‹ค.
์„ ์–ธํ˜• ์ƒ์„ฑ ๊ฒ€์ฆ validate_document_plan, analyze_document_plan, inspect_document_authoring_quality, inspect_operating_plan_quality, inspect_document_quality, analyze_template_formfit agent๊ฐ€ ๋งŒ๋“  hwpx.document_plan.v1, P6 baseline, ๋˜๋Š” ์ƒ์„ฑ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค. validate_document_plan, analyze_document_plan, analyze_template_formfit์€ ํŒŒ์ผ์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
repair/recover repair_hwpx ์›๋ณธ์„ ๋ณด์กดํ•˜๊ณ  ์ƒˆ output์— mimetype-first repair-repack ๋˜๋Š” Local File Header scan ๋ณต๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
๋ณต์ œ / handoff ๊ฒฝ๊ณ„ copy_document ์›๋ณธ ๋ณดํ˜ธ์™€ reviewable working copy ๋ถ„๋ฆฌ์— ์“ด๋‹ค. ํ˜„์žฌ FastMCP surface์—๋Š” ๋ณ„๋„ public save / save_as tool์ด ์—†๋‹ค.
payload/url ๊ธฐ๋ฐ˜ ์ถ”์ถœ hwpx_to_markdown, hwpx_to_html, hwpx_extract_json ํŒŒ์ผ๋ช…์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. HWPX payload ๋˜๋Š” URL์„ ์ฝ์–ด ๋ณ€ํ™˜ ๊ฒฐ๊ณผ๋งŒ ๋Œ๋ ค์ค€๋‹ค.
๊ณ ๊ธ‰ ์ ๊ฒ€/๊ฒ€์ฆ package_parts, package_get_xml, package_get_text, object_find_by_tag, object_find_by_attr, plan_edit, preview_edit, apply_edit, validate_structure, lint_text_conventions HWPX_MCP_ADVANCED=1์ผ ๋•Œ๋งŒ ํ™œ์„ฑํ™”ํ•œ๋‹ค. package/๊ตฌ์กฐ ์ ๊ฒ€์šฉ์ด๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

๊ธฐ๋ณธ ๋ชจ๋“œ์—์„œ 52๊ฐœ HWPX ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๊ณ ๊ธ‰ ๋ชจ๋“œ(HWPX_MCP_ADVANCED=1)์—์„œ๋Š” ์ ๊ฒ€ยท๊ฒ€์ฆ์šฉ ๋„๊ตฌ๊นŒ์ง€ ์ด 62๊ฐœ๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

์œ„์น˜ ๊ณ„์•ฝ

paragraph_index๋Š” ๋ฌธ์„œ ๋ณธ๋ฌธ ์ง์† ๋ฌธ๋‹จ์˜ 0-based ์ธ๋ฑ์Šค๋‹ค. ํ‘œ ์•ˆ ๋ฌธ๋‹จ์€ ์ด ์ธ๋ฑ์Šค์— ์„ž์ง€ ์•Š๊ณ  location ๊ฐ์ฒด๋กœ ์ง€์ •ํ•œ๋‹ค. ํ‘œ ์…€ ๋ฌธ๋‹จ location์€ {"kind":"table_cell_paragraph","table_index":0,"row":0,"col":1,"cell_paragraph_index":0} ํ˜•ํƒœ์ด๋ฉฐ, get_table_map๊ณผ find_text๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์„ get_paragraph_text, get_location_text, add_memo, replace_in_paragraph์— ๊ทธ๋Œ€๋กœ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“– ์ฝ๊ธฐ ๋ฐ ํƒ์ƒ‰

๋„๊ตฌ ์„ค๋ช…
get_document_info ๋ฌธ์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์„น์…˜, ๋ฌธ๋‹จ, ํ‘œ ๊ฐœ์ˆ˜ ์กฐํšŒ
get_document_text ๋ฌธ์„œ ์ „์ฒด ํ…์ŠคํŠธ ์ถ”์ถœ (max_chars ์ง€์›)
get_document_outline ์ œ๋ชฉ๊ณผ ๊ฐœ์š” ๊ตฌ์กฐ ์ถ”์ถœ
get_paragraph_text ๋ณธ๋ฌธ ๋ฌธ๋‹จ ๋˜๋Š” location์œผ๋กœ ์ง€์ •ํ•œ ํ‘œ ์…€ ๋ฌธ๋‹จ ํ…์ŠคํŠธ ์กฐํšŒ
get_location_text get_table_map/find_text๊ฐ€ ๋ฐ˜ํ™˜ํ•œ location์œผ๋กœ ํ…์ŠคํŠธ ์กฐํšŒ
get_paragraphs_text ๋ฌธ๋‹จ ๋ฒ”์œ„ ์กฐํšŒ
list_available_documents ํด๋” ์•ˆ์˜ .hwpx ํŒŒ์ผ ๋ชฉ๋ก ์กฐํšŒ

๐Ÿ”Ž ๊ฒ€์ƒ‰ ๋ฐ ์น˜ํ™˜

find_text๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๊ณ , search_and_replace / batch_replace๋Š” ํ˜ธ์ถœ ์ฆ‰์‹œ ์ €์žฅ๋œ๋‹ค.

๋„๊ตฌ ์„ค๋ช…
find_text ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰๊ณผ ์ฃผ๋ณ€ ๋ฌธ๋งฅ, ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ location/anchor ๋ฐ˜ํ™˜
search_and_replace ๋‹จ์ผ ํ…์ŠคํŠธ ์น˜ํ™˜
replace_in_paragraph ๋ณธ๋ฌธ/ํ‘œ ์…€ ๋ฌธ๋‹จ ํ•˜๋‚˜์—์„œ run ์„œ์‹์„ ์œ ์ง€ํ•˜๋ฉฐ ๋ถ€๋ถ„ ์น˜ํ™˜
replace_by_anchor find_text๊ฐ€ ๋ฐ˜ํ™˜ํ•œ anchor์˜ ์ •ํ™•ํ•œ ์œ„์น˜์—์„œ ๋ถ€๋ถ„ ์น˜ํ™˜
batch_replace ์—ฌ๋Ÿฌ ์น˜ํ™˜ ์ž‘์—… ์ผ๊ด„ ์‹คํ–‰

โœ๏ธ ๋ฌธ์„œ ํŽธ์ง‘

์ด ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋„๊ตฌ๋Š” ๋Œ€์ฒด๋กœ ๋Œ€์ƒ ํŒŒ์ผ์— ์ฆ‰์‹œ ๋ฐ˜์˜๋œ๋‹ค. ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์ „์—๋Š” copy_document๋กœ ์ž‘์—…์šฉ ์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ณ , handoff๋Š” ๊ฒ€ํ† ๊ฐ€ ๋๋‚œ ๋ณต์‚ฌ๋ณธ ํŒŒ์ผ ๊ธฐ์ค€์œผ๋กœ ์žก๋Š” ํŽธ์ด ์•ˆ์ „ํ•˜๋‹ค.

๋„๊ตฌ ์„ค๋ช…
add_heading ์ œ๋ชฉ(ํ—ค๋”ฉ) ๋ฌธ๋‹จ ์ถ”๊ฐ€
add_paragraph / insert_paragraph / delete_paragraph ๋ฌธ๋‹จ ์ถ”๊ฐ€, ์‚ฝ์ž…, ์‚ญ์ œ
add_page_break ํŽ˜์ด์ง€ ๋‚˜๋ˆ„๊ธฐ ์ถ”๊ฐ€
add_memo / add_memo_by_anchor / remove_memo ๋ณธ๋ฌธ ๋ฌธ๋‹จ ๋˜๋Š” ํ‘œ ์…€ ๋ฌธ๋‹จ์— ๋ฉ”๋ชจ ์ถ”๊ฐ€, ๊ฒ€์ƒ‰ anchor ๊ธฐ๋ฐ˜ ๋ฉ”๋ชจ ์ถ”๊ฐ€, ์ œ๊ฑฐ

๐Ÿงพ ์„ ์–ธํ˜• ๋ฌธ์„œ ์ƒ์„ฑ

hwpx.document_plan.v1์€ agent๊ฐ€ OWPML์„ ์ง์ ‘ ๋งŒ์ง€์ง€ ์•Š๊ณ  ์ œ๋ชฉ, ๋ฌธ๋‹จ, bullet, ํ‘œ, ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ๋ฅผ ์„ ์–ธํ•˜๋Š” ์ƒ์„ฑ ๊ณ„์•ฝ์ด๋‹ค.

๋„๊ตฌ ์„ค๋ช…
validate_document_plan plan์„ ๊ฒ€์ฆํ•˜๊ณ  ์ •๊ทœํ™” ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํŒŒ์ผ์€ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.
analyze_document_plan ํŒŒ์ผ์„ ์“ฐ์ง€ ์•Š๊ณ  ์ƒ์„ฑ ๊ฐ€๋Šฅ ์—ฌ๋ถ€, ์ •๊ทœํ™” plan, ์„ ํƒํ•œ ํ’ˆ์งˆ ํ”„๋กœํ•„์˜ preview๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
create_document_from_plan plan์„ HWPX๋กœ ์ƒ์„ฑํ•˜๊ณ  ์ฆ‰์‹œ ์ €์žฅํ•œ ๋’ค reopen/package/schema ๊ฒ€์ฆ๊ณผ ํ’ˆ์งˆ ํ”„๋กœํ•„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
inspect_document_authoring_quality ์ƒ์„ฑ๋œ HWPX์˜ document-plan ํ’ˆ์งˆ ๊ทผ๊ฑฐ๋ฅผ ๋‹ค์‹œ ์กฐํšŒํ•œ๋‹ค. quality_profile="operating_plan"์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
inspect_operating_plan_quality ์šด์˜ ๊ณ„ํš์„œ ์ œ์ถœ ํ›„๋ณด์˜ ์„น์…˜, ์ผ์ •ํ‘œ, ์‚ฌ์—…๋น„ ๊ทผ๊ฑฐ, ๊ธฐ๋Œ€ ํšจ๊ณผ, ๋งˆ๊ฐ ๋ฌธ๊ตฌ, placeholder ์ž”์—ฌ๋ฌผ์„ ์ง์ ‘ ๊ฒ€์‚ฌํ•œ๋‹ค.
analyze_template_formfit P6 ๊ธฐ์ค€์„  ๊ธฐ๋ฐ˜ ์–‘์‹ ๋ณด์กด ์ƒ์„ฑ ๊ณ„ํš์„ ๋น„ํŒŒ๊ดด ๋ถ„์„ํ•œ๋‹ค.
apply_template_formfit ๋ถ„์„๋œ ๊ณ„ํš์„ ์›๋ณธ๊ณผ ๋‹ค๋ฅธ destination ๋ณต์‚ฌ๋ณธ์—๋งŒ ์ ์šฉํ•˜๊ณ  ๊ฒ€์ฆํ•œ๋‹ค.
create_proposal_document / inspect_document_quality ์ œ์•ˆ์„œ/๊ธฐํš์•ˆ ํŠนํ™” ํ˜ธํ™˜ ๊ฒฝ๋กœ

visual_review_required=true๋Š” ๊ตฌ์กฐ/ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ์€ ํ†ต๊ณผํ–ˆ์ง€๋งŒ ๋ Œ๋”๋ง๋œ์‹œ๊ฐ ๋ ˆ์ด์•„์›ƒ์€ ์•„์ง ์ฆ๋ช…๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋œป์ด๋‹ค. ์šด์˜ ๊ณ„ํš์„œ์™€ template-formfit๊ฒฐ๊ณผ๋ฅผ ์ตœ์ข… ์ œ์ถœ ๊ฐ€๋Šฅ(submission-ready) ์ƒํƒœ๋กœ ์ฃผ์žฅํ•˜๋ ค๋ฉด../hwpx-skill/scripts/visual_review.py ๋˜๋Š” ComputerUse๋กœ ์—ด๋ฆฐ ๋ฌธ์„œ๋ฅผ ๊ฒ€ํ† ํ•ดhwpx.visual-review.v1 ์ฆ๊ฑฐ๋ฅผ ๋‚จ๊ธฐ๊ณ  current.status="observed_pass"์—ฌ์•ผํ•œ๋‹ค. HWPX viewer๊ฐ€ ์—†๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” fallback ์ฆ๊ฑฐ๋ฅผcurrent.status="blocked"๋กœ ๊ธฐ๋กํ•˜๊ณ  ์ž”์—ฌ ์œ„ํ—˜์„ ์œ ์ง€ํ•œ๋‹ค.

validate_document_plan ๊ฒฐ๊ณผ๊ฐ€ ok=false์ด๋ฉด issues[].code,issues[].path, repairHints[]๋ฅผ ๋ณด๊ณ  plan์„ ์ˆ˜์ •ํ•œ ๋’ค ๋‹ค์‹œ ๊ฒ€์ฆํ•œ๋‹ค.์ด๋•Œ can_create=false์ด๋ฏ€๋กœ create_document_from_plan์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค.table ์˜ค๋ฅ˜๋Š” columns[].key์™€ rows[] key๋ฅผ ๋งž์ถ”๊ณ , style warning์€ ์ง€์›token์œผ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์ƒ๋žตํ•œ๋‹ค. ์ƒ์„ฑ ํ›„ package/schema ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉดquality.validation.*.issues[]์™€ quality.recovery.repair_hints[]๋ฅผ ํ™•์ธํ•ด์žฌ์ €์žฅ ๋˜๋Š” ์žฌ์ƒ์„ฑํ•œ๋‹ค.

์šด์˜ ๊ณ„ํš์„œ ์ž‘์„ฑ์€ ๋‹ค์Œ ์ˆœ์„œ๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค.

  1. validate_document_plan(document_plan)์œผ๋กœ schema์™€ block/table ์˜ค๋ฅ˜๋ฅผ ๋จผ์ € ๊ณ ์นœ๋‹ค.
  2. analyze_document_plan(document_plan, quality_profile="operating_plan")์œผ๋กœ ํŒŒ์ผ ์ƒ์„ฑ ์—†์ด ํ’ˆ์งˆ preview๋ฅผ ํ™•์ธํ•œ๋‹ค.
  3. handoff_status="ready"์ด๋ฉด create_document_from_plan(filename, document_plan, quality_profile="operating_plan")์œผ๋กœ ๋ช…์‹œํ•œ ๊ฒฝ๋กœ์—๋งŒ ์ƒ์„ฑํ•œ๋‹ค.
  4. handoff_status="needs_revision"์ด๋ฉด quality.gaps[]์™€ quality.profiles.operating_plan.repair_hints[]๋ฅผ ๋ฐ˜์˜ํ•ด plan์„ ๋ณด๊ฐ•ํ•œ๋‹ค.
  5. ์ƒ์„ฑ ํ›„ get_document_text, get_table_text๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ฝ๋Š”๋‹ค.
  6. visual_review_required=true์ด๋ฉด visual_review.py ๋˜๋Š” ์—ด๋ฆฐ ๋ฌธ์„œ ๊ฒ€ํ† ๋กœhwpx.visual-review.v1 ์ฆ๊ฑฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. current.status="observed_pass"๊ฐ€์•„๋‹ˆ๋ฉด handoff_status="ready"๋ฅผ ์ตœ์ข… ์ œ์ถœ ๊ฐ€๋Šฅ(submission-ready)์œผ๋กœ์„ค๋ช…ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์Šน์ธ๋œ HWPX ์–‘์‹์„ ๋ณด์กดํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” create_document_from_plan์œผ๋กœ ์ƒˆ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค์ง€ ๋ง๊ณ  P6 baseline ๊ธฐ๋ฐ˜ form-fit ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  1. analyze_template_formfit(source_filename, baseline, content, destination_filename)์œผ๋กœ ์›๋ณธ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”์ง€์™€ required anchor ํ•ด์†Œ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.
  2. unresolved_count > 0์ด๋ฉด unresolved[].reason์— ๋”ฐ๋ผ content ๋˜๋Š” baseline locator๋ฅผ ๋ณด๊ฐ•ํ•œ๋‹ค.
  3. apply_template_formfit(analysis=..., confirm=true)๋กœ ์›๋ณธ๊ณผ ๋‹ค๋ฅธ destination์—๋งŒ ์ ์šฉํ•œ๋‹ค.
  4. source.preserved, validation.validate_package.ok, validation.validate_document.ok, residual_markers.blocking == []๋ฅผ ํ™•์ธํ•œ๋‹ค.
  5. visual_review_required=true์ด๋ฉด visual_review.py ๋˜๋Š” ์—ด๋ฆฐ ๋ฌธ์„œ ๊ฒ€ํ† ๋กœhwpx.visual-review.v1 ์ฆ๊ฑฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. current.status="observed_pass"๊ฐ€์•„๋‹ˆ๋ฉด handoff_status="ready"๋ฅผ ์ตœ์ข… ์ œ์ถœ ๊ฐ€๋Šฅ(submission-ready)์œผ๋กœ์„ค๋ช…ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿงฏ ํŒจํ‚ค์ง€ ๋ณต๊ตฌ

repair_hwpx๋Š” ์›๋ณธ์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ output ๊ฒฝ๋กœ์— ๋ณต๊ตฌ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ ๋‹ค.

๋„๊ตฌ ์„ค๋ช…
repair_hwpx recover=false์ด๋ฉด mimetype ์ฒซ ์—”ํŠธ๋ฆฌ/ZIP_STORED ์žฌํŒจํ‚น๊ณผ CRC self-check๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. recover=true์ด๋ฉด central directory ์†์ƒ ZIP์„ Local File Header scan์œผ๋กœ ๋ณต๊ตฌํ•œ ๋’ค ์žฌํŒจํ‚นํ•œ๋‹ค.

ํ™•์ธํ•  ์‘๋‹ต ํ•„๋“œ๋Š” crcOk, validatePackage.ok, reordered, recovered, entryCount๋‹ค.๊ธฐ๊ณ„ ๊ฒ€์ฆ ํ›„์—๋„ ์ œ์ถœยท๋‚ฉํ’ˆ ์ „์—๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด Hancom Office HWP ๋˜๋Š” viewer์—์„œ ์‹ค์ œ ์—ด๋žŒํ•œ๋‹ค.

๐Ÿ’พ ๋ณต์ œ

์ด ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ์ˆ˜์ • ์›Œํฌํ”Œ๋กœ์˜ ์•ˆ์ „ ์žฅ์น˜๋‹ค. ์›๋ณธ ๋ณดํ˜ธ์™€ reviewable working copy ๋ถ„๋ฆฌ์— ์“ด๋‹ค.

๋„๊ตฌ ์„ค๋ช…
copy_document ์›๋ณธ์„ ๊ฑด๋“œ๋ฆฌ๊ธฐ ์ „์— ์ž‘์—…์šฉ ์‚ฌ๋ณธ ์ƒ์„ฑ

๐Ÿ“Š ํ‘œ ํŽธ์ง‘

get_table_text, get_table_map, find_cell_by_label๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๋‹ค. fill_by_path, set_table_cell_text, merge_table_cells, split_table_cell, format_table์€ ํ˜ธ์ถœ ์ฆ‰์‹œ ์ €์žฅ๋œ๋‹ค.

๋„๊ตฌ ์„ค๋ช…
add_table / get_table_text ํ‘œ ์ƒ์„ฑ, ์กฐํšŒ
get_table_map ํ‘œ๊ฐ€ ๋งŽ์€ ๋ฌธ์„œ์—์„œ ํ‘œ ์œ„์น˜, ํฌ๊ธฐ, caption/์ง์ „ ๋ฌธ๋‹จ ๋ฌธ๋งฅ, ์…€ ๋ฌธ๋‹จ location์„ ๋น ๋ฅด๊ฒŒ ํƒ์ƒ‰
find_cell_by_label ํ•œ๊ตญ์–ด ์–‘์‹/ํ…œํ”Œ๋ฆฟ์—์„œ ๋ผ๋ฒจ ์…€ ๊ธฐ์ค€์œผ๋กœ ์ž…๋ ฅ ๋Œ€์ƒ ์…€ ์ฐพ๊ธฐ
fill_by_path ์„ฑ๋ช… > right, ์†Œ์† > right, ํ•ฉ๊ณ„ > down > right ๊ฐ™์€ ๊ฒฝ๋กœ ๊ตฌ๋ฌธ์œผ๋กœ ์…€ ์ฑ„์šฐ๊ธฐ
set_table_cell_text ์…€ ํ…์ŠคํŠธ ์ˆ˜์ •. ๊ธฐ๋ณธ๊ฐ’์€ ๊ธฐ์กด charPr ์„œ์‹ ๋ณด์กด์ด๋ฉฐ, split_paragraphs=true๋กœ ๋ฉ€ํ‹ฐ๋ผ์ธ์„ ์—ฌ๋Ÿฌ hp:p๋กœ ๋ถ„๋ฆฌ
merge_table_cells / split_table_cell ์…€ ๋ณ‘ํ•ฉ, ๋ถ„ํ• 
format_table ํ‘œ ํ—ค๋” ๋“ฑ ๊ธฐ๋ณธ ์„œ์‹ ์ ์šฉ

๋ณ€๊ฒฝ ๋„๊ตฌ๋Š” ํ˜ธ์ถœ ์‹œ ์ฆ‰์‹œ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ฒ€ํ† ์šฉ ์‚ฌ๋ณธ์ด ํ•„์š”ํ•˜๋ฉด copy_document๋ฅผ ๋จผ์ € ์‚ฌ์šฉํ•˜๊ณ , ๋‚ฉํ’ˆ๋ณธ์€ ๊ฒ€ํ† ๊ฐ€ ๋๋‚œ ๋ณต์‚ฌ๋ณธ ํŒŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”.

๐ŸŽจ ์„œ์‹ ๋ฐ ์Šคํƒ€์ผ

list_styles๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๋‹ค. format_text, create_custom_style์€ ๋ฌธ์„œ๋ฅผ ์ง์ ‘ ๊ฐฑ์‹ ํ•œ๋‹ค.

๋„๊ตฌ ์„ค๋ช…
format_text ํ…์ŠคํŠธ ๋ฒ”์œ„ ์„œ์‹ ์ ์šฉ
create_custom_style ์ปค์Šคํ…€ ์Šคํƒ€์ผ ์ƒ์„ฑ
list_styles ๋ฌธ์„œ ์Šคํƒ€์ผ ๋ชฉ๋ก ์กฐํšŒ

์Šคํƒ€์ผ ์ฐธ์กฐ ํŒ: add_paragraph(..., style=...)์™€ insert_paragraph(..., style=...)๋Š” list_styles์˜ id, create_custom_style์ด ๋ฐ˜ํ™˜ํ•˜๋Š” style_id, ์Šคํƒ€์ผ ์ด๋ฆ„์„ ๋ชจ๋‘ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ค ์ถ”์ถœ

์ด ์นดํ…Œ๊ณ ๋ฆฌ๋Š” filename ๊ธฐ๋ฐ˜ ํŽธ์ง‘ ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋‹ค. HWPX payload ๋˜๋Š” URL์„ ์ฝ์–ด ๋ณ€ํ™˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋„๊ตฌ ์„ค๋ช…
hwpx_to_markdown HWPX ๋ฌธ์„œ๋ฅผ Markdown์œผ๋กœ ๋ณ€ํ™˜
hwpx_to_html HWPX ๋ฌธ์„œ๋ฅผ HTML๋กœ ๋ณ€ํ™˜
hwpx_extract_json HWPX ๋ฌธ์„œ๋ฅผ ๊ตฌ์กฐํ™”๋œ JSON์œผ๋กœ ์ถ”์ถœ

๐Ÿ”ฌ ๊ณ ๊ธ‰ ๋„๊ตฌ

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 ๊ตฌ์กฐ ๊ฒ€์ฆ, ํ…์ŠคํŠธ ๊ทœ์น™ ์ ๊ฒ€

๐Ÿฉบ ์„œ๋ฒ„ ์ง„๋‹จ

๋„๊ตฌ ์„ค๋ช…
mcp_server_health transport, timeout, sandbox ๊ฒฝ๋กœ ์•ˆ๋‚ด, ๋Œ€์šฉ๋Ÿ‰ ๋ฌธ์„œ/์œ ํœด stdio/์›๊ฒฉ fetch timeout ๊ฐ™์€ disconnect ๊ฐ€๋Šฅ ์กฐ๊ฑด๊ณผ keepalive ์ ๊ฒ€ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

๋ณ€์ˆ˜ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
HWPX_MCP_MAX_CHARS ํ…์ŠคํŠธ ๋ฐ˜ํ™˜ ๋„๊ตฌ ๊ธฐ๋ณธ ์ตœ๋Œ€ ๊ธธ์ด 10000
HWPX_MCP_AUTOBACKUP 1์ด๋ฉด ์ €์žฅ ์ „ .bak ๋ฐฑ์—… ์ƒ์„ฑ 1
HWPX_MCP_ADVANCED 1์ด๋ฉด ๊ณ ๊ธ‰ ๋„๊ตฌ ํ™œ์„ฑํ™” 0
HWPX_MCP_SANDBOX_ROOT ์„ค์ • ์‹œ ์ด root ๋‚ด๋ถ€ ์ƒ๋Œ€๊ฒฝ๋กœ ๋˜๋Š” ๋‚ด๋ถ€ ์ ˆ๋Œ€๊ฒฝ๋กœ๋งŒ ํ—ˆ์šฉ unset
HWPX_MCP_FETCH_TIMEOUT_SECONDS URL ๊ธฐ๋ฐ˜ HWPX fetch timeout 20.0
LOG_LEVEL ๋กœ๊ทธ ๋ ˆ๋ฒจ INFO

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํฌํ•จ MCP ์„ค์ • ์˜ˆ์‹œ:

{
  "mcpServers": {
    "hwpx": {
      "command": "uvx",
      "args": ["hwpx-mcp-server"],
      "env": {
        "HWPX_MCP_MAX_CHARS": "12000",
        "HWPX_MCP_AUTOBACKUP": "1",
        "HWPX_MCP_ADVANCED": "0",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

ํ…Œ์ŠคํŠธ

# ํ…Œ์ŠคํŠธ ์˜์กด์„ฑ ์„ค์น˜
python -m pip install -e ".[test]"

# ์ „์ฒด ํ…Œ์ŠคํŠธ
python -m pytest -q

์ถ”๊ฐ€ ์ฐธ๊ณ :

  • ์‚ฌ์šฉ ์‚ฌ๋ก€: docs/use-cases.md
  • ์ข…ํ•ฉ ๋ฆฌํฌํŠธ: tests/hwpx_mcp_report_updated.md
  • ์Šคํ‚ฌ ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ: docs/skill-first-workflows.md

License

Apache License 2.0. See LICENSE and NOTICE.

์ž‘์„ฑ์ž

๊ณ ๊ทœํ˜„ โ€” ๊ด‘๊ต๊ณ ๋“ฑํ•™๊ต ์ •๋ณดยท์ปดํ“จํ„ฐ ๊ต์‚ฌ

MCP Server ยท Populars

MCP Server ยท New