matty-v

Google Sheets MCP Server

Community matty-v
Updated

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

  1. A Google Cloud project with the Sheets API enabled
  2. A service account with access to the spreadsheets you want to query
  3. 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

MCP Server ยท Populars

MCP Server ยท New

    YV17labs

    ghostdesk

    Give any AI agent a full desktop โ€” it sees the screen, clicks, types, and runs apps like a human. Automate anything with a UI: browsers, legacy software, internal tools. No API needed. One Docker command.

    Community YV17labs
    remotebrowser

    mcp

    Free your data

    Community remotebrowser
    Decodo

    Decodo MCP Server

    The Decodo MCP server which enables MCP clients to interface with services.

    Community Decodo
    kuberstar

    Qartez MCP

    Semantic code intelligence MCP server for Claude Code - project maps, symbol search, impact analysis, and more

    Community kuberstar
    aovestdipaperino

    tokensave

    Rust port of CodeGraph โ€” a local-first code intelligence system that builds semantic knowledge graphs from codebases. Ported from the original TypeScript implementation by @colbymchenry.

    Community aovestdipaperino