返回市场
mcp-Office互操作Word

mcp-Office互操作Word

作者:mario-andreschak12 星标更新:2025-04-27

项目介绍

MCP Office Interop Word Server

该项目实现了一个模型上下文协议(MCP)服务器,允许通过Windows上的COM互操作与Microsoft Word文档进行交互。

它提供了MCP工具来编程地执行常见的Word处理任务。

功能

  • 通过COM互操作(winax)封装常见的Microsoft Word操作。
  • 将功能暴露为MCP工具。
  • 支持stdiosse传输方式用于MCP通信。
  • 使用TypeScript编写,并使用了@modelcontextprotocol/sdk

预备条件

  • Node.js(推荐v18或更高版本)
  • npm
  • 在Windows机器上安装Microsoft Word。

安装

  1. 克隆仓库或下载源代码。
  2. 在终端中导航到项目目录。
  3. 安装依赖项:
    npm install
    

编译

要将TypeScript代码编译成JavaScript:

npm run build

这将把编译后的文件输出到dist目录。

运行服务器

服务器可以使用两种不同的MCP传输方式运行:stdiosse

stdio传输

这是默认模式。适用于通过标准输入/输出进行通信的本地客户端。

npm start

或者

node dist/index.js

使用stdio方法连接您的MCP客户端(例如,MCP Inspector),指向node dist/index.js命令。

SSE(服务器发送事件)传输

此模式使用HTTP和服务器发送事件,适用于基于Web或远程客户端。

PowerShell:

$env:MCP_TRANSPORT="sse"; npm start

Bash / Cmd:

MCP_TRANSPORT=sse npm start

服务器将启动一个HTTP服务器,通常在3001端口(或由PORT环境变量指定的端口)。

  • SSE端点: http://localhost:3001/sse
  • 消息端点(供客户端POST): http://localhost:3001/messages

使用SSE方法连接您的MCP客户端,提供SSE端点URL。

可用工具

服务器公开了以下工具(工具名称以word_为前缀):

文档操作:

  • word_createDocument: 创建一个新的空白Word文档。
  • word_openDocument: 打开一个已存在的文档。
    • filePath (字符串): 文档的绝对路径。
  • word_saveActiveDocument: 保存当前活动文档。
  • word_saveActiveDocumentAs: 将活动文档另存为新的路径/格式。
    • filePath (字符串): 要保存到的绝对路径。
    • fileFormat (数字, 可选): 数字WdSaveFormat值(例如,16为docx,17为pdf)。
  • word_closeActiveDocument: 关闭活动文档。
    • saveChanges (数字, 可选): WdSaveOptions值(0=不保存,-1=保存,-2=提示)。默认: 0。

文本操作:

  • word_insertText: 在选择处插入文本。
    • text (字符串): 要插入的文本。
  • word_deleteText: 根据选择删除文本。
    • count (数字, 可选): 要删除的单位数(默认: 1)。正数=向前,负数=向后。
    • unit (数字, 可选): WdUnits值(1=字符,2=单词等)。默认: 1。
  • word_findAndReplace: 查找并替换文本。
    • findText (字符串): 要查找的文本。
    • replaceText (字符串): 替换文本。
    • matchCase (布尔, 可选): 默认: false。
    • matchWholeWord (布尔, 可选): 默认: false。
    • replaceAll (布尔, 可选): 默认: true。
  • word_toggleBold: 切换选择的粗体格式。
  • word_toggleItalic: 切换选择的斜体格式。
  • word_toggleUnderline: 切换选择的下划线格式。
    • underlineStyle (数字, 可选): WdUnderline值(默认: 1=单线)。

