Skip to main content
Glama

excel-mcp

An MCP (Model Context Protocol) server for reading Excel workbooks (.xlsx). Built with FastMCP and openpyxl.

Features

  • List all sheets in a workbook

  • List all named tables across sheets

  • List all pivot tables with source range info

  • Read raw cell data from any sheet or optional cell range

  • Read structured data (headers + rows) from named Excel tables

  • Export any sheet to CSV, plain-text (delimited), or Markdown — save to file or return inline

Related MCP server: Excel MCP Server

Usage with Claude Desktop

No installation required. Add the following to your claude_desktop_config.json:

{
  "mcpServers": {
    "excel-mcp": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/urjeetpatel/excel_mcp_server",
        "excel-mcp"
      ]
    }
  }
}

uvx will pull the package directly from GitHub and run it in an isolated environment — no pip install or virtual environment setup needed.

Running manually

uvx --from git+https://github.com/urjeetpatel/excel_mcp_server excel-mcp

Tools

All tools accept a file_path parameter — the full path to the .xlsx file.

Tool

Description

list_sheets

Returns the names of all sheets in the workbook

list_tables

Returns all named tables with name, sheet, and cell range

list_pivot_tables

Returns all pivot tables with location and source range info

get_sheet_data

Returns cell data from a sheet; optionally scoped to a range (e.g. A1:D10)

get_table_data

Returns headers and row data from a named Excel table

export_sheet_to_csv

Exports a sheet to a CSV file with configurable delimiter; supports inline return

export_sheet_to_text

Exports a sheet to a plain-text delimited file; supports inline return

export_sheet_to_markdown

Exports a sheet to a padded Markdown table; supports inline return

create_blank_file

Creates a new blank Excel file at the given path

add_sheet

Adds a new sheet to an existing Excel file

add_data_to_sheet

Adds a 2D array of data to a sheet, starting at a specified cell

add_table_to_sheet

Adds a table to a sheet over a given cell range

set_cell_value

Sets the value of a single cell in a sheet

set_cell_formula

Sets a formula in a single cell in a sheet

Write tool details

create_blank_file(file_path)

Creates a new blank Excel file at the specified path.

add_sheet(file_path, sheet_name)

Adds a new sheet to the Excel file. Fails if the sheet already exists.

add_data_to_sheet(file_path, sheet_name, data, start_cell="A1")

Adds a 2D array of data to the specified sheet, starting at the given cell (default A1).

add_table_to_sheet(file_path, sheet_name, table_name, ref)

Adds a table to the specified sheet, covering the given cell range (e.g. "A1:D10").

set_cell_value(file_path, sheet_name, cell, value)

Sets the value of a single cell (e.g. C5) in the specified sheet.

set_cell_formula(file_path, sheet_name, cell, formula)

Sets a formula (e.g. "=SUM(A1:A10)") in a single cell in the specified sheet.

Tool details

list_sheets(file_path)

["Sheet1", "Sheet2"]

list_tables(file_path)

[{ "name": "SalesTable", "sheet": "Sheet1", "ref": "A1:D20" }]

list_pivot_tables(file_path)

[{
  "name": "PivotTable1",
  "sheet": "Summary",
  "ref": "A1:C10",
  "source_sheet": "RawData",
  "source_ref": "A1:F500"
}]

get_sheet_data(file_path, sheet_name, cell_range?)

{
  "sheet": "Sheet1",
  "range": "A1:D10",
  "rows": [["Name", "Age", "City"], ["Alice", 30, "New York"]]
}
  • cell_range is optional. When omitted, the full used range is returned.

  • Range strings are case-insensitive (a1:d10 == A1:D10).

get_table_data(file_path, table_name)

{
  "table": "PeopleTable",
  "sheet": "Sheet1",
  "ref": "A1:C4",
  "headers": ["Name", "Age", "City"],
  "rows": [["Alice", 30, "New York"], ["Bob", 25, "Chicago"]]
}

