智能表MCP服务器
  ](https://github.com/terilios/smartsheet-server/releases)
](package.json) ](smartsheet_ops/setup.py)
一种模型上下文协议(MCP)服务器,提供与Smartsheet的无缝集成,通过标准化界面实现Smartsheet文档的自动化操作。该服务器弥合了人工智能驱动的自动化工具和Smartsheet强大的协作平台之间的差距。
概述
Smartsheet MCP服务器旨在促进与Smartsheet的智能交互,为文档管理、数据操作和列定制提供一套强大的工具。它是自动化工作流程中的关键组件,使AI系统能够以编程方式与Smartsheet数据交互,同时保持数据完整性并执行业务规则。
主要优势
- 智能集成:将人工智能系统与Smartsheet的协作平台无缝连接
- 数据完整性:强制执行验证规则并维护跨操作的引用完整性
- 配方管理:自动保留和更新公式引用
- 灵活的配置:支持各种列类型和复杂的数据结构
- 差错恢复:在多个层实现全面的错误处理和验证
- 医疗保健分析:临床和研究数据的专业分析能力
- 批处理:高效处理大型医疗数据集
- 自定义评分:灵活的医疗保健倡议和研究评分系统
用例
- 临床研究分析
- 协议合规性评分 - 患者数据分析 - 研究影响评估 - 临床试验数据处理 - 自动研究笔记摘要
- 医院运营
- 资源利用分析 - 患者满意度评分 - 部门效率指标 - 员工绩效分析 - 质量指标跟踪
- 医疗创新
- 儿科对齐评分 - 创新影响评估 - 研究优先级 - 实施可行性分析 - 临床价值评估
- 自动化文档管理
- 程序化图纸结构修改 - 动态列创建和管理 - 自动数据验证和格式化
- 数据运营
- 通过完整性检查进行批量数据更新 - 智能重复检测 - 公式感知修改
- 系统集成
- 人工智能驱动的纸张定制 - 自动化报告工作流程 - 跨系统数据同步
集成点
服务器与以下设备集成:
- 用于数据操作的Smartsheet API
- 用于标准化通信的MCP协议
- 通过stdio接口的本地开发工具
- 通过结构化日志记录监控系统
特性
工具(34个可用)
get_column_map(阅读)
- 从Smartsheet检索列映射和示例数据 - 提供详细的列元数据,包括: - 列类型(系统列、公式、选择列表) - 验证规则 - 格式规范 - 自动编号配置 - 返回上下文的示例数据 - 包括写入数据的使用示例
get_sheet_info(阅读-别名)
- 别名为 get_column_map 提供相同的功能 - 保持与现有集成的向后兼容性
smartsheet_write(创建)
- 通过智能处理将新行写入Smartsheet: - 系统管理列 - 多选选择列表值 - 基于公式的列 - 实现自动重复检测 - 将新行附加到工作表底部 (在现有条目之后) - 返回包括行ID在内的详细操作结果
smartsheet_update(更新)
- 更新智能表中的现有行 - 支持部分更新(修改特定字段) - 通过验证保持数据完整性 - 一致地处理多选字段 - 按行返回成功/失败的详细信息
smartsheet_delete(删除)
- 从智能表中删除行 - 支持批量删除多行 - 验证行是否存在和权限 - 返回详细的操作结果
smartsheet_search(搜索)
- 跨工作表执行高级搜索 - 支持多种搜索模式: - 支持正则表达式的文本搜索 - PICKLIST列的精确值匹配 - 区分大小写和整词选项 - 列特定搜索功能 - 退货: - 匹配的行ID(主要结果) - 详细的比赛信息 - 搜索元数据和统计数据
smartsheet_add_column(栏目管理)
- 向智能表添加新列 - 支持所有列类型: - TEXT_编号 - 日期 - 复选框 - 选择列表 - 联系人列表 - 可配置选项: - 位置索引 - 验证规则 - 公式定义 - 选择列表选项 - 通过验证强制列限制(400) - 返回详细的列信息
smartsheet_delete_column(栏目管理)
- 通过依赖性检查安全删除列 - 删除前验证公式引用 - 防止删除公式中使用的列 - 返回详细的依赖关系信息 - 支持强制删除选项
smartsheet_rename_column(栏目管理)
- 在保留关系的同时重命名列 - 自动更新公式引用 - 维护数据完整性 - 验证名称唯一性 - 返回详细的更新信息
smartsheet_bulk_update(有条件更新)
- 根据规则执行有条件的批量更新 - 支持复杂条件评估: - 多个运算符(等于、包含、大于等) - 特定类型的比较(文本、日期、数字) - 空/非空支票 - 可配置大小的批处理 - 全面的错误处理和回滚 - 详细操作结果跟踪
get_all_row_ids(公用设施)
- 从智能表中检索所有行ID - 适用于批量操作和数据分析 - 返回行标识符的完整列表 - 高效支撑大纸张
start_batch_analysis(医疗保健分析)
- 使用AI分析处理整个工作表或选定行 - 支持多种分析类型: - 临床记录总结 - 患者反馈的情绪分析 - 医疗保健计划的自定义评分 - 研究影响评估 - 特征: - 自动批处理(每批3行,以获得最佳性能) - 进度跟踪和状态监控 - 详细报告的错误处理 - 通过Azure OpenAI实现可定制的分析目标 - 支持多个源列 - 大文本的令牌感知内容分块
get_job_status(分析监测)
- 跟踪批量分析进度 - 提供详细的作业统计信息: - 要处理的行总数 - 已处理行数 - 行计数失败 - 处理时间戳 - 实时状态更新 - 全面的错误报告
cancel_batch_analysis(作业控制)
- 取消正在运行的批处理分析作业 - 优雅的进程终止 - 保持数据一致性 - 返回最终作业状态
list_workspaces(工作区管理)
- 列出所有可访问的工作区 - 返回工作区ID、名称和永久链接 - 包括访问级别信息 - 支持组织范围内的工作空间发现
get_workspace(工作区管理)
- 检索详细的工作区信息 - 返回包含的工作表、文件夹、报告和仪表板 - 提供访问级别和权限详细信息 - 支持工作区内容探索
create_workspace(工作区管理)
- 使用指定名称创建新工作区 - 返回新的工作区ID和确认 - 启用程序化工作区组织 - 支持从弃用的文件夹端点迁移
create_sheet_in_workspace(工作区管理)
- 直接在工作空间中创建新图纸 - 支持所有列类型和配置 - 返回新的工作表ID和详细信息 - 支持程序化工作表创建和组织
list_workspace_sheets(工作区管理)
- 列出特定工作空间中的所有工作表 - 返回工作表ID、名称和永久链接 - 包括创建和修改时间戳 - 支持工作区内容发现
smartsheet_upload_attachment(附件管理)
- 将文件上传到工作表、行或注释中 - 支持多种附件类型和文件大小验证 - 返回附件元数据和上传状态
smartsheet_get_attachments(附件管理)
- 列出表或行的所有附件 - 返回全面的附件元数据 - 包括文件URL、大小和创建者信息
smartsheet_download_attachment(附件管理)
- 将特定附件下载到本地文件系统 - 根据需要创建目录并验证下载 - 返回下载状态和文件信息
smartsheet_delete_attachment(附件管理)
- 从工作表中删除附件 - 验证权限并返回删除状态
smartsheet_create_discussion(讨论管理)
- 在工作表或行上创建新的讨论线程 - 支持初始注释和可选标题 - 返回讨论元数据和创建状态
smartsheet_add_comment(讨论管理)
- 向现有讨论添加评论 - 保持线程化对话结构 - 返回评论详细信息和时间戳
smartsheet_get_discussions(讨论管理)
- 列出工作表或行的所有讨论 - 可选择包含所有评论作为回应 - 返回讨论元数据和参与者信息
smartsheet_get_comments(讨论管理)
- 获取特定讨论线程中的所有评论 - 包括附件信息(如果存在) - 返回按时间顺序排列的评论历史记录
smartsheet_delete_comment(讨论管理)
- 从讨论中删除特定评论 - 删除前验证权限 - 返回删除确认
smartsheet_get_cell_history(细胞历史和审计)
- 获取单个单元格的修改历史记录 - 包括用户归因和时间戳 - 跟踪值更改、公式和格式
smartsheet_get_row_history(细胞历史和审计)
- 获取整行的更改历史记录 - 提供所有单元格更改的时间轴 - 支持特定列过滤和完整的审计跟踪
smartsheet_get_sheet_cross_references(交叉表参考)
- 分析工作表中的所有跨工作表引用 - 识别引用其他工作表的公式 - 公式模式和依赖关系的详细分析
smartsheet_find_sheet_references(交叉表参考)
- 查找引用特定目标工作表的所有工作表 - 在工作区或整个可访问的工作表中搜索 - 全面的参考地图绘制和影响分析
smartsheet_validate_cross_references(交叉表参考)
- 验证所有跨表引用是否存在断开的链接 - 识别无法访问或已删除的参考表 - 为损坏的参考文献建议替代表格
smartsheet_create_cross_reference(交叉表参考)
- 创建INDEX_MATCH、VLOOKUP、SUMIF、COUNTIF公式 - 以编程方式构建跨表引用公式 - 支持自定义公式模板和多种公式类型
资源(4个静态模板+5个动态模板)
服务器提供静态资源和动态资源模板,以增强数据访问和上下文信息。
静态资源
smartsheet://templates/project-plan- 项目计划模板
- 带有最佳实践的预构建项目计划模板 - 包括用于任务管理的最佳列结构 - 提供有关依赖关系和资源分配的指导
smartsheet://templates/task-tracker- 任务跟踪器模板
- 用于团队协作的简单任务跟踪模板 - 专注于进度监控,没有复杂的依赖关系 - 非常适合敏捷团队和简单的工作流程
smartsheet://schemas/column-types- 列类型参考
- 所有支持的Smartsheet列类型的完整参考 - 包括每种类型的API支持级别(完整、有限、只读) - 对于理解列功能和限制至关重要
smartsheet://best-practices/formulas- 配方最佳实践
- 常用公式模式和计算示例 - 性能和可维护性的最佳实践 - 交叉表参考指南
动态资源模板
smartsheet://{sheet_id}/summary- 工作表摘要
- 自动生成包含关键指标和健康状态的摘要 - 进度指标和完成情况统计 - 表单数据的实时分析
smartsheet://{sheet_id}/gantt-data- 甘特图数据
- 用于可视化的标准化甘特图数据格式 - 针对项目管理工具优化的时间线数据 - 依赖关系和关键路径信息
smartsheet://{workspace_id}/overview- 工作区概览
- 工作空间内容的全面概述 - 结构化格式的所有工作表、报告和仪表板 - 访问级别和组织层次结构
smartsheet://{sheet_id}/dependencies- 依赖关系图
- 项目表的可视化依赖关系映射 - 任务关系和关键路径分析 - 瓶颈识别和优化建议
smartsheet://{sheet_id}/health-report- 工作表健康报告
- 识别数据质量问题的健康分析 - 缺失数据检测和破损配方识别 - 优化机会和建议
提示(6个可用)
智能提示模板,为常见的Smartsheet操作和分析提供指导性帮助。
create_project_plan- 项目计划创建指南
- 使用最佳实践指导项目计划创建 - 基于项目类型和持续时间的模板建议 - 工作分解结构建议
analyze_project_status- 项目健康分析
- 综合项目健康分析及建议 - 时间线遵守和资源利用洞察 - 风险识别和缓解策略
optimize_workflow- 工作流程优化
- 改进图纸结构和工作流程的建议 - 自动化机会和效率提高 - 用户体验提升建议
generate_insights- 数据洞察提取
- 从表格数据中提取关键见解和模式 - 趋势分析和异常检测 - 可操作的情报和决策支持
create_dashboard_summary- 高管仪表板创建
- 从多个表格生成执行摘要 - 高级KPI跟踪和战略见解 - 以领导层为重点的报告和建议
setup_conditional_formatting- 条件格式指南
- 逐步设置条件格式 - 可视化数据表示最佳实践 - 状态指示器和进度跟踪配置
核心能力
- 列类型管理
- 处理系统列类型(AUTO_NUMBER、CREATED_DATE等) - 支持公式解析和依赖关系跟踪 - 管理选择列表选项和多选值 - 全面的列操作(添加、删除、重命名) - 公式参考保存和更新
- 数据验证
- 自动重复检测 - 列类型验证 - 数据格式验证 - 列依赖性分析 - 名称唯一性验证
- 搜索功能
- 高级搜索功能 - 类型感知搜索: - PICKLIST值的精确匹配 - 文本字段的模式匹配 - 数字比较 - 可配置的搜索选项: - 区分大小写 - 整词匹配 - 列过滤 - 综合结果: - 匹配行的行ID - 详细的匹配上下文 - 搜索统计
- 元数据处理
- 提取和处理列元数据 - 处理验证规则 - 管理格式规范 - 跟踪公式依赖关系 - 维护列关系
- 医疗保健分析
- 使用Azure OpenAI进行临床记录摘要 - 患者反馈情绪分析 - 协议合规性评分 - 研究影响评估 - 资源利用分析 - 自定义分析,优化提示生成
- 批处理
- 自动行批处理(每批3行,以获得最佳性能) - 进度跟踪和监控 - 错误处理和恢复 - 可定制的处理目标 - 多列分析支持 - 大文本的令牌感知内容分块 - 使用ThreadPoolExecutor进行后台作业处理
- 作业管理
- 实时状态监控 - 详细的进度跟踪 - 错误报告和日志记录 - 作业取消支持 - 批量操作控制
- 交叉表参考
- 公式分析和依赖关系映射 - 跨表参考检测和验证 - 断链识别及修复建议 - 自动公式生成(INDEX_MATCH、VLOOKUP、SUMIF、COUNTIF) - 跨工作区的参考影响分析 - 自定义公式模板支持
设置
先决条件
- Node.js和npm
- Conda(环境管理)
- Smartsheet API访问令牌
- Azure OpenAI API访问(用于批处理分析功能)
环境设置
- 创建一个专用的conda环境:
conda create -n cline_mcp_env python=3.12 nodejs -y
conda activate cline_mcp_env- 安装Node.js依赖项:
npm install- 安装Python依赖项:
cd smartsheet_ops
pip install -e .
cd ..注意:Python包包括以下依赖项:
smartsheet-python-sdk-Smartsheet API客户端python-dotenv-环境变量管理openai-Azure OpenAI集成tiktoken-用于AI分析的令牌计数
- 构建TypeScript服务器:
npm run build配置
服务器支持两种传输模式:
- STDIO传输 (默认):用于本地开发和CLI使用
- HTTP传输:用于基于网络的客户端和网络访问
1.获取Smartsheet API密钥
- 登录 智能表格
- 转到账户→ 个人设置→ API访问
- 生成新的访问令牌
2.配置STDIO传输(临床/本地)
配置路径取决于您的操作系统:
macOS:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json视窗:
%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.jsonLinux:
~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json{
"mcpServers": {
"smartsheet": {
"command": "/Users/[username]/anaconda3/envs/cline_mcp_env/bin/node",
"args": [
"/path/to/smartsheet-server/build/index.js",
"--transport",
"stdio"
],
"env": {
"PYTHON_PATH": "/Users/[username]/anaconda3/envs/cline_mcp_env/bin/python3",
"SMARTSHEET_API_KEY": "your-api-key",
"AZURE_OPENAI_API_KEY": "your-azure-openai-key",
"AZURE_OPENAI_API_BASE": "your-azure-openai-endpoint",
"AZURE_OPENAI_API_VERSION": "your-api-version",
"AZURE_OPENAI_DEPLOYMENT": "your-deployment-name"
},
"disabled": false,
"autoApprove": [
"get_column_map",
"smartsheet_write",
"smartsheet_update",
"smartsheet_delete",
"smartsheet_search",
"smartsheet_add_column",
"smartsheet_delete_column",
"smartsheet_rename_column",
"smartsheet_bulk_update",
"start_batch_analysis",
"get_job_status",
"cancel_batch_analysis",
"get_all_row_ids",
"list_workspaces",
"get_workspace",
"create_workspace",
"create_sheet_in_workspace",
"list_workspace_sheets"
]
}
}
}3.配置HTTP传输
对于基于web的MCP客户端或网络访问,请使用HTTP传输模式:
启动服务器:
# Start with default port (3000)
SMARTSHEET_API_KEY=your-api-key PYTHON_PATH=/path/to/python smartsheet-server --transport http
# Start with custom port
SMARTSHEET_API_KEY=your-api-key PYTHON_PATH=/path/to/python smartsheet-server --transport http --port 8080客户端配置:
{
"mcpServers": {
"smartsheet-server": {
"type": "http",
"url": "http://localhost:3000/mcp",
"headers": {
"Authorization": "Bearer your-optional-auth-token"
}
}
}
}健康检查:
HTTP服务器提供健康检查端点:
curl http://localhost:3000/health
# Response: {"status":"ok","server":"smartsheet-mcp"}启动服务器
STDIO传输(默认)
当Cline或Claude Desktop需要时,服务器将自动启动。但是,您也可以手动启动进行测试。
macOS/Linux:
# Activate the environment
conda activate cline_mcp_env
# Start with STDIO transport (default)
PYTHON_PATH=/Users/[username]/anaconda3/envs/cline_mcp_env/bin/python3 SMARTSHEET_API_KEY=your-api-key node build/index.js
# Or explicitly specify STDIO transport
PYTHON_PATH=/Users/[username]/anaconda3/envs/cline_mcp_env/bin/python3 SMARTSHEET_API_KEY=your-api-key node build/index.js --transport stdio视窗:
:: Activate the environment
conda activate cline_mcp_env
:: Start with STDIO transport
set PYTHON_PATH=C:\Users\[username]\anaconda3\envs\cline_mcp_env\python.exe
set SMARTSHEET_API_KEY=your-api-key
node build\index.js --transport stdioHTTP传输
对于基于web的客户端或网络访问:
macOS/Linux:
# Activate the environment
conda activate cline_mcp_env
# Start HTTP server on default port (3000)
PYTHON_PATH=/Users/[username]/anaconda3/envs/cline_mcp_env/bin/python3 SMARTSHEET_API_KEY=your-api-key node build/index.js --transport http
# Start HTTP server on custom port
PYTHON_PATH=/Users/[username]/anaconda3/envs/cline_mcp_env/bin/python3 SMARTSHEET_API_KEY=your-api-key node build/index.js --transport http --port 8080视窗:
:: Activate the environment
conda activate cline_mcp_env
:: Start HTTP server
set PYTHON_PATH=C:\Users\[username]\anaconda3\envs\cline_mcp_env\python.exe
set SMARTSHEET_API_KEY=your-api-key
node build\index.js --transport http --port 3000命令行选项
# View help
node build/index.js --help
# Available options:
--transport # "stdio" (default) or "http"
--port # HTTP port (default: 3000, only used with --transport http)
--help, -h # Show help message验证安装
STDIO传输
- 启动时,服务器应输出“Smartsheet MCP服务器在stdio上运行”
- 使用任何MCP工具(例如get_column_map)测试连接
HTTP传输
- 启动时,服务器应输出“Smartsheet MCP服务器在HTTP端口3000上运行”
- 测试运行状况端点:
curl http://localhost:3000/health - 预期响应:
{"status":"ok","server":"smartsheet-mcp"}
Python环境
检查Python环境是否安装了所需的包:
conda activate cline_mcp_env
pip show smartsheet-python-sdk openai tiktoken python-dotenvPython包应包含以下关键依赖项:
smartsheet-python-sdk>=2.105.1-Smartsheet API客户端openai>=1.0.0-Azure OpenAI集成tiktoken>=0.5.0-用于AI分析的令牌计数python-dotenv>=1.0.0-环境变量管理
使用示例
获取列信息(已读)
// Get column mapping and sample data
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "get_column_map",
arguments: {
sheet_id: "your-sheet-id",
},
});写入数据(创建)
// Write new rows to Smartsheet
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_write",
arguments: {
sheet_id: "your-sheet-id",
column_map: {
"Column 1": "1234567890",
"Column 2": "0987654321",
},
row_data: [
{
"Column 1": "Value 1",
"Column 2": "Value 2",
},
],
},
});搜索数据
// Basic text search
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_search",
arguments: {
sheet_id: "your-sheet-id",
pattern: "search text",
options: {
case_sensitive: false,
whole_word: false,
columns: ["Column1", "Column2"], // Optional: limit search to specific columns
},
},
});
// Search PICKLIST column with exact matching
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_search",
arguments: {
sheet_id: "your-sheet-id",
pattern: "In Progress",
options: {
columns: ["Status"], // PICKLIST column
case_sensitive: true,
whole_word: true,
},
},
});更新数据(Update)
// Update existing rows
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_update",
arguments: {
sheet_id: "your-sheet-id",
column_map: {
Status: "850892021780356",
Notes: "6861293012340612",
},
updates: [
{
row_id: "7670198317295492",
data: {
Status: "In Progress",
Notes: "Updated via MCP server",
},
},
],
},
});删除数据(Delete)
// Delete rows from Smartsheet
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_delete",
arguments: {
sheet_id: "your-sheet-id",
row_ids: ["7670198317295492", "7670198317295493"],
},
});医疗保健分析示例
// Example 1: Pediatric Innovation Scoring
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "start_batch_analysis",
arguments: {
sheet_id: "your-sheet-id",
type: "custom",
sourceColumns: ["Ideas", "Implementation_Details"],
targetColumn: "Pediatric_Score",
rowIds: ["row1", "row2", "row3"], // Optional: specify rows, or omit for all rows
customGoal:
"Score each innovation 1-100 based on pediatric healthcare impact. Consider: 1) Direct benefit to child patients, 2) Integration with pediatric workflows, 3) Implementation feasibility in children's hospital, 4) Safety considerations for pediatric use. Return only a number.",
},
});
// Example 2: Clinical Note Summarization
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "start_batch_analysis",
arguments: {
sheet_id: "your-sheet-id",
type: "summarize",
sourceColumns: ["Clinical_Notes"],
targetColumn: "Note_Summary",
rowIds: ["row1", "row2"], // Optional: specify rows, or omit for all rows
},
});
// Example 3: Patient Satisfaction Analysis
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "start_batch_analysis",
arguments: {
sheet_id: "your-sheet-id",
type: "sentiment",
sourceColumns: ["Patient_Feedback"],
targetColumn: "Satisfaction_Score",
rowIds: ["row1", "row2"], // Optional: specify rows, or omit for all rows
},
});
// Example 4: Get All Row IDs for Batch Processing
const allRows = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "get_all_row_ids",
arguments: {
sheet_id: "your-sheet-id",
},
});
// Example 5: Monitor Analysis Job Progress
const jobStatus = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "get_job_status",
arguments: {
sheet_id: "your-sheet-id",
jobId: "job-uuid-from-start-analysis",
},
});工作区管理示例
// List all accessible workspaces
const workspaces = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "list_workspaces",
arguments: {},
});
// Get details of a specific workspace
const workspace = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "get_workspace",
arguments: {
workspace_id: "6621332407379844",
},
});
// Create a new workspace
const newWorkspace = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "create_workspace",
arguments: {
name: "Project Management",
},
});
// Create a sheet in a workspace
const newSheet = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "create_sheet_in_workspace",
arguments: {
workspace_id: "6621332407379844",
name: "Task Tracker",
columns: [
{ title: "Task Name", type: "TEXT_NUMBER" },
{ title: "Due Date", type: "DATE" },
{
title: "Status",
type: "PICKLIST",
options: ["Not Started", "In Progress", "Completed"],
},
],
},
});
// List all sheets in a workspace
const sheets = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "list_workspace_sheets",
arguments: {
workspace_id: "6621332407379844",
},
});资源使用示例
// Access static resources
const projectTemplate = await access_mcp_resource({
server_name: "smartsheet",
uri: "smartsheet://templates/project-plan",
});
const columnTypes = await access_mcp_resource({
server_name: "smartsheet",
uri: "smartsheet://schemas/column-types",
});
const formulaGuide = await access_mcp_resource({
server_name: "smartsheet",
uri: "smartsheet://best-practices/formulas",
});
// Access dynamic resources
const sheetSummary = await access_mcp_resource({
server_name: "smartsheet",
uri: "smartsheet://8596778555232132/summary",
});
const ganttData = await access_mcp_resource({
server_name: "smartsheet",
uri: "smartsheet://8596778555232132/gantt-data",
});
const workspaceOverview = await access_mcp_resource({
server_name: "smartsheet",
uri: "smartsheet://6621332407379844/overview",
});
const dependencyMap = await access_mcp_resource({
server_name: "smartsheet",
uri: "smartsheet://8596778555232132/dependencies",
});
const healthReport = await access_mcp_resource({
server_name: "smartsheet",
uri: "smartsheet://8596778555232132/health-report",
});提示使用示例
// Project plan creation guidance
const projectPlanPrompt = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "get_prompt",
arguments: {
name: "create_project_plan",
arguments: {
project_name: "Website Redesign",
project_type: "software",
duration_estimate: "3 months",
},
},
});
// Project health analysis
const analysisPrompt = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "get_prompt",
arguments: {
name: "analyze_project_status",
arguments: {
sheet_id: "8596778555232132",
focus_area: "timeline",
},
},
});
// Workflow optimization suggestions
const optimizationPrompt = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "get_prompt",
arguments: {
name: "optimize_workflow",
arguments: {
sheet_id: "8596778555232132",
workflow_type: "approval",
},
},
});
// Data insights extraction
const insightsPrompt = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "get_prompt",
arguments: {
name: "generate_insights",
arguments: {
sheet_id: "8596778555232132",
insight_type: "bottlenecks",
},
},
});
// Executive dashboard creation
const dashboardPrompt = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "get_prompt",
arguments: {
name: "create_dashboard_summary",
arguments: {
workspace_id: "6621332407379844",
summary_focus: "risks",
},
},
});
// Conditional formatting setup
const formattingPrompt = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "get_prompt",
arguments: {
name: "setup_conditional_formatting",
arguments: {
sheet_id: "8596778555232132",
formatting_goal: "status indicators",
},
},
});发展
对于自动重建的开发:
npm run watchCI/CD管道
该项目通过GitHub Actions实现了一个全面的8级CI/CD管道,确保所有组件的代码质量、安全性和可靠性。
管道结构
CI/CD管道由8个并行和顺序运行的协调作业组成,以实现最佳效率:
- TypeScript质量检查 -ESLint、类型检查、格式验证
- Python质量检查 -黑色,Flake8,MyPy类型检查
- TypeScript测试 -Node.js 16、18、20上的覆盖率矩阵测试
- Python测试 -Python 3.8、3.9、3.10、3.11上的矩阵测试,覆盖率
- 综合覆盖范围 -统一覆盖报告和Codecov集成
- 集成测试 -端到端验证和MCP服务器启动验证
- 安全扫描 -npm审计、Python安全、Bandit安全分析
- 构建和打包 -工件创建和部署验证
关键管道特征
质量保证:
- 多语言支持:完整的TypeScript和Python管道覆盖
- 矩阵测试:跨平台兼容性验证
- 代码质量门:ESLint、黑色、Flake8、MyPy、TypeScript严格模式
- 保险范围执行:自动覆盖阈值验证
- 安全扫描:与安全部门和Bandit进行定期漏洞评估
性能优化:
- 并行执行:独立作业同时运行,以获得更快的反馈
- 智能高速缓存:跨运行缓存的节点模块和Python依赖项
- 条件执行:仅对PR进行性能测试,全面覆盖主
- 工件管理:构建保存7-30天的工件
集成和部署:
- MCP协议验证:服务器启动和协议合规性测试
- Docker支持:多平台容器构建(linux/amd64、linux/arm64)
- 自动发布:已标记版本并生成更改日志的版本
- 依赖管理:每周安全审计和更新自动化
工作流触发器
# Comprehensive testing on main branches
- push: [main, develop]
- pull_request: [main, develop]
# Additional workflows
- release: version tags (v*.*.*)
- security: weekly dependency scans
- performance: PR-specific testing状态监控
  
