sheets-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SHEETS_MCP_READ_ONLY | No | When true, only the read tools are registered. | false |
| GOOGLE_OAUTH_TOKEN_FILE | No | Where the cached OAuth token lives. | ~/.sheets-mcp/token.json |
| GOOGLE_OAUTH_CLIENT_FILE | No | OAuth client secrets, for the user-account flow. | |
| GOOGLE_SERVICE_ACCOUNT_FILE | No | Path to the service account JSON key. | |
| GOOGLE_SERVICE_ACCOUNT_JSON | No | The same service account key inlined, for hosts without a filesystem. |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_spreadsheetsA | List Google Sheets the credentials can access, most recently modified first. Args: name_contains: Optional case-insensitive substring to filter titles by. limit: Maximum number of spreadsheets to return (1-100). |
| get_spreadsheetA | Get a spreadsheet's title, URL and the name and size of every tab in it. Call this before reading when you do not already know the tab names. Args: spreadsheet_id: The long token from the spreadsheet URL. |
| read_rangeB | Read a raw grid of cells from a spreadsheet. Args: spreadsheet_id: The long token from the spreadsheet URL. a1_range: A1 notation, e.g. "Sheet1", "Sheet1!A1:D50" or "Sheet1!A:A". |
| read_recordsA | Read a tab as labelled records, using one row as the column headers. Each record includes a Args: spreadsheet_id: The long token from the spreadsheet URL. sheet_name: The tab name, e.g. "Sales". header_row: 1-based row number holding the column headers. limit: Maximum number of data records to return. |
| find_rowsB | Find records in a tab whose column matches a value. Args: spreadsheet_id: The long token from the spreadsheet URL. sheet_name: The tab name to search. column: Header name of the column to match against. value: Value to look for; matching is case-insensitive. header_row: 1-based row number holding the column headers. exact: True for an exact match, False for a substring match. limit: Maximum number of matches to return. |
| write_rangeA | Overwrite a range of cells with the given rows. Existing values are replaced. Args: spreadsheet_id: The long token from the spreadsheet URL. a1_range: Top-left anchored range, e.g. "Sheet1!A2:C10". values: Rows of cell values, outer list is rows, inner list is columns. value_input_option: USER_ENTERED parses formulas and dates; RAW stores literally. |
| append_rowsA | Append rows below the last used row of a tab. Nothing is overwritten. Args: spreadsheet_id: The long token from the spreadsheet URL. sheet_name: The tab to append to, e.g. "Sales". values: Rows of cell values, in the same column order as the sheet. value_input_option: USER_ENTERED parses formulas and dates; RAW stores literally. |
| clear_rangeA | Clear the values in a range, leaving formatting and the rows in place. Args: spreadsheet_id: The long token from the spreadsheet URL. a1_range: The range to clear, e.g. "Sheet1!A2:D100". |
| create_spreadsheetA | Create a new spreadsheet and return its ID and URL. A spreadsheet created by a service account is owned by that account, so pass
Args: title: Title of the new spreadsheet. sheet_names: Optional tab names to create instead of the default single tab. share_with: Optional email address to grant edit access to. |
| add_sheetA | Add a new tab to an existing spreadsheet. Args: spreadsheet_id: The long token from the spreadsheet URL. title: Name of the new tab; must not already exist. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 10 tools
Each tool maps to a clearly distinct operation: list vs. get metadata, raw range vs. labelled record reads, overwrite vs. append vs. clear, search, and create spreadsheet vs. add tab. The boundaries are unambiguous and descriptions reinforce the differences.
All tool names follow a consistent snake_case verb_noun pattern (e.g., list_spreadsheets, read_range, append_rows, create_spreadsheet). The convention is predictable throughout with no mixing of styles.
Ten tools provide a well-scoped set for Google Sheets operations. Each tool earns its place without redundancy, and the count is comfortably within the ideal 3–15 range.
The surface covers core operations: list, read (raw and records), search, write, append, clear, create spreadsheet, and add tab. However, there is no delete or rename for spreadsheets or tabs, and no formatting or batch operations, which are minor gaps for a complete lifecycle.