Export tools

All three export tools share a common pattern:

  • output_path — path to write the output file, or "return inline" to skip writing and return the content directly in the response.

  • cell_range — optional Excel range string (e.g. A1:D10). When omitted, the full used range is exported.

When saving to a file the response contains output_path. When returning inline, output_path is replaced by content.

export_sheet_to_csv(file_path, sheet_name, output_path, delimiter?, cell_range?)

Exports a sheet using Python's csv module (values containing the delimiter or newlines are properly quoted).

delimiter options: "comma" (default), "pipe", "tab".

{ "output_path": "/tmp/data.csv", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }

Inline variant (output_path = "return inline"):

{ "content": "Name,Age,City\r\nAlice,30,New York\r\n...", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }

export_sheet_to_text(file_path, sheet_name, output_path, delimiter?, cell_range?)

Exports a sheet as a plain delimited text file — values are joined with the delimiter with no CSV quoting, making output easy to read or pipe into other tools.

delimiter options: "pipe" (default), "comma", "tab".

{ "output_path": "/tmp/data.txt", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }

Inline variant:

{ "content": "Name|Age|City\nAlice|30|New York\n...", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }

export_sheet_to_markdown(file_path, sheet_name, output_path, cell_range?)

Exports a sheet as a padded Markdown table. The first row is used as the header; a separator line is inserted beneath it. All columns are padded to align.

{ "output_path": "/tmp/data.md", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }

Inline variant:

{ "content": "| Name  | Age | City     |\n| ----- | --- | -------- |\n| Alice | 30  | New York |\n...", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }

Local development

Requires Python >= 3.14 and uv.

git clone https://github.com/urjeetpatel/excel_mcp_server
cd excel_mcp_server
uv sync --group dev

# Run tests
uv run pytest

# Type check
uv run mypy src

Project Structure

src/excel_mcp/
├── __init__.py       # Exposes main() entry point
├── server.py         # FastMCP server and tool registration
├── workbook.py       # Workbook loading helpers
└── tools/
    ├── __init__.py
    ├── read.py       # Read tool implementations
    └── export.py     # Export tool implementations (CSV, text, Markdown)
tests/
├── conftest.py       # pytest fixtures (builds workbooks programmatically)
├── test_read.py      # Tests for read tools
├── test_export.py    # Tests for export tools
└── test_workbook.py  # Tests for workbook helpers

Notes

  • Workbooks are opened in data_only=True mode — formula results are read, not formula strings.

  • Export tools support "return inline" as output_path to return content directly to the agent without touching the filesystem.

License

GPL-3.0-or-later

Available Tools

14 tools
add_data_to_sheetC

Add data to a sheet starting at the given cell.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
file_pathYes
sheet_nameYes
start_cellNoA1

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, and the description only states that data is added starting at a cell. It does not disclose whether existing cells are overwritten, whether data is appended/inserted, whether the sheet and file must already exist, or what happens with invalid or non-rectangular data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler and starts with the primary action. However, the brevity contributes to missing behavioral detail, so it is good but not exceptional.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and four parameters, the description is too thin to fully support correct invocation. It omits prerequisites, overwrite/append behavior, and how this tool differs from nearby siblings. The presence of an output schema does not make up for the missing operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate by explaining each parameter. It adds some meaning for start_cell ('given cell') and data ('data to add'), but it does not explain the nested-array structure of data (rows/columns), the role of file_path, or the sheet_name relationship.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('add data') and resource ('sheet'), and clarifies that writing starts at a given cell. It is broadly distinguishable from siblings like add_sheet, get_sheet_data, and set_cell_value, though it does not explicitly contrast with add_table_to_sheet or set_cell_formula.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as set_cell_value or add_table_to_sheet. It also doesn't mention prerequisites like the sheet needing to exist or how this relates to the file_path/sheet_name parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_sheetB

