mcp-gsheets
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GOOGLE_PROJECT_ID | Yes | Your Google Cloud project ID | |
| GOOGLE_APPLICATION_CREDENTIALS | Yes | Absolute path to your Google service account key JSON file |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| sheets_check_access | Check access permissions for a spreadsheet. Returns information about what operations are allowed. |
| sheets_get_values | Get values from a specified range in a Google Sheets spreadsheet |
| sheets_batch_get_values | Get values from multiple ranges in a Google Sheets spreadsheet |
| sheets_get_metadata | Get metadata about a Google Sheets spreadsheet including sheet names, IDs, and properties |
| sheets_update_values | Update values in a specified range of a Google Sheets spreadsheet. Examples:
|
| sheets_batch_update_values | Update values in multiple ranges of a Google Sheets spreadsheet |
| sheets_append_values | Append values to the end of a table in a Google Sheets spreadsheet. IMPORTANT: By default, this will OVERWRITE existing empty cells. To INSERT new rows instead, set insertDataOption to "INSERT_ROWS". |
| sheets_clear_values | Clear values in a specified range of a Google Sheets spreadsheet |
| sheets_create_spreadsheet | Create a new Google Sheets spreadsheet |
| sheets_insert_sheet | Add a new sheet to an existing Google Sheets spreadsheet |
| sheets_delete_sheet | Delete a sheet from a Google Sheets spreadsheet |
| sheets_duplicate_sheet | Duplicate a sheet within a Google Sheets spreadsheet |
| sheets_copy_to | Copy a sheet to another Google Sheets spreadsheet |
| sheets_update_sheet_properties | Update properties of a sheet in a Google Sheets spreadsheet |
| sheets_format_cells | Format cells in a Google Sheet (colors, fonts, alignment, number formats) |
| sheets_update_borders | Update borders of cells in a Google Sheet |
| sheets_merge_cells | Merge cells in a Google Sheet |
| sheets_unmerge_cells | Unmerge cells in a Google Sheet |
| sheets_add_conditional_formatting | Add conditional formatting rules to a Google Sheet |
| sheets_batch_delete_sheets | Delete multiple sheets from a Google Sheets spreadsheet in a single operation |
| sheets_batch_format_cells | Format multiple cell ranges in a Google Sheet in a single operation |
| sheets_create_chart | Create a chart in a Google Sheets spreadsheet. Sheet names with spaces should be quoted in ranges (e.g., "My Sheet"!A1:B5). Position uses overlayPosition with anchorCell containing sheetId, rowIndex, and columnIndex. |
| sheets_update_chart | Update an existing chart in a Google Sheets spreadsheet |
| sheets_delete_chart | Delete a chart from a Google Sheets spreadsheet |
| sheets_insert_link | Insert clickable links in Google Sheets cells with custom display text |
| sheets_insert_date | Insert properly formatted dates in Google Sheets with locale support and automatic detection |
| sheets_insert_rows | Insert new rows at a specific position with optional data |
| sheets_delete_columns | Delete one or more columns from a Google Sheet using a full-column A1 range |
| sheets_delete_rows | Delete one or more rows from a Google Sheet using a full-row A1 range |
| sheets_get_merged_cells | Get all merged cell ranges for a specific sheet. Returns each merge as A1 notation and GridRange coordinates. |
| sheets_get_sheet_dimensions | Get column widths (pixelSize), row heights (pixelSize), hidden columns/rows, and frozen row/column counts for a sheet. |
| sheets_get_sheet_formatting | Read cell formatting (background color, text color, font family, font size, bold, italic, horizontal/vertical alignment, wrapStrategy, textRotation, numberFormat) for a range. Returns a 2D array matching the requested range rows/columns. Set useEffectiveFormat=true to get the resolved/inherited format instead of the user-entered one. |
| sheets_get_conditional_formatting | Read conditional formatting rules and banded ranges (alternating row/column colors) for a sheet. CF formulas are normalized to English locale (semicolons → commas) by default. Each rule with a formula includes a "_formulaLocaleRaw" field with the original unmodified formula. Set normalizeFormulas:false to get raw formulas as returned by the API. |
| sheets_get_full_sheet_snapshot | One-shot tool: reads all structural and formatting metadata for a sheet in a single API call. Returns: sheet properties (frozen rows/cols, dimensions, tab color), merged cells, column widths, row heights, banded ranges, and optionally cell-level formatting for a specified range (includeFormattingRange). compactMode is OFF by default — full per-cell detail is returned unless compactMode:true is provided. When compactMode is ON, adjacent cells with identical formatting are collapsed into range descriptors (90%+ smaller output). Conditional formatting rules are included by default (includeConditionalFormatting:true); set to false to exclude them. CF formulas are normalized to English locale (commas). Use fields to limit which format properties are returned. Use this before programmatically recreating a sheet. |
| sheets_get_sheet_structure | Lightweight tool returning ONLY structural/dimensional metadata for a sheet — no per-cell data. Returns: sheet dimensions, frozen rows/cols, tab color, sheet index, column widths array, row heights array, hidden columns/rows, and all merge ranges in A1 notation. Use this instead of sheets_get_full_sheet_snapshot when per-cell formatting is not needed. Much faster and cheaper — single API call with minimal field mask. |
| sheets_get_formatting_compact | Returns cell formatting for a range as compact A1Range→format pairs. Adjacent cells with identical formatting are collapsed into rectangular ranges (run-length encoded). Reduces output by 90%+ compared to per-cell formatting for typical sheets. Use instead of sheets_get_full_sheet_snapshot when you only need formatting data. Supported fields: backgroundColor, backgroundColorStyle, textFormat, horizontalAlignment, verticalAlignment, wrapStrategy, textRotation, numberFormat, padding, borders. |
| sheets_get_data_validation | Read data validation rules (checkboxes, dropdown lists, custom formulas, etc.) from a sheet or range. Returns a compact list of unique validation rules grouped by their cell ranges (run-length encoded). Useful for discovering checkboxes (BOOLEAN), dropdown lists (ONE_OF_LIST / ONE_OF_RANGE), number constraints, and custom formula validations. |
| sheets_get_basic_filter | Read the Basic Filter (AutoFilter) configuration for a sheet, including the filtered range, sort specs, and per-column filter criteria (hidden values, conditions, color filters). Returns hasBasicFilter: false if no filter is applied. |
| sheets_get_border_map | Returns a visual tabular map of borders for a range. Instead of per-cell JSON with 4 separate border objects, returns compact grids showing which cells have top/bottom/left/right borders and their styles. Solves the ambiguity between "right border of cell N" vs "left border of cell N+1". Output: a horizontal-lines grid and a vertical-lines grid, each as a 2D array of line styles. Set includeStyle:true to include color and width details (larger output). |
| sheets_compare_ranges | Compare cell formatting between two ranges of identical dimensions. Useful for verifying repeated patterns, e.g. "do all data rows 6–85 have identical formatting?" or "is row 10 formatted identically to the template row 5?". Returns a diff listing only the cells and properties that differ between the two ranges. Cells are compared position-by-position; rangeA and rangeB must have the same number of rows and columns. Use fields to restrict comparison to specific format properties. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| create-table | Guide for creating a new table with headers and data in a Google Spreadsheet |
| format-report | Format existing data as a professional report with headers, borders, and styling |
| summarize-data | Analyze spreadsheet data and provide insights or create a summary |
| create-chart-guide | Step-by-step guide to create a chart from spreadsheet data |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
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/freema/mcp-gsheets'
If you have feedback or need assistance with the MCP directory API, please join our Discord server