MCP Hub
Back to servers

mcp-spreadsheets

MCP Server for Google Sheets & PostgreSQL - Implements MCP 2025-11-25 with Resources, Prompts, Tasks and Skills

glama
Updated
Jan 31, 2026

MCP Spreadsheets

Servidor MCP (Model Context Protocol) para control total de Google Sheets desde Claude Code.

Descripción

Este MCP permite manipular spreadsheets de Google directamente desde Claude Code sin necesidad de escribir scripts. Cada operación se ejecuta en segundos mediante comandos directos.

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   Claude Code   │────▶│  MCP Server     │────▶│  Google Sheets  │
│   (tu prompt)   │     │  (siempre on)   │     │  API v4         │
└─────────────────┘     └─────────────────┘     └─────────────────┘

Instalación

1. Instalar dependencias

cd mcp-spreadsheets
npm install
npm run build

2. Configurar credenciales

Copia tu archivo de credenciales de Google Service Account a la carpeta:

cp /ruta/a/tu/service-account.json ./credentials.json

O configura variables de entorno:

export GOOGLE_SERVICE_ACCOUNT_PATH=/ruta/a/credentials.json

3. Registrar en Claude Code

Agrega a tu archivo de configuración de Claude Code (~/.claude.json o settings.json):

{
  "mcpServers": {
    "spreadsheets": {
      "command": "node",
      "args": ["/ruta/completa/a/mcp-spreadsheets/dist/index.js"],
      "env": {
        "GOOGLE_SERVICE_ACCOUNT_PATH": "/ruta/a/credentials.json"
      }
    }
  }
}

Categorías y Tools

Datos

Operaciones de lectura y escritura de datos.

ToolDescripciónParámetros
sheets_read_rangeLee datos de un rangospreadsheetId, sheetName, range
sheets_write_rangeEscribe datos en un rangospreadsheetId, sheetName, range, values
sheets_append_rowsAgrega filas al finalspreadsheetId, sheetName, rows
sheets_delete_rowsElimina filasspreadsheetId, sheetName, startIndex, count
sheets_get_rowsObtiene filas como objetosspreadsheetId, sheetName, limit?

Ejemplos:

// Leer datos
sheets_read_range(spreadsheetId: "abc123", sheetName: "Ventas", range: "A1:D10")

// Escribir datos
sheets_write_range(spreadsheetId: "abc123", sheetName: "Ventas", range: "A1", values: [["Nombre", "Precio"], ["Producto 1", 100]])

// Agregar filas
sheets_append_rows(spreadsheetId: "abc123", sheetName: "Ventas", rows: [{Nombre: "Producto 2", Precio: 200}])

Formato

Aplicar estilos visuales a celdas.

ToolDescripciónParámetros
sheets_format_rangeAplica formato a celdasspreadsheetId, sheetName, range, backgroundColor?, textColor?, bold?, italic?, fontSize?, horizontalAlignment?
sheets_clear_formatLimpia todo el formatospreadsheetId, sheetName, range

Ejemplos:

// Poner fondo verde y texto blanco en negrita
sheets_format_range(
  spreadsheetId: "abc123",
  sheetName: "Ventas",
  range: "A1:D1",
  backgroundColor: "#00ff00",
  textColor: "#ffffff",
  bold: true
)

// Limpiar formato
sheets_clear_format(spreadsheetId: "abc123", sheetName: "Ventas", range: "A2:D100")

Formato Condicional

Reglas automáticas que cambian el formato según condiciones.

ToolDescripciónParámetros
sheets_get_conditional_rulesLista todas las reglasspreadsheetId, sheetName
sheets_add_conditional_ruleAgrega una reglaspreadsheetId, sheetName, formula, backgroundColor?, textColor?, bold?, priority?
sheets_delete_conditional_ruleElimina una regla por índicespreadsheetId, sheetName, index
sheets_clear_conditional_rulesElimina TODAS las reglasspreadsheetId, sheetName

Ejemplos:

// Ver reglas existentes
sheets_get_conditional_rules(spreadsheetId: "abc123", sheetName: "Reservas")

// Agregar regla: si Canal = "airbnb", fondo verde
sheets_add_conditional_rule(
  spreadsheetId: "abc123",
  sheetName: "Reservas",
  formula: '=LOWER($J2)="airbnb"',
  backgroundColor: "#ccffcc",
  priority: 0
)

// Agregar regla: si Total = 0, fondo amarillo
sheets_add_conditional_rule(
  spreadsheetId: "abc123",
  sheetName: "Reservas",
  formula: '=AND(LEN($A2)>0,$V2=0)',
  backgroundColor: "#ffffcc",
  priority: 1
)

// Eliminar regla índice 0
sheets_delete_conditional_rule(spreadsheetId: "abc123", sheetName: "Reservas", index: 0)

// Limpiar todas las reglas
sheets_clear_conditional_rules(spreadsheetId: "abc123", sheetName: "Reservas")

Hojas

Gestión de hojas dentro del spreadsheet.

ToolDescripciónParámetros
sheets_list_sheetsLista todas las hojasspreadsheetId
sheets_create_sheetCrea nueva hojaspreadsheetId, title, headers?
sheets_delete_sheetElimina una hojaspreadsheetId, sheetName
sheets_rename_sheetRenombra una hojaspreadsheetId, oldName, newName
sheets_duplicate_sheetDuplica una hojaspreadsheetId, sheetName, newName
sheets_hide_sheetOculta/muestra hojaspreadsheetId, sheetName, hidden

Ejemplos:

// Ver todas las hojas
sheets_list_sheets(spreadsheetId: "abc123")

// Crear hoja con headers
sheets_create_sheet(
  spreadsheetId: "abc123",
  title: "Reporte Mensual",
  headers: ["Fecha", "Ventas", "Gastos", "Ganancia"]
)

