Skip to main content
Glama

📊 duduExcel

CI PyPI Python Downloads License: MIT MCP

面向 AI Agent 的 Excel MCP 服务 —— 上下文高效 + 安全读写 + 中文场景 + 公式验证。

English | 中文

其他 Excel MCP 会把"已取消"的行和"生效中"的行读成一模一样的字符串, duduExcel 保留删除线 —— 因为作者留下的格式,本身就是语义。

# 免安装直接跑(推荐,无需 pip install)
uvx duduexcel

# 或安装后运行
pip install "duduexcel[analysis]"

💡 uvx duduexcel 与主流 Excel MCP 体验一致:零安装、自动拉最新版。 挂载到 MCP 客户端时用 uvx duduexcel 作为 command 即可(见下方「挂载」)。

Agent ──MCP(stdio)──► duduExcel ──► openpyxl/pandas ──► .xlsx

为什么又一个 Excel MCP?

调研 GitHub 上 10+ 个同类项目后发现,它们分裂成两个对立阵营,没人同时做到"能写"和"不炸上下文":

阵营

代表

能写

上下文友好

问题

读写全能型

haris-musa、knorq

✅

❌

整表读进上下文就爆了

原子分析型

jwadow、jdatamunch

❌ 只读

✅

改不了文件

方法论型

Anthropic 官方 xlsx skill

✅(靠写代码)

✅

靠 Agent 自己写 Python,不稳定

duduExcel:三者合一 —— 服务端原子分析(省 token)+ 完整读写 + 内置 Skill。

Related MCP server: MCP Excel Server

✨ 能力(19 个工具)

层

工具

说明

探查

workbook_info

表清单、行列数、合并单元格数、隐藏行列数、内嵌图片数、文件大小

sheet_profile

列画像:类型/空值率/唯一数/Top值/统计(一次替代十几次调用)

分析

filter_count

条件计数(14 种运算符),只回传数字

aggregate

sum/mean/count/… 支持分组与过滤

top_n

排行榜,只回传前 N 行

读写

read_range

分页读取(默认 limit=200);含格式语义与隐藏处理

write_cells

批量写入,一次调用完成;= 开头即公式

验证 ⭐

recalculate

公式重算 + 外链熔断(差异化,竞品多不支持)

scan_formula_errors

扫描 7 类公式错误

中文 ⭐

apply_chinese_style

微软雅黑表头、中文列宽自适应、冻结首行、细边框

set_number_format

¥#,##0 / 0.0% / 0.0x 等内置格式

图表 ⭐

add_chart

bar/line/pie/scatter

高级

create_pivot

静态透视汇总表(诚实标注不可交互)

add_conditional_format

数据条/色阶/阈值高亮/区间/重复值

list_conditional_formats

读取已有条件格式(写入+读取闭环)

compare_sheets

两表按关键列比对,只回差异摘要

join_sheets

两表关联(left/right/inner/outer),只回前 N 行

list_images

列出内嵌图片(零依赖扫描 xl/media/)

安全

revert_last_write

回滚最近一次写入

⭐ = 差异化能力

🔑 汲取的设计(附来源)

设计点

来源

落地

一次调用替代 N 次试探

jwadow get_data_profile

sheet_profile

服务端原子操作(results, not rows)

jwadow

filter_count/aggregate/top_n

_meta.tokens_saved 自报节省

jdatamunch

每个分析工具的 _meta

结果附 Excel 公式(可复现)

jwadow

filter_count/aggregate/top_n

TSV 输出(便于粘回 Excel)

jwadow

aggregate/top_n

批量接口,禁止循环调用

knorq

write_cells

路径白名单 + 拒目录穿越

haris-musa

DUDU_EXCEL_ROOT

外链熔断、诚实截断、交付前验证

官方 recalc.py

recalculate

格式语义、隐藏处理、内嵌图片、原子保存

excel-vision-mcp

read_range 标记 / list_images / 原子保存

⚡ 30 秒快速体验