Add a new sheet to the Excel file.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
sheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. It only states the action and does not mention side effects such as writing to disk, failure behavior when the sheet already exists, or requirements on the target file. For a mutating tool this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no waste, and the core action is front-loaded. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has only two simple parameters and an output schema exists, so return-value documentation is not required from the description. However, for a mutation tool with no annotations, the description omits important context such as error conditions and whether the file must already exist, leaving the definition merely adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no extra meaning beyond the parameter names. The names file_path and sheet_name are self-explanatory, but the description does not compensate for the lack of schema documentation, nor does it clarify any format or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Add a new sheet to the Excel file.' It is distinguishable enough from siblings like add_data_to_sheet and add_table_to_sheet because it specifically mentions a new sheet, but it does not explicitly name or contrast any sibling, so it lacks that extra differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied rather than stated. An agent can infer from the name and description that this tool is for creating a new sheet, but there is no explicit guidance about when not to use it or whether create_blank_file or add_data_to_sheet might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_table_to_sheetC

Add a table to a sheet over the given cell range (ref).

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes
file_pathYes
sheet_nameYes
table_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure, but it only states the operation and location. It does not mention side effects such as overwriting existing content, whether the table must have a unique name, whether the sheet must already exist, or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler or repeated information. It is front-loaded with the main action, though it could have used the brevity to include more meaningful parameter or behavior details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with four required parameters and no annotations, the description is too minimal. An agent would not know whether the sheet must pre-exist, whether an existing table at ref will be replaced, or what constraints apply to table_name and ref.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate for the lack of parameter documentation. It clarifies that ref is a cell range and implies the sheet target, but file_path and table_name are left entirely unexplained beyond their parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Add a table to a sheet') and identifies the target resource and placement ('over the given cell range (ref)'). It is reasonably clear, though it does not explicitly differentiate itself from sibling add_data_to_sheet or other table-related operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as add_data_to_sheet, export_sheet_to_csv, or list_tables. No context about prerequisites, preferred scenarios, or exclusions is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_blank_fileC

Create a new blank Excel file at the given path.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the core behavior (creates a blank Excel file) but does not state whether the tool overwrites existing files, whether it creates parent directories, what happens if the file already exists, or what the output schema represents. For a creation tool with no annotation support, this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, front-loading the action and resource. It is concise and to the point, though it could add a bit more detail without becoming bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one required parameter) and has an output schema, so the description is close to sufficient. However, the absence of any overwrite/conflict behavior or path details means an agent might make incorrect assumptions when calling it. It is adequate but not complete for a creation tool with no annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema provides no meaning beyond the parameter name and type. The description adds that the parameter is a 'path' for the new file, which adds context. However, it does not specify path format (absolute vs relative), file extension handling, or whether the path should include .xlsx/.xls. Baseline is 3 due to low coverage, and the description does add some but not full value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Create') and resource ('a new blank Excel file') and includes the key parameter ('at the given path'). It clearly distinguishes from siblings like list_sheets or set_cell_value, though it doesn't explicitly name an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a use case: creating a new blank Excel file. It doesn't specify when to use this tool versus add_sheet or add_data_to_sheet, nor does it mention any prerequisites (e.g., the file must not already exist, or parent directory requirements). No exclusion or alternative guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_sheet_to_csvA

Export a single Excel sheet to a CSV file.

  • file_path: path to the source .xlsx workbook

  • sheet_name: name of the sheet to export

  • output_path: destination file path (e.g. "/tmp/data.csv"), or "return inline" to return the content directly without saving

  • delimiter: column separator — "comma" (default), "pipe", or "tab"

  • cell_range: optional Excel range string (e.g. "A1:D10"). When omitted the entire used range is exported.

Returns a dict with:

  • output_path: path of the file written (omitted when returning inline)

  • content: CSV text (only present when returning inline)

  • sheet: sheet name

  • range: the range that was exported

  • rows_written: number of rows written

