MCP server for open-sheet — drive the spreadsheet framework from any agent framework.
The server defines 7 tools with clear verb-noun naming (list_, read_, write_, describe_, export_, current_). All tools have descriptions (avg ~120 chars, within baseline 34-392). Input schemas are present with type declarations. However, parameter descriptions are sparse or missing entirely, most parameters lack explanatory text beyond the type. Output schemas are undocumented; the code shows text() and failure() helpers but no formal schema definitions for tool responses. Error handling is basic (isError flag + text message) without recovery guidance or categorization. The workbook hash collision-detection pattern in write_workbook is sophisticated but underdocumented for LLM reasoning.
The workbook, sheet, and cell currently open in the viewer, so "this cell" resolves without asking. Empty when the dev server is not running.
Sheet names and sizes, the named blocks with their column keys, and the defined names — the vocabulary ref() accepts for this workbook.
Render a workbook to xlsx (live formulas), csv (first sheet, computed values), or html. Returns base64 for xlsx and text otherwise.
Every workbook in this open-sheet workspace, with its id and source path.
Every populated cell of one sheet, as resolved Excel formulas *and* computed values. Cells marked notEvaluated export fine but were not computed — never treat them as zero.
The TSX source of a workbook, with a hash. Pass the hash back to write_workbook so a concurrent edit is refused rather than overwritten.
Output schemas completely undocumented. Tools return text() or failure() helpers but no formal schema definition. LLMs cannot infer response structure (fields, types, pagination) for downstream planning.
Parameter descriptions missing or minimal. 'id' param appears in 5 tools with identical description 'workbook id, i.e. the directory under sheets/', does not explain what format to pass or how to discover valid IDs. 'sheet' param in read_sheet lacks any description.
Error handling provides no recovery guidance. failure() returns raw error message with isError=true. No categorization (retryable vs user-fixable vs fatal), no suggestions for next steps, no invalid-value echoing for self-correction.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Replace a workbook's source. Include the hash from read_workbook; if the file changed since, the write is refused so nobody's edit is silently lost.
write_workbook's hash-based collision detection is sophisticated but underdocumented. Description mentions 'hash from read_workbook' but does not explain what happens on hash mismatch, whether it is retryable, or how to recover (re-read and retry vs abort).
export_workbook format enum lacks description. Parameter 'format' has enum=['xlsx','csv','html'] with default='xlsx' but no explanation of when to use each format or what each returns (base64 vs text). LLM must infer from description text alone.