pip install "duduexcel[analysis]"

仓库自带演示文件 examples/demo.xlsx(内含删除线、黄底高亮、隐藏行、公式埋点)。 接上 MCP 客户端后试试:

读一下 examples/demo.xlsx 的需求清单,哪些条目已经取消了?

→ 返回带格式语义的视图,看得见"已取消"和"已批准"的区别:

A3: 旧版导出 [S] | C3: 已取消 [S]          ← [S] = 删除线
A4: 司机点名      | C4: 待审阅 [HL:FFFF00]  ← 黄底 = 待审阅

更多示例见 examples/README.md。

🚀 安装与挂载

pip install "duduexcel[analysis]"     # analysis 启用 pandas 分析工具
uvx duduexcel                          # 免安装运行

opencode(~/.config/opencode/opencode.jsonc):

"duduexcel": {
  "type": "local",
  "command": ["python", "-u", "-m", "duduexcel"],
  "enabled": true
}

Claude Desktop / Cursor / Cline:

{ "mcpServers": { "duduexcel": { "command": "uvx", "args": ["duduexcel"] } } }

改完配置需重启客户端生效。

🔄 第二轮调研补齐的盲区

调研 VOYAGER-Inc/excel-vision-mcp 后发现 openpyxl 生态的普遍盲区(duduExcel 原本也有): 内嵌图片、格式语义、隐藏行列全部丢失。

修复前  [["旧版导出","已取消"], ["司机点名","待审阅"]]
修复后  A3: 旧版导出 [S] | B3: 已取消 [S]        ← [S]=删除线(已取消)
        A4: 司机点名 | B4: 待审阅 [HL:yellow]    ← [HL:]=黄底(待审阅)

已补齐:格式语义标记、隐藏内容智能处理、内嵌图片清单、原子保存、多目录沙箱。

🔒 安全

  • 多目录沙箱:DUDU_EXCEL_ROOT 支持多个目录(Windows ;、其他 :),拒绝绝对路径与 .. 穿越

  • 原子保存:写临时文件成功后再替换,失败的写入永不损坏原文件

  • 备份与回滚:写前 .bak,异常自动还原,revert_last_write 可撤销

  • 外链熔断:拒绝不可逆的重算,除非显式 force=true

  • 本地优先:stdio 传输,文件不出本机

⚠️ 已知限制(诚实清单)

  • 不支持可交互透视表:create_pivot 生成静态汇总表(数值已验证,如华东 365 / 华南 210), 但 openpyxl 无法创建真 PivotTable(实测 ws._pivots 为空),故不可点击交互。

  • 条件格式只能写入不能读取 —— 已更正:实测可以完整读回 (作用区域/类型/运算符/阈值/填充色/优先级,4 条规则全部读回)。 此前我照抄竞品 knorq 的 Known Limitations 却未亲自验证,这是错误的。

  • .xlsm 宏:读取保留 VBA,写入不保证

  • 单次写入上限 10 万单元格

  • 重算已在本机打通验证(LibreOffice 26.8):实测 4 秒完成, =SUM(销售!C2:C7) 正确算出 575 并落盘。未装时明确降级,绝不静默假装成功。

    • ⚠️ 中文路径坑(已修复):LibreOffice 在中文路径下原地覆盖会失败 (SfxBaseModel::impl_store failed: 0x4c0c)。改为输出到纯 ASCII 临时目录再移回, 因此 E:\工作类\研发\ 这类路径也能正常重算。

🧪 测试

python tests/test_smoke.py          # M1 读写与分页
python tests/test_m2.py             # M2 服务端分析
python tests/test_m34.py            # M3 重算降级 + M4 中文样式与图表
python tests/test_m6.py             # M6 透视表/条件格式/多表关联
python tests/test_edge_cases.py     # 边界回归(防 BUG 复发)
python tests/test_m7.py             # M7 格式语义/隐藏/图片/原子保存
python tests/test_m8_recalc.py      # M8 真实重算(无 LibreOffice 自动跳过)
python tests/test_m9_conditional.py # M9 条件格式读取