ParametersJSON Schema
NameRequiredDescriptionDefault
delimiterNocomma
file_pathYes
cell_rangeNo
sheet_nameYes
output_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains that content can be returned inline or written to a file, and it fully documents the return dict fields. It does not discuss overwrite behavior or auth expectations, but for a simple export tool the behavioral contract is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a one-line purpose, a bullet list of parameters, and a bullet list of return fields. Each item adds necessary information and none is redundant or filler. It is longer than usual but earns its length given the zero schema coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given five parameters, no annotations, and no schema-level descriptions, this description covers everything an agent needs: required arguments, optional behavior, output path semantics, delimiter options, range handling, and return contract. Nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description meaningfully explains every parameter: file_path, sheet_name, output_path including the special 'return inline' value, delimiter with its allowed values and default, and cell_range with its default behavior. This fully compensates for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Export a single Excel sheet to a CSV file.' It also says 'single', which distinguishes it from multi-sheet export tools, and the CSV target clearly differentiates it from siblings like export_sheet_to_text and export_sheet_to_markdown.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: whenever a single Excel sheet must be converted to CSV. It explains the inline return mode and optional range behavior, though it does not explicitly name alternative tools or state when not to use this tool. That prevents a 5 but the context is clear enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_sheet_to_markdownA

Export a single Excel sheet to a Markdown table.

The first row is treated as the header row and a separator line is inserted beneath it. All column widths are padded to align the table.

  • file_path: path to the source .xlsx workbook

  • sheet_name: name of the sheet to export

  • output_path: destination file path (e.g. "/tmp/data.md"), or "return inline" to return the content directly without saving

  • cell_range: optional Excel range string (e.g. "A1:D10"). When omitted the entire used range is exported.

Returns a dict with:

  • output_path: path of the file written (omitted when returning inline)

  • content: markdown text (only present when returning inline)

  • sheet: sheet name

  • range: the range that was exported

  • rows_written: number of rows written (including header)

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
cell_rangeNo
sheet_nameYes
output_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full behavioral burden and does so thoroughly: it discloses header-row handling, separator insertion, column padding, optional cell-range behavior, and the exact return dict structure including inline vs file-saving differences. This is exemplary transparency for a tool without annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with a clear purpose statement, followed by concise parameter bullets and a compact return-value list. Every sentence adds useful information, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters, no annotations, and no explicit parameter descriptions in the schema, the description is complete: it covers all inputs, edge cases like inline return, and the return contract. An agent has everything it needs to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully compensates by explaining every parameter: file_path, sheet_name, output_path (including the special 'return inline' value), and cell_range (including the default behavior of exporting the used range). This adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Export'), a specific resource ('a single Excel sheet'), and the output format ('Markdown table'). It clearly distinguishes this from sibling exporters like export_sheet_to_csv and export_sheet_to_text by its format and scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear what the tool does and mentions the important 'return inline' behavior, but it does not explicitly state when to prefer this tool over alternatives like export_sheet_to_csv or get_sheet_data. Usage context is implied rather than explicitly scoped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_sheet_to_textA

Export a single Excel sheet to a plain-text delimited file.

Values are joined with the chosen delimiter with no CSV quoting applied, making output easy to read as a flat text file.

  • file_path: path to the source .xlsx workbook

  • sheet_name: name of the sheet to export

  • output_path: destination file path (e.g. "/tmp/data.txt"), or "return inline" to return the content directly without saving

  • delimiter: column separator — "pipe" (default), "comma", or "tab"

  • cell_range: optional Excel range string (e.g. "A1:D10"). When omitted the entire used range is exported.

Returns a dict with:

  • output_path: path of the file written (omitted when returning inline)

  • content: text content (only present when returning inline)

  • sheet: sheet name

  • range: the range that was exported

  • rows_written: number of rows written

