使用说明
电子表格MCP服务器
一个全面的模型上下文协议(MCP)服务器,用于管理Excel和CSV电子表格,具有高级功能,包括公式、格式、图表和窗格冻结。
特性
核心业务
- 文件管理:创建、读取、写入、删除、重命名和列出电子表格文件
- 工作表操作:在工作簿中创建、重命名和管理多个工作表
- 数据操作:读取、写入、追加行和更新单个单元格
- 公式支持:设置和检索具有跨表引用的Excel公式
高级功能
- 单元格格式:粗体、斜体、字体大小和背景颜色
- 范围格式化:一次格式化多个单元格
- 列/行格式:设置列宽和行高
- 冻结窗格:冻结行和/或列,以便于数据导航
- 图表:从数据范围创建条形图和饼图
支持格式
- Excel(.xlsx):全功能支持,包括公式、格式和图表
- CSV(.CSV):基本读/写操作
安装
先决条件
- Docker已安装并正在运行
- Claude Desktop或MCP兼容客户端
设置
- 克隆或创建项目目录:
mkdir spreadsheet-mcp-server
cd spreadsheet-mcp-server
-
创建所需文件:
spreadsheet_server.py(主服务器代码)requirements.txt(Python依赖关系)Dockerfile(容器配置)catalog.yaml(MCP目录配置)
-
安装Python依赖项 (用于本地测试):
pip install -r requirements.txt
- 构建Docker镜像:
docker build -t spreadsheet-mcp-server:latest .
- 配置Claude桌面:
添加到您的MCP设置中:(Claude/Claude_desktop_config.json-->应在Windows上的AppData/Roaming下的Windows用户名目录下)
{
"mcpServers": {
"mcp-toolkit-gateway": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-v",
"/var/run/docker.sock:/var/run/docker.sock",
"-v",
"/Users/[YOUR USERNAME]/.docker/mcp:/mcp",
"docker/mcp-gateway",
"--catalog=/mcp/catalogs/docker-mcp.yaml",
"--catalog=/mcp/catalogs/spreadsheet-mcp.yaml",
"--config=/mcp/config.yaml",
"--registry=/mcp/registry.yaml",
"--tools-config=/mcp/tools.yaml",
"--transport=stdio"
]
},
"spreadsheet": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-v",
"C:\\Users\\[YOUR USERNAME]\\spreadsheets:/app/spreadsheets",
"-v",
"C:\\Users\\[YOUR USERNAME]\\Downloads:/imports",
"spreadsheet-mcp-server:latest"
]
}
}
}
替换 [YOUR USERNAME] 上面代码中提到的任何地方都使用您的Windows用户名,或者用实际的Linux路径替换整行。
确保C:\Users\[您的用户名]\电子表格存在!
- 将这些添加到有关MCP的Docker Desktop配置目录中:
首先编辑.docker/mcp/register.yaml(路径应该在Windows的用户名目录下) 在现有代码下以类似格式添加:
spreadsheet:
ref: ""
然后复制并粘贴文件 spreadsheet-mcp.yaml 到.docker/mcp/catalogs(同样在Windows上的同一位置)
使用示例
创建电子表格
# Create a new Excel file with headers
await create_spreadsheet(
filename="sales.xlsx",
sheet_name="Q1",
headers=["Date", "Product", "Amount"]
)
写入数据
# Write data to a specific sheet (creates sheet if it doesn't exist)
await write_spreadsheet(
filename="sales.xlsx",
sheet="Q1",
data=[
["Date", "Product", "Amount"],
["2024-01-01", "Widget", 100],
["2024-01-02", "Gadget", 150]
]
)
使用公式
# Set a formula in a cell
await set_formula(
filename="sales.xlsx",
sheet="Summary",
cell="B2",
formula="=Q1!C2"
)
# Cross-sheet reference
await set_formula(
filename="sales.xlsx",
sheet="Data1",
cell="E2",
formula="=Data2!A2"
)
格式化
# Format header row with green background
await format_cells(
filename="sales.xlsx",
sheet="Q1",
cell_range="A1:E1",
bold=True,
bg_color="#00FF00"
)
# Format a single cell
await set_cell_format(
filename="sales.xlsx",
sheet="Q1",
cell="A1",
bold=True,
italic=True,
bg_color="FFFF0000" # Red with full opacity
)
列和行大小
# Set column width
await set_column_format(
filename="sales.xlsx",
sheet="Q1",
column="A",
width=20
)
# Set row height
await set_row_format(
filename="sales.xlsx",
sheet="Q1",
row=1,
height=30
)
冷冻面板
# Freeze top row
await freeze_panes(
filename="sales.xlsx",
sheet="Q1",
cell="A2"
)
# Freeze first column
await freeze_panes(
filename="sales.xlsx",
sheet="Q1",
cell="B1"
)
# Freeze both top row and first column
await freeze_panes(
filename="sales.xlsx",
sheet="Q1",
cell="B2"
)
# Unfreeze panes
await unfreeze_panes(
filename="sales.xlsx",
sheet="Q1"
)
创建图表
# Create a bar chart
await create_chart(
filename="sales.xlsx",
sheet="Q1",
chart_type="bar",
data_range="A1:B10",
title="Sales by Product"
)
# Create a pie chart
await create_chart(
filename="sales.xlsx",
sheet="Q1",
chart_type="pie",
data_range="A1:B5",
title="Market Share"
)
api参考
文件操作
| 工具 | 说明 | 必需参数 |
|---|---|---|
list_files |
列出所有电子表格文件 | pattern (可选) |
create_spreadsheet |
创建新的电子表格 | filename |
delete_spreadsheet |
删除电子表格 | filename |
rename_file |
重命名文件 | old_filename, new_filename |
工作表操作
| 工具 | 说明 | 必需参数 |
|---|---|---|
rename_sheet |
重命名图纸 | filename, old_sheet, new_sheet |
数据运营
| 工具 | 说明 | 必需参数 |
|---|---|---|
read_spreadsheet |
读取电子表格数据 | filename |
write_spreadsheet |
将数据写入电子表格 | filename, data |
append_row |
追加一行 | filename, row_data |
update_cell |
更新单个单元格 | filename, sheet, cell, value |
公式运算
| 工具 | 说明 | 必需参数 |
|---|---|---|
set_formula |
设置单元格公式 | filename, sheet, cell, formula |
get_formula |
获取单元格公式 | filename, sheet, cell |
格式化操作
| 工具 | 说明 | 必需参数 |
|---|---|---|
format_cells |
设置单元格范围格式 | filename, sheet, cell_range |
set_cell_format |
格式化单个单元格 | filename, sheet, cell |
set_column_format |
格式化列 | filename, sheet, column |
set_row_format |
设置行格式 | filename, sheet, row |
高级功能
| 工具 | 说明 | 必需参数 |
|---|---|---|
freeze_panes |
冻结窗格 | filename, sheet, cell |
unfreeze_panes |
移除冻结的窗格 | filename, sheet |
create_chart |
创建图表 | filename, sheet, chart_type, data_range |
颜色格式
颜色可以用两种格式指定:
-
RGB十六进制 (6个字符):
#00FF00或00FF00- 自动转换为完全不透明的ARGB
-
ARGB十六进制 (8个字符):
FF00FF00- 前两个字符=alpha(不透明度):
FF=完全不透明 - 剩余六个=RGB颜色
- 前两个字符=alpha(不透明度):
示例:
- 绿色:
#00FF00→ 转换为FF00FF00 - 红色:
#FF0000→ 转换为FFFF0000 - 半透明蓝色:
8000FF00(50%不透明度)
目录结构
spreadsheet-mcp-server/
├── spreadsheet_server.py # Main server code
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
├── spreadsheet-mcp.yaml # MCP catalog
├── README.md # This file
└── spreadsheets/ # Working directory (created automatically)
故障排除
服务器未出现在Claude Desktop中
- 验证Docker镜像是否已构建:
docker images | grep spreadsheet-mcp-server - 检查克劳德桌面日志:
~/Library/Logs/Claude/mcp*.log(Mac)或%APPDATA%\Claude\logs\mcp*.log(Windows) - 确保所有工具
inputSchema定义于handle_tools_list()
“颜色必须是aRGB十六进制值”错误
- 使用
_normalize_color()辅助功能 - 确保颜色正确
#RRGGBB或AARRGGBB格式
“工作表不存在”错误
- 这
write_spreadsheet和append_row方法现在自动创建工作表 - 更新代码后重建Docker镜像
未创建工作表
- 确保您正在使用更新的
write_spreadsheet()包括自动创建工作表 - 验证工作表名称不包含无效字符
发展
在本地运行测试
# Install dependencies
pip install -r requirements.txt
# Run server in stdio mode
python spreadsheet_server.py
变更后的重建
# Rebuild Docker image
docker build -t spreadsheet-mcp-server:latest .
# Restart Claude Desktop completely (quit and reopen)
版本历史记录
v1.1.0(当前)
- 添加了冻结/解冻窗格功能
- 在写入操作中自动创建工作表
- 颜色归一化(RGB→ ARGB)
- 图表创建(条形图和饼图)
- 列和行格式
- 增强的错误处理
v1.0.0
- 初始版本
- 基本CRUD操作
- 公式支持
- 单元格格式
许可证
MIT许可证-随意修改和分发。
贡献
欢迎投稿!请确保:
- 所有工具都有适当的
inputSchema定义 - 已实施错误处理
- Docker镜像构建成功
- 使用Claude Desktop测试工具
支持
对于问题或疑问:
- 检查故障排除部分
- 查看克劳德桌面日志
- 验证Docker容器是否正在运行:
docker ps | grep spreadsheet