9 个测试文件全部通过,另有 20 项 MCP 端到端验证(覆盖全部 19 个工具)。

🧠 踩过的坑

  1. openpyxl read_only=True 不加载行列维度 —— 隐藏检测会静默失效,改为解析 sheet XML

  2. mcp 2.x 丢弃 str \| None(PEP 604)标注的参数 —— 传了却不生效,改用 Optional[str]

  3. 图表 Reference(range_string="B2:B5") 要求 表名!A1:B2 —— 改用 range_boundaries()

  4. 重复 @mcp.tool() 注册同名函数 → Tool already exists 且行为异常

  5. 内部函数误加 @mcp.tool()(_as_bool 曾成伪工具,污染列表)

  6. 构造结果后漏 rules.append(item) —— 遍历正常却无结果,属静默 BUG

📚 Skill 层

skill/duduexcel/
├── SKILL.md                  # 工具路由 + 5 条铁律 + 公式约束
└── references/
    ├── style.md              # 财务配色语义、数字格式码
    ├── formulas.md           # 函数白名单、_xlfn. 前缀、7 类错误
    └── charts.md             # 图表做法与保真度

合规:Anthropic 官方 xlsx skill 为 Proprietary(禁止衍生作品)。 本 Skill 仅借鉴其工程思想,文字与代码均独立撰写。

🗺️ 路线图

  • M1 核心 + 安全读写

  • M2 服务端分析 + token 自报

  • M3 公式重算 + 外链熔断

  • M4 中文样式 + 图表

  • M5 Skill 层

  • M6 透视表 / 条件格式 / 多表关联

  • M7 格式语义 / 隐藏 / 图片 / 原子保存

  • M8 真实重算闭环(含中文路径修复)

  • M9 条件格式读取

  • 可交互透视表(受 openpyxl 限制)

License

MIT © Shine8592

Available Tools

24 tools
add_chartA

插入图表(差异化能力:官方 xlsx skill 无图表指导,竞品 knorq 明确不支持图表)。

参数:

  • data_range:数据区域,如 "B2:B10"

  • chart_type:bar / line / pie / scatter(默认 bar)

  • categories_range:分类轴区域,如 "A2:A10"

  • title:图表标题

  • anchor_cell:图表左上角锚定位置(默认 E2)

Inputs: file_path (required), data_range (required), sheet, title, +3 more.

add_conditional_formatA

添加条件格式(openpyxl 原生规则,真实生效)。

cond_type 可选:

  • data_bar:数据条(无需 value)

  • color_scale:色阶(无需 value)

  • greater_than / less_than / equal:需要 value

  • between:需要 value 与 value2

  • duplicate:高亮重复值(无需 value)

参数:

  • cell_range:作用区域,如 "C2:C100"

  • value / value2:阈值

Inputs: cond_type (required), file_path (required), cell_range (required), sheet, +2 more.

add_data_validationA

给区域加数据验证(下拉列表 / 数值区间 / 日期区间)。

用途:表单类表格中限定某列只能选指定值(如"状态"列只能选 生效 / 作废 / 待审阅), 或限定数值范围(如金额必须 >= 0)。

参数:

  • file_path:工作簿路径

  • cell_range:目标区域,如 "D2:D100"

  • dv_type:list / whole / decimal / date / time / textLength / custom

  • formula1:

    • list:'"选项1,选项2,选项3)' —— 注意外层单引号内必须带双引号

    • whole / decimal:如 ">=0" 或 "1"(区间则配合 formula2)

  • formula2:区间上界,如 "<=100"

  • allow_blank:是否允许空值

返回:写入的规则信息(真实 OOXML 数据验证,Excel 中生效)。

Inputs: file_path (required), cell_range (required), sheet, dv_type, +3 more.

aggregateA

服务端聚合:sum / mean / median / min / max / count / std / var / nunique。

