Google Sheets MCP Server
An MCP (Model Context Protocol) server that exposes Google Sheets as queryable database tables. Designed to run as a Google Cloud Function.
Features
- list_sheets - List all sheet names in a spreadsheet
- get_schema - Get column headers for a sheet
- query_rows - Fetch rows with optional pagination (limit/offset)
Prerequisites
- A Google Cloud project with the Sheets API enabled
- A service account with access to the spreadsheets you want to query
- Google Cloud CLI (
gcloud) installed and configured
Setup
1. Create a Service Account
# Create the service account
gcloud iam service-accounts create sheets-mcp \
--display-name="Google Sheets MCP Server"
# Create and download the key
gcloud iam service-accounts keys create service-account-key.json \
--iam-account=sheets-mcp@YOUR_PROJECT_ID.iam.gserviceaccount.com
2. Share Spreadsheets
Share your Google Spreadsheets with the service account email:
sheets-mcp@YOUR_PROJECT_ID.iam.gserviceaccount.com
Grant "Viewer" permission for read-only access.
3. Install Dependencies
npm install
4. Build
npm run build
Local Development
Set the environment variable and run:
export GOOGLE_SERVICE_ACCOUNT_KEY=$(cat service-account-key.json)
npm start
Deploy to Google Cloud Functions
Deploy Command
gcloud functions deploy google-sheets-mcp \
--gen2 \
--runtime=nodejs20 \
--region=us-central1 \
--source=. \
--entry-point=googleSheetsMcp \
--trigger-http \
--allow-unauthenticated \
--set-env-vars="GOOGLE_SERVICE_ACCOUNT_KEY=$(cat service-account-key.json | jq -c .)"
For authenticated access (recommended for production):
gcloud functions deploy google-sheets-mcp \
--gen2 \
--runtime=nodejs20 \
--region=us-central1 \
--source=. \
--entry-point=googleSheetsMcp \
--trigger-http \
--set-env-vars="GOOGLE_SERVICE_ACCOUNT_KEY=$(cat service-account-key.json | jq -c .)"
Using Secret Manager (Recommended)
For better security, store credentials in Secret Manager:
# Create the secret
gcloud secrets create sheets-mcp-credentials \
--data-file=service-account-key.json
# Deploy with secret reference
gcloud functions deploy google-sheets-mcp \
--gen2 \
--runtime=nodejs20 \
--region=us-central1 \
--source=. \
--entry-point=googleSheetsMcp \
--trigger-http \
--set-secrets="GOOGLE_SERVICE_ACCOUNT_KEY=sheets-mcp-credentials:latest"
MCP Client Configuration
Add the deployed function URL to your MCP client configuration:
{
"mcpServers": {
"google-sheets": {
"url": "https://REGION-PROJECT_ID.cloudfunctions.net/google-sheets-mcp"
}
}
}
Tool Usage
list_sheets
List all sheets in a spreadsheet:
{
"spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
}
get_schema
Get column headers for a sheet:
{
"spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
"sheetName": "Sheet1"
}
query_rows
Fetch rows from a sheet:
{
"spreadsheetId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
"sheetName": "Sheet1",
"limit": 10,
"offset": 0
}
Finding the Spreadsheet ID
The spreadsheet ID is in the URL of your Google Sheet:
https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit
License
MIT