MindmupGoogleDriveMcp

Este servidor te permite buscar, recuperar y analizar archivos de MindMup almacenados en tu Google Drive directamente a través de la interfaz MCP.

Documentación

Servidor MCP de MindMup2 Google Drive

Un servidor de Model Context Protocol (MCP) que permite a los clientes de IA (Claude Code, Cursor) buscar, leer y profundizar en mapas mentales de MindMup 2 .mup almacenados en Google Drive — sin volcar un árbol JSON de 3MB en el modelo. Los mapas grandes se resumen automáticamente en un esquema de árbol; la IA luego profundiza en secciones específicas mediante node_path.

Compatibilidad: Claude Code, Cursor (transporte HTTP). No compatible: Claude Desktop (solo stdio).

💫 Resultado

ezgif-5b4a0eb3a275f8.gif

✨ Características

  • Buscar archivos MindMup en todo tu Google Drive (solo lectura)
  • Navegación por árbol + profundización en secciones para mapas mentales grandes — los archivos pequeños devuelven el contenido completo, los archivos grandes devuelven un esquema en el que puedes profundizar
  • Aislamiento de caché por cliente mediante el encabezado X-Client-Id, para que diferentes usuarios/herramientas no compartan contenido en caché
  • Modo de desarrollo con recarga en caliente mediante fastmcp run --reload + fuente montada por bind
  • Servidor FastMCP con endpoints integrados /health y /ping
  • Docker Compose para desarrollo y producción

🗺️ Flujo de extremo a extremo

1. Set up Google Cloud service account     →  download JSON key
2. Share your Drive folder with the SA     →  Viewer access
3. Base64-encode the JSON key              →  for X-Google-Credential header
4. Run the server  (Docker or Python)      →  http://127.0.0.1:9805
5. Configure your MCP client (Claude/Cursor) with the base64 credential
6. Verify  →  curl http://127.0.0.1:9805/health

🔧 Herramientas MCP disponibles

HerramientaDescripción
list_filesLista archivos MindMup de Google Drive (carpetas y no-.mup filtrados por defecto). Devuelve id, name, folder_url, size, modified_time.
read_mindmapLee un archivo MindMup por file_id o file_name (se requiere uno; el nombre usa la primera coincidencia parcial). Los archivos pequeños (<100KB AI-dict) devuelven content_type: "full". Los archivos grandes devuelven content_type: "outline_only" con tree_outline, section_stats y suggested_start_paths.
search_mindmapBusca nodos por palabra clave. Parámetros: file_id, keyword, node_path opcional (alcance del subárbol), max_results=30, normalize_whitespace=True. Devuelve nodos con node_path, title_preview, breadcrumb, children_count.
get_mindmap_sectionProfundiza en una sección por node_path (enteros con puntos, la raíz es 1, p. ej. "1.2.3"). Opcionales max_depth, offset=0, limit=0. Devuelve content_type: "full" | "outline_only" | "paginated" | "truncated" — cambia automáticamente cuando la sección sigue siendo demasiado grande.

Flujo de trabajo sugerido para agentes de IA: list_filesread_mindmap → si outline_only, ya sea search_mindmap (por palabra clave) o get_mindmap_section (por node_path de suggested_start_paths).

🚀 Primeros pasos

Requisitos previos

  • Python 3.12+
  • Docker y docker-compose (requeridos para make run-dev-docker / make run-prod); Ref. makefile
  • Cuenta de Google Cloud Platform
  • Un cliente MCP que admita transporte HTTP (Claude Code o Cursor)

Configuración de la API de Google Drive

PasoDescripciónImagen
1Ve a Google Cloud Console y crea un nuevo proyecto (el nivel gratuito es suficiente — no se requiere facturación para la API de Drive).
2Habilita la API de Google Drive.
3Crea credenciales de cuenta de servicio:
- "IAM y Administración" → "Cuentas de servicio" → "Crear cuenta de servicio"
- No se necesita rol a nivel de proyecto (el uso compartido de Drive maneja la autenticación)
- Abre la SA → pestaña "Claves" → "Agregar clave" → JSON → descarga el archivo de clave.
google_service_acc.jpg
4Codifica en base64 todo el archivo de clave JSON (consulta Referencia de encabezados).
⚠️ Agrega el archivo JSON a .gitignore — nunca lo subas al repositorio.
5Comparte tu carpeta de Google Drive con la SA:
- Copia el valor de client_email del JSON
- Haz clic derecho en la carpeta → Compartir → pega el correo
- Otorga acceso de Lector, desmarca "Notificar a las personas"
- El uso compartido se propaga a las subcarpetas.
google_drive_share_list2.jpg

