Skip to main content
Glama
airmang

hwpx-mcp-server


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

๊ณ„์ธต

๋ ˆํฌ

์—ญํ• 

๐Ÿ“ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

python-hwpx

์ˆœ์ˆ˜ ํŒŒ์ด์ฌ HWPX ํŒŒ์‹ฑยทํŽธ์ง‘ยท์ƒ์„ฑ ์ฝ”์–ด

๐Ÿ”Œ MCP ์„œ๋ฒ„

hwpx-mcp-server

MCP ํด๋ผ์ด์–ธํŠธ(Claude Desktop, VS Code ๋“ฑ)์—์„œ HWPX ์กฐ์ž‘

๐ŸŽฏ ์—์ด์ „ํŠธ ์Šคํ‚ฌ

hwpx-plugins

์—์ด์ „ํŠธ๊ฐ€ HWPX๋ฅผ ๋ฐ”๋กœ ์“ฐ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ณต์‹ ์Šคํ‚ฌ/ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒˆ๋“ค


Related MCP server: HWPX Document Server

์™œ / ๋ฌด์—‡์„ ํ•˜๋‚˜

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

  • ์šด์˜์ฒด์ œ ๋ฌด๊ด€ โ€” Windows, macOS, Linux์—์„œ ๋™์ž‘

  • ํ•œ๊ธ€ ์›Œ๋“œํ”„๋กœ์„ธ์„œ ๋ถˆํ•„์š” โ€” ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ์ฒ˜๋ฆฌ, ์„œ๋ฒ„ยทCIยท๋กœ์ปฌ ์–ด๋””์„œ๋‚˜ ๊ฐ™์€ ํ๋ฆ„

  • AI ์—ฐ๋™ ์ค‘์‹ฌ โ€” Claude Desktop, VS Code, Gemini CLI ๋“ฑ MCP ํด๋ผ์ด์–ธํŠธ์™€ ์ง์ ‘ ์—ฐ๊ฒฐ

  • ๋ฌธ์„œ ์กฐ์ž‘์„ ๋„๊ตฌ ํ˜ธ์ถœ๋กœ ํ‘œ์ค€ํ™” โ€” ์ฝ๊ธฐยทํŽธ์ง‘ยท๋ณต์ œยท์–‘์‹์ฑ„์›€ยท๊ฒ€์ฆ์„ ํ•˜๋‚˜์˜ ๋„๊ตฌ ์ง‘ํ•ฉ์œผ๋กœ ๋…ธ์ถœ

  • stateless ํ˜ธ์ถœ โ€” ๋„๊ตฌ๋งˆ๋‹ค filename์„ ๋ช…์‹œํ•˜๋Š” ์ผ๊ด€๋œ ๋ฐฉ์‹

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

๋น ๋ฅธ ์‹œ์ž‘

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

uv ๊ธฐ์ค€:

uvx hwpx-mcp-server

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

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

๋น„-HWPX ๋ฌธ์„œ(PDF/DOCX/XLSX/HTML/TXT)๋ฅผ document_to_markdown ๊ฒฝ๋กœ๋กœ ์ฝ์œผ๋ ค๋ฉด MarkItDown adapter extra๋ฅผ ํ•จ๊ป˜ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

pip install "hwpx-mcp-server[ingest]"

์š”๊ตฌ ์‚ฌํ•ญ: Python >= 3.10 ยท python-hwpx >= 2.23.0

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

์„ค์ • ํŒŒ์ผ์— ์•„๋ž˜ ๋ธ”๋ก ํ•˜๋‚˜๋งŒ ๋„ฃ์œผ๋ฉด hwpx ์„œ๋ฒ„๋ฅผ ๋ฐ”๋กœ ์žก์Šต๋‹ˆ๋‹ค.

  • Claude Desktop โ€” claude_desktop_config.json

  • Gemini CLI โ€” ~/.gemini/settings.json

  • VS Code โ€” .vscode/mcp.json (ํ‚ค๊ฐ€ mcpServers ๋Œ€์‹  servers)

  • Cursor / Windsurf โ€” ๊ฐ ์—๋””ํ„ฐ์˜ MCP ์„ค์ • ํŒŒ์ผ

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

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋„˜๊ธธ ๋•Œ๋Š” env ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

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

