Open-Source Teardown

ExcelMcp 项目拆解

sbroenne/mcp-server-excel:用 MCP 驱动真实 Excel 进程的自动化服务器。双入口架构、COM 自动化层、会话生命周期与选型对比。

.NET 10 · Windows · MIT · 326 operations

它是什么

ExcelMcp 是一个把真实运行的 Microsoft Excel 应用暴露给 AI agent 的 MCP Server。关键差异:它不是用 openpyxl 之类库去解析 .xlsx 文件,而是通过 Windows COM 调用 Excel 官方的 Excel.Application API——操作的就是你屏幕上那个 Excel 进程。

这个设计决策带来一组独特能力:

因为工作由真实 Excel 完成,结果可以实时查看、继续手工编辑——这是"文件解析 + 重写"路线永远给不了的交互体验。

326
原子操作数
完整参考见官网 Features
2
平等入口
MCP Server + CLI
−64%
CLI 相对 MCP
token 消耗降幅
0
云端依赖
纯本地运行

架构分层

源码按层拆分为多个 .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 ServerCLI(excelcli)
调用方式进程内调用 ExcelMcpService命名管道连到 CLI daemon
面向对象对话式助手、探索性工作编码 agent、脚本、RPA
工具发现富 schema + 工具发现 + 持久会话单一紧凑工具面
token 占用同任务基准 ~163K~59K(−64%)
会话保活随 MCP 客户端连接daemon 持久 + 托盘监控
💡 洞察 CLI 的 token 优势来自一个朴素事实:326 个工具的 schema 全部塞进上下文非常昂贵。CLI 把工具面收敛成一个入口,让 agent 用文本命令交互——同任务基准 59K vs 163K。这个思路对任何"工具数量爆炸"的 MCP 项目都适用。

会话生命周期

两个入口都用显式会话(session)管理 Excel:打开工作簿 → 执行命令 → 显式关闭。好处有二:避免反复开关工作簿;给 COM 资源回收和 Excel 进程关闭一个统一的受控位置。

CLI daemon 额外提供桌面集成:系统托盘图标可监控会话、接收更新通知、处理保存提示、停止 daemon。Excel 可保持隐藏提速,也可以显示出来与 AI 助手并排交互。

⚠️ 硬约束 ExcelMcp 要求对工作簿独占访问——自动化前必须关闭目标 Excel 文件。且只能跑在 Windows 10+、桌面版 Excel 2016+、有交互式桌面会话的机器上(不能无人值守跑在服务器)。

一次完整调用:数据流拆解

以「刷新 Power Query 并读取结果」为例,从用户一句话到 Excel 落盘,全部发生在本机:MCP 客户端只与本地进程通信,工作簿数据不出机器。DAX 查询(evaluate、execute-dmv)需要 MSOLAP 提供程序——装 Power BI Desktop 即附带。

对比:ExcelMcp vs Copilot 365

两者不是替代关系,而是不同抽象层:Copilot 是"会聊天的 Excel 助手",ExcelMcp 是"给 agent 的完整 Excel API"。

维度ExcelMcpCopilot 365
控制粒度326 个原子操作,精确到单元格/表/查询自然语言黑盒,意图到操作的映射不可控
可验证性结构化返回,可校验可重试"改了个大概",难以程序化验证
输出收敛命令式调用,无 LLM 二次发挥空间LLM 生成操作,输出不收敛风险高
PQ / DAX / VBA刷新 PQ、执行 DAX、跑 VBA支持极弱或缺失
批量自动化CLI 可脚本化 RPA,会话持久化不可脚本,每次都是对话
数据边界纯本地,数据不出机器经过微软云
成本MIT 免费(已有 Excel 即可)按月订阅
门槛Windows + 桌面 Excel + 一次性配置开箱即用
🔒 安全面 能执行 VBA 意味着 MCP 客户端等于拥有本机代码执行权。公司机器上只接入你信任的 agent;这也是所有"本地自动化型"MCP server 的共性风险。

对我的场景意味着什么

作为 Serviceability 工程师,我的 pipeline 是:LLM 提取结构化工单字段 → PostgreSQL → 报表输出。目前最后一段(数据 → Excel 报表)靠 Copilot 365 手工搬运。ExcelMcp 恰好补上这一段:

🔗 项目地址

github.com/sbroenne/mcp-server-excel · 文档 excelmcpserver.dev · MIT License