Nota sobre los alcances: El servidor solicita auth/drive + auth/drive.file. A pesar del alcance amplio, con el uso compartido a nivel de carpeta Viewer, la SA solo puede leer lo que has compartido. Las cuentas administradas por Workspace pueden bloquear el uso compartido externo — si es así, pide a tu administrador que permita el uso compartido de cuentas de servicio para tu dominio.

Ejecutar el servidor

Docker (recomendado):

make run-dev-docker   # dev: hot-reload, source bind-mounted
make run-prod         # prod: no reload

Python directo (sin Docker):

pip install -r requirements.txt
python3 run.py
# Optionally: MCP_TRANSPORT=streamable-http python3 run.py

Verificar el servidor

curl http://127.0.0.1:9805/health
# => {"result":"success","time":"...","message":"MCP server is running. ..."}

Si no obtienes success, revisa docker logs <container> (modo Docker) o stdout (modo Python).

Ejecutar pruebas

pip install -r requirements.txt
pytest

Configuración del cliente MCP

Agrega a la configuración de tu cliente MCP (~/.claude/mcp.json para Claude Code, o la configuración MCP de Cursor):

{
    "mcpServers": {
        "mindmup-gdrive": {
            "type": "http",
            "url": "http://127.0.0.1:9805/mcp",
            "headers": {
                "X-Google-Credential": "ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VuXXXXXXXXXXX",
                "X-Client-Id": "shyin-claude-code"
            }
        }
    }
}

Referencia de encabezados

EncabezadoRequeridoDescripción
X-Google-CredentialTu JSON de cuenta de servicio, codificado en base64. Usa base64encode.org y pega el resultado aquí. ⚠️ Base64 es codificación, no cifrado — la configuración del cliente MCP está en texto plano en el disco, así que no la sincronices a repositorios públicos / copias de seguridad en la nube sin cifrar.
X-Client-IdOpcionalUn identificador único por usuario + herramienta, p. ej. shyin-claude-code. Se usa como parte de la clave de caché (X-Client-Id, credential_hash, file_id) para aislar el contenido en caché entre clientes. Si se omite, se recurre a default (la caché puede compartirse con otros clientes sin configurar) y se registra una advertencia. Formato recomendado: <your-name>-<tool-name>. Usa un valor de alta entropía para evitar colisiones con otros usuarios.

🩺 Solución de problemas

SíntomaCausa probable / solución
health no devuelve nada / conexión rechazadaEl servidor no está en ejecución. Revisa docker ps o stdout. ¿El puerto 9805 ya está en uso? Edita mcp_deployment/docker-compose-dev.yml para reasignarlo.
Google Drive authentication failedBase64 no válido. Verificación rápida: echo "$CRED" | base64 -d | jq .client_email — debería imprimir el correo de la SA.
list_files devuelve vacío(a) La carpeta se compartió con el correo incorrecto — debe coincidir con client_email en el JSON. (b) Los archivos no son .mup — llama con mindmup_only=False para confirmar la visibilidad. (c) La política de la organización de Workspace bloquea el uso compartido externo.
La compilación de Docker fallaAsegúrate de que el daemon de Docker esté en ejecución. Vuelve a ejecutar make run-dev-docker.
Los cambios no se reflejan en desarrolloLa recarga en caliente solo observa el código fuente de Python. Reinicia el contenedor después de cambios de dependencias o entorno.

🏗️ Estructura del proyecto

Haz clic para expandir
├── mcp_deployment/
│   ├── docker-compose-dev.yml
│   ├── docker-compose-prod.yml
│   └── Dockerfile
├── src/
│   ├── core/
│   │   ├── gdrive_client.py    # Google Drive API client
│   │   ├── gdrive_feature.py   # Google Drive feature implementation
│   │   ├── mcp_server.py       # Main MCP server with read tools
│   │   └── mindmup_parser.py   # MindMup parsing + tree navigation
│   ├── model/
│   │   ├── common_model.py     # Common data models
│   │   ├── gdrive_model.py     # Google Drive data models
│   │   └── mindmup_model.py    # Mind map data models (with to_ai_dict)
│   └── utility/
│       ├── enum.py             # Enumerations and constants
│       └── logger.py           # Logging utilities
├── tests/                      # Unit tests
├── plans/                      # Implementation plans
├── run.py                      # Main entry point
├── requirements.txt            # Python dependencies
└── makefile                    # Build and deployment commands