ParametersJSON Schema
NameRequiredDescriptionDefault
delimiterNopipe
file_pathYes
cell_rangeNo
sheet_nameYes
output_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well: it discloses delimiter joining behavior, absence of CSV quoting, inline vs file-writing output modes, default cell_range behavior, and the exact return dict. It omits minor details like overwrite behavior or error handling, but the core behavioral traits are clearly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a one-sentence summary up front, a key behavioral note, a clear bullet list mapping to parameters, and a return-value list. Every sentence adds information, and no redundant or filler content is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool with no annotations, the description is nearly complete: it covers all parameters, return values, and key behavioral options. Minor gaps remain around when to prefer this over sibling export tools and what happens on overwrite or error, but the essential calling context is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for all five parameters. It does so thoroughly, explaining file_path, sheet_name, output_path including the special 'return inline' value, delimiter choices with default, and cell_range with example and default behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Export a single Excel sheet to a plain-text delimited file.' It further distinguishes itself from likely siblings by emphasizing 'no CSV quoting applied' and a plain text format, differentiating it from export_sheet_to_csv and export_sheet_to_markdown.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when the tool is useful: generating flat, human-readable text output without CSV quoting, and supporting inline return for direct content access. It does not explicitly name alternative tools or state when NOT to use it, but the behavior described implies the selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sheet_dataB

Return cell data from a sheet.

  • sheet_name: name of the sheet to read

  • cell_range: optional Excel range string (e.g. "A1:D10"). When omitted the entire used range is returned.

Returns a dict with:

  • sheet: sheet name

  • range: the range that was read

  • rows: list of rows; each row is a list of cell values

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
cell_rangeNo
sheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the read behavior, the optional range behavior including the full-used-range fallback, and the exact return dict keys. This is reasonably transparent for a read-only retrieval tool, though it does not mention failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the purpose, and uses a scannable bullet structure for parameters and return values. Every line adds useful information, though the missing file_path note prevents a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main read behavior and return shape, and an output schema exists, so return-value explanation is less critical. However, it fails to describe a required parameter and gives no selection guidance against sibling tools. This leaves the agent with an incomplete picture for reliable tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It documents sheet_name and cell_range well, including the Excel range format and default behavior, but it omits file_path entirely even though file_path is a required parameter. This is a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Return cell data from a sheet.' This clearly identifies the tool's core function, though it does not explicitly distinguish it from the sibling get_table_data or the export variants.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus get_table_data, list_sheets, or the export tools. The only usage-related detail is the optional cell_range behavior, which is parameter-level rather than tool-selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_table_dataB

Return data from a named Excel table.

  • table_name: the display name of the table (from list_tables)

Returns a dict with:

  • table: table name

  • sheet: sheet the table lives on

  • ref: cell range

  • headers: first row (column headers)

  • rows: remaining rows as list of lists

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
table_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the burden of behavioral disclosure. It clearly communicates a read-only operation by saying 'Return data' and enumerates the full return structure, but it does not mention side effects, error behavior, or file-related assumptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with a clear purpose, and uses a readable bulleted return format. The return-field list may overlap with the output schema, but it is still well organized and economical.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with an output schema, the description is mostly adequate: it states the resource, key parameter usage, and return shape. The missing file_path semantics and lack of sibling differentiation leave some gaps for an agent selecting this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning to table_name by explaining it is a display name from list_tables, but the required file_path parameter is completely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns data from a named Excel table, identifying the specific resource and operation. It is distinct from sibling get_sheet_data by referring to 'named Excel table', though it does not explicitly differentiate from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a workflow by saying table_name comes from list_tables, giving useful context for when this tool applies. However, it does not contrast with get_sheet_data or other siblings, so an agent receives no explicit selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pivot_tablesA

Return every pivot table in the workbook.

