Google Spreadsheet MCP

Full Google Sheets integration - read, write, format cells, create charts, use formulas, and manage spreadsheets.

Google Sheets MCP Server

A Model Context Protocol (MCP) server providing full Google Sheets functionality. Read, write, format cells, create charts, use formulas, and manage spreadsheets directly from Claude, Cursor, or any MCP-compatible client.

Why I Built This

I created this MCP server for my college assignments, where I frequently work with data in Google Sheets — mostly financial sheets. Tasks like creating charts, writing formulas, formatting tables, and organizing data were repetitive and time-consuming. With this tool, I can automate all of that and focus on what actually matters — logical thinking and analysis — instead of doing the same manual work over and over again. :)

Features

CategoryCapabilities
Cell OperationsRead, write, batch operations, append rows, clear cells
FormulasFull support (=SUM(), =VLOOKUP(), =IF(), etc.)
Sheet ManagementCreate, delete, rename, duplicate sheets
FormattingBold, italic, colors, alignment, column widths, merge cells
ChartsBar, Line, Pie, Column, Area, Scatter charts
Data OperationsSort, find/replace, get last row
SharingShare with users or make public

Quick Start

1. Install

cd /path/to/spreadsheet-mcp
uv sync

2. Google Cloud Setup (Free, One-Time)

  1. Create Project: Go to Google Cloud Console → New Project
  2. Enable APIs:
  3. Create Service Account:
    • Go to APIs & Services → Credentials → Create Credentials → Service Account
    • Download JSON key → Save as credentials/service-account.json
  4. Share Spreadsheets: Share your sheets with the service account email (found in JSON)

3. Run

uv run spreadsheet-mcp

MCP Client Configuration

Claude Desktop

Add to your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "google-sheets": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/spreadsheet-mcp",
        "run",
        "spreadsheet-mcp"
      ]
    }
  }
}

Claude Code (CLI)

Add to your project's .mcp.json file:

{
  "mcpServers": {
    "google-sheets": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/spreadsheet-mcp",
        "run",
        "spreadsheet-mcp"
      ]
    }
  }
}

Cursor

Add to Cursor's MCP settings (Settings → MCP → Add Server):

{
  "mcpServers": {
    "google-sheets": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/spreadsheet-mcp",
        "run",
        "spreadsheet-mcp"
      ]
    }
  }
}

Or add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "google-sheets": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/spreadsheet-mcp",
        "run",
        "spreadsheet-mcp"
      ]
    }
  }
}

Gemini CLI

For Gemini CLI with MCP support, add to your MCP configuration:

{
  "mcpServers": {
    "google-sheets": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/spreadsheet-mcp",
        "run",
        "spreadsheet-mcp"
      ]
    }
  }
}

Using with npx (Alternative)

If you prefer npx over uv:

{
  "mcpServers": {
    "google-sheets": {
      "command": "npx",
      "args": [
        "-y",
        "uv",
        "--directory",
        "/path/to/spreadsheet-mcp",
        "run",
        "spreadsheet-mcp"
      ]
    }
  }
}

Note: Replace /path/to/spreadsheet-mcp with the actual path where you cloned this repository.

Available Tools (27 Total)

Spreadsheet & Sheet Management

ToolDescriptionExample
get_spreadsheet_infoGet metadata and sheet list"Show me info about spreadsheet abc123"
create_spreadsheetCreate new spreadsheet"Create a spreadsheet called 'Budget 2024'"
list_sheetsList all sheets/tabs"What sheets are in this spreadsheet?"
create_sheetAdd a new sheet"Add a sheet called 'Summary'"
delete_sheetRemove a sheet"Delete the sheet with ID 12345"
rename_sheetRename a sheet"Rename sheet 0 to 'Data'"
duplicate_sheetCopy a sheet"Duplicate the main sheet"

Cell Operations

ToolDescriptionExample
read_cellsRead values from range"Read cells A1 to D10 from Sheet1"
write_cellsWrite values (supports formulas)"Write headers Name, Age, Score to A1"
batch_readRead multiple ranges at once"Read A1:A10 and C1:C10"
batch_writeWrite to multiple ranges"Write data to multiple locations"
append_rowsAdd rows at end of data"Append these new records"
clear_cellsClear a range"Clear cells B2:D10"
get_last_rowFind last row with data"What's the last row in column A?"

Row/Column Operations

