openpyxl_mcp_server
这是什么?
一个围绕OpenPyXl Python库的薄包装器,它将其部分功能作为模型上下文协议(MCP)服务器公开。这允许Claude和其他MCP客户端从Excel文件中获取数据。
相关链接:
- https://openpyxl.readthedocs.io/en/stable/index.html
- https://modelcontextprotocol.io/quickstart/server
安装
一般步骤
- 从下载可执行文件的最新版本https://github.com/jonemo/openpyxl-mcp-server/releases.
openpyxl_mcp_server适用于MacOS,openpyxl_mcp_server.exe适用于Windows。 - 对于MacOS用户,请确保在下载的文件上设置可执行权限:
chmod a+x /path/to/openpyxl_mcp_server(替换/path/to/使用您的实际下载位置)。 - 配置您的MCP客户端。最常见的是Claude Desktop,请参阅下一节中的说明。
Windows将试图说服您不要运行从互联网下载的随机可执行文件。 您必须在各个位置单击“保留”或“无论如何保留”,以说服它不要删除文件。 此操作的详细信息取决于您使用的浏览器和Windows Defender设置。
或者,如果你不信任我的可执行文件,你也可以直接从这个仓库安装源代码版本。请参阅下面的“来源”部分。
配置Claude桌面
_请注意,这仅适用于 Claude桌面应用程序,而不是克劳德在网络浏览器中运行。_
- 安装Claude Desktop。
- 下载MCP服务器可执行文件(见上一节)。
这假设您已将可执行文件下载到下载文件夹。 您可以使用任何其他文件夹,相应地调整下面配置中的路径。
- 在Claude Desktop中,打开“设置…”菜单:

