MindmupGoogleDriveMcp

Este servidor permite que você pesquise, recupere e analise arquivos MindMup armazenados no seu Google Drive diretamente através da interface MCP.

Documentação

MindMup2 Google Drive MCP Server

Um servidor Model Context Protocol (MCP) que permite que clientes de IA (Claude Code, Cursor) pesquisem, leiam e explorem MindMup 2 .mup mapas mentais armazenados no Google Drive — sem despejar uma árvore JSON de 3MB no modelo. Mapas grandes são automaticamente resumidos em um esboço de árvore; a IA então explora seções específicas por node_path.

Compatibilidade: Claude Code, Cursor (transporte HTTP). Não suportado: Claude Desktop (somente stdio).

💫 Resultado

ezgif-5b4a0eb3a275f8.gif

✨ Recursos

  • Pesquisar arquivos MindMup em todo o seu Google Drive (somente leitura)
  • Navegação em árvore + exploração de seções para mapas mentais grandes — arquivos pequenos retornam conteúdo completo, arquivos grandes retornam um esboço que você pode explorar
  • Isolamento de cache por cliente via cabeçalho X-Client-Id, para que diferentes usuários/ferramentas não compartilhem conteúdo em cache
  • Modo de desenvolvimento com recarga automática via fastmcp run --reload + fonte montada por bind
  • Servidor FastMCP com endpoints integrados /health e /ping
  • Docker Compose para desenvolvimento e produção

🗺️ Fluxo de Ponta a Ponta

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

🔧 Ferramentas MCP Disponíveis

FerramentaDescrição
list_filesListar arquivos MindMup do Google Drive (pastas e não-.mup filtrados por padrão). Retorna id, name, folder_url, size, modified_time.
read_mindmapLer um arquivo MindMup por file_id ou file_name (um é obrigatório; o nome usa a primeira correspondência parcial). Arquivos pequenos (<100KB AI-dict) retornam content_type: "full". Arquivos grandes retornam content_type: "outline_only" com tree_outline, section_stats e suggested_start_paths.
search_mindmapPesquisar nós por palavra-chave. Parâmetros: file_id, keyword, opcional node_path (escopo de subárvore), max_results=30, normalize_whitespace=True. Retorna nós com node_path, title_preview, breadcrumb, children_count.
get_mindmap_sectionExplorar uma seção por node_path (inteiros separados por pontos, a raiz é 1, ex.: "1.2.3"). Opcionais max_depth, offset=0, limit=0. Retorna content_type: "full" | "outline_only" | "paginated" | "truncated" — alterna automaticamente quando a seção ainda é muito grande.

Fluxo de trabalho sugerido para agentes de IA: list_files → read_mindmap → se outline_only, ou search_mindmap (por palavra-chave) ou get_mindmap_section (por node_path de suggested_start_paths).

🚀 Começando

Pré-requisitos

  • Python 3.12+
  • Docker e docker-compose (necessários para make run-dev-docker / make run-prod) ; Ref. makefile
  • Conta do Google Cloud Platform
  • Um cliente MCP que suporte transporte HTTP (Claude Code ou Cursor)

Configuração da API do Google Drive

EtapaDescriçãoImagem
1Vá para Google Cloud Console e crie um novo projeto (o nível gratuito é suficiente — não é necessário faturamento para a API do Drive).
2Ative a API do Google Drive.
3Crie credenciais de Conta de Serviço:
- "IAM & Admin" → "Service Accounts" → "Create Service Account"
- Nenhuma função no nível do projeto é necessária (o compartilhamento do Drive lida com a autenticação)
- Abra a SA → guia "Keys" → "Add Key" → JSON → baixe o arquivo de chave.
google_service_acc.jpg
4Codifique em Base64 todo o arquivo de chave JSON (veja Referência de Cabeçalho).
⚠️ Adicione o arquivo JSON ao .gitignore — nunca o envie para o repositório.
5Compartilhe sua pasta do Google Drive com a SA:
- Copie o valor de client_email do JSON
- Clique com o botão direito na pasta → Compartilhar → cole o e-mail
- Conceda acesso de Visualizador, desmarque "Notificar pessoas"
- O compartilhamento se propaga para subpastas.
google_drive_share_list2.jpg

Nota sobre escopos: O servidor solicita auth/drive + auth/drive.file. Apesar do escopo amplo, com compartilhamento em nível de pasta Viewer, a SA só pode ler o que você compartilhou. Contas gerenciadas pelo workspace podem bloquear o compartilhamento externo — se isso ocorrer, peça ao seu administrador para permitir o compartilhamento de contas de serviço para o seu domínio.

Executar o Servidor

Docker (recomendado):

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

Python direto (sem Docker):

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

Verificar o Servidor

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

Se você não obtiver success, verifique docker logs <container> (modo Docker) ou stdout (modo Python).

Executar Testes

pip install -r requirements.txt
pytest

Configuração do Cliente MCP

Adicione à configuração do seu cliente MCP (~/.claude/mcp.json para Claude Code, ou suas configurações MCP do 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"
            }
        }
    }
}

Referência de Cabeçalho

CabeçalhoObrigatórioDescrição
X-Google-Credential✅Seu JSON de conta de serviço, codificado em Base64. Use base64encode.org e cole a saída aqui. ⚠️ Base64 é codificação, não criptografia — a configuração do cliente MCP fica em texto puro no disco, então não a sincronize com repositórios públicos / backups em nuvem não criptografados.
X-Client-IdOpcionalUm identificador único por usuário + ferramenta, ex.: shyin-claude-code. Usado como parte da chave de cache (X-Client-Id, credential_hash, file_id) para isolar conteúdo em cache entre clientes. Se omitido, usa default (o cache pode ser compartilhado com outros clientes não configurados) e um aviso é registrado. Formato recomendado: <your-name>-<tool-name>. Use um valor de alta entropia para evitar colisões com outros usuários.

🩺 Solução de Problemas

SintomaCausa provável / correção
health não retorna nada / conexão recusadaServidor não está em execução. Verifique docker ps ou stdout. Porta 9805 já em uso? Edite mcp_deployment/docker-compose-dev.yml para remapear.
Google Drive authentication failedBase64 inválido. Verificação rápida: echo "$CRED" | base64 -d | jq .client_email — deve imprimir o e-mail da SA.
list_files retorna vazio(a) Pasta compartilhada com o e-mail errado — deve corresponder a client_email no JSON. (b) Os arquivos não são .mup — chame com mindmup_only=False para confirmar a visibilidade. (c) A política da organização do workspace bloqueia o compartilhamento externo.
Falha no build do DockerCertifique-se de que o daemon do Docker está em execução. Execute novamente make run-dev-docker.
Alterações não são aplicadas no desenvolvimentoO hot-reload apenas observa o código-fonte Python. Reinicie o contêiner após alterações de dependências ou ambiente.

🏗️ Estrutura do Projeto

Clique 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