Back to MCP directory
publicPublicdnsLocal runtime

hwp-mcp

一个通过MCP协议让LLM读写HWP文档的服务器,通过PowerShell桥接调用HWP COM API实现文档操作功能

article

README

🚀 HWP MCP 服务器

HWP MCP 服务器借助 HWP COM API,使大语言模型(LLMs)能够读取和修改二进制 HWP(韩文字处理软件文档)文件。

🚀 快速开始

运行 MCP 服务器

python -m hwp_mcp.server

Claude 桌面配置

{
  "mcpServers": {
    "hwp": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/hwp-mcp", "hwp-mcp"]
    }
  }
}

✨ 主要特性

  • 支持大语言模型通过 HWP COM API 读取和修改二进制 HWP 文档。
  • 提供丰富的工具集,涵盖文档管理、读写、格式设置、表格操作等多个方面。

📦 安装指南

uv pip install -e .

💻 使用示例

基础用法

# 运行 MCP 服务器
python -m hwp_mcp.server

📚 详细文档

MCP 工具(140 个)

文档管理(5 个)

| 工具 | 描述 | |------|-------------| | open_document | 打开 HWP 文档 | | close_document | 关闭文档 | | list_open_documents | 列出已打开的文档 | | save_document | 保存文档 | | save_document_as | 以不同名称/格式保存文档 |

读取(5 个)

| 工具 | 描述 | |------|-------------| | get_document_text | 提取全文 | | get_paragraphs | 获取段落列表 | | get_tables | 获取表格列表 | | get_table_data | 获取表格数据(二维数组) | | search_text | 搜索文本 |

写入(5 个)

| 工具 | 描述 | |------|-------------| | replace_text | 替换文本 | | insert_text | 插入文本 | | set_table_cell_text | 设置表格单元格文本 | | append_paragraph | 追加段落 | | set_text_file | 根据文本数据设置文档内容 |

格式设置(3 个)

| 工具 | 描述 | |------|-------------| | set_text_style | 字符格式设置(字体、大小、加粗、颜色等) | | set_paragraph_style | 段落格式设置(对齐方式、行间距) | | set_page_style | 页面格式设置(页边距、方向) |

表格(3 个)

| 工具 | 描述 | |------|-------------| | create_table | 创建表格 | | add_table_row | 添加表格行 | | delete_table_row | 删除表格行 |

高级操作(5 个)

| 工具 | 描述 | |------|-------------| | run_hwp_action | 执行任意 HWP 操作(高级用户) | | convert_to_hwpx | 将 HWP 转换为 HWPX | | convert_to_pdf | 将 HWP 转换为 PDF | | batch_convert_files | 批量转换文件(HWP、PDF、DOCX 等) | | set_file_security | 文件安全设置(复制/打印限制) |

光标与导航(11 个)

| 工具 | 描述 | |------|-------------| | move_cursor | 将光标移动到指定位置 | | get_cursor_position | 获取当前光标位置 | | set_cursor_position | 设置光标位置(列表、段落、位置) | | get_pos_by_set | 获取光标位置作为集合 | | set_pos_by_set | 根据集合设置光标位置 | | get_selected_pos_by_set | 获取选择的起始/结束位置 | | select_text | 通过坐标选择文本范围 | | get_selection_info | 获取当前选择信息 | | clear_selection | 清除选择 | | delete_selection | 删除所选内容 | | init_scan | 初始化文档扫描 |

字段(12 个)

| 工具 | 描述 | |------|-------------| | create_field | 创建命名字段(模板占位符) | | field_exists | 检查字段是否存在 | | get_field_list | 获取所有字段名称 | | get_field_text | 读取字段文本 | | put_field_text | 设置字段文本 | | get_current_field | 获取光标处的字段名称 | | set_current_field_name | 设置当前字段名称 | | move_to_field | 将光标移动到字段 | | rename_field | 重命名字段 | | modify_field_properties | 修改字段属性 | | set_field_ctrl_properties | 设置字段控件属性 | | batch_fill_fields | 批量填充多个字段 |

