A Model Context Protocol server for analyzing Excel workbooks. Provides tools for discovering workbook structure, previewing sheets, reading cell ranges, searching data, filtering data, and performing data insights analysis (table detection, composition shift, concentration metrics, funnel analysis).
8 tools with comprehensive descriptions and parameter documentation. Most parameters have types and descriptions, supporting the 54-pattern baseline. However, significant gaps in output schema documentation and error handling guidance. Parameter descriptions are detailed and contextual, averaging ~80-120 chars. Parameter validation rules present (e.g., filepath_ext, valid_regex, required_without). Responses lack actionable error recovery guidance and no tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all being READ_ONLY. List tools (list_structure, preview_sheet, read_range, search_data) follow pagination patterns with cursor support and PageMeta return type. Composition is clean: each tool has one responsibility. Naming is action-oriented (list_, preview_, read_, search_, detect_, concentration_, composition_, funnel_). No security issues detected (no credentials in params, file path allow-list enforced). Missing: per-tool error responses, output schema documentation for complex tools (detect_tables, concentration_metrics, composition_shift, funnel_analysis), and explicit tool annotations despite readonly/readonly pattern being universal.
Compute share-of-total by group for two periods and highlight mix shifts in percentage points. Returns period baseline/current shares, Top-N movers, and aggregated 'Other' share.
Compute Top-N share and Herfindahl-Hirschman Index (HHI) over a grouping dimension. Returns concentration metrics with bandings (unconcentrated, moderately_concentrated, highly_concentrated) and Top-N group breakdown.
Detect multiple rectangular table regions within a sheet. Uses connected-component analysis and heuristics for header detection and block growth. Returns ranked candidates with confidence scores, header samples, and scan metadata.
Compute stage and cumulative conversion across ordered funnel stages. Auto-detects funnel stages from header names (Impressions, Clicks, Orders, etc.) or uses explicit stage_indices. Returns stage totals, step conversions, cumulative conversions, and bottleneck identification.
Discover workbook structure without reading cell data. Lists sheets in index order with approximate row/column counts derived from the used range and a best‑effort header inference from the first row only (skipped when metadata_only=true). Use this first to ground subsequent steps (e.g., preview_sheet, read_range, search_data, filter_data) instead of streaming entire sheets. Returns no cell values and has no pagination; output includes sheets[] with name, rowCount, columnCount, and optional headers. Errors map to OPEN_FAILED, DISCOVERY_FAILED, or INVALID_HANDLE; access is restricted to configured allow‑list directories.
Output schemas missing or undocumented for 4 analytical tools (detect_tables, concentration_metrics, composition_shift, funnel_analysis). Source code shows PageMeta for foundation tools but not return types for insights tools. LLMs cannot plan downstream operations without knowing returned field names and types.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present in tool definitions despite all 8 tools being READ_ONLY per Risk field. Tool annotations are current spec patterns (2026-07-28) that improve safety and guide agent retry logic.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 65 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Preview sheet data with pagination support. Returns a bounded preview of a sheet's contents with optional encoding (JSON or CSV), pagination cursors for large sheets, and metadata on truncation.
Read a specific cell range from a sheet with pagination support. Returns cell values within an A1-style range with optional pagination for large ranges.
Search for values or patterns within a sheet. Supports literal substring matching and Go RE2 regular expressions. Returns matches with row/column coordinates and optional row snapshots with pagination support.
Error handling lacks recovery guidance. No error responses document what the LLM should do next (e.g., 'DISCOVERY_FAILED: workbook is encrypted; try providing password via allow-list config'). Errors named (OPEN_FAILED, DISCOVERY_FAILED, INVALID_HANDLE) but no mapping to actionable steps.
Parameter descriptions for analytical tools (concentration_metrics, composition_shift, funnel_analysis) lack domain context. 'dimension_index' and 'measure_index' descriptions are minimal ('1-based column index...'). LLMs benefit from: 'dimension_index: 1-based column index for the grouping dimension (e.g., region, product category). Must be categorical.'
composition_shift and concentration_metrics return types not shown in code. 'Top-N group breakdown' and 'bandings' mentioned in description but output schema not visible. Prevents LLM from extracting results and chaining to downstream analysis.
No confirmation or dry-run pattern for destructive operations. Although all tools are READ_ONLY, search_data and detect_tables can be expensive (max_scan_rows, max_results parameters). No validation that max_* defaults are sane or bounded, risking context window exhaustion.
Parameter validation rules declared in struct tags (validate:'required,filepath_ext', validate:'required_without=Cursor,valid_regex') but not explicitly documented in descriptions. LLMs cannot read JSON Schema validation tags, validation rules must be in description text.