Xing Wu/mcp-google-sheets
Built by Metorial, the integration platform for agentic AI.
Xing Wu/mcp-google-sheets
Server Summary
Create spreadsheets
Modify spreadsheet content
Manage spreadsheet data
Automate spreadsheet tasks
Enable seamless data interaction
mcp-google-sheets
Your AI Assistant's Gateway to Google Sheets! 📊
mcp-google-sheets
is a Python-based MCP server that acts as a bridge between any MCP-compatible client (like Claude Desktop) and the Google Sheets API. It allows you to interact with your Google Spreadsheets using a defined set of tools, enabling powerful automation and data manipulation workflows driven by AI.
uvx
)Essentially the server runs in one line: uvx mcp-google-sheets@latest
.
This cmd will automatically download the latest code and run it. We recommend always using @latest
to ensure you have the newest version with the latest features and bug fixes.
☁️ Prerequisite: Google Cloud Setup
🐍 Install uv
uvx
is part of uv
, a fast Python package installer and resolver. Install it if you haven't already:
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# Or using pip:
# pip install uv
Follow instructions in the installer output to add uv
to your PATH if needed.🔑 Set Essential Environment Variables (Service Account Recommended)
# Replace with YOUR actual path and folder ID from the Google Setup step
export SERVICE_ACCOUNT_PATH="/path/to/your/service-account-key.json"
export DRIVE_FOLDER_ID="YOUR_DRIVE_FOLDER_ID"
set SERVICE_ACCOUNT_PATH="C:\path\to\your\service-account-key.json"
set DRIVE_FOLDER_ID="YOUR_DRIVE_FOLDER_ID"
$env:SERVICE_ACCOUNT_PATH = "C:\path\to\your\service-account-key.json"
$env:DRIVE_FOLDER_ID = "YOUR_DRIVE_FOLDER_ID"
CREDENTIALS_CONFIG
).🏃 Run the Server!
uvx
will automatically download and run the latest version of mcp-google-sheets
:
uvx mcp-google-sheets@latest
💡 Pro Tip: Always use
@latest
to ensure you get the newest version with bug fixes and features. Without@latest
,uvx
may use a cached older version.
🔌 Connect your MCP Client
You're ready! Start issuing commands via your MCP client.
uvx
(zero-install feel) or clone for development using uv
.This server exposes the following tools for interacting with Google Sheets:
(Input parameters are typically strings unless otherwise specified)
list_spreadsheets
: Lists spreadsheets in the configured Drive folder (Service Account) or accessible by the user (OAuth).
[{id: string, title: string}]
create_spreadsheet
: Creates a new spreadsheet.
title
(string): The desired title.spreadsheetId
.get_sheet_data
: Reads data from a range in a sheet.
spreadsheet_id
(string)sheet
(string): Name of the sheet.range
(optional string): A1 notation (e.g., 'A1:C10'
, 'Sheet1!B2:D'
). If omitted, reads the whole sheet.get_sheet_formulas
: Reads formulas from a range in a sheet.
spreadsheet_id
(string)sheet
(string): Name of the sheet.range
(optional string): A1 notation (e.g., 'A1:C10'
, 'Sheet1!B2:D'
). If omitted, reads the whole sheet.update_cells
: Writes data to a specific range. Overwrites existing data.
spreadsheet_id
(string)sheet
(string)range
(string): A1 notation.data
(2D array): Values to write.batch_update_cells
: Updates multiple ranges in one API call.
spreadsheet_id
(string)sheet
(string)ranges
(object): Dictionary mapping range strings (A1 notation) to 2D arrays of values { "A1:B2": [[1, 2], [3, 4]], "D5": [["Hello"]] }
.add_rows
: Appends rows to the end of a sheet (after the last row with data).
spreadsheet_id
(string)sheet
(string)data
(2D array): Rows to append.list_sheets
: Lists all sheet names within a spreadsheet.
spreadsheet_id
(string)["Sheet1", "Sheet2"]
.create_sheet
: Adds a new sheet (tab) to a spreadsheet.
spreadsheet_id
(string)title
(string): Name for the new sheet.get_multiple_sheet_data
: Fetches data from multiple ranges across potentially different spreadsheets in one call.
queries
(array of objects): Each object needs spreadsheet_id
, sheet
, and range
. [{spreadsheet_id: 'abc', sheet: 'Sheet1', range: 'A1:B2'}, ...]
.data
or an error
.get_multiple_spreadsheet_summary
: Gets titles, sheet names, headers, and first few rows for multiple spreadsheets.
spreadsheet_ids
(array of strings)rows_to_fetch
(optional integer, default 5): How many rows (including header) to preview.share_spreadsheet
: Shares a spreadsheet with specified users/emails and roles.
spreadsheet_id
(string)recipients
(array of objects): [{email_address: '[email protected]', role: 'writer'}, ...]
. Roles: reader
, commenter
, writer
.send_notification
(optional boolean, default True): Send email notifications.successes
and failures
lists.add_columns
: Adds columns to a sheet. (Verify parameters if implemented)copy_sheet
: Duplicates a sheet within a spreadsheet. (Verify parameters if implemented)rename_sheet
: Renames an existing sheet. (Verify parameters if implemented)MCP Resources:
spreadsheet://{spreadsheet_id}/info
: Get basic metadata about a Google Spreadsheet.
This setup is required before running the server.
Google Sheets API
Google Drive API
The server needs credentials to access Google APIs. Choose one method:
mcp-sheets-service
).Editor
role for broad access, or more granular roles (like roles/drive.file
and specific Sheets roles) for stricter permissions.https://drive.google.com/drive/folders/THIS_IS_THE_FOLDER_ID
.client_email
).SERVICE_ACCOUNT_PATH
: Full path to the downloaded JSON key file.DRIVE_FOLDER_ID
: The ID of the shared Google Drive folder.
(See Ultra Quick Start for OS-specific examples).../auth/spreadsheets
, .../auth/drive
), add test users if needed.CREDENTIALS_PATH
: Path to the downloaded OAuth credentials JSON file (default: credentials.json
).TOKEN_PATH
: Path to store the user's refresh token after first login (default: token.json
). Must be writable.your_credentials.json
.base64 -w 0 your_credentials.json
$filePath = "C:\path\to\your_credentials.json"; # Use actual path
$bytes = [System.IO.File]::ReadAllBytes($filePath);
$base64 = [System.Convert]::ToBase64String($bytes);
$base64 # Copy this output
CREDENTIALS_CONFIG
: Set this variable to the full Base64 string you just generated.
# Example (Linux/macOS) - Use the actual string generated
export CREDENTIALS_CONFIG="ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb..."
gcloud auth application-default login
. No explicit credential files needed.GOOGLE_APPLICATION_CREDENTIALS
environment variable (path to service account key) - Google's standard variablegcloud auth application-default login
credentials (local development)gcloud auth application-default login
onceGOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
(Google's standard)Note: GOOGLE_APPLICATION_CREDENTIALS
is Google's official standard environment variable, while SERVICE_ACCOUNT_PATH
is specific to this MCP server. If you set GOOGLE_APPLICATION_CREDENTIALS
, ADC will find it automatically.
The server checks for credentials in this order:
CREDENTIALS_CONFIG
(Base64 content)SERVICE_ACCOUNT_PATH
(Path to Service Account JSON)CREDENTIALS_PATH
(Path to OAuth JSON) - triggers interactive flow if token is missing/expiredEnvironment Variable Summary:
Variable | Method(s) | Description | Default |
---|---|---|---|
SERVICE_ACCOUNT_PATH | Service Account | Path to the Service Account JSON key file (MCP server specific). | - |
GOOGLE_APPLICATION_CREDENTIALS | ADC | Path to service account key (Google's standard variable). | - |
DRIVE_FOLDER_ID | Service Account | ID of the Google Drive folder shared with the Service Account. | - |
CREDENTIALS_PATH | OAuth 2.0 | Path to the OAuth 2.0 Client ID JSON file. | credentials.json |
TOKEN_PATH | OAuth 2.0 | Path to store the generated OAuth token. | token.json |
CREDENTIALS_CONFIG | Service Account / OAuth 2.0 | Base64 encoded JSON string of credentials content. | - |
uvx
(Recommended for Users)As shown in the Ultra Quick Start, this is the easiest way. Set environment variables, then run:
uvx mcp-google-sheets@latest
uvx
handles fetching and running the package temporarily.
If you want to modify the code:
git clone https://github.com/yourusername/mcp-google-sheets.git && cd mcp-google-sheets
(Use actual URL)uv
: (Uses the local code)
uv run mcp-google-sheets
# Or via the script name if defined in pyproject.toml, e.g.:
# uv run start
Add the server config to claude_desktop_config.json
under mcpServers
. Choose the block matching your setup:
🔵 Config: uvx + Service Account (Recommended)
{
"mcpServers": {
"google-sheets": {
"command": "uvx",
"args": ["mcp-google-sheets@latest"],
"env": {
// Use ABSOLUTE paths here
"SERVICE_ACCOUNT_PATH": "/full/path/to/your/service-account-key.json",
"DRIVE_FOLDER_ID": "your_shared_folder_id_here"
},
"healthcheck_url": "http://localhost:8000/health" // Adjust host/port if needed
}
}
}
🔵 Config: uvx + OAuth 2.0
{
"mcpServers": {
"google-sheets": {
"command": "uvx",
"args": ["mcp-google-sheets@latest"],
"env": {
// Use ABSOLUTE paths here
"CREDENTIALS_PATH": "/full/path/to/your/credentials.json",
"TOKEN_PATH": "/full/path/to/your/token.json" // Ensure this path is writable
},
"healthcheck_url": "http://localhost:8000/health"
}
}
}
(A browser may open for Google login on first use)
🔵 Config: uvx + CREDENTIALS_CONFIG (Service Account Example)
{
"mcpServers": {
"google-sheets": {
"command": "uvx",
"args": ["mcp-google-sheets@latest"],
"env": {
// Paste the full Base64 string here
"CREDENTIALS_CONFIG": "ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VudCIsCiAgInByb2plY3RfaWQiOiAi...",
"DRIVE_FOLDER_ID": "your_shared_folder_id_here" // Still needed for Service Account folder context
},
"healthcheck_url": "http://localhost:8000/health"
}
}
}
🔵 Config: uvx + Application Default Credentials (ADC)
{
"mcpServers": {
"google-sheets": {
"command": "uvx",
"args": ["mcp-google-sheets@latest"],
"env": {
// Option 1: Use Google's standard environment variable
// "GOOGLE_APPLICATION_CREDENTIALS": "/path/to/service-account.json"
// Option 2: No env vars needed if using `gcloud auth application-default login`
},
"healthcheck_url": "http://localhost:8000/health"
}
}
}
Prerequisites: Either set GOOGLE_APPLICATION_CREDENTIALS
OR run gcloud auth application-default login
🟡 Config: Development (Running from cloned repo)
{
"mcpServers": {
"mcp-google-sheets-local": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/your/mcp-google-sheets",
"mcp-google-sheets"
],
"env": {
"SERVICE_ACCOUNT_PATH": "/path/to/your/mcp-google-sheets/service_account.json",
"DRIVE_FOLDER_ID": "your_drive_folder_id_here"
}
}
}
}
Note: Use --directory
flag to specify the project path, and adjust paths to match your actual workspace location.
Once connected, try prompts like:
1aBcDeFgHiJkLmNoPqRsTuVwXyZ
."XYZ
: [['2024-07-31', 'Task A Completed'], ['2024-08-01', 'Task B Started']]
"[email protected]
as a reader and [email protected]
as a writer. Don't send notifications."Contributions are welcome! Please open an issue to discuss bugs or feature requests. Pull requests are appreciated.
This project is licensed under the MIT License - see the LICENSE file for details.