SheetForge MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FASTMCP_HOST | No | Bind address for the server process (HTTP and SSE) | 127.0.0.1 |
| FASTMCP_PORT | No | Port for the server process (HTTP and SSE) | 8017 |
| EXCEL_FILES_PATH | No | Base directory for relative workbook paths (HTTP and SSE) | ./excel_files |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
SheetForge MCP for manipulating Excel workbooks. Server-side workbook path. Reuse the supplied path; NEVER prepend client cwd. Rooted server: relative paths use EXCEL_FILES_PATH, not cwd. Without a root (normal stdio): ask for a supplied absolute path; do not guess. On path errors, follow error.details and retry the corrected path on the same tool. Do not try other tools with the rejected path or bypass confinement.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| apply_formulaC | Apply Excel formula to cell. Excel formula will write to cell with verification. |
| validate_formula_syntaxB | Validate Excel formula syntax without applying it. |
| inspect_formulaA | Inspect a formula string for functions, references, and risky signals. |
| format_rangeC | Apply formatting to a range of cells. Colors accept RRGGBB, #RRGGBB, AARRGGBB, or #AARRGGBB. |
| format_rangesB | Apply formatting to multiple ranges in a single workbook pass. Colors accept RRGGBB, #RRGGBB, AARRGGBB, or #AARRGGBB. |
| read_range_formattingC | Read a compact formatting summary for a worksheet range. |
| read_data_from_excelA | |
| read_excel_as_tableA | |
| quick_readA | Read a compact table from an explicit sheet or the first workbook sheet. |
| describe_datasetC | Summarize a worksheet or native Excel table for agent-friendly orientation. |
| suggest_read_strategyC | Recommend the best SheetForge read tool for the requested workbook target. |
| query_tableC | Filter, project, sort, and limit worksheet or table data. Filters support eq/neq/ne, comparisons, string matching, blank checks, and in/not_in with value or values. |
| bulk_filter_workbooksC | Filter comparable worksheet or table data across multiple workbooks. Uses the same filter operators and aliases as query_table. |
| union_tablesC | Union comparable worksheet or table data across multiple workbook files. |
| cross_workbook_lookupC | Enrich one workbook dataset from matching rows in one or more lookup workbooks. |
| aggregate_tableC | Compute grouped metrics over worksheet-shaped data or a native Excel table. |
| bulk_aggregate_workbooksC | Aggregate comparable worksheet or table data across multiple workbooks. |
| read_excel_tableA | Read a native Excel table by its table name, not by a worksheet tab name. |
| write_data_to_excelB | |
| create_workbookC | Create a new Excel workbook with an optional initial worksheet name. |
| create_worksheetC | Create new worksheet in workbook. |
| create_chartA | Create chart in worksheet from a contiguous range or explicit series. |
| create_chart_from_seriesC | Create a chart from explicit series definitions for non-contiguous ranges. |
| list_chartsC | List embedded charts in a workbook or worksheet. |
| find_free_canvasC | Suggest free worksheet slots for charts or dashboard blocks. |
| create_pivot_tableC | Create pivot table in worksheet. |
| create_tableC | Creates a native Excel table from a specified range of data. |
| list_tablesA | Map native table names to worksheet tabs and ranges; these names are distinct. |
| copy_worksheetC | Copy a worksheet with tables, rules, charts, names, and layout settings. |
| delete_worksheetC | Delete worksheet from workbook. |
| rename_worksheetC | Rename worksheet in workbook. |
| get_workbook_metadataA | Get workbook metadata; sheets lists TABS, not native table names. |
| describe_sheet_layoutC | Return a structural worksheet layout summary for safe dashboard-style edits. |
| analyze_range_impactB | Inspect workbook structures that overlap a worksheet range before mutation. |
| explain_formula_cellB | Explain a formula cell's direct references, upstream formula chain, and downstream dependents. |
| detect_circular_dependenciesC | Detect circular workbook formula dependencies, including self-references. |
| profile_workbookB | Return a compact workbook inventory with sheets, tables, charts, and layout state. |
| audit_workbookC | Audit workbook structure for high-signal issues that affect agent workflows. |
| plan_workbook_repairsC | Turn workbook audit findings into prioritized next steps for SheetForge workflows. |
| apply_workbook_repairsB | Apply safe workbook repair actions with dry-run planning and before/after diff output. |
| apply_workbook_changesetA | Preview or commit an assertion-backed group of workbook mutations as one transaction. |
| evaluate_workbook_scenariosA | Compare explicit alternatives read-only, or commit one exact verified outcome. |
| apply_table_patchA | Preview/commit a three-way keyed patch against a pinned retained base. |
| inspect_workbook_contractA | Read-only full bounded native-table contract check; never infer business meaning. |
| run_workbook_recipeA | Preview or commit a reusable JSON recipe without echoing intermediate rows. |
| explain_recipe_deltaA | Explain sum/count changes by source identity, without modifying either file. |
| diff_workbooksB | Diff two workbook files and report structural changes plus sampled cell-value changes. |
| create_workbook_snapshotB | Create a verified workbook snapshot without overwriting an existing file. |
| create_named_rangeC | Create a workbook-level or sheet-scoped named range. |
| inspect_named_rangeB | Inspect a named range, including scope, destinations, and broken-reference signals. |
| list_named_rangesB | List workbook defined names and their destinations. |
| delete_named_rangeC | Delete a workbook-level or sheet-scoped named range. |
| merge_cellsC | Merge a range of cells. |
| unmerge_cellsC | Unmerge a range of cells. |
| get_merged_cellsC | Get merged cells in a worksheet. |
| freeze_panesC | Set or clear worksheet freeze panes. |
| set_autofilterC | Set worksheet autofilter for an explicit or inferred range. |
| set_worksheet_visibilityC | Set worksheet visibility to visible, hidden, or veryHidden. |
| get_worksheet_protectionC | Get worksheet protection status and option flags. |
| set_worksheet_protectionC | Enable or disable worksheet protection with optional capability flags. |
| set_print_areaC | Set or clear worksheet print area. |
| set_print_titlesB | Set, preserve, or clear repeating print title rows and columns. |
| set_column_widthsC | Set explicit widths for one or more worksheet columns. |
| autofit_columnsC | Auto-fit worksheet columns based on content width. |
| set_row_heightsC | Set explicit heights for one or more worksheet rows. |
| copy_rangeC | Copy a range of cells to another location. |
| delete_rangeC | Delete a range of cells and shift remaining cells. |
| validate_excel_rangeC | Validate if a range exists and is properly formatted. |
| get_data_validation_infoB | |
| inspect_data_validation_rulesC | Inspect worksheet data validation rules with stable rule indexes. |
| remove_data_validation_rulesB | Remove worksheet data validation rules by index or remove all broken ones. |
| inspect_conditional_format_rulesB | Inspect worksheet conditional formatting rules with stable rule indexes. |
| remove_conditional_format_rulesB | Remove worksheet conditional formatting rules by index or remove all broken ones. |
| insert_rowsC | Insert one or more rows starting at the specified row. |
| insert_columnsC | Insert one or more columns starting at the specified column. |
| delete_sheet_rowsC | Delete one or more rows starting at the specified row. |
| delete_sheet_columnsC | Delete one or more columns starting at the specified column. |
| search_in_sheetC | Search for cells matching a value in a worksheet. |
| list_all_sheetsA | List all sheets in a workbook with row/column counts. Quick overview before reading data. |
| append_table_rowsC | Append dictionary-shaped rows by matching worksheet headers on a worksheet dataset. |
| append_excel_table_rowsC | Append rows to a native Excel table and expand its range safely. |
| upsert_excel_table_rowsC | Update matching rows in a native Excel table and append missing keys. |
| update_rows_by_keyC | Update existing table rows using a named key column. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 83 tools
Several tool clusters have genuinely unclear boundaries: get_data_validation_info vs inspect_data_validation_rules, append_table_rows vs append_excel_table_rows, and a four-way read overlap (read_data_from_excel, read_excel_as_table, quick_read, query_table) that only the verbose descriptions partially untangle. Multiple write paths (write_data_to_excel, apply_workbook_changeset, apply_table_patch, upsert_excel_table_rows, update_rows_by_key) also target overlapping mutations, so tool selection is error-prone despite detailed prose.
Everything is snake_case and mostly verb_noun, but the read verbs are scattered across read_/get_/inspect_/list_/describe_/profile_/audit_ with no rule distinguishing them (get_merged_cells vs inspect_named_range vs list_named_ranges). A few names invert the pattern (cross_workbook_lookup, search_in_sheet, freeze_panes, bulk_filter_workbooks), keeping it readable but not predictable.
83 tools is far beyond what a coherent Excel surface needs, and much of the bulk is near-duplicate read/write/validation variants rather than distinct capabilities. The set reads as accumulated feature creep, making it hard for an agent to discover the canonical tool for a task.
Coverage of the Excel domain is unusually thorough: reading, writing, formatting, tables, charts, pivots, named ranges, protection, print setup, validation/conditional-format inspection, formula analysis, recipes, patches, snapshots, and diffs. Missing pieces exist (creating conditional formatting or data validation rules, sorting, chart/pivot deletion or update, worksheet reordering, workbook-level protection), but agents can work around most of them.