hwpx-plugins ๋ฒˆ๋“ค์˜ ๋Ÿฐ์ฒ˜(plugins/<host>/hwpx-plugin/scripts/hwpx-mcp-server)๋กœ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ๊ฐœ๋ฐœ ์‹œ ๋ ˆํฌ๊ฐ€ ๊ณตํ†ต ๋ถ€๋ชจ ์•„๋ž˜์— ์—†์œผ๋ฉด HWPX_MCP_SERVER_REPO, PYTHON_HWPX_REPO๋ฅผ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ์ง€์ •ํ•˜์„ธ์š”.

ํ•˜๋‚˜์˜ ํ๋ฆ„๋ถ€ํ„ฐ

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

  1. ์ฝ๊ธฐ โ€” get_document_info โ†’ get_document_outline / get_document_text โ†’ find_text, get_table_map ๋“ฑ์œผ๋กœ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ. (์ €์žฅํ•˜์ง€ ์•Š์Œ)

  2. ์•ˆ์ „ ์ˆ˜์ • โ€” copy_document๋กœ ์‚ฌ๋ณธ ์ƒ์„ฑ โ†’ ์ฝ๊ธฐ ๋„๊ตฌ๋กœ ๋Œ€์ƒ ํ™•์ธ โ†’ search_and_replace, set_table_cell_text, apply_edits ๋“ฑ ๊ฐ€์žฅ ์ž‘์€ ๋ณ€๊ฒฝ โ†’ ๋‹ค์‹œ ์ฝ์–ด ํ™•์ธ โ†’ ๊ฒ€ํ† ๊ฐ€ ๋๋‚œ ๋ณต์‚ฌ๋ณธ์„ handoff.

ํ•ต์‹ฌ์€ copy first ยท smallest edit ยท re-read after edits์ž…๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ํ•˜๋‚˜

