关于 Excel MCP Server
Excel MCP Server 是开源服务,让 AI 客户端无需 Microsoft Excel 即可创建、读取和编辑 Excel 工作簿。它支持表格数据、公式、图表和数据透视表,并提供文件访问与工具选择控制。
主要功能
- 01读取和编辑工作簿单元格、工作表及表格
- 02创建图表、数据透视表、切片器和迷你图
- 03计算公式并追踪依赖关系
- 04导入和导出 CSV 文件
- 05配置访问限制和可用工具
适用场景
- 01通过 AI 客户端更新工作簿数据
- 02根据电子表格数据创建图表和数据透视表
- 03无需在 Excel 中打开文件即可读取公式结果
- 04将工作簿访问限制在获准文件夹内
MCP 相关
它向 MCP 客户端提供工作簿、工作表、单元格、公式、格式、图表、数据透视表、CSV 等工具。支持通过 stdio 或 Streamable HTTP 运行。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
42收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | |
| sheets | array | 否 | 默认值:['Sheet1']。 |
| overwrite | boolean | 否 | 替换现有文件(否则返回错误)。 |
详细介绍
Excel MCP 服务
一个开源的 Model Context Protocol(MCP)服务,可让
Claude、Cursor、VS Code Copilot、Codex 和其他 AI 客户端创建、读取和编辑 Excel 文件:
图表、数据透视表、公式、表格等。它基于 openpyxl 构建,无需 Microsoft
Excel,并可在 Windows、macOS 和 Linux 上运行。
前往 excelmcpserver.com 安装并试用,或参阅下方的 快速入门。
功能
图表和数据透视表
- 使用 AI 创建 Excel 图表:柱形图、条形图、折线图、面积图、饼图、圆环图、雷达图、散点图和 气泡图,并支持组合图、次坐标轴、趋势线和误差线
- Excel 2016 图表类型:瀑布图、直方图、帕累托图、箱形图、树状图、旭日图和漏斗图
- 真正的 Excel 数据透视表(可刷新),支持分组、计算字段、“值显示方式”、 布局和筛选器;还支持数据透视表和表格的切片器与时间线
- 迷你图(折线、柱形、盈亏)
公式和动态数组
- 内置引擎可在不使用 Excel 的情况下计算公式(约 260 个函数,并通过超过 2,500 个来自真实 Excel 的公式进行验证),因此
read_range可返回从未在 Excel 中打开过的文件的值 - 动态数组(
FILTER、SORT、UNIQUE、SEQUENCE、LET)以 Excel 的存储方式保存,并溢出到相邻单元格 - 查明数值错误的原因:跨工作表、名称和表格追踪引用单元格和从属单元格,并像 Excel 的“公式求值”一样逐步计算公式
- 单变量求解:更改输入,直到公式达到所需值
数据、表格和规则
- 读取和写入单元格、日期和超链接;支持带汇总行和计算列的表格
- 条件格式(色阶、数据条、图标集、前/后排名、重复值、文本、日期)、数据验证(下拉列表、限制、输入消息)
- 排序、筛选(含条件)、查找和替换、删除重复项、分列、填充序列、选择性粘贴
- 字体、填充、边框、数字格式、合并单元格、冻结窗格、分组、打印设置、工作表保护、图片、备注和定义名称。插入或删除行列时,会像 Excel 一样更新所有引用
大型文件
- 读取时会流式处理工作簿并返回分页数据,因此即使工作表有数十万行,内存占用也保持稳定;每次调用都受大小和单元格数量限制
- 对 XML 达到或超过 1 MB 的工作表进行编辑时,只解析涉及的行,因此在包含 200,000 行的工作表中,插入或删除行列、排序、替换、复制工作表和创建数据透视表只需几秒,而不是几分钟
宏(可选启用)
- 读取
.xlsm文件中的 VBA 代码。除非使用--allow-vba-write启动服务,否则无法写入 VBA;服务绝不会运行宏
安全设计
- 可选的文件夹限制、公式安全检查、只读模式、默认仅限 localhost 的 HTTP,以及不会留下半写入文件的原子保存
支持 .xlsx、.xlsm(保留宏)、.xltx 和 .xltm 文件。现有的线程化批注、形状、表单控件以及工具无法编辑的其他内容都会保持原样。
快速开始
你需要 uv。每个客户端都通过 uvx excel-mcp-server stdio 运行服务;将 /path/to/workbooks 替换为服务可以使用的文件夹。excelmcpserver.com 提供相同步骤,并带有复制按钮和适用于 Cursor 和 VS Code 的一键安装链接。
Claude Desktop(聊天):从最新版本下载
excel-mcp-server.mcpb
并打开。Claude 会询问服务可以使用哪个文件夹。
Claude Code(命令行,以及 Claude Desktop 中的 Code 选项卡):
claude mcp add excel --scope user -- uvx excel-mcp-server stdio --allow-dir /path/to/workbooks
Cursor(~/.cursor/mcp.json),以及大多数使用 mcpServers 配置的客户端:
{
"mcpServers": {
"excel": {
"command": "uvx",
"args": ["excel-mcp-server", "stdio", "--allow-dir", "/path/to/workbooks"]
}
}
}
VS Code(搭配 GitHub Copilot)(.vscode/mcp.json,注意 servers 键):
{
"servers": {
"excel": {
"type": "stdio",
"command": "uvx",
"args": ["excel-mcp-server", "stdio", "--allow-dir", "${workspaceFolder}"]
}
}
}
OpenAI Codex、Gemini CLI、Devin Desktop,以及不使用安装包的 Claude Desktop
OpenAI Codex(命令行、IDE 扩展和应用):
codex mcp add excel -- uvx excel-mcp-server stdio --allow-dir /path/to/workbooks
Gemini CLI:
gemini mcp add -s user excel uvx excel-mcp-server stdio --allow-dir /path/to/workbooks
Devin Desktop:
devin mcp add -s user excel -- uvx excel-mcp-server stdio --allow-dir /path/to/workbooks
Claude Desktop,手动设置:打开 Settings、Developer、Edit Config,将上面的 mcpServers
JSON 添加到 claude_desktop_config.json,然后重启 Claude。
桌面应用通常无法找到 uvx,因为它们看不到 Shell 的 PATH(macOS 上很常见)。请改用其完整路径,该路径可通过 which uvx 查看。
选择可供服务使用的文件
使用 --allow-dir DIR 后,服务只会打开 DIR 中的工作簿(包括子文件夹),且相对路径(如 reports/q1.xlsx)会以该目录为起点。重复使用此标志可允许多个文件夹,或者设置 EXCEL_FILES_PATH(在 macOS/Linux 上用 : 分隔文件夹,在 Windows 上用 ; 分隔)。
不使用 --allow-dir 时,任何 Excel 文件的绝对路径都有效。在所有模式下,服务只会处理 Excel 文件,并且绝不会在不提示的情况下覆盖现有工作簿。
远程使用(Streamable HTTP)
uvx excel-mcp-server streamable-http --allow-dir /srv/workbooks
客户端连接到 http://127.0.0.1:8017/mcp。工作簿位于 --allow-dir 文件夹中(默认为 ./excel_files),export_workbook / import_workbook 会在服务与客户端之间传输文件。
服务仅监听 localhost。若要接受其他机器的连接,请设置令牌和主机:
EXCEL_MCP_AUTH_TOKEN=change-me uvx excel-mcp-server streamable-http --host 0.0.0.0
客户端随后发送 Authorization: Bearer change-me。若要通过网络使用,请在其前面配置一个用于终止 TLS 的反向代理。
Docker
docker build -t excel-mcp-server .
docker run -p 8017:8017 -v "$PWD/workbooks:/data" -e EXCEL_MCP_AUTH_TOKEN=change-me excel-mcp-server
配置
| 标志 | 环境变量 | 默认值 | 含义 |
|---|---|---|---|
--allow-dir DIR | EXCEL_FILES_PATH | 无(stdio),./excel_files(HTTP) | 工作簿必须位于这些文件夹中 |
--read-only | EXCEL_MCP_READ_ONLY=1 | 关闭 | 仅提供不会更改文件的工具 |
--allow-vba-write | EXCEL_MCP_ALLOW_VBA_WRITE=1 | 关闭 | 添加可写入 VBA 宏的工具(见下方警告);与 --read-only 一起使用时会被忽略 |
--tools AREAS | EXCEL_MCP_TOOLS | 全部 | 仅提供核心工具和这些以逗号分隔的区域,以节省上下文(见选择工具) |
--max-file-mb N | EXCEL_MCP_MAX_FILE_MB | 100 | 服务打开的最大工作簿。此值也会设置解包后的大小限制(该值的 10 倍),每个打开或上传的工作簿都必须低于此限制;压缩比超过 500:1 的文件将被拒绝 |
--max-cells N | EXCEL_MCP_MAX_CELLS | 100000 | 单次调用可读取、写入或设置格式的最大单元格数;读取结果仍会分页返回 |
--max-pivot-cells N | EXCEL_MCP_MAX_PIVOT_CELLS | 3000000 | 数据透视表源数据的最大单元格数(一个有 230,000 行、13 列的工作表);使用最大规模的数据源创建数据透视表需要一分钟,并占用约 2 GB 内存 |
--max-loaded-cells N | EXCEL_MCP_MAX_LOADED_CELLS | 3000000 | 可同时加载到内存中的工作簿单元格和行的最大数量,每个约占 0.5 KB(限制为 3,000,000 时约占 1.5 GB)。超过此限制的工作簿会被必须加载整个工作表的工具拒绝;read_range 和其他流式读取工具,以及仅解析部分行的大型工作表编辑操作,不受工作表大小限制 |
--log-level LEVEL | WARNING | 输出到 stderr 的日志 | |
--host HOST | EXCEL_MCP_HOST | 127.0.0.1 | HTTP 监听地址 |
--port PORT | EXCEL_MCP_PORT | 8017 | HTTP 端口 |
EXCEL_MCP_AUTH_TOKEN | 无 | HTTP 请求所需的 Bearer 令牌 | |
--allow-unauthenticated | 关闭 | 允许非本地 --host 在没有令牌的情况下使用 |
工具
| 区域 | 工具 |
|---|---|
| 工作簿 | create_workbook、describe_workbook、set_workbook_settings、list_workbooks、export_workbook、import_workbook |
| CSV | import_csv、export_csv |
| 工作表 | describe_sheet、create_sheet、rename_sheet、copy_sheet、delete_sheet、insert_rows_or_columns、delete_rows_or_columns |
| 单元格 | read_range、write_range、clear_range、copy_range、sort_range、transform_range、find_cells、replace_cells |
| 公式 | trace_formula、goal_seek |
| 格式 | format_range、merge_cells、set_sheet_layout、add_conditional_format、add_data_validation |
| 对象 | set_table、create_chart、delete_chart、create_pivot_table、delete_pivot_table、add_slicer、delete_slicer、insert_image、delete_image、add_sparklines、delete_sparklines |
| 名称和备注 | set_defined_name、delete_defined_name、set_note、delete_note |
| 宏 | read_vba;使用 --allow-vba-write 时:write_vba_module、delete_vba_module |
选择工具
每个工具都会在每次请求中占用上下文。--tools 仅提供核心工具
(describe_workbook、describe_sheet、read_range)以及你列出的区域,例如
uvx excel-mcp-server stdio --tools data,charts。它可与 --read-only(指定区域的只读工具)
和 --allow-vba-write(还需要 vba 区域)组合使用。未知区域会导致服务在启动时停止,并列出有效区域。以下大小以字符数表示工具描述和架构的长度,每个词元约对应 3.5 个字符:
| 区域 | 工具 | 字符数 |
|---|---|---|
| core(始终启用) | describe_workbook、describe_sheet、read_range | 8,900 |
workbooks | create_workbook、set_workbook_settings、list_workbooks、export_workbook、import_workbook | 2,600 |
csv | import_csv、export_csv | 2,200 |
sheets | create_sheet、rename_sheet、copy_sheet、delete_sheet、insert_rows_or_columns、delete_rows_or_columns | 2,000 |
data | write_range、clear_range、copy_range、sort_range、transform_range、find_cells、replace_cells | 6,700 |
formulas | trace_formula、goal_seek | 1,300 |
formatting | format_range、merge_cells、set_sheet_layout、add_conditional_format、add_data_validation | 14,000 |
tables | set_table | 1,900 |
charts | create_chart、delete_chart、add_sparklines、delete_sparklines | 9,900 |
pivots | create_pivot_table、delete_pivot_table | 4,600 |
slicers | add_slicer、delete_slicer | 2,500 |
names | set_defined_name、delete_defined_name | 900 |
notes | set_note、delete_note | 500 |
images | insert_image、delete_image | 800 |
vba | read_vba;使用 --allow-vba-write 时:write_vba_module、delete_vba_module | 1,900 |
CSV
import_csv 会将 .csv 或 .tsv 文件导入工作表中的指定单元格(如果工作表不存在,则会创建),而
export_csv 会将一个区域写出为 CSV。两者都只会在允许的文件夹中操作,不会超出 --max-cells 和
--max-file-mb 的限制,也绝不会运行任何内容。
- 导入时会根据第一条记录检测分隔符(也可以指定
comma、semicolon、tab、pipe),并读取带或不带 BOM 的 UTF-8、UTF-16 和cp1252。引号括起的字段及其中的换行符 都会保留。 - 字段会按 Excel 导入时的规则设置类型:数字(包括
1,234.50、12%;小数逗号格式请用decimal)、TRUE/FALSE和 ISO 日期(2026-01-31、2026-01-31 09:30)会转换为值。Excel 会改动的文本则会保留为文本:前导零(007)、超过 15 位的数字、前导+,以及数字日期(如01/02/2026);数字日期仅会按你指定的date_order(dmy或mdy)读取。as_text会将所有字段都保留为文本。 - 字段绝不会作为公式处理。以
=、+、-或@开头的文本会通过 Excel 的引号前缀存储为文本,因此编辑单元格时不会运行它;像-5这样的数字则仍是数字。 - 导出时会写出原始值(完整精度、ISO 日期),或者使用
formatted写出 Excel 中显示的内容。以=、+、-或@开头的文本单元格会添加'前缀(默认启用escape_formulas),避免打开文件的电子表格运行这些内容;数字绝不会添加前缀。 日期时间会写为2026-01-31T09:30:00,Excel 会将其作为文本打开;要导出为 Excel 格式,请使用formatted。 使用encoding: utf-8-sig添加 BOM;Excel 通过双击打开 UTF-8 文件时需要它才能正确显示重音字符。行尾为 CRLF。
每个参数都在 TOOLS.md 中有说明。所有工具中的参数含义相同:
| 参数 | 含义 |
|---|---|
path、sheet | 工作簿和工作表 |
range、at | 单元格区域(A1:D20),以及放置内容的左上角单元格:写入的值、副本、图表、图像、数据透视表、切片器 |
source | 数据来源,可指定其他工作表中的位置(Data!A1:E200) |
name | 表格、图表、图像、数据透视表、切片器或定义名称的名称 |
_cm、_pt、_chars | 尺寸单位:width_cm、row_heights_pt、column_widths_chars |
更改工作簿的工具会返回所做更改的信息(sheet、range、name),以便下一次调用引用这些内容。图表和图像按名称选择,名称列于 describe_sheet 中。
编写宏(选择启用)
启用 --allow-vba-write(或设置 EXCEL_MCP_ALLOW_VBA_WRITE=1)后,服务可以在 .xlsm 和 .xltm 文件中设置标准模块、类模块、工作簿模块和工作表模块的代码,删除标准模块和类模块,并创建新的 .xlsm/.xltm 工作簿。服务只会存储代码,绝不会运行代码;启用宏前,Excel 会向你确认。对于经过数字签名的 VBA 项目,服务会拒绝操作,因为任何更改都会使签名失效。
警告:在 Excel 中启用宏后,宏代码会以你的用户权限运行。读取不可信内容的模型可能会被诱骗写入有害代码。仅在可信工作流中启用此选项,将
--allow-dir的范围设得尽可能窄,并且启用宏前请先阅读代码。在--read-only模式下,绝不会提供这些工具。
安全性
- 公式会在写入前进行解析。会访问网络或其他程序的函数(
WEBSERVICE、IMAGE、RTD、CALL、Google Sheets 的IMPORTXML等)、Excel 4.0 宏函数(FILES、GET.WORKBOOK、RUN等)、DDE 链接以及对其他工作簿的引用都会被拒绝。HYPERLINK仅在链接固定为http(s)://、mailto:或#Sheet!A1时才会被接受。 - 路径会在检查是否位于允许的文件夹中之前进行解析,包括解析符号链接。网络路径(UNC)和 Windows 设备路径一律拒绝。
- 单次调用最多处理 100,000 个单元格(
--max-cells),大型读取结果会分页返回。 - 单元格内容是来自文件的数据。服务会告知模型不要遵循其中的指令,但请留意助手如何处理来自不可信来源的工作簿。
请私下报告漏洞;详情请参阅 SECURITY.md。
限制
- 公式存储在文件中,Excel 会在打开文件时计算公式。因此,在这之前,
read_range会很有用;values模式会使用内置计算器计算没有已保存结果的公式(约 260 个函数:数学、统计、财务与债券、日期、文本、查找、逻辑、LET、排序和筛选)。始终优先使用 Excel 保存的结果。对于计算器无法像 Excel 那样精确复现的公式(例如不支持的函数、循环引用,或计算器未复现的 Excel 特性),结果会返回 null,并在uncalculated中列出原因;绝不会猜测结果。如果 Excel 的普通公式(非数组公式)对公式所在行或列采用相同处理,公式中的区域会缩减为公式所在的行或列;此外,不会计算RAND等易变函数。计算器已使用从真实 Excel 记录的 2,500 多个公式进行验证(tests/fixtures/formula_golden.json)。 trace_formula和goal_seek使用该计算器,因此goal_seek会拒绝无法计算的公式。Excel 的“追踪从属单元格”会显示OFFSET起始引用的单元格,而trace_formula会显示INDIRECT和OFFSET指向的单元格;如果无法确定这些单元格,公式会列在unknown中。当 Excel 的搜索因显示“可能未找到解”而停止时,goal_seek仍可能找到根,并且只有在收敛时才会保存答案(与 Excel 一样,误差不超过目标值的 0.001)。- Excel 在 2007 年后新增的函数(
IFS、XLOOKUP、STDEV.S、SORT……)在存储公式的任何位置(单元格、复制和排序后的单元格、条件格式、数据验证、定义名称)都会使用 Excel 要求的_xlfn.前缀。 - 不支持旧版
.xls文件;CSV 文件请使用import_csv。 - 数据透视表基于快照创建,可使用最多包含 3,000,000 个单元格的文本、数字和日期列(
--max-pivot-cells);Excel 会根据实时源数据刷新数据透视表。它们支持数字格式、“值显示方式”(占总计、行、列或父级的百分比、与……的差异、累计总计、排名)、按标签或值排序、日期和数字分组、计算字段、紧凑、大纲和表格布局、启用或禁用小计、按选定项目筛选,以及将多个值字段显示为列或行。写入单元格的数字是 Excel 刷新后显示的数字;这些数字已与从真实 Excel 记录的约 200 个数据透视表进行核对(tests/fixtures/pivot_golden.json)。例外情况:按值排序时并列的项目在刷新后可能互换位置;values_in: "rows"不能与排名数据组合,也不能在有小计时与字段上的其他数据组合,因为 Excel 会在此处混淆值字段。 add_slicer可为表格和数据透视表添加切片器(插入 > 切片器),也可为数据透视表的日期字段添加时间线:字段、标题、位置和大小、列数、样式、排序、选定项目(或时间段)以及“隐藏没有数据的项目”。选择项目会像点击操作一样进行筛选:表格行会被筛选并隐藏;数据透视表项目会被隐藏,并根据源数据重新计算数字,Excel 刷新时会确认这些数字(约 200 个数据透视表已与 Excel 核对,切片器变体也已与 Excel 自身的结果核对)。一个切片器可以筛选共享同一缓存的多个数据透视表,例如复制工作表中的数据透视表。限制:由 Excel 创建或刷新的数据透视表会在单元格中保留数字(隐藏项目和打开时刷新标记都会被存储,因此 Excel 打开文件时会重新计算);数据透视表中分组的字段不能使用切片器。- 插入或删除行和列,以及重命名工作表时,引用会像在 Excel 中一样更新。超链接目标和 3D 引用(
Sheet1:Sheet3!A1)保持不变(Excel 也会这样处理)。如果编辑操作穿过数组公式、数据透视表、表格标题,或同时穿过两个表格,则会被拒绝。插入的单元格会沿用上方或左侧行列的格式、行高和列宽(首行或首列没有可沿用的内容);在表格中插入行时,计算列会填充到新行中。 - 编辑工作簿时,工具无法修改的内容会保留:迷你图、扩展条件格式和数据验证、切片器和时间线、较新的图表(水滴图、直方图、树状图等)、线程化批注、形状、表单控件、链接数据类型和自定义 XML 都会保持 Excel 保存时的状态,并随插入或删除的行和列以及重命名的工作表移动。
copy_sheet会像 Excel 一样复制迷你图、切片器和时间线、条件格式中适用于 Excel 2010 的部分(数据条、图标集),以及由create_chart创建的 Excel 2016 图表,但不会复制其他内容。删除工作表时,只删除仅由该工作表使用的切片器;如果切片器将失去其数据透视表,则会阻止删除;删除表格,或删除表格切片器所筛选的列时,也会移除该切片器。 数字签名会被移除,这与 Excel 修改已签名文件时的处理方式一致。 - 返回多个值的公式(
FILTER、SORT、UNIQUE、SEQUENCE、A2:A9*2)会像在 Excel 中一样存储为动态数组公式,并溢出到相邻单元格。若单元格阻挡溢出,溢出会受阻(Excel 会显示#SPILL!),并由write_range报告。如果计算器无法确定结果的大小,则只存储公式所在的单元格,Excel 打开文件时会填充其余单元格。
从 1.x 升级
2.0 版本统一了各个工具的工具名称和参数名称,因此会导致 1.x 客户端和已保存的提示词无法正常使用。变更日志中有一张表,列出了所有 1.x 名称及其对应的 2.0 替代名称: 从 1.x 升级。从 0.x 升级?请先查看 1.0.0 说明。
贡献
欢迎贡献。请参阅 CONTRIBUTING.md。
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。