// Duplicar hoja
sheets_duplicate_sheet(spreadsheetId: "abc123", sheetName: "Plantilla", newName: "Enero 2024")

// Ocultar hoja
sheets_hide_sheet(spreadsheetId: "abc123", sheetName: "Datos Internos", hidden: true)

Celdas

Operaciones sobre celdas individuales o rangos.

ToolDescripciónParámetros
sheets_merge_cellsCombina celdasspreadsheetId, sheetName, range
sheets_unmerge_cellsSepara celdas combinadasspreadsheetId, sheetName, range
sheets_freeze_rowsCongela filas superioresspreadsheetId, sheetName, count
sheets_freeze_columnsCongela columnas izquierdasspreadsheetId, sheetName, count
sheets_set_column_widthAjusta ancho de columnaspreadsheetId, sheetName, column, width
sheets_set_row_heightAjusta altura de filaspreadsheetId, sheetName, row, height

Ejemplos:

// Combinar celdas para título
sheets_merge_cells(spreadsheetId: "abc123", sheetName: "Reporte", range: "A1:D1")

// Congelar primera fila (headers)
sheets_freeze_rows(spreadsheetId: "abc123", sheetName: "Datos", count: 1)

// Ajustar ancho de columna A a 200px
sheets_set_column_width(spreadsheetId: "abc123", sheetName: "Datos", column: "A", width: 200)

Validación

Restricciones y listas desplegables.

ToolDescripciónParámetros
sheets_add_dropdownAgrega lista desplegablespreadsheetId, sheetName, range, options
sheets_remove_validationElimina validaciónspreadsheetId, sheetName, range

Ejemplos:

// Agregar dropdown de estados
sheets_add_dropdown(
  spreadsheetId: "abc123",
  sheetName: "Tareas",
  range: "C2:C100",
  options: ["Pendiente", "En Progreso", "Completado", "Cancelado"]
)

// Quitar validación
sheets_remove_validation(spreadsheetId: "abc123", sheetName: "Tareas", range: "C2:C100")

Filtros

Activar y desactivar filtros automáticos.

ToolDescripciónParámetros
sheets_set_filterActiva filtro en rangospreadsheetId, sheetName, range
sheets_clear_filterElimina filtrospreadsheetId, sheetName

Ejemplos:

// Activar filtro en tabla
sheets_set_filter(spreadsheetId: "abc123", sheetName: "Ventas", range: "A1:F100")

// Quitar filtro
sheets_clear_filter(spreadsheetId: "abc123", sheetName: "Ventas")

Protección

Proteger rangos contra edición accidental.

ToolDescripciónParámetros
sheets_protect_rangeProtege un rangospreadsheetId, sheetName, range, description

Ejemplos:

// Proteger fórmulas
sheets_protect_range(
  spreadsheetId: "abc123",
  sheetName: "Calculadora",
  range: "E1:E100",
  description: "Columna de fórmulas - No editar"
)

Info

Información general del spreadsheet.

ToolDescripciónParámetros
sheets_get_infoInfo del spreadsheetspreadsheetId

Ejemplos:

// Ver información
sheets_get_info(spreadsheetId: "abc123")
// Retorna: { title, locale, timeZone, sheets: [...] }


Base de Datos (Reservas)

Consultas directas a PostgreSQL para obtener información de reservas.

ToolDescripciónParámetros
db_get_reservas_futurasReservas futuras de Pa'Cartagena-
db_get_tours_tercerosReservas de Tours y Terceros-
db_get_reserva_by_idBuscar reserva por IDbookingId
db_count_reservasContar reservas (total, futuras, tours)-
db_get_reservas_por_fechaReservas entre dos fechasdesde, hasta
db_get_reservas_por_canalReservas de un canalcanal
db_get_estadisticas_canalesEstadísticas por canal-

Ejemplos:

// ¿Hay tours esta semana?
db_get_tours_terceros()

// ¿Cuántas reservas de Airbnb hay?
db_get_reservas_por_canal(canal: "airbnb")

// Estadísticas generales
db_count_reservas()
// Retorna: { total: 2536, futuras: 107, tours: 1 }

// Reservas de febrero
db_get_reservas_por_fecha(desde: "2026-02-01", hasta: "2026-02-28")

Nota: Requiere configurar DATABASE_URL en el entorno.


Resumen de Categorías

CategoríaToolsDescripción
Datos5Leer, escribir, insertar, eliminar filas
Formato2Colores, fuentes, negrita, alineación
Formato Condicional4Reglas automáticas por fórmula
Hojas6Crear, eliminar, renombrar, duplicar, ocultar
Celdas6Merge, freeze, ancho/alto
Validación2Dropdowns, restricciones
Filtros2Activar/desactivar filtros
Protección1Proteger rangos
Info1Información del spreadsheet
Base de Datos7Consultar reservas de PostgreSQL
TOTAL36 tools

Flujo de Uso

Antes (con scripts)

Usuario pide cambio
    → Desarrollador edita código
    → Compila
    → Ejecuta
    → Verifica resultado
    ≈ 2-5 minutos

Ahora (con MCP)

Usuario pide cambio
    → Claude invoca tool
    → Resultado inmediato
    ≈ 2-5 segundos

Notas Técnicas

  • Autenticación: Service Account de Google (no requiere OAuth interactivo)
  • API: Google Sheets API v4
  • Protocolo: Model Context Protocol (MCP) sobre stdio
  • Caché: Los documentos se cachean para evitar re-cargas innecesarias

Requisitos

  • Node.js 18+
  • Service Account de Google Cloud con permisos de Sheets
  • El spreadsheet debe estar compartido con el email del Service Account

Licencia

MIT

Reviews

No reviews yet

Sign in to write a review