This MCP server integrates with your Google Drive and Google Sheets, to enable creating and modifying spreadsheets.
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:
{
"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
}
}
}
{
"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)
{
"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"
}
}
}
{
"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
{
"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.
No configuration available
This service may require manual configuration, please check the details on the left
Related projects feature coming soon
Will recommend related projects based on sub-categories