Server has 9 tools with complete input schemas and descriptions present for all tools and parameters. Naming follows verb_noun convention (get_, read, write, open_, close_, list_, search_). However, descriptions are generic and lack LLM-optimization guidance. Parameter descriptions are minimal (10-30 chars typically). No output schemas documented. Error handling returns plain strings without recovery guidance. Missing tool annotations (readOnlyHint, destructiveHint). No pagination support on list/search tools despite potential for large result sets.
Close an Excel workbook. Args: filename: Name of the workbook to close. If None, closes the active workbook.
Get all sheet names from the active Excel workbook.
Get all defined names from a workbook with their references. Args: filename: Name of the workbook to get names from. If None, uses the active workbook.
List all currently open Excel workbooks.
Open an Excel file in a new workbook. Args: file_path: Path to the Excel file to open create_if_not_exists: If True, create the file if it doesn't exist
Read cells from Excel and format as a table. Args: sheet_name: Name of the sheet cell_address: Cell address or range (e.g., 'A1' for expanded, 'A1:C10' for specific range) is_expanded_range: If True, expand from the cell to find full data region headers: Whether first row contains headers tablefmt: Table format (plain, simple, grid, pipe, etc.)
No output schemas documented. LLMs cannot predict return structure (e.g., does search() return objects with fields or raw strings?). Prevents downstream tool chaining and forces parsing of unstructured responses.
Error handling returns plain strings (e.g., 'Error opening file: {e}') without recovery guidance. LLM cannot determine if error is retryable, user-fixable, or fatal. No actionable next steps provided.
Missing tool annotations. write() and open_workbook() are destructive but lack destructiveHint. get_sheet_names() and read() are read-only but lack readOnlyHint. Agents cannot distinguish safe from unsafe operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
Save a workbook. Args: filename: Name of the workbook to save. If None, saves the active workbook.
Search for a regex pattern in sheet names, defined names, cell values, and formulas. Args: pattern: Regular expression pattern to search for filename: Name of the workbook to search. If None, uses the active workbook. search_sheets: If True, search in sheet names search_names: If True, search in defined names search_values: If True, search in cell values search_formulas: If True, search in cell formulas limit: Number of results to return per type (default 4)
Write values to a range of cells in Excel. Args: sheet_name: Name of the sheet start_cell: Starting cell address like 'A1', 'B5', etc. values: 2D list of values to write is_expanded_range: If True, clear the expanded range before writing save_on_min_cells_written: If > 0, save the workbook if at least this many cells were written
search() tool accepts regex pattern but no validation or error message if pattern is invalid. LLM will pass malformed regex and receive cryptic exception. Should validate and return 'Invalid regex: {pattern}, {error}' with guidance.
Parameter descriptions are minimal (10-30 chars). E.g., 'Name of the sheet' lacks context on format, constraints, or when to use.