段落格式化:

  • word_setParagraphAlignment: 设置段落对齐方式。
    • alignment (数字): WdParagraphAlignment值(0=左对齐,1=居中,2=右对齐,3=两端对齐)。
  • word_setParagraphLeftIndent: 设置左缩进。
    • indentPoints (数字): 缩进值,以点为单位。
  • word_setParagraphRightIndent: 设置右缩进。
    • indentPoints (数字): 缩进值,以点为单位。
  • word_setParagraphFirstLineIndent: 设置首行/悬挂缩进。
    • indentPoints (数字): 缩进值,以点为单位(正值=缩进,负值=悬挂)。
  • word_setParagraphSpaceBefore: 设置段落前间距。
    • spacePoints (数字): 间距值,以点为单位。
  • word_setParagraphSpaceAfter: 设置段落后间距。
    • spacePoints (数字): 间距值,以点为单位。
  • word_setParagraphLineSpacing: 设置行间距。
    • lineSpacingRule (数字): WdLineSpacing值(0=单倍行距,1=1.5倍行距,2=双倍行距,3=至少,4=固定,5=多倍)。
    • lineSpacingValue (数字, 可选): 对于规则3、4、5所需的值。

表格操作:

  • word_addTable: 在选择处添加一个表格。
    • numRows (数字): 行数。
    • numCols (数字): 列数。
  • word_setTableCellText: 设置表格单元格中的文本。
    • tableIndex (数字): 从1开始的表格索引。
    • rowIndex (数字): 从1开始的行索引。
    • colIndex (数字): 从1开始的列索引。
    • text (字符串): 要设置的文本。
  • word_insertTableRow: 向表格中插入一行。
    • tableIndex (数字): 从1开始的表格索引。
    • beforeRowIndex (数字, 可选): 在这个从1开始的行索引之前插入(如果省略,则插入到最后)。
  • word_insertTableColumn: 向表格中插入一列。
    • tableIndex (数字): 从1开始的表格索引。
    • beforeColIndex (数字, 可选): 在这个从1开始的列索引之前插入(如果省略,则插入到最右边)。
  • word_applyTableAutoFormat: 应用一种样式到表格。
    • tableIndex (数字): 从1开始的表格索引。
    • formatName (字符串 | 数字): 样式名称或WdTableFormat值。

图片操作:

  • word_insertPicture: 插入一个内嵌图片。
    • filePath (字符串): 图像文件的绝对路径。
    • linkToFile (布尔, 可选): 默认: false。
    • saveWithDocument (布尔, 可选): 默认: true。
  • word_setInlinePictureSize: 调整内嵌图片大小。
    • shapeIndex (数字): 内嵌形状的从1开始的索引。
    • heightPoints (数字): 高度,以点为单位(-1或0自动调整)。
    • widthPoints (数字): 宽度,以点为单位(-1或0自动调整)。
    • lockAspectRatio (布尔, 可选): 默认: true。

页眉/页脚操作:

  • word_setHeaderFooterText: 设置页眉或页脚中的文本。
    • text (字符串): 文本内容。
    • isHeader (布尔): 对于页眉为true,对于页脚为false。
    • sectionIndex (数字, 可选): 从1开始的部分索引(默认: 1)。
    • headerFooterType (数字, 可选): WdHeaderFooterIndex值(1=主要,2=首页,3=偶数页)。默认: 1。

页面设置操作:

  • word_setPageMargins: 设置页面边距。
    • topPoints (数字): 上边距,以点为单位。
    • bottomPoints (数字): 下边距,以点为单位。
    • leftPoints (数字): 左边距,以点为单位。
    • rightPoints (数字): 右边距,以点为单位。
  • word_setPageOrientation: 设置页面方向。
    • orientation (数字): WdOrientation值(0=纵向,1=横向)。
  • word_setPaperSize: 设置纸张大小。
    • paperSize (数字): WdPaperSize值(例如,1=信纸,8=A4)。

注意事项

  • 此服务器需要在运行服务器的机器上安装并可通过COM互操作访问Microsoft Word。
  • COM操作的错误处理是基本的。生产使用可能需要更详细的错误检查和恢复。
  • Word对象模型常量(如WdSaveFormatWdUnits等)在其工具参数中以数值形式表示。您可能需要参考Word VBA文档以获取特定值。