关键:聚合在服务端算好,只回传"每组一个数字"。 不要让模型自己遍历数据求和 —— 大数相加模型极易算错。

参数:

  • column:要聚合的列

  • op:聚合运算(默认 sum)

  • group_by:分组列(可多列),给出透视表式结果

  • filters:过滤条件(格式同 filter_count)

  • top_n:分组结果只返回前 N 组(按聚合值降序)

返回:聚合值或分组表,附 tsv(可直接粘回 Excel)与等价 Excel 公式。

Inputs: column (required), file_path (required), op, sheet, +3 more.

apply_chinese_styleA

套用中文场景样式:中文字体表头、自动列宽(中文按 2 字符宽)、冻结首行、细边框。

为什么需要它:通用规范常推荐 Arial/Times New Roman,但对中文表格并不适用。 本工具默认使用微软雅黑(屏幕阅读友好),并让中文列宽自适应(中文按 2 字符宽计算)。

参数:

  • header_row:表头行号(默认 1)

  • auto_width:是否自适应列宽(默认 True)

  • freeze_header:是否冻结表头(默认 True)

  • font_name:自定义字体,省略用微软雅黑

Inputs: file_path (required), sheet, font_name, auto_width, +2 more.

compare_sheetsA

按关键列比对两个工作表的差异 —— 只回传差异摘要,不回传整表。

用途:版本对比、变更检测、对账。

返回:仅在表1 / 仅在表2 / 值有差异 三类统计, 以及最多 max_diff 条差异明细(超出会明确说明截断数量,以统计值为准)。

Inputs: sheet1 (required), sheet2 (required), file_path (required), key_column (required), +2 more.

create_interactive_pivotA

Create an INTERACTIVE PivotTable (a real Excel PivotTable object).

Difference from create_pivot (static summary):

  • create_pivot : writes aggregated numbers into cells - fast but static

  • create_interactive_pivot: injects real OOXML pivot parts, so in Excel you can drag fields, expand/collapse and refresh (structure validated with LibreOffice)

Args:

  • rows / columns / values: row / column (cross-tab) / value fields

  • agg_func: sum / count / average / min / max (default sum)

  • page_fields: report filter fields

  • filters: row filters (same format as filter_count)

  • target_sheet: target worksheet (created if missing)

  • location: top-left anchor (default A3)