Each entry contains:

  • name: pivot table name

  • sheet: sheet the pivot table is rendered on

  • ref: cell range of the pivot table output

  • source_sheet: data source sheet (if determinable, else null)

  • source_ref: data source range (if determinable, else null)

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of explaining behavior. It clearly specifies the output contract, including each returned field and the nullable source fields. It does not explicitly state that the operation is read-only or describe error behavior, but the listing behavior is well-specified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main directive is front-loaded in one sentence, followed by a scannable bullet list of output fields. There is no fluff; every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward list operation with one obvious parameter, the description is nearly complete. It enumerates the return fields and handles edge cases like undeterminable source data. The only missing detail is the semantics of file_path, which is largely self-explanatory.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain file_path beyond what the input schema already shows. The parameter name is self-evident, but the description does not compensate for the lack of schema-level description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Return' with a specific resource, 'every pivot table in the workbook,' and clearly distinguishes this from sibling tools like list_sheets and list_tables. The scope and resource are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied: call this when you need all pivot tables in a workbook. However, there is no explicit guidance about when not to use it or when to prefer sibling tools such as list_sheets or list_tables.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sheetsA

Return the names of all sheets in the workbook.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. The word 'Return' makes clear this is a read-only retrieval operation, and 'all sheets' discloses the scope of the result. Minor details such as hidden-sheet handling or ordering are omitted, but for a simple listing tool this is acceptable, especially since an output schema exists for the return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one compact sentence with no filler. The action and result are front-loaded, and every word contributes to the meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter listing tool, the description plus the input schema and output schema provides enough for an agent to invoke the tool correctly. It could be slightly richer by mentioning hidden-sheet behavior or explicitly excluding tables/pivot tables, but these are minor for this level of complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must help with parameter meaning. It does not explicitly discuss file_path, but 'in the workbook' implicitly identifies file_path as the workbook to inspect, and the parameter name itself is self-descriptive. No format or validation details are added, but the single required parameter is straightforward.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Return') and a clear resource ('the names of all sheets in the workbook'). This is specific enough to distinguish the tool from sibling tools such as list_tables and list_pivot_tables, which operate on different object types. There is no vagueness or tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for retrieving sheet names, but it does not explicitly explain when to choose it over siblings like list_tables or list_pivot_tables. There are no direct exclusions or alternative routing hints; an agent must infer usage from the resource noun and the sibling tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tablesA

Return every named table in the workbook.

Each entry contains:

  • name: display name of the table

  • sheet: sheet the table lives on

  • ref: cell range (e.g. "A1:D20")

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It is transparent about the return structure by listing each entry's fields: name, sheet, and ref. The verb 'Return' implies a read-only operation with no side effects, and the scope 'every named table' discloses that no filtering occurs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the core purpose in the first sentence. The bullet list cleanly presents the return entry structure without unnecessary words or repetition. Every sentence contributes meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with one parameter and an output schema, the description is nearly complete: it states what is returned and the fields of each entry. The only notable omission is parameter semantics for file_path, which is somewhat mitigated by the self-explanatory parameter name. Overall, an agent has enough information to call this tool correctly in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for documenting the file_path parameter, but it does not mention file_path at all. The schema only states that file_path is a required string, and the description adds no semantic value such as path format, workbook context, or example. This is a significant gap for the only parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Return every named table in the workbook.' It clearly distinguishes itself from siblings like list_sheets and list_pivot_tables by focusing on named tables rather than sheets or pivot tables. The scope 'every named table' removes ambiguity about filtering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose statement itself provides clear context for when to use this tool: whenever the agent needs to enumerate all named tables in a workbook. It does not explicitly name alternatives or state when not to use it, but the resource term 'named table' implicitly disambiguates from list_sheets and list_pivot_tables. No exclusion conditions are needed for such a straightforward listing tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_cell_formulaC

Set a formula in a single cell in a sheet (formula should start with '=').