- 导航到设置的“开发人员”部分。
- 点击“编辑配置”。如果您还没有配置文件,这将为MCP服务器创建一个配置文件。
此文件的默认位置为: - macOS: ~/Library/Application Support/Claude/claude_desktop_config.json - 窗户: %APPDATA%\Claude\claude_desktop_config.json
- 在MacOS上,将以下内容添加到您的
claude_desktop_config.json.
替换 `` 使用您的MacOS用户名。 如果您已经使用了其他MCP服务器,则必须将JSON合并到现有内容中。
{
"mcpServers": {
"inspect_excel_xlsx_file": {
"command": "/Users//Downloads/openpyxl_mcp_server",
"args": []
}
}
}- 在Windows上,将以下内容添加到您的
claude_desktop_config.json.
替换 `` 使用您的MacOS用户名。 如果您已经使用了其他MCP服务器,则必须将JSON合并到现有内容中。
{
"mcpServers": {
"inspect_excel_xlsx_file": {
"command": "C:\\Users\\\\Downloads\\openpyxl_mcp_server.exe",
"args": []
}
}
}- 更新配置文件后,您需要重新启动Claude应用程序以使更改生效。 关闭Claude应用程序窗口是不够的。在Windows上,您必须右键单击系统托盘中的Claude图标,然后选择“退出”。在macOS上,您可以使用Command+Q。
如果您遇到问题,请咨询以下资源:
- Anthropic的用户文档.
- “使用Claude for Desktop测试您的服务器”部分 Anthropic为开发人员提供的文档
- 有人还制作了一个配置文件生成器https://claudedesktopconfiggenerator.com/
配置其他MCP客户端
在支持MCP服务器的其他工具中配置MCP服务器的说明:
来源(用于开发)
本节仅适用于您希望修改源代码,或者您不信任提供的可执行文件,而更喜欢从源代码运行的情况。
git clone git@github.com:jonemo/openpyxl-mcp-server.git
cd openpyxl-mcp-server
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt假设您已将仓库克隆到 /Users/jonas/repos/openpyxl_mcp_server,配置文件内容现在应更改为:
{
"mcpServers": {
"inspect_excel_xlsx_file": {
"command": "/Users/jonas/repos/openpyxl_mcp_server/venv/bin/python",
"args": ["/Users/jonas/repos/openpyxl_mcp_server/openpyxl_mcp_server.py"]
}
}
}示例提示
示例1
使用该文件 KimbroughEvelyn_A-5qg0_Dataset_20160624.xlsx 来自“利用移动监测方法进行港口附近空气质量评估”数据集https://catalog.data.gov/dataset/near-port-air-quality-assessment-utilizing-a-mobile-monitoring-approach
通过快速浏览描述和文件内容,我不清楚这个数据集是关于什么端口的。让我们问克劳德:
我在~/Downloads/KimbroughEvelyn_A-5qg0_Dataset_20160624.xlsx中有一个Excel文件,其中包含与美国一个或多个港口附近空气污染研究相关的数据。你能从文件内容推断出这项研究涵盖了哪些端口吗?
https://claude.ai/share/d87f67a9-dbc0-4223-86ff-3b4c1f9fa2e7
在对MCP服务器进行11次调用后,响应为:
根据图2中的经纬度坐标,并将其与位置信息相结合,我可以推断出这项研究的重点是南卡罗来纳州的查尔斯顿港。 数据集中的坐标(大约纬度32.83,经度-79.87)对应于查尔斯顿地区,对市中心、铁路站场和机场监测站的引用与港口城市周围的空气质量监测一致。 该数据集似乎包含在查尔斯顿港附近收集的空气污染测量数据(PM2.5和PM10),并对港口位置和背景/参考地点进行了比较。
示例2:
我是一个10个单元的小业主协会的财务主管。我们的簿记发生在谷歌表格中的Excel文件中。该文件有9页,其中9页用于交易清单、会员会费账户、季度报告等。
该文件包含非公开信息,因此此示例仅显示提示、一些关键的“见解”和最终答案:
~/下载/现金流2024.xlsx是我的房主协会的财务状况。2024年,我们的喷水灭火系统维护费用是多少?总共有多少笔交易?每笔交易是什么时候发生的? \[...\] 我看到一张“交易”表,其中可能包含详细的费用记录。让我在此表中搜索“喷洒器”以查找相关交易: \[...\] 让我检查一下2024年的总结表,看看喷水灭火器维护是否被列为一个类别: \[...\] 太棒了我在2024年工作表的第24行发现“喷水灭火器维护”被列为一个类别。现在,让我检查一下与喷水灭火器维护相关的实际交易: \[...\] 让我通过在整个交易表中专门搜索“喷水器维护”来查看更多条目: \[...\] 根据我对HOA在“CASH FLOW 2024.xlsx”文件中的财务记录的分析,以下是我对2024年喷水灭火系统维护费用的发现: 2024年喷水灭火系统维护账单总额:565.00美元 交易数量:1笔交易 交易日期:2024年9月9日 该费用在“交易”表中显示为单个交易。电子表格在“2024年实际与计划”表中还包含了该年度喷水灭火器维护的预算金额750.00美元,并附有一条注释,说明“尚未收到任何发票”(由于现在记录了一张发票,这可能已经过时)。 您是否希望我分析您的HOA洒水喷头维护费用的其他方面或电子表格中的其他财务信息?
真实的故事。我们的洒水员只给我们开了春季一次的账单,忘了在今年晚些时候寄账单。别担心,他拿到了工资,但2025年就订好了。
示例3:填写表格
我在谷歌上搜索有趣的Excel工作簿,结果发现了加州自然资源局的DPR 973表格: https://www.parks.ca.gov/pages/22374/files/Annual%20Report%20DPR973.xls这似乎是一个需要填写的表格 由支持加州州立公园的“协会”发起。需要明确的是,我不隶属于这样一个协会。 但我将表格从.xls格式转换为.xlsx格式,并请克劳德帮我填写:
我需要提交DPR973,因为我为加利福尼亚州立公园的“合作协会”工作。我必须填写的表格是这张Excel表:/Users/jonas/下载/年度报告DPR973.xlsx。我们通过出版书籍来支持州立公园,通过卖柴火来创收。我必须在工作簿的哪里填写单元格?
在11次调用该工具后,响应似乎是正确的,尽管我不明白为什么克劳德根本没有看剩下的表:
根据我对DPR973表格的检查,我现在将指导您在哪里填写出版书籍和销售柴火的合作协会的单元格: 1. 第1页: - 您需要填写协会信息(第一部分),其中包含您组织的详细信息(名称、地址、联系信息) - 将单元格C4中的年份更新为当前报告年份 1. 第2页(A) -这是您记录销售信息的地方: - 对于您的图书销售(这将被视为具有解释性/教育性): - 第1行(F22单元格):总销售额-材料(适用于您出版的书籍) - 第2行(F23单元格):任何退货或退款 - 第3行(单元格F24):图书销售成本 - 对于您的柴火销售: - 第23行(F51单元格):总销售额-柴火 - 第24行(F52单元):任何退款/退回/损坏的柴火 - 第25行(F53单元格):柴火销售成本 - 表格将自动计算单元格F25(账面利润)、F54(柴火利润)和F58(净利润总额)中的总计 1. 第3页 -财务摘要: - 您的销售数据将自动从第2(A)页填充到: - 第6行(单元格F11):总销售额 - 第7行(单元格F12):商品/服务总成本+退货/退款 - 第8行(H13单元格):所有材料和服务的净利润 - 您需要手动输入: - 任何捐赠/捐款(第1行,F6单元) - 会员费(如适用)(第4行,H9单元) - 利息/投资收入(如有)(第5行,H10单元格) - 筹款信息(如适用)(第9-11行) - 其他收入(如适用)(H17单元格第12行) - 费用: - 第15行(F21单元):对加州州立公园的任何直接拨款 - 第16行(F22单元格):口译项目支持费用 - 第17行(F23单元):其他CSP项目支持 - 第19行(单元格H25):管理和一般费用 - 资产/负债: - 第22行(F30单元格):总资产 - 第23行(单元格H31):负债总额 - 第24-26行(单元格F32-F34):按限制类型划分的净资产 1. 第4页 (未充分检查,但可能包含): - 附加注释、解释和签名 对于您的特定活动(图书出版和柴火销售),请专注于准确完成: 1. 第2页(A)的口译和教育销售部分,用于您的图书销售 1. 第2页(A)的柴火销售部分显示您的柴火收入 1. 第3页的完整财务摘要 你想让我更详细地解释一下哪个具体部分吗?
示例4
这将使用该文件 2025-3-7-iolp-buildings.xlsx 来自自有和租赁物业清单(IOLP)数据集,可在https://catalog.data.gov/dataset/inventory-of-owned-and-leased-properties-iolp如果你关注了最近几周的新闻,你就会知道为什么这是目前data.gov上最受欢迎的数据集。
提示:
使用“/Users/jonas/Downloads/2025-3-7-iolpbuildings.xlsx”中的Excel文件:犹他州面积最大的联邦建筑是什么?
我反复使用这个文件和提示符作为测试用例,得到了喜忧参半的结果:
- 聊天因达到上下文限制而终止,但未收到回复。当Claude进入一次查询多行的循环时,就会发生这种情况。
- 回答不正确,因为克劳德一路上做出了“错误的假设”。例如,在 这个聊天 它决定最大的建筑必须在盐湖城,并开始在电子表格中搜索任意术语。
- 例如,正确答案 这个聊天位于奥格登的美国国税局服务中心是名单上犹他州最大的联邦所有建筑。
脚注:美国国税局服务中心是名单上最大的建筑,这是正确的。“大黄蜂”又名犹他州数据中心“又名”情报界综合国家网络安全倡议数据中心“几乎可以肯定是更大的,但不包括在文件中。
贡献与发展
构建独立的可执行文件
要创建不需要安装Python的独立可执行文件:
- 确保已安装所有依赖项:
pip install -r requirements.txt
pip install -r requirements-dev.txt- 构建可执行文件:
pyinstaller openpyxl_mcp_server.spec可执行文件将在 dist 目录。在Windows上,它将被命名 openpyxl_mcp_server.exe在macOS上,它将被命名为 openpyxl_mcp_server.
注意:在macOS上构建时,您可能需要对可执行文件进行签名以使其正常运行。您可以通过以下方式完成此操作:
codesign --force --deep --sign - dist/openpyxl_mcp_serverMCP服务器目录
openpyxl mcp服务器当前列在以下mcp服务器目录中:
- https://mcp.so/server/openpyxl-mcp-server/jonemo
- https://mcpserver.cloud/server/openpyxl-mcp-server
- https://www.mcpserverfinder.com/servers/jonemo/openpyxl-mcp-server