๊ธฐ๋ณธ ๋ชจ๋“œ์—์„œ ๋‹ค์ˆ˜์˜ HWPX ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๊ณ ๊ธ‰ ๋ชจ๋“œ(HWPX_MCP_ADVANCED=1)์—์„œ ์ ๊ฒ€ยท๊ฒ€์ฆ์šฉ ๋„๊ตฌ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ํ…Œ๋งˆ๋ณ„ ๋Œ€ํ‘œ ํ•˜์ด๋ผ์ดํŠธ์ž…๋‹ˆ๋‹ค. ์ „์ฒด ๋„๊ตฌ ๋ชฉ๋กยท์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” docs/use-cases.md์™€ docs/skill-first-workflows.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

  • ๐Ÿ“– ์ฝ๊ธฐยทํƒ์ƒ‰ โ€” get_document_info, get_document_text, get_document_outline, find_text, get_table_text, get_table_map, find_cell_by_label, list_styles. get_document_map์€ ์•„์›ƒ๋ผ์ธยทํ‘œ ์ง€๋„ยท๋ˆ„๋ฆ„ํ‹€ยท์•ต์ปค๋ฅผ ํ•œ ํ˜ธ์ถœ๋กœ ๋ฐ˜ํ™˜(์™•๋ณต ์ตœ์†Œํ™”). (์ €์žฅํ•˜์ง€ ์•Š์Œ)

  • ๐Ÿ“ฅ ๋กœ์ปฌ ๋ฌธ์„œ ingest โ€” document_to_markdown, document_extract_json, markdown_to_document_plan์ด ๋กœ์ปฌ ๋ฌธ์„œ๋ฅผ Markdown/JSON/document plan์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. HWPX๋Š” python-hwpx ์—”์ง„์„ ์šฐ์„  ์‚ฌ์šฉํ•˜๊ณ , ๋น„-HWPX๋Š” [ingest] extra ์„ค์น˜ ์‹œ MarkItDown adapter๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ๐Ÿ”Ž ๊ฒ€์ƒ‰ยท์น˜ํ™˜ โ€” search_and_replace, batch_replace, replace_in_paragraph, replace_by_anchor. (find_text ์™ธ ์ฆ‰์‹œ ์ €์žฅ)

  • โœ๏ธ ํŽธ์ง‘ยทํŠธ๋žœ์žญ์…˜ โ€” add_heading, add_paragraph/insert_paragraph/delete_paragraph, add_page_break, add_memo ๊ณ„์—ด. apply_edits๋Š” ์—ฐ์‚ฐ ๋ชฉ๋ก ์›์ž ์ ์šฉ(์ค‘๊ฐ„ ์‹คํŒจ ์‹œ ์ „์ฒด ๋กค๋ฐฑยทdry_runยทexpected_revision ๋™์‹œ์„ฑ ๊ฐ€๋“œยทidempotency_key), undo_last_edit๋Š” .bak ๋ณต์›, byte_preserving_patch๋Š” ๋ฏธ์ˆ˜์ • ์˜์—ญ ๋ฐ”์ดํŠธ ๋ณด์กด, add_tracked_edit๋Š” ๋ณ€๊ฒฝ ์ถ”์ (redline).

  • ๐Ÿ“Š ํ‘œยท์–‘์‹์ฑ„์›€ โ€” add_table, set_table_cell_text, merge_table_cells/split_table_cell, format_table, table_compute(ํ•ฉ๊ณ„ยทํ‰๊ท ยท์†Œ๊ณ„), fill_by_path(์„ฑ๋ช… > right ๊ฒฝ๋กœ ๊ตฌ๋ฌธ). ๋ฐ”์ดํŠธ ๋ณด์กด ๊ตฌ์กฐ์  ์–‘์‹์ฑ„์›€: ์…€ ๋ฐ”์ดํŠธ ์ฑ„์›€(๋นˆ/๋‹ค์ค‘ ๋ฌธ๋‹จ)ยทํ–‰/์—ด/ํ‘œ ์‚ญ์ œยท๋ณต์ œ ์‚ฝ์ž…ยท์—ด ๋„ˆ๋น„ ์ž๋™๋งž์ถคยทํฐํŠธ ์ถ•์†Œ๋งž์ถค์„ ์–‘์‹ ์„œ์‹์„ ์žฌ๊ตฌ์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•˜๋ฉฐ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ค์ œ ํ•œ์ปด์œผ๋กœ ๊ฒ€์ฆ(verify_fill). analyze_template_formfit/apply_template_formfit์€ ์Šน์ธ๋œ ์–‘์‹์„ ์›๋ณธ๊ณผ ๋‹ค๋ฅธ destination์—๋งŒ ๋ฐ˜์˜.

  • ๐Ÿ–Š๏ธ ๋ˆ„๋ฆ„ํ‹€ ์–‘์‹ โ€” list_form_fields, fill_form_field(์„œ์‹ ๋ณด์กด), analyze_form_fill(๋ผ๋ฒจ ๋งค์นญ ์‹ ๋ขฐ๋„ ๋“ฑ๊ธ‰).

  • ๐Ÿงพ ์„ ์–ธํ˜• ๋ฌธ์„œ ์ƒ์„ฑ โ€” hwpx.document_plan.v1๋กœ OWPML์„ ์ง์ ‘ ๋งŒ์ง€์ง€ ์•Š๊ณ  ์„ ์–ธ: validate_document_plan/analyze_document_plan(ํŒŒ์ผ ๋ฏธ์ƒ์„ฑ) โ†’ create_document_from_plan(์ƒ์„ฑ+๊ฒ€์ฆ), inspect_document_authoring_quality, inspect_operating_plan_quality, create_proposal_document. compose_exam์€ ์–‘์‹ HWPX+๋งˆํฌ๋‹ค์šด โ†’ ์‹œํ—˜์ง€ ์žฌ์กฐํŒ(verify_question_splits).

  • ๐Ÿ›๏ธ ๊ณต๋ฌธ์„œยท๋น„๊ตยท๋Œ€๋Ÿ‰ ์ƒ์‚ฐ โ€” inspect_official_document_style(ํ–‰์ •์—…๋ฌด ๊ทœ์ • lint: ํ•ญ๋ชฉ๊ธฐํ˜ธ ์œ„๊ณ„ยท"๋."ยท๋ถ™์ž„ยท๋‚ ์งœ), inspect_reference_consistency, doc_diff/create_comparison_table_document(์‹ ๊ตฌ๋Œ€์กฐํ‘œ), mail_merge(ํ…œํ”Œ๋ฆฟ+CSV/JSON โ†’ N๋ถ€ยทํŒŒ์ผ๋ช… ํŒจํ„ดยทzip), inspect_mail_merge_placeholders.

  • ๐ŸŽจ ์„œ์‹ยท๊ทธ๋ฆผยท์ƒ์„ฑ๊ธฐ โ€” set_paragraph_format, set_page_setup, set_header_footer, set_page_number, set_list_format, format_text, create_custom_style(์ž…๋ ฅ์€ pt/mm/% ์ธ๊ฐ„ ๋‹จ์œ„); insert_picture(manifest ์ž๋™ ๋“ฑ๋ก)/replace_picture; build_image_grid(์‚ฌ์ง„๋Œ€์ง€)ยทbuild_meeting_nameplatesยทbuild_organization_chart.

  • ๐Ÿ–ฅ๏ธ ํ”„๋ฆฌ๋ทฐยท์ถ”์ถœยท๋ณต๊ตฌยท์ง„๋‹จ โ€” render_preview(HTML/PNG ์‹œ๊ฐ ์ž๊ธฐ๊ฒ€์ฆ), hwpx_to_markdown/hwpx_to_html/hwpx_extract_json(payloadยทURL ์ž…๋ ฅ, ํŒŒ์ผ ๋ฏธ์ˆ˜์ •), repair_hwpx(์›๋ณธ ๋ณด์กดยทmimetype-first ์žฌํŒจํ‚น, recover=true๋กœ ์†์ƒ ZIP LFH scan ๋ณต๊ตฌ; ์‘๋‹ต crcOk/validatePackage.ok/recovered ํ™•์ธ), mcp_server_health(๋ฐฐํฌ ์Šคํ ์ž๊ธฐ์ง„๋‹จยทcapability handshake).

  • ๐Ÿ”ฌ ๊ณ ๊ธ‰(HWPX_MCP_ADVANCED=1) โ€” 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.

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

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