高级表格(11 个)

| 工具 | 描述 | |------|-------------| | add_table_column | 添加表格列 | | delete_table_column | 删除表格列 | | merge_table_cells | 合并单元格 | | split_table_cell | 拆分单元格 | | set_table_cell_style_adv | 单元格样式(背景、垂直对齐) | | set_table_border_adv | 表格边框样式 | | table_to_text | 表格转换为文本 | | text_to_table | 文本转换为表格 | | swap_table_row_col | 交换表格行/列 | | apply_table_template | 应用表格模板 |

增强格式设置(5 个)

| 工具 | 描述 | |------|-------------| | set_char_shape | 扩展字符属性(字距、间距、阴影等) | | set_bullet_style | 项目符号样式 | | set_numbering_style | 编号样式 | | set_tab_definition | 制表位 | | manage_style | 创建/删除/应用样式 |

页面与章节(10 个)

| 工具 | 描述 | |------|-------------| | set_section_definition | 章节定义(装订边距、文本流向) | | set_page_border | 页面边框和背景 | | set_columns | 多列布局 | | set_page_number | 页码 | | set_header_footer | 页眉/页脚 | | set_footnote_style | 脚注样式 | | set_master_page | 母版页 | | set_page_hiding | 隐藏页面元素(页眉/页脚等) | | set_page_num_ctrl | 页码控制(重新开始编号) | | set_text_direction | 文本方向(水平/垂直) |

图像与公式(3 个)

| 工具 | 描述 | |------|-------------| | insert_picture | 插入图片 | | insert_background_picture | 插入背景图片 | | create_equation | 插入公式 |

表单控件(3 个)

| 工具 | 描述 | |------|-------------| | insert_form_control | 插入表单控件(按钮、复选框等) | | set_form_properties | 设置表单控件属性 | | get_form_data | 读取表单数据 |

文档信息(5 个)

| 工具 | 描述 | |------|-------------| | get_document_info | 文档元数据(页数、修改状态) | | get_document_summary | 文档摘要(标题、作者) | | get_page_text | 提取特定页面的文本 | | get_page_count | 总页数 | | export_page_as_image | 将页面导出为图像 |

打印与导出(3 个)

| 工具 | 描述 | |------|-------------| | print_document | 打印文档 | | set_watermark | 设置水印(文本/图像) | | save_as_image | 将文档保存为图像 |

实用工具(4 个)

| 工具 | 描述 | |------|-------------| | convert_units | 单位转换(毫米、磅、HWP 单位) | | rgb_color | RGB/十六进制颜色转换为 HWP 颜色值 | | run_macro | 运行 HWP 宏 | | get_file_info | 获取文件元数据(无需打开) |

书签与超链接(6 个)

| 工具 | 描述 | |------|-------------| | insert_bookmark | 插入书签 | | insert_hyperlink | 插入超链接 | | hyperlink_jump | 跳转到超链接目标 | | insert_index_mark | 插入索引标记 | | insert_auto_number | 插入自动编号字段 | | insert_cross_reference | 插入交叉引用 |

页眉/页脚与标题(2 个)

| 工具 | 描述 | |------|-------------| | set_drop_cap | 首字下沉(装饰性首字母) | | set_caption | 表格/图像标题 |

文档操作(8 个)

| 工具 | 描述 | |------|-------------| | sort_text | 对文本进行排序 | | spell_check | 拼写检查 | | set_track_changes | 跟踪更改 | | mail_merge | 邮件合并 | | make_table_of_contents | 生成目录 | | insert_file | 插入另一个文件 | | set_password | 设置文档密码 | | save_block | 将选择内容保存到文件 |

兼容性与设置(3 个)

| 工具 | 描述 | |------|-------------| | set_compatible_document | 文档兼容模式 | | set_view_properties | HWP 视图属性(缩放、视图模式等) | | set_engine_properties | HWP 引擎属性(拼写检查、自动保存等) |

控件与对象(4 个)

| 工具 | 描述 | |------|-------------| | delete_ctrl | 删除所选控件 | | find_ctrl | 查找控件 | | check_x_object | 检查 X 对象是否存在 | | release_scan | 释放扫描资源 |

