This server provides read-only access to multiple Google Drive accounts through the Model Context Protocol (MCP), offering comprehensive file management and content extraction capabilities.
Account Management:
List, add, and remove multiple Google Drive accounts using service account JSON authentication
File Operations:
List files with filtering by drive, folder, modification date, MIME type, and pagination support
Search files by name within specific drives
Recursive scanning to traverse folder hierarchies up to specified depths with optional filters
Extract content from Google Docs (plain text), Google Sheets (CSV), Google Slides, and text files (TXT, Markdown)
Key Features:
Read-only operations using Google Drive API with drive.readonly scope
Secure authentication via optional API key (query parameter or X-API-Key header)
Modern StreamableHTTP transport with stateless architecture for multiple concurrent clients
Docker-ready deployment with configurable ports for VPS environments
Access to comprehensive metadata including file IDs, names, MIME types, modification dates, sizes, and web links
Uses Google Cloud Console for service account creation and Google Drive API authentication to enable secure multi-account Drive access
Allows reading and exporting Google Docs content as plain text through the Google Drive integration
Provides read-only access to Google Drive with multi-account support, enabling file listing, searching, content extraction, and management of Google Workspace documents across multiple Drive accounts
Enables access to Google Sheets data with CSV export functionality through the Google Drive integration
Provides access to Google Slides presentations through the Google Drive integration
Google Drive MCP Server
Servidor MCP (Model Context Protocol) modernizado para gestión de múltiples cuentas de Google Drive con acceso de solo lectura.
🎯 Características
✅ StreamableHTTP Transport: Arquitectura stateless HTTP moderna (reemplaza SSE deprecado)
✅ MCP SDK v1.19.1: Usando McpServer high-level API con validación automática
✅ Multi-cliente: Múltiples clientes pueden conectarse simultáneamente (stateless)
✅ Puerto configurable: Ideal para VPS con múltiples servicios MCP
✅ Multi-cuenta: Gestiona múltiples cuentas de Google Drive simultáneamente
✅ 7 Herramientas MCP: Incluyendo listado recursivo de carpetas
✅ Arquitectura modular: Tools organizadas en módulos independientes
✅ Autenticación segura: Query parameter o header API key
✅ Operaciones de archivos: Listar, buscar, recursivo y obtener contenido
✅ Soporta Google Workspace: Docs, Sheets, Slides
✅ Archivos de texto: TXT, Markdown
✅ Logging estructurado: Winston con múltiples niveles
✅ Validación robusta: Zod schemas en todas las herramientas
✅ Path alias @/: Imports absolutos desde
src/✅ Oxlint + Prettier: Linting ultrarrápido y formato consistente
✅ Docker-ready: Configuración lista para deployment en VPS
📁 Estructura del Proyecto
🚀 Instalación y Deployment
Desarrollo Local
Producción con Docker
VPS con Múltiples MCPs
Para ejecutar varios servidores MCP en el mismo VPS, configura diferentes puertos:
⚙️ Configuración
1. Service Account de Google
Crear proyecto en Google Cloud Console
Habilitar Google Drive API
Crear Service Account y descargar JSON
Compartir carpetas/archivos de Drive con el email del Service Account
Guardar JSON en
credentials/
2. Archivo de Configuración
El servidor usa drives-config.json para gestionar cuentas:
Nota: El archivo se crea automáticamente vacío si no existe. Usa la herramienta add_drive para agregar cuentas.
3. Variables de Entorno
🛠️ Herramientas MCP
El servidor expone 7 herramientas vía protocolo MCP:
Gestión de Drives
list_drives
Lista todas las cuentas de Google Drive configuradas.
Parámetros: Ninguno
Respuesta:
add_drive
Agrega una nueva cuenta de Google Drive a la configuración.
Parámetros:
driveId(string, requerido): ID único (ej: 'personal', 'work')name(string, requerido): Nombre descriptivodescription(string, opcional): Descripción de la cuentaserviceAccountPath(string, requerido): Ruta al archivo JSON de Service Account
Ejemplo:
remove_drive
Elimina una cuenta de Drive de la configuración.
Parámetros:
driveId(string, requerido): ID del Drive a eliminar
Operaciones de Archivos
list_files
Lista archivos de Google Drive con filtros opcionales.
Parámetros:
driveId(string, opcional): ID del Drive (usa el primero si se omite)folderId(string, opcional): ID de carpeta específicamodifiedAfter(string, opcional): Fecha ISO 8601modifiedBefore(string, opcional): Fecha ISO 8601mimeType(string, opcional): Tipo MIME específicopageSize(number, opcional): Límite de resultados (default: 100)
Respuesta:
get_file_content
Obtiene el contenido de un archivo de Google Drive.
Soporta:
Google Docs → exporta como texto plano
Google Sheets → exporta como CSV
Archivos de texto (.txt, .md) → descarga directa
Parámetros:
fileId(string, requerido): ID del archivodriveId(string, opcional): ID del Drive
Respuesta:
search_files
Busca archivos por nombre en un Drive específico.
Parámetros:
driveId(string, requerido): ID del Drive donde buscarquery(string, requerido): Texto a buscar en nombres de archivo
Respuesta:
list_files_recursive 🆕
Lista recursivamente todos los archivos y subcarpetas dentro de una carpeta con filtros opcionales por fecha y tipo, ideal para escaneos diarios de documentos modificados.
Parámetros:
folderId(string, requerido): ID de la carpeta raíz desde donde iniciardriveId(string, opcional): ID del Drive (usa el primero si se omite)maxDepth(number, opcional): Profundidad máxima de recursión (default: 10)modifiedAfter(string, opcional): Filtrar archivos modificados después de esta fecha (formato RFC 3339:2024-10-17T08:00:00o2024-10-17T08:00:00Zpara UTC)mimeType(string, opcional): Filtrar por tipo MIME específico (ej:application/vnd.google-apps.documentpara Google Docs,application/pdfpara PDFs)
Respuesta:
Características:
✅ Filtros opcionales: Por fecha de modificación y tipo MIME
✅ Exploración completa: Las carpetas siempre se recorren, filtros aplican solo a archivos
✅ Búsqueda recursiva: DFS (Depth-First Search) en toda la jerarquía
✅ Metadatos completos: ID, nombre, ruta completa, fecha, tipo, tamaño
✅ Campo : Nivel de anidación (0 = raíz)
✅ Campo : Ruta completa desde carpeta inicial
✅ Protección: Límite
maxDepthpreviene recursión infinita✅ Optimizado: Doble query para carpetas + archivos filtrados
✅ Google Drive API: Límite de 1000 items por nivel
Caso de uso típico (escaneo diario):
🌐 Endpoints HTTP
El servidor expone los siguientes endpoints:
Health Check
Conexión MCP (StreamableHTTP)
Nota sobre SSE: El transporte SSE (Server-Sent Events) está deprecado en MCP SDK v1.19+. Use StreamableHTTP.
🔌 Conectar desde Cliente
Opción 1: StreamableHTTP (Recomendado) 🆕
Transport moderno stateless para cualquier aplicación:
Opción 2: Cliente NestJS (Orquestador)
Recomendado para aplicaciones que necesitan múltiples MCPs:
📚 Ver guía completa: docs/NESTJS-CLIENT.md
Características del Cliente
✅ CORS habilitado: Funciona desde cualquier dominio
✅ API Key dual: Via query parameter
?apiKey=...(recomendado) o headerX-API-Key✅ Stateless: No mantiene sesiones, ideal para Docker/Kubernetes
✅ Multi-cliente: Múltiples clientes pueden conectarse simultáneamente
✅ Retry automático: SDK maneja reconexiones
🔒 Seguridad
Solo lectura: Service Account con scope
drive.readonlyAutenticación opcional: Soporta API key via header
X-API-KeyCORS configurado: Permite conexiones desde clientes externos
Validación robusta: Esquemas Zod para todos los inputs
Logging seguro: No expone credenciales en logs
Autenticación con API Key
1. Configurar API key en servidor:
2. Enviar desde cliente:
3. Comportamiento:
✅ Si
MCP_API_KEYNO está configurado → Acceso libre (desarrollo)🔒 Si
MCP_API_KEYestá configurado → Requiere headerX-API-Key
Seguridad en Producción (VPS)
⚠️ Importante: Este servidor usa HTTP sin cifrado. Para producción:
Reverse Proxy con SSL (nginx/traefik)
Firewall: Restringir acceso por IP
Rate Limiting: Prevenir abuso
API Key: Habilitar autenticación
Ejemplo nginx con SSL:
CORS en Producción
Por defecto, CORS permite cualquier origen (*). Para producción, restringe dominios:
📊 Logging
El servidor genera logs estructurados en JSON:
Consola: Formato colorizado para desarrollo
error.log: Solo errores críticos
combined.log: Todos los niveles
Configurar nivel via LOG_LEVEL env variable.
🐳 Docker
Docker Compose (Recomendado)
Docker Manual
Múltiples Instancias en VPS
🧪 Desarrollo y Testing
Tests Disponibles
El proyecto incluye 3 tests completos en la carpeta tests/:
test-mcp-client.ts: Conexión general y herramientas básicas
test-recursive.ts: Validación de listado recursivo (166 items en estructura COMNET)
test-drive.ts: Pruebas directas con Google Drive API
📚 Ver documentación completa: tests/README.md
📊 Monitoreo
🏗️ Arquitectura Técnica
Transport Layer
StreamableHTTP: Transport moderno stateless (HTTP-based)
Deprecado: SSE (Server-Sent Events) - removido en v2.0.0
Ventajas: Sin estado, escalable, compatible con proxies/load balancers
MCP SDK
Version: 1.19.1
API: McpServer high-level (reemplaza Server low-level)
Validación: Zod schemas automáticos en inputSchema/outputSchema
Registro:
server.registerTool(name, config, handler)
Herramientas Modularizadas
Path Aliases
Nota: Los imports usan extensión .js aunque los archivos sean .ts (requisito de TypeScript ESM con "module": "NodeNext")
📝 Tipos MIME Soportados
Google Workspace
application/vnd.google-apps.document- Google Docsapplication/vnd.google-apps.spreadsheet- Google Sheetsapplication/vnd.google-apps.presentation- Google Slides
Archivos de Texto
text/plain- Texto planotext/markdown- Markdown
Formatos de Exportación
text/plain- Docs exportadostext/csv- Sheets exportados
🤝 Contribuir
Fork el repositorio
Crea una rama para tu feature (
git checkout -b feature/amazing-feature)Commit tus cambios (
git commit -m 'Add amazing feature')Push a la rama (
git push origin feature/amazing-feature)Abre un Pull Request
📄 Licencia
Este proyecto está bajo licencia MIT.
🆘 Troubleshooting
Servidor no inicia
Error: "Service account file not found"
Verifica que el archivo JSON existe en la ruta especificada
En Docker, asegúrate de montar el volumen correctamente:
-v $(pwd)/keys:/app/keys:ro
Error: "Unauthorized: Invalid API key"
Verifica que
MCP_API_KEYesté configurado en el servidorEl API key debe enviarse en el header
X-API-Key(no en_meta.apiKey)Formato correcto:
headers: { "X-API-Key": "tu-api-key" }
No se pueden leer archivos
Verifica que el Service Account tenga acceso (compartido con su email)
Confirma que el scope sea
drive.readonlyRevisa permisos de la carpeta/archivo en Drive
Cliente no puede conectar (VPS)
Logs no aparecen
Configura
LOG_LEVEL=debugpara ver más detallesVerifica permisos de escritura en la carpeta del proyecto
En Docker:
docker-compose logs -f mcp-drive
Alto uso de memoria
Ajusta límites en
docker-compose.yml:deploy: resources: limits: memory: 256M