Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
XLSX_MCP_FILESNoComma-separated list of alias=absolute/path entries or bare absolute paths to preload workbooks at startup. Example: report=/data/report.xlsx,sales=/data/sales.xlsx
XLSX_MCP_LOCK_TIMEOUTNoTimeout in seconds for acquiring the per-file lock before failing. Defaults to 10.10
XLSX_MCP_RECALC_TIMEOUTNoTimeout in seconds for the LibreOffice recalculation pass. Defaults to 60.60

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
restore_backupA

Restore a backup file over a target workbook atomically.

Args: backup_path: Path to the .bak file to restore from. target_path: Path to the target .xlsx/.xlsm file to overwrite.

list_configured_filesA

List files preloaded at server startup (via the XLSX_MCP_FILES env var).

Call this first if unsure which files are available — every other tool's path argument accepts these names directly (or can be omitted if only one is configured), no filesystem search needed.

list_sheetsA

List every sheet in a workbook with its approximate row/column counts.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured.

get_workbook_infoA

Get workbook-level metadata: sheets, exact dimensions, active sheet, defined names.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured.

read_sheetA

Read cell values from a sheet.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. cell_range: Optional A1-style range (e.g. "B2:F20"). Omit to read the full used area. max_rows: Optional cap on the number of rows returned, to bound response size for large sheets. offset_row: Skip a number of data rows (0-indexed from first data row). format: "array" (default 2D list), "records" (list of dicts, first row as keys), or "markdown" (table string).

get_cellA

Get full detail for a single cell: value, formula, number format, font, fill, merge, comment.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. cell: Cell reference, e.g. "C5".

search_workbookA

Search cell values across one or all sheets for a substring match.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. query: Substring to search for. sheet: Restrict the search to one sheet; omit to search every sheet. match_case: Case-sensitive match when True. limit: Optional cap on the number of matches returned, to bound response size for large sheets.

aggregate_sheetA

Group and aggregate sheet data with pandas (e.g. sum sales by region).

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. group_by: Column names to group by (taken from the header row). agg: Mapping of column name to aggregation function, e.g. {"amount": "sum"}. cell_range: Optional A1-style range to read before aggregating. has_header: Whether the first row of the range holds column names.

create_workbookA

Create a new .xlsx workbook.

Args: path: Path for the new file. New files aren't preloaded, so this must be a real path. sheets: Sheet names to create (defaults to a single "Sheet1"). overwrite: Replace an existing file at path when True.

write_cellsA

Write values and/or formulas into specific cells, then recalculate the workbook.