์ด ์„œ๋ฒ„์˜ ๊ณต๊ฐœ ํ‘œ๋ฉด์€ ์œ„ MCP ๋„๊ตฌ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ ๋ฌธ์„œ๋‚˜ ์Šคํ‚ฌ ์˜ˆ์‹œ๋Š” ์ด ๋„๊ตฌ๋“ค์˜ ์กฐํ•ฉ ํŒจํ„ด์ด์ง€ ๋ณ„๋„ ๊ณ„์•ฝ์ด ์•„๋‹™๋‹ˆ๋‹ค.

  • read first โ€” ๋จผ์ € ์ฝ๊ธฐ ๋„๊ตฌ๋กœ ๋ฌธ์„œ๋ฅผ ํŒŒ์•…ํ•œ๋‹ค.

  • copy before risky edits โ€” ๊ฒฐ๊ณผ๋ฌผ์„ ๋ณด์กดํ•ด์•ผ ํ•˜๋ฉด copy_document๋ฅผ ๋จผ์ € ํ˜ธ์ถœํ•œ๋‹ค.

  • mutating tools persist immediately โ€” ์ˆ˜์ • ๋„๊ตฌ๋Š” ํ˜ธ์ถœ ์ฆ‰์‹œ ์ €์žฅ๋˜๋ฏ€๋กœ ๊ฒ€ํ† ์šฉ์€ ๋ณต์‚ฌ๋ณธ์—์„œ ์ž‘์—…ํ•œ๋‹ค.

  • explicit handoff uses the reviewed copy โ€” ๋‚ฉํ’ˆยทhandoff๋Š” ๊ฒ€ํ† ๊ฐ€ ๋๋‚œ ๋ณต์‚ฌ๋ณธ ํŒŒ์ผ ๊ธฐ์ค€.

  • advanced mode๋Š” ์ ๊ฒ€/๊ฒ€์ฆ์šฉ์œผ๋กœ ๋ถ„๋ฆฌ โ€” package inspectionยทedit planningยทvalidation์€ HWPX_MCP_ADVANCED=1์ผ ๋•Œ๋งŒ ์“ฐ๊ณ  ๊ธฐ๋ณธ ํ๋ฆ„๊ณผ ์„ž์ง€ ์•Š๋Š”๋‹ค.

ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ๊ณ„์•ฝ (no raw XML)

