smartsheet server
Provides seamless integration with Smartsheet, enabling automated operations on Smartsheet documents through a standardized interface that bridges AI-powered automation tools with Smartsheet's collaboration platform.
Provides seamless integration with Smartsheet, enabling automated operations on Smartsheet documents through a standardized interface that bridges AI-powered automation tools with Smartsheet's collaboration platform.
A Model Context Protocol (MCP) server that provides seamless integration with Smartsheet, enabling automated operations on Smartsheet documents through a standardized interface. This server bridges the gap between AI-powered automation tools and Smartsheet's powerful collaboration platform.
The Smartsheet MCP Server is designed to facilitate intelligent interactions with Smartsheet, providing a robust set of tools for document management, data operations, and column customization. It serves as a critical component in automated workflows, enabling AI systems to programmatically interact with Smartsheet data while maintaining data integrity and enforcing business rules.
Clinical Research Analytics
Protocol compliance scoring
Automated research note summarization
Hospital Operations
Resource utilization analysis
Quality metrics tracking
Healthcare Innovation
Pediatric alignment scoring
Clinical value assessment
Automated Document Management
Programmatic sheet structure modifications
Automated data validation and formatting
Data Operations
Bulk data updates with integrity checks
Formula-aware modifications
System Integration
The server integrates with:
The server implements a bridge architecture between MCP and Smartsheet:
graph LR
subgraph MCP[MCP Layer]
direction TB
A[Client Request] --> B[TypeScript MCP Server]
B --> C[Tool Registry]
B --> D[Config Management]
end
subgraph CLI[CLI Layer]
direction TB
E[Python CLI] --> F[Argument Parser]
F --> G[Command Router]
G --> H[JSON Formatter]
end
subgraph Core[Core Operations]
direction TB
I[Smartsheet API Client] --> J[Column Manager]
J --> K[Data Validator]
J --> L[Formula Parser]
end
MCP --> CLI --> Core
style A fill:#f9f,stroke:#333
style I fill:#bbf,stroke:#333
TypeScript MCP Layer (src/index.ts
)
Handles MCP protocol communication
Manages configuration and error handling
Python CLI Layer (smartsheet_ops/cli.py
)
Provides command-line interface for operations
Manages JSON data formatting
Core Operations Layer (smartsheet_ops/__init__.py
)
sequenceDiagram
participant C as Client
participant M as MCP Server
participant P as Python CLI
participant S as Smartsheet API
C->>M: Column Operation Request
M->>P: Parse & Validate Request
alt Add Column
P->>S: Validate Column Limit
S-->>P: Sheet Info
P->>S: Create Column
S-->>P: Column Created
P->>S: Get Column Details
S-->>P: Column Info
else Delete Column
P->>S: Check Dependencies
S-->>P: Formula References
alt Has Dependencies
P-->>M: Dependency Error
M-->>C: Cannot Delete
else No Dependencies
P->>S: Delete Column
S-->>P: Success
end
else Rename Column
P->>S: Check Name Uniqueness
S-->>P: Validation Result
P->>S: Update Column Name
S-->>P: Name Updated
P->>S: Update Formula References
S-->>P: References Updated
end
P-->>M: Operation Result
M-->>C: Formatted Response
flowchart TD
A[Client Request] --> B{MCP Layer}
B -->|Validation Error| C[Return Error Response]
B -->|Valid Request| D{CLI Layer}
D -->|Parse Error| E[Format JSON Error]
D -->|Valid Command| F{Core Operations}
F -->|API Error| G[Handle API Exception]
F -->|Validation Error| H[Check Error Type]
F -->|Success| I[Format Success Response]
H -->|Dependencies| J[Return Dependency Info]
H -->|Limits| K[Return Limit Error]
H -->|Data| L[Return Validation Details]
G --> M[Format Error Response]
J --> N[Send to Client]
K --> N
L --> N
I --> N
style A fill:#f9f,stroke:#333
style N fill:#bbf,stroke:#333
get_column_map
(Read)
Retrieves column mapping and sample data from a Smartsheet
Includes usage examples for writing data
smartsheet_write
(Create)
Writes new rows to Smartsheet with intelligent handling of:
Returns detailed operation results including row IDs
smartsheet_update
(Update)
Updates existing rows in a Smartsheet
Returns success/failure details per row
smartsheet_delete
(Delete)
Deletes rows from a Smartsheet
Returns detailed operation results
smartsheet_add_column
(Column Management)
Adds new columns to a Smartsheet
Returns detailed column information
smartsheet_delete_column
(Column Management)
Safely deletes columns with dependency checking
Supports force deletion option
smartsheet_rename_column
(Column Management)
Renames columns while preserving relationships
Returns detailed update information
smartsheet_bulk_update
(Conditional Updates)
Performs conditional bulk updates based on rules
Detailed operation results tracking
start_batch_analysis
(Healthcare Analytics)
Processes entire sheets or selected rows with AI analysis
Features:
get_job_status
(Analysis Monitoring)
cancel_batch_analysis
(Job Control)
Column Type Management
Handles system column types (AUTO_NUMBER, CREATED_DATE, etc.)
Formula reference preservation and updates
Data Validation
Automatic duplicate detection
Name uniqueness validation
Metadata Handling
Extracts and processes column metadata
Maintains column relationships
Healthcare Analytics
Clinical note summarization
Resource utilization analysis
Batch Processing
Automatic row batching (50 rows per batch)
Multi-column analysis support
Job Management
conda create -n cline_mcp_env python=3.12 nodejs -y
conda activate cline_mcp_env
npm install
cd smartsheet_ops
pip install -e .
cd ..
npm run build
The server requires proper configuration in your MCP settings. You can use it with both Claude Desktop and Cline.
The configuration path depends on your operating system:
macOS:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
Windows:
%APPDATA%CodeUserglobalStoragesaoudrizwan.claude-devsettingscline_mcp_settings.json
Linux:
~/.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"],
"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"
]
}
}
}
The configuration path depends on your operating system:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Windows:
%APPDATA%Claudeclaude_desktop_config.json
Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"smartsheet": {
"command": "/Users/[username]/anaconda3/envs/cline_mcp_env/bin/node",
"args": ["/path/to/smartsheet-server/build/index.js"],
"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"
]
}
}
}
The server will start automatically when Cline or Claude Desktop needs it. However, you can also start it manually for testing.
macOS/Linux:
# Activate the environment
conda activate cline_mcp_env
# Start the server
PYTHON_PATH=/Users/[username]/anaconda3/envs/cline_mcp_env/bin/python3 SMARTSHEET_API_KEY=your-api-key node build/index.js
Windows:
:: Activate the environment
conda activate cline_mcp_env
:: Start the server
set PYTHON_PATH=C:Users[username]anaconda3envscline_mcp_envpython.exe
set SMARTSHEET_API_KEY=your-api-key
node buildindex.js
conda activate cline_mcp_env
pip show smartsheet-python-sdk
// 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",
},
],
},
});
// 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 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",
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",
},
});
// 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",
},
});
// Example 4: Protocol Compliance Scoring
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "start_batch_analysis",
arguments: {
sheet_id: "your-sheet-id",
type: "custom",
sourceColumns: ["Protocol_Steps", "Documentation", "Outcomes"],
targetColumn: "Compliance_Score",
customGoal:
"Score protocol compliance 1-100. Consider: 1) Adherence to required steps, 2) Documentation completeness, 3) Safety measures followed, 4) Outcome reporting. Return only a number.",
},
});
// Example 5: Research Impact Assessment
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "start_batch_analysis",
arguments: {
sheet_id: "your-sheet-id",
type: "custom",
sourceColumns: ["Research_Findings", "Clinical_Applications"],
targetColumn: "Impact_Score",
customGoal:
"Score research impact 1-100 based on potential benefit to pediatric healthcare. Consider: 1) Clinical relevance, 2) Implementation potential, 3) Patient outcome improvement, 4) Cost-effectiveness. Return only a number.",
},
});
// Monitor Analysis Progress
const status = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "get_job_status",
arguments: {
sheet_id: "your-sheet-id",
jobId: "job-id-from-start-analysis",
},
});
// Cancel Analysis if Needed
const cancel = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "cancel_batch_analysis",
arguments: {
sheet_id: "your-sheet-id",
jobId: "job-id-to-cancel",
},
});
// Add a new column
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_add_column",
arguments: {
sheet_id: "your-sheet-id",
title: "New Column",
type: "TEXT_NUMBER",
index: 2, // Optional position
validation: true, // Optional
formula: "=[Column1]+ [Column2]", // Optional
},
});
// Delete a column
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_delete_column",
arguments: {
sheet_id: "your-sheet-id",
column_id: "1234567890",
validate_dependencies: true, // Optional, default true
},
});
// Rename a column
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_rename_column",
arguments: {
sheet_id: "your-sheet-id",
column_id: "1234567890",
new_title: "Updated Column Name",
update_references: true, // Optional, default true
},
});
### Conditional Bulk Updates
The `smartsheet_bulk_update` tool provides powerful conditional update capabilities. Here are examples ranging from simple to complex:
#### Simple Condition Examples
```typescript
// Example 1: Basic equals comparison
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_bulk_update",
arguments: {
sheet_id: "your-sheet-id",
rules: [{
conditions: [{
columnId: "status-column-id",
operator: "equals",
value: "Pending"
}],
updates: [{
columnId: "status-column-id",
value: "In Progress"
}]
}]
}
});
// Example 2: Contains text search
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_bulk_update",
arguments: {
sheet_id: "your-sheet-id",
rules: [{
conditions: [{
columnId: "description-column-id",
operator: "contains",
value: "urgent"
}],
updates: [{
columnId: "priority-column-id",
value: "High"
}]
}]
}
});
// Example 3: Empty value check
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_bulk_update",
arguments: {
sheet_id: "your-sheet-id",
rules: [{
conditions: [{
columnId: "assignee-column-id",
operator: "isEmpty"
}],
updates: [{
columnId: "status-column-id",
value: "Unassigned"
}]
}]
}
});
// Example 1: Date comparison
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_bulk_update",
arguments: {
sheet_id: "your-sheet-id",
rules: [
{
conditions: [
{
columnId: "due-date-column-id",
operator: "lessThan",
value: "2025-02-01T00:00:00Z", // ISO date format
},
],
updates: [
{
columnId: "status-column-id",
value: "Due Soon",
},
],
},
],
},
});
// Example 2: Numeric comparison
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_bulk_update",
arguments: {
sheet_id: "your-sheet-id",
rules: [
{
conditions: [
{
columnId: "progress-column-id",
operator: "greaterThan",
value: 80, // Numeric value
},
],
updates: [
{
columnId: "status-column-id",
value: "Nearly Complete",
},
],
},
],
},
});
// Example 3: Picklist validation
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_bulk_update",
arguments: {
sheet_id: "your-sheet-id",
rules: [
{
conditions: [
{
columnId: "category-column-id",
operator: "equals",
value: "Bug", // Must match picklist option exactly
},
],
updates: [
{
columnId: "priority-column-id",
value: "High",
},
],
},
],
},
});
// Example 1: Multiple conditions with different operators
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_bulk_update",
arguments: {
sheet_id: "your-sheet-id",
rules: [
{
conditions: [
{
columnId: "priority-column-id",
operator: "equals",
value: "High",
},
{
columnId: "due-date-column-id",
operator: "lessThan",
value: "2025-02-01T00:00:00Z",
},
{
columnId: "progress-column-id",
operator: "lessThan",
value: 50,
},
],
updates: [
{
columnId: "status-column-id",
value: "At Risk",
},
{
columnId: "flag-column-id",
value: true,
},
],
},
],
},
});
// Example 2: Multiple rules with batch processing
const result = await use_mcp_tool({
server_name: "smartsheet",
tool_name: "smartsheet_bulk_update",
arguments: {
sheet_id: "your-sheet-id",
rules: [
{
conditions: [
{
columnId: "status-column-id",
operator: "equals",
value: "Complete",
},
{
columnId: "qa-status-column-id",
operator: "isEmpty",
},
],
updates: [
{
columnId: "qa-status-column-id",
value: "Ready for QA",
},
],
},
{
conditions: [
{
columnId: "status-column-id",
operator: "equals",
value: "In Progress",
},
{
columnId: "progress-column-id",
operator: "equals",
value: 100,
},
],
updates: [
{
columnId: "status-column-id",
value: "Complete",
},
],
},
],
options: {
lenientMode: true, // Continue on errors
batchSize: 100, // Process in smaller batches
},
},
});
The bulk update operation provides:
Operator Support:
equals
: Exact value matching
contains
: Substring matchinggreaterThan
: Numeric/date comparisonlessThan
: Numeric/date comparisonisEmpty
: Null/empty checkisNotEmpty
: Present value check
Type-Specific Features:
TEXT_NUMBER: String/numeric comparisons
CHECKBOX: Boolean handling
Processing Options:
batchSize
: Control update batch size (default 500)
lenientMode
: Continue on errorsMultiple updates per rule
Result Tracking:
## Development
For development with auto-rebuild:
```bash
npm run watch
Since MCP servers communicate over stdio, debugging can be challenging. The server implements comprehensive error logging and provides detailed error messages through the MCP protocol.
Key debugging features:
The server implements a multi-layer error handling approach:
MCP Layer
Validates tool parameters
Manages timeouts and retries
CLI Layer
Validates command arguments
Validates column operations
Operations Layer
Contributions are welcome! Please ensure:
[
{
"description": "Add a new column to a Smartsheet",
"inputSchema": {
"properties": {
"formula": {
"description": "Formula for calculated columns",
"type": "string"
},
"index": {
"description": "Optional position index",
"type": "number"
},
"options": {
"description": "Options for PICKLIST type",
"items": {
"type": "string"
},
"type": "array"
},
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
},
"title": {
"description": "Column title",
"type": "string"
},
"type": {
"description": "Column type",
"enum": [
"TEXT_NUMBER",
"DATE",
"CHECKBOX",
"PICKLIST",
"CONTACT_LIST"
],
"type": "string"
},
"validation": {
"description": "Enable validation",
"type": "boolean"
}
},
"required": [
"sheet_id",
"title",
"type"
],
"type": "object"
},
"name": "smartsheet_add_column"
},
{
"description": "Delete a column from a Smartsheet",
"inputSchema": {
"properties": {
"column_id": {
"description": "Column ID to delete",
"type": "string"
},
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
},
"validate_dependencies": {
"default": true,
"description": "Check for formula/dependency impacts",
"type": "boolean"
}
},
"required": [
"sheet_id",
"column_id"
],
"type": "object"
},
"name": "smartsheet_delete_column"
},
{
"description": "Rename a column in a Smartsheet",
"inputSchema": {
"properties": {
"column_id": {
"description": "Column ID to rename",
"type": "string"
},
"new_title": {
"description": "New column title",
"type": "string"
},
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
},
"update_references": {
"default": true,
"description": "Update formulas referencing this column",
"type": "boolean"
}
},
"required": [
"sheet_id",
"column_id",
"new_title"
],
"type": "object"
},
"name": "smartsheet_rename_column"
},
{
"description": "Get column mapping and sample data from a Smartsheet",
"inputSchema": {
"properties": {
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
}
},
"required": [
"sheet_id"
],
"type": "object"
},
"name": "get_column_map"
},
{
"description": "Write data to a Smartsheet",
"inputSchema": {
"properties": {
"column_map": {
"additionalProperties": {
"type": "string"
},
"description": "Object mapping data fields to Smartsheet column IDs",
"type": "object"
},
"row_data": {
"description": "Array of objects containing the data to write",
"items": {
"type": "object"
},
"type": "array"
},
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
}
},
"required": [
"sheet_id",
"row_data",
"column_map"
],
"type": "object"
},
"name": "smartsheet_write"
},
{
"description": "Update existing rows in a Smartsheet",
"inputSchema": {
"properties": {
"column_map": {
"additionalProperties": {
"type": "string"
},
"description": "Object mapping data fields to Smartsheet column IDs",
"type": "object"
},
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
},
"updates": {
"description": "Array of updates containing row_id and data",
"items": {
"properties": {
"data": {
"description": "Data to update in the row",
"type": "object"
},
"row_id": {
"description": "Row ID to update",
"type": "string"
}
},
"required": [
"row_id",
"data"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"sheet_id",
"updates",
"column_map"
],
"type": "object"
},
"name": "smartsheet_update"
},
{
"description": "Delete rows from a Smartsheet",
"inputSchema": {
"properties": {
"row_ids": {
"description": "Array of row IDs to delete",
"items": {
"type": "string"
},
"type": "array"
},
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
}
},
"required": [
"sheet_id",
"row_ids"
],
"type": "object"
},
"name": "smartsheet_delete"
},
{
"description": "Search for content in a Smartsheet",
"inputSchema": {
"properties": {
"options": {
"description": "Search options",
"properties": {
"case_sensitive": {
"description": "Case sensitive search (default: false)",
"type": "boolean"
},
"columns": {
"description": "Specific columns to search (default: all)",
"items": {
"type": "string"
},
"type": "array"
},
"include_system": {
"description": "Include system-managed columns (default: false)",
"type": "boolean"
},
"regex": {
"description": "Use regex pattern matching (default: false)",
"type": "boolean"
},
"whole_word": {
"description": "Match whole words only (default: false)",
"type": "boolean"
}
},
"type": "object"
},
"pattern": {
"description": "Search pattern (text or regex)",
"type": "string"
},
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
}
},
"required": [
"sheet_id",
"pattern"
],
"type": "object"
},
"name": "smartsheet_search"
},
{
"description": "Start a batch analysis job using Azure OpenAI",
"inputSchema": {
"properties": {
"customGoal": {
"description": "Custom analysis goal for custom analysis type",
"type": "string"
},
"rowIds": {
"description": "Rows to process",
"items": {
"type": "string"
},
"type": "array"
},
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
},
"sourceColumns": {
"description": "Columns to analyze",
"items": {
"type": "string"
},
"type": "array"
},
"targetColumn": {
"description": "Column to store results",
"type": "string"
},
"type": {
"description": "Analysis type",
"enum": [
"summarize",
"sentiment",
"interpret",
"custom"
],
"type": "string"
}
},
"required": [
"sheet_id",
"type",
"sourceColumns",
"targetColumn",
"rowIds"
],
"type": "object"
},
"name": "start_batch_analysis"
},
{
"description": "Cancel a running batch analysis job",
"inputSchema": {
"properties": {
"jobId": {
"description": "Job to cancel",
"type": "string"
},
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
}
},
"required": [
"sheet_id",
"jobId"
],
"type": "object"
},
"name": "cancel_batch_analysis"
},
{
"description": "Get the status of a batch analysis job",
"inputSchema": {
"properties": {
"jobId": {
"description": "Job to check status for",
"type": "string"
},
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
}
},
"required": [
"sheet_id",
"jobId"
],
"type": "object"
},
"name": "get_job_status"
},
{
"description": "Perform conditional bulk updates on a Smartsheet",
"inputSchema": {
"properties": {
"options": {
"description": "Update options",
"properties": {
"batchSize": {
"default": 500,
"description": "Number of rows per batch",
"type": "number"
},
"lenientMode": {
"default": false,
"description": "Allow partial success",
"type": "boolean"
}
},
"type": "object"
},
"rules": {
"description": "List of update rules",
"items": {
"properties": {
"conditions": {
"description": "Conditions to evaluate (AND logic)",
"items": {
"properties": {
"columnId": {
"description": "Column ID to check",
"type": "string"
},
"operator": {
"description": "Comparison operator",
"enum": [
"equals",
"contains",
"greaterThan",
"lessThan",
"isEmpty",
"isNotEmpty"
],
"type": "string"
},
"value": {
"description": "Value to compare against (not needed for isEmpty/isNotEmpty)",
"type": [
"string",
"number",
"boolean",
"null"
]
}
},
"required": [
"columnId",
"operator"
],
"type": "object"
},
"type": "array"
},
"updates": {
"description": "Updates to apply when conditions are met",
"items": {
"properties": {
"columnId": {
"description": "Column ID to update",
"type": "string"
},
"value": {
"description": "New value to set",
"type": [
"string",
"number",
"boolean",
"null"
]
}
},
"required": [
"columnId",
"value"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"conditions",
"updates"
],
"type": "object"
},
"type": "array"
},
"sheet_id": {
"description": "Smartsheet sheet ID",
"type": "string"
}
},
"required": [
"sheet_id",
"rules"
],
"type": "object"
},
"name": "smartsheet_bulk_update"
}
]