ParametersJSON Schema
NameRequiredDescriptionDefault
cellYes
formulaYes
file_pathYes
sheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description must carry the full behavioral burden. It only says the formula should start with '='; it does not clarify whether existing cell content is overwritten, whether permissions are needed, how invalid formulas are handled, or what effects occur in the sheet.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler or redundancy, and the important formula-prefix rule is included up front. It is concise without being bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even though an output schema exists, the description still lacks key invocation context: no usage alternatives, no side-effect disclosure, and no parameter format details. For a four-required-parameter mutation tool with no annotations and no schema descriptions, this is not complete enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning to the four required parameters. It adds a useful constraint for 'formula' and implies a single cell, but it does not explain the expected cell reference format, sheet identification, or file_path expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Set a formula'), the resource ('a single cell in a sheet'), and a concrete rule (formula must start with '='). It is specific enough to distinguish from set_cell_value by topic, though it does not explicitly name that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to choose this tool over siblings such as set_cell_value or add_data_to_sheet. An agent must infer from the tool name and context which operation fits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_cell_valueC

Set the value of a single cell in a sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellYes
valueYes
file_pathYes
sheet_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description bears the full burden of behavioral disclosure. It only states the action and does not explain whether the cell overwrites existing content, whether a formula in the cell is replaced, whether the cell must already exist, or how value types are handled. The mutating nature is implied but not elaborated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler words. The action and object are front-loaded, and every word contributes to the core meaning. It is appropriately sized for a simple setter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description lacks essential context for correct invocation: how to reference a cell, what value types are accepted, and what happens to existing cell content. For a tool with four required parameters and zero schema descriptions, this is a meaningful gap in guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the lack of parameter documentation. The phrase 'value of a single cell' hints that 'cell' is a cell reference and 'value' is the new value, but no detail is given on cell notation (e.g., 'A1'), file_path meaning, or sheet_name scope. This is insufficient compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Set') and identifies the resource ('value of a single cell in a sheet'), making the primary action clear. It is implicitly distinguishable from sibling tool set_cell_formula, which sets a formula rather than a literal value, and from add_data_to_sheet, which operates on multiple cells. However, it does not explicitly name these alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives. It does not mention that set_cell_formula is the appropriate tool for formulas, or that add_data_to_sheet should be used for batch writes. The description leaves all usage decisions to the agent without any contextual direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 14 tool updatesv0.1.0
    • First observedadd_data_to_sheet
    • First observedadd_sheet
    • First observedadd_table_to_sheet
    • First observedcreate_blank_file
    • First observedexport_sheet_to_csv
    • First observedexport_sheet_to_markdown
    • First observedexport_sheet_to_text
    • First observedget_sheet_data
    • First observedget_table_data
    • First observedlist_pivot_tables
    • First observedlist_sheets
    • First observedlist_tables
    • First observedset_cell_formula
    • First observedset_cell_value

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct resource or action: listing vs reading vs exporting vs writing are clearly separated, and the three export tools differ by output format. Even the similar get_sheet_data and get_table_data are unambiguous because one returns raw sheet cells and the other returns a named table with headers.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern: list_*, get_*, export_sheet_to_*, add_*, and set_cell_*. The naming style is uniform and predictable across the entire set.

Tool Count5/5

14 tools is well within the ideal range for an Excel-focused MCP server. Each tool covers a distinct operation and the set feels appropriately scoped without unnecessary duplication.

Completeness4/5

The server covers the core Excel lifecycle: discovering structure, reading data, exporting, creating files, adding sheets/data/tables, and setting cell values or formulas. Minor gaps exist—such as no delete/rename/clear operations or updating existing tables—but agents can accomplish most common workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables reading and searching Excel files through MCP-compatible clients. Provides tools to retrieve workbook metadata, read sheet contents, and search across all sheets using absolute file paths.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides full read and write access to Excel workbooks (sheets, cell ranges, tables, formulas, formatting, and cross-workbook references) via MCP, running locally or as an HTTP/SSE service.
    70
    MIT

Latest Blog Posts

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/urjeetpatel/excel_mcp_server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server