该管道提供全面的通知和工件管理,确保所有利益相关者都能了解构建状态、测试结果和部署准备情况。
测试和质量保证
该项目通过自动化的CI/CD管道在TypeScript和Python组件之间保持全面的测试覆盖率和质量保证。
测试基础设施
测试状态:54/54个TypeScript测试通过,5/5个Python测试通过
我们的全面测试策略包括:
- 单元测试:TypeScript的Jest(54个测试),Python的pytest(5个核心测试)
- 集成测试:跨组件测试和MCP协议验证
- 代码质量:ESLint,TypeScript检查,黑色,Flake8,MyPy
- 安全扫描:npm审计、Python安全检查、Bandit分析
- 覆盖率分析:将覆盖率报告与Codecov集成相结合
- 性能测试:启动时间测量和基准跟踪
测试覆盖率概述
当前覆盖指标:
- TypeScript覆盖率:全面覆盖MCP服务器实施
- Python覆盖率:核心操作和CLI功能
- 合并报告:两种语言的统一覆盖分析
- 自动跟踪:通过Codecov进行实时覆盖监测
快速测试命令
# Essential testing commands for daily development
npm run ci:check # Pre-commit validation (recommended before push)
npm run test:all # Run all tests with coverage
npm run coverage # Full coverage analysis with combined reporting
npm run coverage:open # View coverage reports in browser
# Individual test suites
npm test # TypeScript tests only
npm run test:python # Python tests only
npm run test:coverage # TypeScript with coverage
npm run test:python:coverage # Python with coverage
# Development testing
npm run test:watch # Watch mode for continuous testing
npm run coverage:clean # Coverage without external uploads综合测试命令
# Quality assurance
npm run lint # ESLint for TypeScript
npm run lint:fix # Auto-fix linting issues
npm run format # Prettier code formatting
npm run typecheck # TypeScript type validation
# Coverage and reporting
npm run badges:update # Generate coverage badges
npm run coverage:ci # CI-optimized coverage reporting
npm run coverage:view # Open all coverage reports
npm run coverage:combined # View combined coverage report
# Build and validation
npm run build # Build TypeScript
npm run watch # Development build with watch
npm run inspector # MCP inspector for tool testing测试报告和工件
运行测试后,可以获得详细的报告:
- TypeScript覆盖率:
./coverage/index.html - Python覆盖率:
./smartsheet_ops/coverage/index.html - 综合覆盖范围:
./coverage-combined/index.html - 测试工件:可用于CI/CD管道运行
质量阈值
该项目执行严格的质量标准:
- TypeScript覆盖率:最低60%(每个组件可配置)
- Python覆盖率:通过逐行报告,总体占80%
- 代码质量:ESLint规则,TypeScript严格模式,Python黑/Flake8
- 安全:定期依赖性审计和漏洞扫描
- 演出:启动时间监控和回归检测
Docker支持
构建并运行容器化版本:
# Build Docker image
docker build -t smartsheet-server .
# Run with environment variables
docker run -e SMARTSHEET_API_KEY=your_key -e PYTHON_PATH=/usr/local/bin/python smartsheet-server调试
由于MCP服务器通过stdio进行通信,调试可能具有挑战性。服务器实现了全面的错误记录,并通过MCP协议提供详细的错误消息。
主要调试功能:
- 记录到stderr时出错
- MCP响应中的详细错误消息
- 多级类型验证
- 全面运营结果报告
- 列操作的依赖性分析
- 公式参考跟踪
错误处理
服务器实现了一种多层错误处理方法:
- MCP层
- 验证工具参数 - 处理协议级错误 - 提供格式化的错误响应 - 管理超时和重试
- CLI层
- 验证命令参数 - 处理执行错误 - 将错误消息格式化为JSON - 验证列操作
- 操作层
- 处理Smartsheet API错误 - 验证数据类型和格式 - 提供详细的错误上下文 - 管理列依赖关系 - 验证公式引用 - 确保数据完整性
贡献
欢迎投稿!请确保:
- Types/Python代码遵循现有风格
- 新功能包括适当的错误处理
- 更改保持向后兼容性
- 更新包括适当的文档
- 列操作维护数据完整性
- 正确处理公式引用
