关于 office-addin-mcp
office-addin-mcp 是 Go 编写的 MCP 服务,通过 WebView2/CDP 操作 Excel、Word、Outlook、PowerPoint 和 OneNote 中的 Office.js 加载项。它提供工作流级工具,将常见的多步操作合并为一次调用。
主要功能
- 01覆盖五款 Office 应用的工作流工具
- 02查询并发现文档结构
- 03支持变更订阅的 MCP 资源
- 04记录和重放工具宏
- 05通过无头 Chrome 自动化页面
适用场景
- 01汇总并查询 Excel 工作簿
- 02编辑 Word 文档或起草 Outlook 回复
- 03将 Excel 区域插入 PowerPoint 幻灯片
MCP 相关
该服务通过 stdio 与 MCP 客户端通信,并提供 Office 工作流工具、资源和订阅。它通过 WebView2/CDP 连接 Office 加载项,也支持针对无头 Chrome 的页面自动化。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
office-addin-mcp
通过一个使用 Go 编写的二进制程序,让任何 MCP 客户端都能驱动 Excel、Word、Outlook、PowerPoint 和 OneNote 加载项;该程序通过标准输入输出使用模型上下文协议进行通信。
office-addin-mcp 会连接到 Office 用于托管 Office.js 加载项的 WebView2 运行时,然后向大模型客户端提供一套高级工具接口。服务器为每个工作流提供一次工具调用,而不是让模型学习如何串联 15 个原始 Office.js 基本操作。
参见最新版本 · CHANGELOG.md · PLAN-workflow-surface.md。
亮点
- 工作流工具,而非基本操作。
excel.tabulateRegion、word.applyEdits、outlook.draftReply、powerpoint.rebuildSlideFromOutline、onenote.appendToPage和excel.summarizeWorkbook,每个工具都将过去需要 5–20 次调用的操作压缩为一次 Office.js 批处理(一次 CDP 往返)。 - 服务端查询 DSL。
excel.query/outlook.query/powerpoint.query/onenote.query会在宿主内部执行 filter / project / groupBy / agg / limit,因此 10 万行的工作簿也能返回 5 行答案。 - 持久化文档上下文缓存。
*.discover工具会将工作簿 / 文档 / 邮箱 / 演示文稿 / 笔记本的结构快照保存到%LOCALAPPDATA%\office-addin-mcp\doccache.json,因此重复的发现调用无需任何 CDP 往返。 - 支持实时订阅的 MCP 资源。 通过 URI 引用 Office 状态 —
office://excel/Book1/Sheet1!A1:D20、office://word/<doc>/bookmark/<name>、office://outlook/inbox、office://pp/<deck>/slide<N>、office://onenote/<notebook>/<section>/<page>— 并在内容变更时订阅notifications/resources/updated。 - 宏录制与回放。
macro.record_start→ 运行任意工具序列 →macro.record_stop会将 JSON 宏写入磁盘。服务器下次启动时,会将每个宏注册为可调用的macro.<name>工具。 - Office.js 错误自动诊断。
ItemNotFound、地址解析失败、幻灯片索引错误,以及撰写与读取模式不匹配等问题,都会在失败信息中补充available_sheets、nearest_name_suggestions、parsed_address、slide_count、item_mode和recoveryHint,让模型无需第二次往返即可自行纠正。 - CDP 连接自动修复。 如果 Excel 意外关闭,服务器会在下一次工具调用时检测到连接已断开,停止过时的旁加载注册,重新启动 Excel(必要时也会启动开发服务器),重置会话池,并重试原始操作 — 无需 Agent 介入。仅当服务器负责启动时才会启用(通过
--launch-addin或先前的addin.launch调用);连接到外部--browser-url端点时不会受到影响。 - 长时间操作的进度通知。
addin.launch、addin.ensureRunning和宏回放会在每个阶段边界(开发服务器启动、旁加载、等待 CDP 就绪、步骤执行)推送 MCP$/progress通知,让客户端可以显示实时状态栏,而非静止的加载指示器。 - 跨宿主编排。
office.embed可在一次调用中从 Excel 读取一个区域,并将其插入 PowerPoint 幻灯片。 - 页面自动化备用方案。
page.*/pages.*/inspect.*/interact.*支持截图、快照、点击、填充、输入、悬停、导航、执行、等待、控制台日志和网络日志 — 在 macOS/Linux 上针对无头 Chrome 使用相同的基本操作。 - 各宿主的
runScript备用接口。 当工作流工具接口无法满足需求时,excel.runScript、word.runScript、outlook.runScript、powerpoint.runScript、onenote.runScript可运行任意<Host>.run回调。
要求
| 要求 | 说明 |
|---|---|
| Windows 10/11 上的 Office | 所有 *.runScript / *.query / *.discover / *.applyDiff / addin.* 工具均需要此环境 — Office 仅在 Windows 上使用 WebView2 |
| Node.js 14+ | 用于 npx 安装方式 |
| Go 1.22+ | 仅在从源代码构建时需要 |
| macOS / Linux | 支持通过无头 Chrome 使用 page.* / pages.*(不含 Office) |
安装
npm(推荐)
npm install -g @dsbissett/office-addin-mcp
也可以按需运行,无需安装:
npx @dsbissett/office-addin-mcp@latest --help
预构建的 Windows x64、macOS(Intel + Apple Silicon)和 Linux(x64 + ARM64)二进制文件通过可选的 npm 依赖包提供 — 系统会自动获取正确的二进制文件。
从源代码构建
go install github.com/dsbissett/office-addin-mcp/cmd/office-addin-mcp@latest
在 Claude Code 中使用
一条命令即可全局注册此服务:
claude mcp add office-addin-mcp -- npx -y @dsbissett/office-addin-mcp@latest
也可以手动添加。项目级作用域(仓库中的 .claude/mcp.json)或用户级作用域(~/.claude.json → mcpServers)均可:
{
"mcpServers": {
"office-addin-mcp": {
"command": "npx",
"args": ["-y", "@dsbissett/office-addin-mcp@latest"]
}
}
}
然后,在任意 Claude Code 会话中:
- 打开 Office 宿主(参见下方的 Office 宿主设置),以便 WebView2 调试端口处于监听状态。
- 让 Claude 执行某项任务 — 例如 “总结此工作簿,然后按区域透视 Sales 工作表。” 它会自动选择
excel.summarizeWorkbook和excel.query。 - 在 Claude Code 中运行
/mcp查看工具列表,或在 shell 中运行claude mcp list。
**提示:**传入
--launch-addin,Claude 就能自动加载当前工作目录下的加载项项目。无需手动设置环境变量。
在其他 MCP 客户端中使用
VS Code(GitHub Copilot)
工作区配置位于 .vscode/mcp.json:
{
"servers": {
"office-addin-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@dsbissett/office-addin-mcp@latest"]
}
}
}
或者:打开命令面板 → MCP:添加服务器 → 粘贴命令。
Cursor
~/.cursor/mcp.json(全局)或 .cursor/mcp.json(项目级):
{
"mcpServers": {
"office-addin-mcp": {
"command": "npx",
"args": ["-y", "@dsbissett/office-addin-mcp@latest"]
}
}
}
Codex(OpenAI)
~/.codex/config.toml:
[mcp_servers.office-addin-mcp]
command = "npx"
args = ["-y", "@dsbissett/office-addin-mcp@latest"]
Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"office-addin-mcp": {
"command": "npx",
"args": ["-y", "@dsbissett/office-addin-mcp@latest"]
}
}
}
任何兼容 MCP 的客户端
- 命令:
npx - 参数:
["-y", "@dsbissett/office-addin-mcp@latest"] - 传输方式:
stdio
Office 宿主设置
只有在启动时设置调试端口环境变量,Office 宿主才会通过 CDP 暴露其 WebView2 运行时。此变量由所有 Office 应用共享,因此以下相同设置适用于全部五个应用:
PowerShell
$env:WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = "--remote-debugging-port=9222"
Start-Process excel.exe my-workbook.xlsx
# or: Start-Process winword.exe my-document.docx
# or: Start-Process outlook.exe
# or: Start-Process powerpnt.exe my-deck.pptx
# or: Start-Process onenote.exe
命令提示符
set WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--remote-debugging-port=9222
excel.exe my-workbook.xlsx
服务默认会探测 http://127.0.0.1:9222。可通过 --browser-url 或 --ws-endpoint 覆盖。也可以完全跳过设置,使用 --launch-addin — 服务会检测 cwd 下的 Office 加载项项目,并通过 office-addin-debugging 旁加载它。
工具概览
PLAN-workflow-surface.md 的阶段 0 删除了原始的 cdp.* 工具集;以下所有内容都是面向工作流的替代方案。每个工作流工具都对应一次 MCP 调用 → 一次 Office.js 批处理 → 一次 CDP 往返。
Excel
| 工具 | 用途 |
|---|---|
excel.summarizeWorkbook | 工作表、表格、命名区域、已用区域边界 — 单次调用 |
excel.tabulateRegion | 加载一个区域,返回按行组织的对象 + 每列的类型标签 |
excel.query | 服务端筛选 / 投影 / groupBy / agg / limit DSL |
excel.discover | 持久化工作簿指纹快照(doccache) |
excel.applyDiff | 在一次 Excel.run 中批量应用单元格/区域补丁 |
excel.runScript | 运行任意 Excel.run 回调 |
Word
| 工具 | 用途 |
|---|---|
word.discover | 文档结构快照 |
word.applyEdits | 在一次 Word.run 中批量执行查找/替换编辑 |
word.runScript | 运行任意 Word.run 回调 |
Outlook
| 工具 | 用途 |
|---|---|
outlook.query | 查询邮箱 / 当前项目 |
outlook.discover | 邮箱 + 活动项目快照 |
outlook.draftReply | 为撰写模式的项目设置主题和/或正文 |
outlook.runScript | 针对 Office.context.mailbox 运行任意回调 |
PowerPoint
| 工具 | 用途 |
|---|---|
powerpoint.query | 幻灯片级查询 DSL |
powerpoint.discover | 演示文稿结构快照 |
powerpoint.rebuildSlideFromOutline | 重写幻灯片标题和/或正文项目符号 |
powerpoint.runScript | 运行任意 PowerPoint.run 回调 |
OneNote
| 工具 | 用途 |
|---|---|
onenote.query | 笔记本 / 分区 / 页面查询 DSL |
onenote.discover | 笔记本结构快照 |
onenote.appendToPage | 向页面追加 HTML 和/或项目符号 |
onenote.runScript | 运行任意 OneNote.run 回调 |
跨主机与宏
| 工具 | 用途 |
|---|---|
office.embed | 读取 Excel 区域并将其插入 PowerPoint 幻灯片 |
macro.record_start | 开始将后续工具调用录制到指定名称的宏中 |
macro.record_stop | 完成录制并将宏保存到磁盘 |
macro.<name> | 重放已保存的宏(下次启动时自动注册) |
加载项生命周期与通用页面自动化
| 工具组 | 用途 |
|---|---|
addin.* | ensureRunning(从这里开始——先探测,需要时再启动)、launch、stop、detect、status、contextInfo、cfRuntimeInfo、openDialog、dialogSubscribe、dialogClose、listTargets |
page.* | screenshot、snapshot、click、fill、typeText、hover、navigate、evaluate、pressKey、waitFor、consoleLog、networkLog、networkBody |
pages.* | list、select、close、handleDialog |
inspect.* / interact.* | DOM / 无障碍检查和更高层级的交互基元 |
MCP 资源
大模型客户端可以通过 URI 引用 Office 状态,而不必在每轮重新获取。启动时会注册五个资源模板:
| URI 模板 | 基于 |
|---|---|
office://excel/<workbook>/<sheet>!<range> | excel.tabulateRegion |
office://word/<doc>/bookmark/<name> | word.runScript(内联脚本) |
office://outlook/<folder> | outlook.query |
office://pp/<deck>/slide<N> | powerpoint.query |
office://onenote/<notebook>/<section>/<page> | onenote.query |
资源支持 resources/subscribe。服务每 30s 轮询一次指纹,并在内容发生变化时发出 notifications/resources/updated;调用 resources/unsubscribe(或客户端断开连接)会终止轮询 goroutine。
性能说明
urlPattern根据目标 URL 的子字符串匹配来选择 WebView2 页面。对某个会话进行首次调用后,选择器缓存会将后续调用中的diagnostics.cdpRoundTrips从约 3 降至 1。- 会话池允许在 60 秒窗口内重新连接 3 次。用尽次数后会显示为
connection/session_acquire_failed。如果服务负责启动,显示该错误前会尝试自动停止并重新启动一次,因此 Excel 的临时重启对 Agent 不可见。 - DocCache 快照通过原子重命名写入,模式为 0600。使用
--no-doccache可禁用。
标志和环境变量
| 标志 | 环境变量 | 默认值 | 描述 |
|---|---|---|---|
--browser-url | — | http://127.0.0.1:9222 | WebView2 / Chrome 调试端点 |
--ws-endpoint | — | — | 直接指定浏览器 WebSocket URL(覆盖 --browser-url) |
--log-file | — | stderr | 将诊断信息追加到文件,而不是 stderr |
--log-level | — | info | slog 级别:debug、info、warn、error |
--launch-addin | — | off | 启动时自动检测并侧载 cwd 下的 Office 加载项项目,但仅在无法连接到 CDP 端点时执行 |
--launch-excel | — | off | --launch-addin 的已弃用别名 |
--no-doccache | — | off | 禁用持久化文档发现缓存(仍会运行 *.discover;跳过对 doccache.json 的读取和写入) |
--allow-dangerous-cdp | OAMCP_ALLOW_DANGEROUS_CDP | off | 启用 CDP 崩溃/终止方法 |
--version | — | — | 输出二进制版本并退出 |
该二进制不接受位置子命令——它通过 stdio 使用 MCP。旧版 call / daemon / serve --stdio 子命令已移除。
目录结构
cmd/office-addin-mcp/ main entry
internal/tools/ registry, dispatcher, envelope, diagnostics
internal/cdp/ hand-rolled CDP WebSocket client
internal/webview2/ endpoint discovery
internal/session/ session pool + reconnect budget
internal/officejs/ Office.js executor + payloads
internal/js/ embedded Office.js scripts
internal/doccache/ persistent document discovery cache
internal/resources/ office:// URI parsing + provider + polling watcher
internal/recorder/ macro recorder store
internal/tools/macrotool/ macro.record_start / record_stop / replay
internal/mcp/ SDK server wiring + resource registration
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。