Google Spreadsheet MCP

Integración completa de Google Sheets: leer, escribir, formatear celdas, crear gráficos, usar fórmulas y gestionar hojas de cálculo.

Documentación

Google Sheets MCP Server

Un servidor de Model Context Protocol (MCP) que proporciona funcionalidad completa de Google Sheets. Lee, escribe, da formato a celdas, crea gráficos, usa fórmulas y gestiona hojas de cálculo directamente desde Claude, Cursor o cualquier cliente compatible con MCP.

Por qué lo construí

Creé este servidor MCP para mis tareas universitarias, donde trabajo frecuentemente con datos en Google Sheets — principalmente hojas financieras. Tareas como crear gráficos, escribir fórmulas, dar formato a tablas y organizar datos eran repetitivas y consumían tiempo. Con esta herramienta, puedo automatizar todo eso y centrarme en lo que realmente importa — el pensamiento lógico y el análisis — en lugar de hacer el mismo trabajo manual una y otra vez. :)

Características

CategoríaCapacidades
Operaciones de celdasLeer, escribir, operaciones por lotes, añadir filas, limpiar celdas
FórmulasSoporte completo (=SUM(), =VLOOKUP(), =IF(), etc.)
Gestión de hojasCrear, eliminar, renombrar, duplicar hojas
FormatoNegrita, cursiva, colores, alineación, anchos de columna, fusionar celdas
GráficosGráficos de barras, líneas, circular, columnas, área y dispersión
Operaciones de datosOrdenar, buscar/reemplazar, obtener la última fila
CompartirCompartir con usuarios o hacer público

Inicio rápido

1. Instalar

cd /path/to/spreadsheet-mcp
uv sync

2. Configuración de Google Cloud (Gratis, una sola vez)

  1. Crear proyecto: Ir a Google Cloud Console → Nuevo proyecto
  2. Habilitar APIs:
  3. Crear cuenta de servicio:
    • Ir a APIs y Servicios → Credenciales → Crear credenciales → Cuenta de servicio
    • Descargar clave JSON → Guardar como credentials/service-account.json
  4. Compartir hojas de cálculo: Comparte tus hojas con el correo electrónico de la cuenta de servicio (que se encuentra en el JSON)

3. Ejecutar

uv run spreadsheet-mcp

Configuración del cliente MCP

Claude Desktop

Agrega a tu archivo de configuración de Claude Desktop:

  • 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)

Agrega al archivo .mcp.json de tu proyecto:

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

Cursor

Agrega a la configuración de MCP de Cursor (Ajustes → MCP → Agregar servidor):

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

O agrega a ~/.cursor/mcp.json:

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

Gemini CLI

Para Gemini CLI con soporte de MCP, agrega a tu configuración de MCP:

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

Usando con npx (Alternativa)

Si prefieres npx en lugar de uv:

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

Nota: Reemplaza /path/to/spreadsheet-mcp con la ruta real donde clonaste este repositorio.

Herramientas disponibles (27 en total)

Gestión de hojas de cálculo y hojas

HerramientaDescripciónEjemplo
get_spreadsheet_infoObtener metadatos y lista de hojas"Muéstrame información sobre la hoja abc123"
create_spreadsheetCrear nueva hoja de cálculo"Crea una hoja llamada 'Presupuesto 2024'"
list_sheetsListar todas las hojas/pestañas"¿Qué hojas hay en esta hoja de cálculo?"
create_sheetAgregar una nueva hoja"Agrega una hoja llamada 'Resumen'"
delete_sheetEliminar una hoja"Elimina la hoja con ID 12345"
rename_sheetRenombrar una hoja"Renombra la hoja 0 a 'Datos'"
duplicate_sheetCopiar una hoja"Duplica la hoja principal"

Operaciones de celdas

HerramientaDescripciónEjemplo
read_cellsLeer valores de un rango"Lee las celdas A1 a D10 de la Hoja1"
write_cellsEscribir valores (soporta fórmulas)"Escribe encabezados Nombre, Edad, Puntaje en A1"
batch_readLeer múltiples rangos a la vez"Lee A1:A10 y C1:C10"
batch_writeEscribir en múltiples rangos"Escribe datos en varias ubicaciones"
append_rowsAgregar filas al final de los datos"Agrega estos nuevos registros"
clear_cellsLimpiar un rango"Limpia las celdas B2:D10"
get_last_rowEncontrar la última fila con datos"¿Cuál es la última fila en la columna A?"

Operaciones de filas/columnas

HerramientaDescripciónEjemplo
insert_rowsInsertar filas vacías"Inserta 5 filas en la fila 10"
insert_columnsInsertar columnas vacías"Inserta 2 columnas en la columna C"
delete_rowsEliminar filas"Elimina las filas 5-10"
delete_columnsEliminar columnas"Elimina la columna B"

Formato

HerramientaDescripciónEjemplo
format_cellsAplicar formato"Haz que la fila de encabezado esté en negrita con fondo azul"
set_column_widthAjustar ancho de columna"Establece el ancho de la columna A a 200 píxeles"
merge_cellsFusionar rango de celdas"Fusiona las celdas A1:C1 para el título"

Gráficos

HerramientaDescripciónEjemplo
create_chartCrear gráfico incrustado"Crea un gráfico de barras a partir de los datos de ventas"
list_chartsListar todos los gráficos"¿Qué gráficos existen en esta hoja de cálculo?"
delete_chartEliminar un gráfico"Elimina el gráfico 123456"

Operaciones de datos

HerramientaDescripciónEjemplo
sort_rangeOrdenar datos por columna"Ordena los datos por la columna B ascendente"
find_replaceBuscar y reemplazar texto"Reemplaza 'N/A' con '0' en todas partes"

Compartir

HerramientaDescripciónEjemplo
share_spreadsheetCompartir o hacer público"Haz pública esta hoja de cálculo"

Ejemplos de uso

Ejemplo 1: Crear un informe de ventas

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

Ejemplo 2: Analizar datos existentes

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

Ejemplo 3: Dar formato a una tabla

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

Referencia de notación A1

NotaciónDescripción
Sheet1!A1:D10Celdas A1 a D10 en la Hoja1
Sheet1!A:AColumna A completa en la Hoja1
Sheet1!1:5Filas 1-5 en la Hoja1
A1:B10Rango en la primera hoja visible
'My Sheet'!A1Nombre de hoja con espacios (usa comillas)

Referencia de índices

  • Filas: basado en 0 en formato (Fila 1 = índice 0)
  • Columnas: basado en 0 (A=0, B=1, C=2, D=3...)
  • sheet_id: ID numérico de list_sheets o get_spreadsheet_info

Fórmulas comunes

=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

Solución de problemas

ErrorSolución
"Credenciales de cuenta de servicio no encontradas"Verifica que credentials/service-account.json exista
"403 Prohibido"Comparte la hoja de cálculo con el correo de la cuenta de servicio
"API no habilitada"Habilita las APIs de Sheets y Drive en Google Cloud Console
"Cuota excedida"Espera un minuto, estás alcanzando los límites de tasa

Estructura de archivos

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)

Contribuciones

¡Las contribuciones son bienvenidas! No dudes en enviar una solicitud de extracción (Pull Request).

Autor

Licencia

MIT