样式与脚本(4 个)

| 工具 | 描述 | |------|-------------| | import_style | 导入样式 | | export_style | 导出样式 | | run_script | 运行 HWP 脚本 | | get_script_source | 获取脚本源代码 |

系统与安全(11 个)

| 工具 | 描述 | |------|-------------| | register_module | 注册 COM 模块 | | set_drm_authority | DRM 权限 | | lock_command | 锁定/解锁命令 | | is_command_lock | 检查命令锁定状态 | | set_message_box_mode | 消息框模式 | | get_message_box_mode | 获取消息框模式 | | is_action_enable | 检查操作是否启用 | | replace_action | 替换操作处理程序 | | get_hwp_property | 获取 HWP COM 属性 | | set_hwp_property | 设置 HWP COM 属性 | | hwp_enum | 字符串转换为 HWP 枚举值 |

HParameterSet 操作(10 个)

| 工具 | 描述 | HParameterSet 数量 | |------|-------------|---------------------| | hwp_table_param_action | 表格操作 | 14 | | hwp_file_param_action | 文件操作 | 11 | | hwp_draw_param_action | 绘图对象操作 | 22 | | hwp_shape_param_action | 形状操作 | 6 | | hwp_style_param_action | 样式/边框操作 | 6 | | hwp_form_param_action | 表单操作 | 13 | | hwp_doc_info_param_action | 文档信息操作 | 9 | | hwp_hanja_param_action | 汉字/转换操作 | 11 | | hwp_selection_param_action | 选择/位置操作 | 6 | | hwp_misc_param_action | 杂项操作 | 69 |

项目结构

hwp-mcp/
├── src/hwp_mcp/
│   ├── __init__.py
│   ├── _core.py         # FastMCP 实例与共享辅助函数
│   ├── server.py        # 入口点,导入所有工具模块
│   ├── bridge.py        # PowerShell 子进程管理器
│   ├── commands.py      # JSON 命令构建器
│   └── tools/           # MCP 工具定义(140 个工具)
│       ├── cursor.py
│       ├── doc_info.py
│       ├── document.py
│       ├── drawing.py
│       ├── field.py
│       ├── form.py
│       ├── formatting.py
│       ├── hparam.py
│       ├── hwpobject.py
│       ├── page_section.py
│       ├── print_export.py
│       ├── system.py
│       ├── table.py
│       ├── text.py
│       └── utility.py
├── scripts/
│   ├── hwp_bridge.ps1   # PowerShell COM 桥接调度器
│   └── handlers/        # 12 个处理模块
│       ├── document.ps1
│       ├── text.ps1
│       ├── table.ps1
│       ├── style_format.ps1
│       ├── action.ps1
│       ├── cursor_selection.ps1
│       ├── field.ps1
│       ├── draw_object.ps1
│       ├── form_control.ps1
│       ├── document_info.ps1
│       ├── print_export.ps1
│       ├── utility.ps1
│       └── hwpobject_methods.ps1
├── tests/
│   ├── test_bridge.py   # 桥接单元测试
│   ├── test_commands.py # 命令构建器单元测试
│   └── test_server.py   # 服务器工具单元测试
└── pyproject.toml

开发

uv pip install -e ".[dev]"
pytest tests/ -v
ruff check src/ tests/

🔧 技术细节

Python MCP 服务器管理一个长期运行的 PowerShell 子进程,该子进程托管 HWP COM 对象。架构如下:

LLM ↔ MCP Server (Python/FastMCP) ↔ PowerShell Bridge (JSON stdin/stdout) ↔ HWP COM API ↔ 한글

📄 许可证

本项目采用 MIT 许可证。

⚠️ 局限性

  • 仅支持 Windows:HWP COM API 仅在 Windows 系统上可用。
  • 需要安装韩文字处理软件:必须安装 한컴오피스 한글。
  • 仅支持二进制 HWP 文件:基于 XML 的 HWPX 文件需要单独的服务器。
help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client