๋ชจ๋ธ์€ operation/plan๋งŒ ๋ณด๋‚ด๊ณ  raw XML์„ ์ง์ ‘ ํŽธ์ง‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. raw_xml_replace, arbitrary_xpath_mutation ๊ฐ™์€ ์›์‹œ XML ํ‘œ๋ฉด์€ public ๋„๊ตฌ๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์“ฐ๊ธฐ๋Š” python-hwpx์˜ ๋‹จ์ผ SavePipeline ๊ฒŒ์ดํŠธ(VisualComplete)๋ฅผ ํ†ต๊ณผํ•˜๋ฉฐ ์šฐํšŒ ๊ฒฝ๋กœ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(๋ฌด๊ฒฐ์„ฑยทXMLยทOPC/IDยท์—ด๋ฆผ์•ˆ์ „ยทFormFitยท๋ ˆ์ด์•„์›ƒยท์‹œ๊ฐ ์˜ค๋ผํด โ†’ ํ•˜๋‚˜์˜ ๋ฆฌํฌํŠธ).

  • ๋ชจ๋“  ์“ฐ๊ธฐ ์‘๋‹ต์— visualComplete ๋ธ”๋ก์ด ์‹ค๋ฆฝ๋‹ˆ๋‹ค: ok, status(verified/unverified/failed), errorCodes, warnings, suggestedRetry.

  • quality ๋ธ”๋ก์œผ๋กœ ๊ฒŒ์ดํŠธ๋ฅผ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค(์ƒ๋žต ์‹œ transparent = ์—ด๋ฆผ์•ˆ์ „๋งŒ). ์˜ˆ: apply_edits(..., quality="strict") ๋˜๋Š” quality={"mode":"strict","overflowPolicy":"fail","layoutLint":"strict"}.

  • ๊ฒŒ์ดํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์ €์žฅ์ด ๋ณด๋ฅ˜๋˜๊ณ (ok=false), ๊ตฌ์กฐํ™”๋œ ์˜ค๋ฅ˜ ์ฝ”๋“œ(FIELD_OVERFLOW, STALE_LINESEG_DETECTED, VISUAL_COMPLETE_FAILED, โ€ฆ)์™€ suggestedRetry๋กœ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

  • capability handshake๊ฐ€ core/mcp/plugin ๋ฒ„์ „+ํ•ด์‹œ๋ฅผ ์ ๊ฒ€ํ•˜๊ณ , skew ์‹œ ์“ฐ๊ธฐ๋ฅผ fail-closed๋กœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค(mcp_server_health.capability). ์ง„๋‹จ/์šฐํšŒ๋Š” HWPX_MCP_REQUIRE_CAPABILITY=0.

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

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

๋ณ€์ˆ˜

์„ค๋ช…

๊ธฐ๋ณธ๊ฐ’

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

HWPX_MCP_QUALITY

์ „์—ญ ๊ธฐ๋ณธ ์ €์žฅ ๊ฒŒ์ดํŠธ ์ •์ฑ…(transparent/strict). ๋„๊ตฌ๋ณ„ quality๊ฐ€ ์šฐ์„ 

transparent

HWPX_MCP_REQUIRE_CAPABILITY

0์ด๋ฉด capability skew fail-closed๋ฅผ ๋”(์ง„๋‹จ/์ „๋ฌธ๊ฐ€์šฉ)

1

LOG_LEVEL

๋กœ๊ทธ ๋ ˆ๋ฒจ

INFO

๋” ๋ณด๊ธฐ

ํ…Œ์ŠคํŠธ

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

๊ฐ์‚ฌ์˜ ๋ง

์ฝ”์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ python-hwpx ์œ„์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ์•„๋ž˜ ๊ณต๊ฐœ ํ‘œ์ค€ยทํ”„๋กœ์ ํŠธ์— ๋นš์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

License

Apache License 2.0. See LICENSE and NOTICE.

์ž‘์„ฑ์ž

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

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

โ€“Maintainers
20dResponse time
4dRelease cycle
30Releases (12mo)
Commit activity
Issues opened vs closed

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/airmang/hwpx-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server