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

✨ 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
/healthe/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
| Ferramenta | Descrição |
|---|---|
list_files | Listar arquivos MindMup do Google Drive (pastas e não-.mup filtrados por padrão). Retorna id, name, folder_url, size, modified_time. |
read_mindmap | Ler 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_mindmap | Pesquisar 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_section | Explorar 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
| Etapa | Descrição | Imagem |
|---|---|---|
| 1 | Vá para Google Cloud Console e crie um novo projeto (o nível gratuito é suficiente — não é necessário faturamento para a API do Drive). | |
| 2 | Ative a API do Google Drive. | |
| 3 | Crie 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. | ![]() |
| 4 | Codifique 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. | |
| 5 | Compartilhe 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. | ![]() |
Nota sobre escopos: O servidor solicita
auth/drive+auth/drive.file. Apesar do escopo amplo, com compartilhamento em nível de pastaViewer, 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çalho | Obrigatório | Descriçã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-Id | Opcional | Um 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
| Sintoma | Causa provável / correção |
|---|---|
health não retorna nada / conexão recusada | Servidor 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 failed | Base64 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 Docker | Certifique-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 desenvolvimento | O 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