LIMITATIONS:

  1. Saving this file again with openpyxl (incl. this server's write_cells) will DROP the PivotTable - openpyxl cannot write pivot parts back. Generate it LAST.

  2. Not supported: field grouping, calculated fields/items, slicers, timelines, multiple sources, data model.

  3. LibreOffice recognizes it but interacts more weakly than Excel.

Inputs: rows (required), values (required), file_path (required), columns, +6 more.

create_pivotA

生成透视汇总表(写入新工作表)。

⚠️ 诚实说明:openpyxl 无法创建真正可交互的 PivotTable 对象, 本工具生成的是静态汇总表(分组聚合后写回),数值等价但不可交互。 需要可交互透视表时,请在 Excel 中基于结果表插入。

参数:

  • rows:行分组字段(可多列),如 ["部门"]

  • values:要聚合的数值列,如 ["销售额"]

  • agg_func:sum/mean/count/min/max(默认 sum)

  • columns:列分组字段(可选,做交叉表)

  • filters:过滤条件(格式同 filter_count)

  • target_sheet:结果表名(默认"透视表")

Inputs: rows (required), values (required), file_path (required), columns, +4 more.

filter_countA

按条件统计行数 —— 只返回计数,不返回数据行。

用途:回答"有多少条满足 X"这类问题。计数在服务端完成, 绝不会把成千上万行搬进上下文。

参数:

  • filters:条件列表,每项 {"column": "部门", "op": "==", "value": "研发"} 支持运算符:== != > < >= <= in not_in contains startswith endswith is_null not_null

  • sample:附带返回的样例行数(默认 3,仅用于确认过滤是否符合预期)

返回:matched_rows、matched_pct、少量样例,以及等价的 Excel COUNTIFS 公式 (可粘回表格动态更新)。

Inputs: file_path (required), sheet, sample, filters.

find_replaceA

在工作表中查找并替换文本(批量修正数据)。

参数:

  • file_path:工作簿路径

  • find:要查找的文本

  • replace:替换为(传空串表示删除匹配到的文本)

  • cell_range:限定区域如 "A1:D100";省略则整表

  • match_case:是否区分大小写(默认否)

返回:替换的单元格数量与明细(受数量上限保护)。

Inputs: find (required), file_path (required), sheet, replace, +2 more.

format_scanA

【本服务独有】扫描工作表的格式语义,支持按语义筛选与统计。

为什么需要它:主流 Excel MCP 把「删除线 / 高亮 / 字体色」当作样式, 读出来是一模一样的字符串 —— 它们看不出作者标了"这一行作废了"。 duduExcel 把格式当作语义,本工具进一步让它可统计、可查询。

典型用途:

  • 「这张表有多少行被标记作废了?」→ semantic="S"

  • 「哪些格子是重点高亮的?」→ semantic="HL"

  • 「先看看这张表用了哪些语义标记」→ 不传 semantic,只看统计

参数:

  • file_path:工作簿路径

  • sheet:表名(省略则用活动表)

  • semantic:按语义筛选,可选 S(删除线/作废) / B(粗体) / I(斜体) / HL(底色高亮) / C(字体色) / M(合并单元格)

  • max_cells:最多返回多少个命中单元格(超出会说明截断数量,以统计值为准)

返回:semantic_counts(各类语义的数量)、hits(命中明细,含坐标与值)、 以及每种语义的业务含义提示(hint)。

Inputs: file_path (required), sheet, semantic, max_cells.

join_sheetsA

关联两个工作表(类似 SQL JOIN),只回传前 limit 行结果。

参数:

  • on:关联键列名(两表都要有)

  • how:left / right / inner / outer(默认 left)

  • columns:只返回这些列(省 token),省略返回全部

  • limit:返回行数上限(默认 20)

Inputs: on (required), file_path (required), left_sheet (required), right_sheet (required), +3 more.

list_conditional_formatsA

读取工作表中已有的条件格式规则(写入 + 读取闭环)。

用途:接手一张别人的表时,先看清它埋了哪些自动规则(哪些格子会变色/变红), 避免修改时破坏既有规则。

返回:规则条数与明细(作用区域 / 类型 / 运算符 / 阈值公式 / 填充色 / 优先级), 按优先级排序。

Inputs: file_path (required), sheet.

list_imagesA

列出工作簿内的嵌图片(零依赖,直接扫描 xl/media/)。

为什么需要它:多数 Excel MCP 会静默丢弃所有内嵌图片, 于是贴在单元格里的流程图/截图永远到不了模型眼前。

返回:图片数量、文件名、大小、尺寸(PNG/JPEG/GIF/BMP 可从文件头解析)。 注意:只返回清单而非图片本体,避免 base64 撑爆上下文; 若需模型"看到"图片内容,请解压后交给多模态模型读取。

Inputs: file_path (required).

read_rangeA

读取工作表数据,支持分页、截断、格式语义与隐藏内容处理。

重要:不要试图一次读完大表。默认 limit=200 行, 超出的部分通过增大 offset 分批获取(truncated 会告诉你是否还有剩余)。

参数:

  • sheet:工作表名,省略则用活动表

  • cell_range:Excel 区域,如 "A1:D50";省略则读整表(仍受 limit 约束)

  • offset / limit:分页,从第 offset 行开始取 limit 行

  • include_format:是否附加格式语义标记(默认 True)

  • include_hidden:是否读取隐藏行列(默认 False)

格式语义标记(汲取自 excel-vision-mcp —— 作者留下的格式是有含义的):

  • [B] 粗体 / [I] 斜体 / [S] 删除线(常表示"已取消/作废")

  • [HL:色] 底色高亮(常表示"待审阅/重点") / [C:色] 字体色

  • [M] 合并单元格 / [HIDDEN-REF] 已隐藏但因被公式引用而保留 注意:只在单元格真的用了格式时才附加,朴素表格不产生任何额外 token。

隐藏内容:默认跳过(作者隐藏通常表示不属于审阅内容), 但被可见公式引用的隐藏单元格仍保留并标记 [HIDDEN-REF], 且始终报告跳过了多少,绝不静默丢弃。

返回:grid(二维值)、cells(坐标→值)、formulas、format_markers。

Inputs: file_path (required), limit, sheet, offset, +3 more.

recalculateA

重算公式并扫描错误 —— 交付前必做的验证步骤(差异化能力,多数同类项目不支持)。

为什么需要它:openpyxl 写入的公式不带计算结果, 直接用 read_range 读会返回 None。重算能填上缓存值并暴露公式错误。

安全护栏(汲取官方 xlsx skill 的 recalc 思想):

  • 外链熔断:若工作簿引用了外部文件且缓存值已丢失, 重算会把它们变成 #NAME? 并永久删除外链(不可逆)。 此时本工具默认拒绝执行并列出风险项,确认接受损失才传 force=true。

  • 静默失败防护:比对文件指纹,若 LibreOffice 正常退出却没重写文件会明确报错。

参数:

  • timeout:超时秒数(默认 60,大工作簿请加大)

  • force:忽略外链风险强制执行(默认 False)

返回:total_errors、errors_by_type(含位置)、以及"重算通过≠结果正确"的提醒。 环境未装 LibreOffice 时会明确告知,不会静默假装成功。

Inputs: file_path (required), force, timeout.

remove_duplicatesA

按指定列删除重复行(保留首次出现的行)—— 只回统计,不回数据行。

用途:数据清洗。例如按"订单号"去重,只保留第一次出现的记录。

参数:

  • file_path:工作簿路径

  • columns:按哪些列判重(列名或列字母如 "A");省略则按整行判重

  • sheet:表名(省略则用活动表)

返回:删除行数、剩余行数(物理删除,保留首次出现)。

Inputs: file_path (required), sheet, columns.

revert_last_writeA

回滚最近一次由本服务执行的写入(用 .bak 恢复)。

当 write_cells 的结果不符合预期时调用它撤销。 只保留最近一次备份,连续写入时回滚的是最后一次。

Inputs: file_path (required).

scan_formula_errorsA

只扫描公式错误(#VALUE! / #DIV/0! / #REF! / #NAME? / #NULL! / #NUM! / #N/A),不重算。

用途:快速体检现有文件是否有坏公式。 返回 total_errors 与按类型分组的位置明细;位置列表超过 100 条时会 明确说明被截断数量(请以 total_errors 为准,不要以列表长度判断严重程度)。

Inputs: file_path (required).

set_number_formatB

设置数字格式。

number_format 可传内置名或自定义格式码:

  • cny → ¥#,##0(人民币整数)

  • cny2 → ¥#,##0.00

  • cny_dash → ¥#,##0;(¥#,##0);-(零显示为短横)

  • percent → 0.0%(注意:值必须存小数,存 0.15 显示 15.0%)

  • multiple → 0.0x(估值倍数)

  • int → #,##0;date → yyyy-mm-dd

Inputs: file_path (required), cell_range (required), number_format (required), sheet.

sheet_profileA

查看工作表的列级画像:类型、空值率、唯一数、Top 值、数值统计。

这是开始分析任何表格前最该先调用的工具 —— 一次调用即可摸清全表 (列类型、哪些列有空值、数值范围、类别分布), 省掉反复试探的十几次调用,且不会把任何数据行塞进上下文。

参数:

  • sheet:工作表名,省略则用活动表(首行作为表头)

返回:每列的 profile(dtype/null_pct/unique/top_values/stats), 以及 _meta.tokens_saved(本次相比"读全表"节省了多少 token)。

Inputs: file_path (required), sheet.

top_nA

取排序后的前 N 行(默认降序),只回传这 N 行。

用途:排行榜类问题("销售额前 10 的产品")。 排序在服务端完成,只把 TopN 行回传,而不是把全表交给模型排序。

参数:

  • sort_by:排序列

  • n:返回行数(默认 10)

  • ascending:True 为升序(取最小的),默认 False 降序

  • columns:只返回这些列(省 token),省略返回全部列

  • filters:过滤条件(格式同 filter_count)

返回:带 rank 的行列表、tsv、以及等价的 Excel RANK 公式。

Inputs: sort_by (required), file_path (required), n, sheet, +3 more.

workbook_infoA

查看 Excel 工作簿结构:工作表清单、每张表的行列数、合并单元格数、隐藏行列数、内嵌图片数与文件大小。

用途:开始处理任何 Excel 文件前先调用这个,用一次调用摸清结构, 避免为了知道有哪些表就把整张表读进上下文。

返回:文件路径、大小、活动表名、每个工作表的 name/rows/columns/merged_cells/hidden_rows/hidden_columns。

Inputs: file_path (required).

write_cellsA

批量写入多个单元格 —— 一次调用完成,不要用单格写入循环调用。

这是批量接口:请在一次调用里传入所有要写的单元格, 服务只做一次文件读写周期。逐格循环调用会慢很多且反复触发备份。

参数:

  • cells:列表,每项 {"cell": "B2", "value": "内容"}; value 以 "=" 开头会被当作公式写入(如 "=SUM(B3:B9)")

  • sheet:工作表名,省略则写活动表

  • create_sheet_if_missing:工作表不存在时是否新建(默认 False,避免误建表)

安全:写入前自动生成 .bak 备份 + 原子保存,可用 revert_last_write 回滚。 限制:单次最多 10 万个单元格。

Inputs: cells (required), file_path (required), sheet, create_sheet_if_missing.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 24 tools

    Disambiguation4/5

    Most tools have a clearly distinct purpose, and the descriptions proactively differentiate the tricky pairs (create_pivot vs create_interactive_pivot, recalculate vs scan_formula_errors). The only mild overlap is format_scan versus read_range's include_format markers and aggregate versus create_pivot, but descriptions resolve these.

    Naming Consistency4/5

    All names are snake_case, which is consistent, but the verb_noun pattern is not uniform: many are verb-led (create_interactive_pivot, add_chart, write_cells) while others are noun- or topic-led (workbook_info, sheet_profile, format_scan, top_n, aggregate). Readable and predictable enough overall.

    Tool Count3/5

    24 tools is on the heavy side of the 16-25 'borderline' band for a single Excel server. Most tools earn their place, but a few (format_scan vs read_range markers, aggregate vs create_pivot) add surface that could be consolidated.

    Completeness4/5

    Coverage is broad: read/write, formatting, charts, both pivot modes, conditional formats, data validation, dedup, find/replace, joins, comparison, aggregation, formula recalc/error scanning, images, and revert. Still missing sheet lifecycle operations (create/rename/delete sheet), row/column deletion, and cell/range clearing, which agents must work around.

    Maintenance

    ActivityMaintained
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to create, read, and manipulate Excel files without requiring Microsoft Excel installation. Supports comprehensive spreadsheet operations including formulas, formatting, charts, pivot tables, and data validation.
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that enables AI agents to automate Excel file operations including workbook creation, worksheet management, and data manipulation. It provides a standardized interface for reading, writing, merging, and filtering cell ranges within Excel documents.
      4
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that turns Excel files into queryable databases, enabling AI agents to filter, aggregate, group, sort data and export results as new Excel files.
      2
      MIT
    • F
      license
      Not graded
      quality
      C
      maintenance
      Exposes Excel operations (open/close files, read/write cells, create sheets, apply formulas, and run existing VBA macros by name) to AI agents like Claude Desktop or Claude Code via MCP.
      -