ToolDescriptionExample
insert_rowsInsert empty rows"Insert 5 rows at row 10"
insert_columnsInsert empty columns"Insert 2 columns at column C"
delete_rowsDelete rows"Delete rows 5-10"
delete_columnsDelete columns"Delete column B"

Formatting

ToolDescriptionExample
format_cellsApply formatting"Make header row bold with blue background"
set_column_widthAdjust column width"Set column A width to 200 pixels"
merge_cellsMerge cell range"Merge cells A1:C1 for title"

Charts

ToolDescriptionExample
create_chartCreate embedded chart"Create a bar chart from sales data"
list_chartsList all charts"What charts exist in this spreadsheet?"
delete_chartRemove a chart"Delete chart 123456"

Data Operations

ToolDescriptionExample
sort_rangeSort data by column"Sort data by column B ascending"
find_replaceFind and replace text"Replace 'N/A' with '0' everywhere"

Sharing

ToolDescriptionExample
share_spreadsheetShare or make public"Make this spreadsheet public"

Usage Examples

Example 1: Create a Sales Report

User: Create a sales report in spreadsheet abc123

Claude will:
1. get_spreadsheet_info("abc123") - Check existing sheets
2. create_sheet("abc123", "Sales Report") - Create new sheet
3. write_cells("abc123", "Sales Report!A1", '[["Product", "Q1", "Q2", "Q3", "Q4", "Total"]]')
4. write_cells("abc123", "Sales Report!A2", '[["Widget", 100, 150, 200, 180, "=SUM(B2:E2)"]]')
5. format_cells(..., bold=True, background_color="#4285F4") - Format header
6. create_chart(..., "COLUMN", "Quarterly Sales") - Add chart

Example 2: Analyze Existing Data

User: Summarize the data in Sheet1

Claude will:
1. read_cells("abc123", "Sheet1!A1:Z1") - Read headers
2. get_last_row("abc123", "Sheet1", "A") - Find data extent
3. read_cells("abc123", "Sheet1!A1:D100") - Read all data
4. Provide summary and insights

Example 3: Format a Table

User: Make the spreadsheet look professional

Claude will:
1. format_cells(..., bold=True, background_color="#1a73e8", font_color="#FFFFFF") - Header
2. set_column_width(..., 150) - Adjust widths
3. format_cells(..., alignment="CENTER") - Center data

A1 Notation Reference

NotationDescription
Sheet1!A1:D10Cells A1 to D10 in Sheet1
Sheet1!A:AEntire column A in Sheet1
Sheet1!1:5Rows 1-5 in Sheet1
A1:B10Range in first visible sheet
'My Sheet'!A1Sheet name with spaces (use quotes)

Index Reference

  • Rows: 0-based in formatting (Row 1 = index 0)
  • Columns: 0-based (A=0, B=1, C=2, D=3...)
  • sheet_id: Numeric ID from list_sheets or get_spreadsheet_info

Common Formulas

=SUM(A1:A10)           Sum values
=AVERAGE(B:B)          Average entire column
=COUNT(A:A)            Count numbers
=COUNTA(A:A)           Count non-empty cells
=MAX(A1:A100)          Maximum value
=MIN(A1:A100)          Minimum value
=VLOOKUP(A1,B:C,2,0)   Lookup value
=IF(A1>100,"High","Low") Conditional
=CONCATENATE(A1," ",B1)  Join text
=TODAY()               Current date
=NOW()                 Current date/time

Troubleshooting

ErrorSolution
"Service account credentials not found"Check credentials/service-account.json exists
"403 Forbidden"Share spreadsheet with service account email
"API not enabled"Enable Sheets & Drive APIs in Google Cloud Console
"Quota exceeded"Wait a minute, you're hitting rate limits

File Structure

spreadsheet-mcp/
├── pyproject.toml
├── README.md
├── credentials/
│   └── service-account.json  (your key, gitignored)
└── src/spreadsheet_mcp/
    ├── __init__.py
    ├── auth.py              # Google authentication
    ├── sheets_client.py     # API wrapper (1000+ lines)
    └── server.py            # MCP server (27 tools)

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Author

License

MIT

Serveurs connexes

NotebookLM Web Importer

Importez des pages web et des vidéos YouTube dans NotebookLM en un clic. Utilisé par plus de 200 000 utilisateurs.

Installer l'extension Chrome