它是什么
ExcelMcp 是一个把真实运行的 Microsoft Excel 应用暴露给 AI agent 的 MCP Server。关键差异:它不是用 openpyxl 之类库去解析 .xlsx 文件,而是通过 Windows COM 调用 Excel 官方的 Excel.Application API——操作的就是你屏幕上那个 Excel 进程。
这个设计决策带来一组独特能力:
- Power Query 刷新 — 重跑数据连接与转换,文件解析库做不到
- DAX 查询执行 — 直接查询工作簿的数据模型(Power Pivot)
- VBA 与 Python =PY() 执行 — 保留工作簿内既有宏与脚本能力
- 公式重算 / 透视表刷新 / 图表生成 — 全部经由 Excel 自身引擎
- 保真 — 现有工作簿的格式、宏、连接串全部保留
因为工作由真实 Excel 完成,结果可以实时查看、继续手工编辑——这是"文件解析 + 重写"路线永远给不了的交互体验。
架构分层
源码按层拆分为多个 .NET 项目,两条入口最终汇到同一组 Core 命令:
ExcelMcp.Core
- 命令路由与工作簿会话管理
- 326 个命令的参数、默认值、校验
- 两个入口共享同一份行为定义
ExcelMcp.ComInterop
- COM 互操作层,包装 Excel.Application
- COM 资源管理与 Excel 进程关闭
- 架构上唯一接触 Excel 的层
ExcelMcp.Service
- Service 守护宿主:命名管道接入
- 连接数限制、空闲关闭、连接排空
- 专为 CLI 进程服务(MCP 不走管道)
Server / CLI / Generators
- McpServer:进程内调用 Service
- CLI:后台 daemon + 系统托盘
- Generators:工具 schema / 文档生成
双入口:MCP Server 与 CLI
项目把两个入口做成一等公民:同一组 Core 命令、同样的参数与校验,只是进程模型不同。两个入口各自管理自己的 Excel 实例,不共享活跃会话。
| 维度 | MCP Server | CLI(excelcli) |
|---|---|---|
| 调用方式 | 进程内调用 ExcelMcpService | 命名管道连到 CLI daemon |
| 面向对象 | 对话式助手、探索性工作 | 编码 agent、脚本、RPA |
| 工具发现 | 富 schema + 工具发现 + 持久会话 | 单一紧凑工具面 |
| token 占用 | 同任务基准 ~163K | ~59K(−64%) |
| 会话保活 | 随 MCP 客户端连接 | daemon 持久 + 托盘监控 |
会话生命周期
两个入口都用显式会话(session)管理 Excel:打开工作簿 → 执行命令 → 显式关闭。好处有二:避免反复开关工作簿;给 COM 资源回收和 Excel 进程关闭一个统一的受控位置。
CLI daemon 额外提供桌面集成:系统托盘图标可监控会话、接收更新通知、处理保存提示、停止 daemon。Excel 可保持隐藏提速,也可以显示出来与 AI 助手并排交互。
一次完整调用:数据流拆解
以「刷新 Power Query 并读取结果」为例,从用户一句话到 Excel 落盘,全部发生在本机:MCP 客户端只与本地进程通信,工作簿数据不出机器。DAX 查询(evaluate、execute-dmv)需要 MSOLAP 提供程序——装 Power BI Desktop 即附带。
对比:ExcelMcp vs Copilot 365
两者不是替代关系,而是不同抽象层:Copilot 是"会聊天的 Excel 助手",ExcelMcp 是"给 agent 的完整 Excel API"。
| 维度 | ExcelMcp | Copilot 365 |
|---|---|---|
| 控制粒度 | 326 个原子操作,精确到单元格/表/查询 | 自然语言黑盒,意图到操作的映射不可控 |
| 可验证性 | 结构化返回,可校验可重试 | "改了个大概",难以程序化验证 |
| 输出收敛 | 命令式调用,无 LLM 二次发挥空间 | LLM 生成操作,输出不收敛风险高 |
| PQ / DAX / VBA | 刷新 PQ、执行 DAX、跑 VBA | 支持极弱或缺失 |
| 批量自动化 | CLI 可脚本化 RPA,会话持久化 | 不可脚本,每次都是对话 |
| 数据边界 | 纯本地,数据不出机器 | 经过微软云 |
| 成本 | MIT 免费(已有 Excel 即可) | 按月订阅 |
| 门槛 | Windows + 桌面 Excel + 一次性配置 | 开箱即用 |
对我的场景意味着什么
作为 Serviceability 工程师,我的 pipeline 是:LLM 提取结构化工单字段 → PostgreSQL → 报表输出。目前最后一段(数据 → Excel 报表)靠 Copilot 365 手工搬运。ExcelMcp 恰好补上这一段:
- 程序化出报表 — PG 查询结果经 agent 写入模板工作簿,刷新 PQ、重算公式一步到位
- 输出可验证 — 每步结构化返回,符合"LLM 输出不收敛"痛点下的可验证性要求
- 数据不出公司 — 纯本地运行,满足合规约束
- 限制明确 — 只能装 Windows + Excel 的机器,Mac 侧无法使用;无人值守场景受限
🔗 项目地址
github.com/sbroenne/mcp-server-excel · 文档 excelmcpserver.dev · MIT License