Static source inference · medium confidence · evidence: stateless requests
Current-spec patterns detected
Summary
The Smartsheet server has 9 tools with generally complete input schemas and descriptions. However, there are significant gaps in documentation quality, error handling guidance, and output schema specification. Descriptions are terse (averaging ~60 chars, well below the 194 char baseline), and error handling lacks recovery guidance. No tool annotations are present (readOnlyHint, destructiveHint, idempotentHint). Parameter descriptions are minimal, many lack actionable detail about constraints, formats, or when to use them. Tool naming is acceptable but inconsistent (mix of verb_noun like 'smartsheet_write' and aliases like 'get_sheet_info'). Output schemas are not documented in the server code.
Tools (9)
get_column_mapread onlyauthsource verified52/100
Get column mapping and sample data from a Smartsheet
get_sheet_inforead onlyauthsource verified48/100
Get column mapping and sample data from a Smartsheet (alias for get_column_map)
No output schema documentation. Tools return results but no specification of response structure, field names, or types. LLMs cannot plan downstream tool calls or extract required data without knowing what to expect.
Duplicate/redundant tools. 'get_column_map' and 'get_sheet_info' are identical (same input schema, same intent). Creates LLM disambiguation overhead. Pick one canonical name.
Minimal descriptions lack actionable context. 'Add a new column to a Smartsheet' (36 chars) is below the 194 char baseline. Missing: when to use vs alternatives, what column types mean, required vs optional behavior, error conditions.
smartsheet_add_column
Recommendations
Document output schema for every tool. Example for 'smartsheet_add_column': 'Returns {column_id: string, title: string, type: string, created_at: ISO8601}' so the LLM knows what fields to extract and pass downstream.
Remove 'get_sheet_info' as a duplicate of 'get_column_map'. Rename 'get_column_map' to 'get_sheet_columns' (more verb_noun consistent) and update description: 'Retrieve all column definitions and sample row data for a sheet. Use this first to understand sheet structure before writing or updating rows.'
Expand tool descriptions to 100-200 characters. Example: 'Add a new column to a Smartsheet. Specify column type (TEXT_NUMBER, DATE, CHECKBOX, PICKLIST, CONTACT_LIST), optional position, validation rules, and for PICKLIST columns, the list of valid options. Returns the new column ID.'
Add constraint details to parameter descriptions. For 'title' param: 'Column name, 1-255 characters, must be unique within the sheet, cannot contain leading/trailing whitespace.' For 'pattern' in search: 'Search string or regex pattern. If regex=true, must be valid regex syntax.'
Add error recovery guidance. E.g., for smartsheet_delete_column: 'If deletion fails, error will indicate if the column has dependent formulas. Use smartsheet_rename_column or smartsheet_update to migrate dependent columns first.' For smartsheet_delete_rows: 'If any row fails to delete, returns per-row error details so you can retry individual rows.'
Annotate destructive tools. Add 'destructiveHint: true' to smartsheet_delete_column and smartsheet_delete_rows definitions. Add 'readOnlyHint: true' to get_column_map and smartsheet_search.
No error handling guidance. Tools like 'smartsheet_delete_rows' lack recovery instructions. If a delete fails, the LLM has no next step. Missing: 'If deletion fails due to permissions, you lack write access to this sheet' with remediation.
No tool annotations (destructiveHint, readOnlyHint, idempotentHint). Destructive tools like 'smartsheet_delete_rows' and 'smartsheet_delete_column' lack annotations to warn clients about irreversible side effects. LLMs cannot distinguish safe reads from risky deletes.
Naming inconsistency. Mix of 'smartsheet_*' (action-prefixed) and 'get_*' (discovery). 'get_sheet_info' uses verb_noun; 'smartsheet_write' buries verb after namespace. Pick one convention across all 9 tools.
'column_map' parameter in smartsheet_write and smartsheet_update unclear. Docs say 'Object mapping data fields to Smartsheet column IDs' but do not specify: key format, value type, required vs optional fields, how to obtain column IDs.
Batch operations lack pagination. 'smartsheet_write' accepts 'row_data' array but no limit, offset, or pagination guidance. If LLM tries to write 10,000 rows at once, unclear if tool handles batching or fails silently.
No idempotency guarantee documented. 'smartsheet_write' and 'smartsheet_update' lack indication of idempotent behavior. If an LLM retries on ambiguous failure, will it create duplicate rows or overwrite safely?
smartsheet_writesmartsheet_update
Standardize naming. Rename all tools to verb_noun format: 'add_column', 'delete_column', 'rename_column', 'get_sheet_columns', 'write_rows', 'update_rows', 'delete_rows', 'search_sheet'. Drop the smartsheet_ prefix as namespace separation is implicit in the server.
Clarify 'column_map' structure. Add example: 'Object with sheet field names as keys and Smartsheet column IDs as values, e.g. {"employee_name": "8762344673", "hire_date": "7462944672"}. Obtain column IDs from get_sheet_columns.'
Add pagination to write/delete operations. Document: 'Batch size limit: 5000 rows per call. If you have more, split into multiple calls. Returns count of successful operations and per-row errors for any failures.' Implement backpressure in the handler.
Document idempotency. For smartsheet_write and smartsheet_update: 'Operations are idempotent if you include a unique identifier (e.g. row_id for updates). If no identifier is provided, retries may create duplicates. Use smartsheet_update for known rows, smartsheet_write for new rows only.'
Add a 'confirm_delete' parameter to smartsheet_delete_column (similar to smartsheet_delete_rows). Default false. If true, return list of affected dependent formulas before applying deletion, let the LLM confirm before proceeding.
Document return value for PICKLIST 'options' param in add_column: 'Array of strings, e.g. ["Open", "In Progress", "Closed"]. For PICKLIST columns, at least one option is required.' Currently unspecified.
Add search filtering hints to smartsheet_search. Example: 'For broad searches, use wildcard patterns (e.g. "*invoice*"). For narrow searches, set case_sensitive=true and whole_word=true. Use columns parameter to limit search scope and improve performance.'