Set recalculate=False to skip the LibreOffice recompute (e.g. for structurally complex workbooks you don't want round-tripped).

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. cells: List of {"cell": "A1", "value": ...} or {"cell": "B1", "formula": "=A1*2"}. create_sheet_if_missing: Create the sheet first if it doesn't exist yet. recalculate: Run the LibreOffice recompute pass after saving.

Returns: Write result including errors_found — any Excel error values produced by recalculation.

append_rowsA

Append rows after the last used row of a sheet, then recalculate the workbook.

Set recalculate=False to skip the LibreOffice recompute (e.g. for structurally complex workbooks you don't want round-tripped).

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. rows: List of rows, each a list of cell values in column order. create_sheet_if_missing: Create the sheet first if it doesn't exist yet. recalculate: Run the LibreOffice recompute pass after saving.

create_sheetB

Add a new empty sheet to an existing workbook.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Name for the new sheet. index: Zero-based position to insert at; omit to append at the end.

delete_sheetA

Delete a sheet from a workbook. Fails if it is the only sheet left.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name to delete.

insert_rowsA

Insert blank rows, shifting existing rows down.

Set recalculate=False to skip the LibreOffice recompute (e.g. for structurally complex workbooks you don't want round-tripped).

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. start_row: 1-based row index to insert before. count: Number of rows to insert. recalculate: Run the LibreOffice recompute pass after saving.

delete_rowsA

Delete rows, shifting the rows below them upward.

Set recalculate=False to skip the LibreOffice recompute (e.g. for structurally complex workbooks you don't want round-tripped).

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. start_row: 1-based row index to start deleting from. count: Number of rows to delete. recalculate: Run the LibreOffice recompute pass after saving.

insert_columnsA

Insert blank columns, shifting existing columns right.

Set recalculate=False to skip the LibreOffice recompute (e.g. for structurally complex workbooks you don't want round-tripped).

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. start_column: 1-based column index to insert before. count: Number of columns to insert. recalculate: Run the LibreOffice recompute pass after saving.

delete_columnsA

Delete columns, shifting the columns to their right leftward.

Set recalculate=False to skip the LibreOffice recompute (e.g. for structurally complex workbooks you don't want round-tripped).

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. start_column: 1-based column index to start deleting from. count: Number of columns to delete. recalculate: Run the LibreOffice recompute pass after saving.

merge_cellsC

Merge a rectangular range of cells into one.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. cell_range: A1-style range, e.g. "A1:C1".

unmerge_cellsB

Undo a merge on a range of cells.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. cell_range: A1-style range that was previously merged.

set_cell_styleB

Apply formatting to a range of cells.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. cell_range: A1-style range, e.g. "A1:D1". style: Keys among: bold, italic, font_size, font_color (hex RGB, e.g. "FF0000"), bg_color (hex RGB), horizontal, vertical (alignment), border ("thin", "medium", "thick", ...), number_format (e.g. "#,##0.00").

rename_sheetB

Rename an existing sheet.

Warning: This tool does NOT automatically update formula references in other sheets. Formulas depending on the old sheet name will break.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. old_name: Current name of the sheet. new_name: New name for the sheet (1-31 chars, valid Excel sheet name).

copy_sheetA

Duplicate a sheet including its contents, formulas, and styles.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. source_sheet: Name of the sheet to duplicate. target_sheet: Name of the new sheet (1-31 chars, valid Excel sheet name).

autofit_columnsC

Automatically adjust column widths based on maximum text length.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. min_width: Minimum allowed column width. max_width: Maximum allowed column width. padding: Extra padding characters to add to max length.

clear_rangeA

Clear cell values and/or styles within a specified range without deleting rows or columns.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. cell_range: A1-style range (e.g. "A1:D10") to clear. clear_values: Whether to clear cell values (True by default). clear_styles: Whether to clear cell styles/formats (False by default).

recalculate_workbookA

Force a LibreOffice headless recalculation pass and report any formula errors found.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured.

profile_sheetC

Profile sheet data: metadata, inferred types, null counts, min/max, sample values.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. sample_rows: Number of non-null sample values to return per column.

query_sheetA

Query sheet data using pandas expressions without returning the entire sheet into the LLM context.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. filter_query: Pandas query expression (e.g. "status == 'PAID' and amount > 500"). columns: Optional list of columns to return. max_rows: Maximum rows to return (default 100). cell_range: Optional range to restrict reading before querying.

create_tableA

Create a formal Excel Table (ListObject) on the specified range.

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. cell_range: A1-style range (e.g. "A1:D10"). table_name: Unique table identifier across the workbook. style_name: Table style name (e.g. "TableStyleMedium9"). show_filter: Whether to display auto-filter dropdown arrows. show_row_stripes: Whether to apply alternating row shading. backup: Whether to create a backup before modifying the workbook.

create_chartA

Create a native Excel chart (bar, line, pie, scatter).

Args: path: Path to the .xlsx file, or the name of a preloaded file. Omit if only one file is configured. sheet: Sheet name. chart_type: One of "bar", "line", "pie", "scatter". data_range: A1-style range holding the chart series values (e.g. "B1:B10"). categories_range: Optional A1-style range holding series category labels (e.g. "A2:A10"). title: Title string displayed on the chart. target_cell: Cell coordinate where the top-left corner of the chart is placed. backup: Whether to create a backup before modifying the workbook.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.7/5.0

Scored across 29 tools

Disambiguation4/5

Most tools have clearly distinct purposes (row/column edits, merges, styling, charts). Minor overlap exists between read_sheet, profile_sheet, query_sheet, and aggregate_sheet, and between write_cells and append_rows, but the descriptions draw usable boundaries.

Naming Consistency5/5

All 29 tools follow a consistent verb_noun snake_case convention (get_cell, create_sheet, delete_rows, merge_cells, set_cell_style). No camelCase mixing or vague verbs appear.

Tool Count3/5

At 29 tools the surface is heavy, and a few (read_sheet/profile_sheet/query_sheet) could be consolidated. Still, spreadsheets are a broad domain and most tools map to genuinely distinct operations rather than padding.

Completeness5/5

The set covers a full lifecycle: file discovery, workbook/sheet CRUD, cell read/write, row/column structural edits, styling, merges, tables, charts, search, aggregation, recalculation, and backup/restore. Very few gaps remain for a spreadsheet tool surface.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive