Skip to main content
Glama
dudegladiator

Google Sheets MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

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

Tools

Functions exposed to the LLM to take actions

NameDescription
create_spreadsheetA

Create a new Google Spreadsheet.

Args: title: The title for the new spreadsheet. sheet_names: Comma-separated list of sheet names (optional).

Returns: JSON with spreadsheet_id, title, url, and sheets.

get_spreadsheet_infoA

Get information about a spreadsheet including all sheets.

Args: spreadsheet_id: The ID of the spreadsheet (from URL).

Returns: JSON with spreadsheet metadata, sheets list, and URL.

list_sheetsA

List all sheets/tabs in a spreadsheet.

Args: spreadsheet_id: The ID of the spreadsheet.

Returns: JSON list of sheets with their IDs, titles, and dimensions.

create_sheetA

Create a new sheet/tab in a spreadsheet.

Args: spreadsheet_id: The ID of the spreadsheet. title: Name for the new sheet. index: Position for the new sheet (-1 for end).

Returns: JSON with new sheet's ID, title, and index.

delete_sheetA

Delete a sheet from a spreadsheet.

Args: spreadsheet_id: The ID of the spreadsheet. sheet_id: The numeric ID of the sheet (from list_sheets).

Returns: Success message.

rename_sheetA

Rename a sheet.

Args: spreadsheet_id: The ID of the spreadsheet. sheet_id: The numeric ID of the sheet. new_title: New name for the sheet.

Returns: Success message.

duplicate_sheetA

Duplicate/copy a sheet within the same spreadsheet.

Args: spreadsheet_id: The ID of the spreadsheet. sheet_id: The numeric ID of the sheet to duplicate. new_title: Name for the duplicated sheet. insert_index: Position for the copy (-1 for end).

Returns: JSON with new sheet's ID, title, and index.

read_cellsA

Read cell values from a spreadsheet range.

Examples: - read_cells("abc123", "Sheet1!A1:D10") → Read 10 rows, 4 columns - read_cells("abc123", "Sheet1!A:A") → Read entire column A - read_cells("abc123", "A1:B5") → Read from first visible sheet

Args: spreadsheet_id: The ID from the spreadsheet URL. range_notation: A1 notation range. Use 'SheetName!A1:B5' format.

Returns: JSON 2D array of cell values. Empty cells may be omitted.

write_cellsA

Write values to cells. Supports formulas (start with =).

Examples: - write_cells("abc123", "Sheet1!A1", '[["Name", "Age"], ["Alice", 30]]') - write_cells("abc123", "Sheet1!E1", '[["=SUM(A1:D1)"], ["=SUM(A2:D2)"]]') - write_cells("abc123", "A1", '[["Header1", "Header2", "Header3"]]')

Args: spreadsheet_id: The ID from the spreadsheet URL. range_notation: Starting cell in A1 notation (e.g., "Sheet1!A1"). values: JSON 2D array. Each inner array is a row. Formulas: use "=SUM(A1:A10)", "=AVERAGE(B:B)", etc.

Returns: JSON with updated_cells count and updated_range.

batch_readA

Read values from multiple ranges at once.

Args: spreadsheet_id: The ID of the spreadsheet. ranges: Comma-separated A1 notation ranges (e.g., "Sheet1!A1:B5,Sheet1!D1:E5").

Returns: JSON object mapping each range to its values.

batch_writeA

Write values to multiple ranges at once.

Args: spreadsheet_id: The ID of the spreadsheet. data: JSON array of objects with 'range' and 'values' keys. Example: '[{"range": "A1:B2", "values": [[1,2],[3,4]]}, {"range": "D1", "values": [["Hello"]]}]'

Returns: JSON with total cells, rows, columns updated.

clear_cellsA

Clear all values in a range (keeps formatting).

Args: spreadsheet_id: The ID of the spreadsheet. range_notation: A1 notation range to clear.

Returns: Success message.

append_rowsA

Append rows to the end of data in a sheet.

Args: spreadsheet_id: The ID of the spreadsheet. range_notation: A1 notation indicating which columns (e.g., "Sheet1!A:D"). values: JSON 2D array of rows to append.

Returns: JSON with updated range and cells appended.

insert_rowsA

Insert empty rows at a specific position.

Args: spreadsheet_id: The ID of the spreadsheet. sheet_id: The numeric ID of the sheet. start_index: Row index to insert at (0-based, so row 1 = index 0). num_rows: Number of rows to insert.

Returns: Success message.

insert_columnsA

Insert empty columns at a specific position.

Args: spreadsheet_id: The ID of the spreadsheet. sheet_id: The numeric ID of the sheet. start_index: Column index to insert at (0-based, so column A = index 0). num_columns: Number of columns to insert.

Returns: Success message.

delete_rowsA

Delete rows from a sheet.

Args: spreadsheet_id: The ID of the spreadsheet. sheet_id: The numeric ID of the sheet. start_index: Starting row index (0-based). num_rows: Number of rows to delete.

Returns: Success message.

delete_columnsA

Delete columns from a sheet.

Args: spreadsheet_id: The ID of the spreadsheet. sheet_id: The numeric ID of the sheet. start_index: Starting column index (0-based). num_columns: Number of columns to delete.

Returns: Success message.

format_cellsA

Apply formatting to a range of cells.

Examples: - Format header row bold with blue background: format_cells("abc", 0, 0, 1, 0, 5, bold=True, background_color="#4285F4") - Center align cells A1:C10: format_cells("abc", 0, 0, 10, 0, 3, alignment="CENTER")

Note: Indices are 0-based. Row 1 in sheets = index 0. Column A = index 0. end_row and end_col are EXCLUSIVE (like Python ranges).

Args: spreadsheet_id: The ID from the spreadsheet URL. sheet_id: Numeric sheet ID (get from list_sheets or get_spreadsheet_info). start_row: Starting row index (0-based, so row 1 = 0). end_row: Ending row index (exclusive, so rows 1-5 = start=0, end=5). start_col: Starting column index (0-based, A=0, B=1, C=2...). end_col: Ending column index (exclusive). bold: Make text bold (True/False). italic: Make text italic (True/False). font_size: Font size in points (0 to skip, typical: 10-14). font_color: Hex color for text (e.g., "#FF0000"=red, "#FFFFFF"=white). background_color: Hex color for cell background (e.g., "#4285F4"=blue). alignment: "LEFT", "CENTER", or "RIGHT".

Returns: Success message.

set_column_widthB

Set the width of columns.

Args: spreadsheet_id: The ID of the spreadsheet. sheet_id: The numeric ID of the sheet. start_col: Starting column index (0-based, A=0). end_col: Ending column index (exclusive). width: Width in pixels.

Returns: Success message.

merge_cellsA

Merge cells in a range.

Args: spreadsheet_id: The ID of the spreadsheet. sheet_id: The numeric ID of the sheet. start_row: Starting row index (0-based). end_row: Ending row index (exclusive). start_col: Starting column index (0-based). end_col: Ending column index (exclusive). merge_type: "MERGE_ALL", "MERGE_COLUMNS", or "MERGE_ROWS".

Returns: Success message.

create_chartA

Create an embedded chart with MULTIPLE SERIES support.

Examples: - Multi-series line chart (auto-detect all columns B-F as series): create_chart("abc", 0, "LINE", "Sheet1!A1:F10", "Stock Prices")

- Explicit series columns (B=1, C=2, D=3, E=4 as separate lines):
  create_chart("abc", 0, "LINE", "A1:E10", "Comparison", 0, 7, 0, "1,2,3,4")
  
- Pie chart (single series from column B):
  create_chart("abc", 0, "PIE", "A1:B5", "Distribution")

Chart Types: - BAR: Horizontal bars (multiple series = grouped bars) - COLUMN: Vertical bars (multiple series = grouped columns) - LINE: Line graph (multiple series = multiple lines, great for trends) - PIE: Circular chart (single series only) - AREA: Stacked area chart - SCATTER: X-Y scatter plot

Multi-Series Example: Data: | Date | ONGC | BPCL | IOCL | NTPC | CIL | Range: "Sheet1!A1:F30" domain_column: 0 (Date column as X-axis) series_columns: "1,2,3,4,5" (or leave empty to auto-detect) Result: 5 lines on one chart, each representing a company

Args: spreadsheet_id: The ID from the spreadsheet URL. sheet_id: Numeric sheet ID where chart will be placed. chart_type: BAR, LINE, PIE, AREA, COLUMN, or SCATTER. data_range: A1 notation of data range (e.g., "Sheet1!A1:F30"). title: Chart title displayed at top. position_row: Row offset for chart placement (0-based). position_col: Column offset for chart placement (0=A, 5=F, 7=H). domain_column: Column index for X-axis labels (0=first column of range). series_columns: Comma-separated indices for series data (e.g., "1,2,3,4,5"). Empty = auto-detect all columns after domain_column.

Returns: JSON with chart_id for later reference.

list_chartsA

List all charts in a spreadsheet.

Args: spreadsheet_id: The ID of the spreadsheet.

Returns: JSON list of charts with IDs, titles, and positions.

delete_chartA

Delete a chart from the spreadsheet.

Args: spreadsheet_id: The ID of the spreadsheet. chart_id: The ID of the chart (from list_charts).

Returns: Success message.

sort_rangeA

Sort data in a range by a column.

Args: spreadsheet_id: The ID of the spreadsheet. sheet_id: The numeric ID of the sheet. start_row: Starting row index (0-based). end_row: Ending row index (exclusive). start_col: Starting column index (0-based). end_col: Ending column index (exclusive). sort_column: Column index to sort by (0-based, relative to range). ascending: True for A-Z/0-9, False for Z-A/9-0.

Returns: Success message.

find_replaceA

Find and replace text across the spreadsheet or a specific sheet.

Args: spreadsheet_id: The ID of the spreadsheet. find: Text to search for. replace: Text to replace with. sheet_id: Limit to specific sheet (-1 for all sheets). match_case: Case-sensitive matching. match_entire_cell: Only match if cell equals find text exactly.

Returns: JSON with number of occurrences changed.

get_last_rowA

Find the last row with data in a column.

Args: spreadsheet_id: The ID of the spreadsheet. sheet_name: Name of the sheet. column: Column letter to check (default "A").

Returns: JSON with the last row number (1-based).

share_spreadsheetA

Share a spreadsheet with someone or make it publicly accessible.

Args: spreadsheet_id: The ID of the spreadsheet. email: Email address to share with (optional if make_public=True). role: Permission level - "reader", "writer", or "commenter". make_public: If True, makes spreadsheet accessible to anyone with link.

Returns: JSON with sharing result.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/dudegladiator/spreadsheet-mcp'

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