excel-mcp-live
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_open_workbooksA | List all workbooks currently open, across every running Excel instance. Returns: JSON with each workbook's name, full path, save state, and which Excel window (by Hwnd) it belongs to. |
| get_workbook_infoA | Get worksheet names, the active sheet, and each sheet's used range. Args: workbook: Workbook name or path (None = the active workbook of the first Excel instance found). Returns: JSON with sheet names, the active sheet, and each sheet's used range and visibility. |
| save_workbookA | Save an open workbook in place (equivalent to pressing Ctrl+S). Args: workbook: Workbook name or path (None = the active workbook of the first Excel instance found). Returns: JSON confirmation. |
| list_worksheetsA | List worksheet names, in tab order, for an open workbook. Args: workbook: Workbook name or path (None = active workbook). Returns: JSON with sheet names and which one is active. |
| add_worksheetA | Add a new worksheet to an open workbook. Args: workbook: Workbook name or path (None = active workbook). name: Name for the new sheet (None = Excel's default, e.g. "Sheet4"). index: 1-based tab position to insert before (None = before the active sheet). Returns: JSON with the new sheet's name and position. |
| delete_worksheetA | Delete a worksheet from an open workbook. Args: workbook: Workbook name or path (None = active workbook). name: Sheet to delete (required). Returns: JSON confirmation. Excel will refuse to delete a workbook's only remaining visible sheet. |
| rename_worksheetA | Rename a worksheet in an open workbook. Args: workbook: Workbook name or path (None = active workbook). name: Current sheet name (None = active sheet). new_name: New sheet name (required). Returns: JSON with the old and new names. |
| activate_worksheetA | Make a worksheet the active tab in an open workbook. Args: workbook: Workbook name or path (None = active workbook). name: Sheet to activate (required). Returns: JSON confirmation. |
| get_range_valuesA | Read values from a cell or range in an open workbook. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "A1" or "A1:C10". Returns: JSON with the values as a 2D array (even for a single cell). |
| set_range_valuesA | Write values into a cell or range in an open workbook. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: The top-left cell to write into, e.g. "A1" or "B2". values: A single value, a flat list (written as one row), or a list of lists (2D block) anchored at range_address's top-left cell. Returns: JSON with the range actually written to. |
| get_range_formulasA | Read formulas from a cell or range. Formulas are returned A1-style (e.g. "=SUM(A1:A10)"). Cells without a formula return their literal value instead. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "A1" or "A1:C10". Returns: JSON with the formulas/values as a 2D array. |
| set_cell_formulaA | Set a formula (or literal value) on a single cell. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). cell: A1-style cell reference, e.g. "B2". formula: Formula string starting with '=' (e.g. "=SUM(A1:A10)"), or a literal value. Returns: JSON with the cell's resulting calculated value. |
| find_replaceA | Find and replace text in an open workbook. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = every sheet in the workbook). find_text: Text to search for (required). replace_text: Replacement text. match_case: Case-sensitive match. whole_cell: Match the entire cell contents rather than a substring. Returns: JSON with which sheets had at least one replacement. |
| clear_rangeA | Clear cell contents from a range, optionally including formatting. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "A1:C10". clear_formatting: Also reset fonts, fills, and number formats (Range.Clear instead of Range.ClearContents). Returns: JSON confirmation. |
| format_rangeA | Apply font, fill, number-format, and alignment to a cell or range. Only arguments that are explicitly set are changed; everything else is left as-is. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "A1:C1". bold, italic, underline: Font style toggles. font_name: e.g. "Calibri". font_size: Point size. font_color: Hex RGB, e.g. "FF0000" (with or without leading '#'). fill_color: Hex RGB cell background color. number_format: Excel number format code, e.g. "$#,##0.00" or "0.0%". horizontal_align: One of "left", "center", "right", "general". wrap_text: Whether to wrap text within the cell. Returns: JSON confirmation of the range formatted. |
| autofit_columnsA | Autofit column widths for a range, or the sheet's used range if none given. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address (None = the sheet's used range). Returns: JSON confirmation. |
| add_commentA | Add a comment (note) to a cell in an open workbook. Replaces any existing comment on the cell. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). cell: A1-style single-cell reference, e.g. "B2". text: Comment text (required). author: Comment author (default: MCP_AUTHOR env var, or "Author"). Returns: JSON confirmation. |
| get_commentsA | List all comments on a worksheet. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). Returns: JSON with each comment's cell address and text. |
| delete_commentA | Delete the comment on a specific cell, if any. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). cell: A1-style single-cell reference, e.g. "B2". Returns: JSON confirmation. |
| insert_rowsA | Insert one or more blank rows, shifting existing rows down. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). row_index: 1-based row number the new rows are inserted before (required). count: How many rows to insert. Returns: JSON confirmation. |
| delete_rowsA | Delete one or more rows, shifting rows below them up. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). row_index: 1-based row number to start deleting from (required). count: How many rows to delete. Returns: JSON confirmation. |
| insert_columnsA | Insert one or more blank columns, shifting existing columns right. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). column: Column letter(s) the new columns are inserted before, e.g. "B" (required). count: How many columns to insert. Returns: JSON confirmation. |
| delete_columnsA | Delete one or more columns, shifting columns to their right left. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). column: Column letter(s) to start deleting from, e.g. "B" (required). count: How many columns to delete. Returns: JSON confirmation. |
| sort_rangeA | Sort a range by one column. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: The range to sort, e.g. "A1:C10". key_column: 1-based column offset within range_address to sort by (1 = the range's leftmost column). ascending: Sort direction. has_header: Whether the range's first row is a header (excluded from sorting, kept in place). Returns: JSON confirmation. |
| add_conditional_format_ruleA | Add a cell-value conditional formatting rule to a range. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "A1:A20". condition: One of "greater_than", "less_than", "greater_equal", "less_equal", "equal_to", "not_equal", "between", "not_between". value1: Comparison value (required). Numbers or text. value2: Second comparison value, required only for "between"/ "not_between". fill_color: Hex RGB cell fill to apply when the rule matches. font_color: Hex RGB font color to apply when the rule matches. bold: Bold the font when the rule matches. Returns: JSON with the new rule's index (rules apply in index order). |
| add_color_scaleA | Add a 2-color or 3-color scale to a range. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "A1:A20". min_color: Hex RGB for the lowest value (default: a red). max_color: Hex RGB for the highest value (default: a green). mid_color: Hex RGB for the midpoint (None = 2-color scale; set this for a 3-color scale, e.g. yellow "FFEB84"). Returns: JSON confirmation. |
| list_conditional_format_rulesA | List conditional formatting rules applied to a range. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "A1:A20". Returns: JSON with each rule's index, COM Type/Operator codes, and formulas (cell-value rules only report formulas; color scales report just the type). |
| clear_conditional_format_rulesA | Remove all conditional formatting rules from a range. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "A1:A20". Returns: JSON confirmation. |
| list_named_rangesA | List user-defined named ranges in a workbook. Hidden/internal names (e.g. Excel's own Print_Area, filter ranges) are omitted. Args: workbook: Workbook name or path (None = active workbook). Returns: JSON with each name and what it refers to. |
| read_named_rangeA | Read the current value(s) of a named range. Args: workbook: Workbook name or path (None = active workbook). name: Named range to read (required). Returns: JSON with the value(s) as a 2D array. |
| write_named_rangeA | Write a single value into a named range's top-left cell. For multi-cell named ranges, only the top-left cell is set — use set_range_values with the range's address for block writes. Args: workbook: Workbook name or path (None = active workbook). name: Named range to write to (required). value: New value (required). Returns: JSON confirmation. |
| create_named_rangeA | Create a new named range. Args: workbook: Workbook name or path (None = active workbook). name: Name to create (required). Must start with a letter or underscore and contain no spaces. range_address: A1-style address the name refers to, e.g. "A1:C10". sheet: Worksheet the range is on (None = active sheet). Returns: JSON confirmation with the resolved absolute reference. |
| update_named_rangeA | Change what an existing named range refers to. Args: workbook: Workbook name or path (None = active workbook). name: Existing named range to update (required). range_address: New A1-style address, e.g. "A1:C10". sheet: Worksheet the new range is on (None = active sheet). Returns: JSON confirmation with the resolved absolute reference. |
| delete_named_rangeB | Delete a named range. Args: workbook: Workbook name or path (None = active workbook). name: Named range to delete (required). Returns: JSON confirmation. |
| add_dropdown_validationA | Restrict a range to a dropdown list of allowed values. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "B2:B20". values: List of allowed string values (required), e.g. ["Yes", "No"]. Returns: JSON confirmation. |
| add_number_validationA | Restrict a range to numbers matching a comparison. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "B2:B20". condition: One of "greater_than", "less_than", "greater_equal", "less_equal", "equal_to", "not_equal", "between", "not_between". value1: Comparison value (required). value2: Second comparison value, required only for "between"/ "not_between". decimal: Allow decimals (False = whole numbers only). Returns: JSON confirmation. |
| get_validationA | Read the data validation rule applied to a cell, if any. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). cell: A1-style cell reference, e.g. "B2". Returns: JSON with the validation type/operator/formulas, or has_validation: false if none is set. |
| remove_validationA | Remove data validation from a range. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "B2:B20". Returns: JSON confirmation. |
| merge_cellsA | Merge a range into a single cell. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address, e.g. "A1:C1". Returns: JSON confirmation. |
| unmerge_cellsA | Undo a cell merge. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address covering the merged area, e.g. "A1:C1". Returns: JSON confirmation. |
| get_merge_infoA | Check whether a cell is part of a merged range. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). cell: A1-style cell reference, e.g. "B2". Returns: JSON with is_merged and, if true, the full merged area's address. |
| add_hyperlinkA | Add a hyperlink to a cell. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). cell: A1-style single-cell reference, e.g. "B2". address: Target URL (e.g. "https://example.com"), or an internal reference prefixed with '#' (e.g. "#Sheet2!A1"). text_to_display: Text shown in the cell (None = the address itself). screen_tip: Tooltip text shown on hover. Returns: JSON confirmation. |
| remove_hyperlinkA | Remove the hyperlink from a cell, if any. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). cell: A1-style single-cell reference, e.g. "B2". Returns: JSON confirmation. |
| list_hyperlinksA | List all hyperlinks on a worksheet. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). Returns: JSON with each hyperlink's cell, address, and display text. |
| create_tableA | Create an Excel Table from a range. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: A1-style address the table will cover, e.g. "A1:C10". table_name: Name for the new table (None = Excel's default, e.g. "Table1"). has_headers: Whether the range's first row is a header row. Returns: JSON with the new table's name and range. |
| list_tablesA | List Excel Tables on a worksheet. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). Returns: JSON with each table's name and range. |
| get_table_infoA | Get a table's structure: columns, range, and style. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). table_name: Table to inspect (required). Returns: JSON with column names, range, row count, and style. |
| append_table_rowsA | Append one or more rows to the end of a table. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). table_name: Table to append to (required). rows: A list of rows, each a list of values matching the table's column count (required), e.g. [["Widget", 12, 4.5]]. Returns: JSON with the table's resulting row count. |
| get_table_dataA | Read a table's data rows (excluding the header) as a 2D array. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). table_name: Table to read (required). Returns: JSON with the column names and data rows. |
| apply_table_styleA | Apply a built-in table style. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). table_name: Table to style (required). style_name: Built-in style name, e.g. "TableStyleMedium2", "TableStyleLight9", "TableStyleDark3". Returns: JSON confirmation. |
| delete_tableA | Remove a table's definition, keeping the underlying cell data. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). table_name: Table to remove (required). Returns: JSON confirmation. |
| create_chartA | Create a chart from a range. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). range_address: Source data range, e.g. "A1:C10". chart_type: One of "column_clustered", "bar_clustered", "line", "pie", "area", "scatter", "doughnut". title: Chart title (None = no title). chart_name: Name for the new chart (None = Excel's default, e.g. "Chart 1"). left, top, width, height: Position and size in points. Returns: JSON with the new chart's name. |
| list_chartsA | List charts on a worksheet. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). Returns: JSON with each chart's name and position/size. |
| set_chart_typeA | Change a chart's type. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). chart_name: Chart to change (required). chart_type: One of "column_clustered", "bar_clustered", "line", "pie", "area", "scatter", "doughnut". Returns: JSON confirmation. |
| set_chart_titleA | Set or clear a chart's title. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). chart_name: Chart to update (required). title: New title text. Empty string or None removes the title. Returns: JSON confirmation. |
| add_seriesB | Add a data series to a chart. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). chart_name: Chart to add the series to (required). series_range: A1-style address of the series' values, e.g. "D2:D10" (required). series_name: Legend label for the series (None = Excel's default). Returns: JSON confirmation. |
| delete_chartA | Delete a chart. Args: workbook: Workbook name or path (None = active workbook). sheet: Worksheet name (None = active sheet). chart_name: Chart to delete (required). Returns: JSON confirmation. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/trustypangolin/excel-mcp-live'
If you have feedback or need assistance with the MCP directory API, please join our Discord server