fix: 3 schema bugs + add comprehensive testing documentation

Bug Fixes:
- auth.ts: Remove non-existent ap.updatedAt column
- subscriptions.ts: Add LIMIT 25 to prevent 136KB+ responses
- collections.ts: Remove documentStructure from list (use get for full)

Documentation:
- TESTING-GUIDE.md: Complete 164-tool reference with test status
- CONTINUE.md: Updated with verification status and MCP loading issue
- CHANGELOG.md: Document fixes and Round 1-2 test results

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-31 17:53:44 +00:00
parent 15c6c5a24f
commit 2808d4aec0
8 changed files with 871 additions and 393 deletions

View File

@@ -1,427 +1,363 @@
# Prompt de Continuação - MCP Outline PostgreSQL
# MCP Outline PostgreSQL - Continuacao de Testes
**Ultima Sessao:** 2026-01-31
**Versao Actual:** 1.3.5
**Progresso:** ~67/164 tools testadas (41%)
---
## Estado Actual
**MCP Outline PostgreSQL v1.3.1** - PRODUÇÃO CONFIGURADA
### O Que Foi Feito
- 164 tools implementadas em 33 módulos
- Conectado a **hub.descomplicar.pt** (448 documentos)
- Build passa sem erros
- Multi-transport: stdio + HTTP
- Security hardened (v1.2.2-v1.2.5)
1. **Infraestrutura de Testes Jest** (v1.3.4)
- 209 testes unitarios criados e a passar
- Cobertura: security, validation, pagination, query-builder, tools-structure
## Configuração Actual
2. **Testes MCP Round 1 & 2** (v1.3.5)
- Todas as operacoes de leitura (list/get) testadas
- Todas as ferramentas de search e analytics testadas
- 3 bugs encontrados e corrigidos
**Produção:** hub.descomplicar.pt via túnel SSH
3. **Verificacao Bugs Corrigidos** (sessao actual - 31 Jan)
- Codigo fonte verificado - todas as correccoes confirmadas
- Testes unitarios passam (209/209)
- HTTP server inicia correctamente com 164 tools
### Bugs Corrigidos
| Bug | Ficheiro | Problema | Solucao | Verificado |
|-----|----------|----------|---------|------------|
| 1 | `src/tools/auth.ts` | `column ap.updatedAt does not exist` | Removida coluna inexistente da query | ✅ Linha 98-109 |
| 2 | `src/tools/subscriptions.ts` | Retorna TODAS as subscriptions (136KB+) | Adicionado `LIMIT 25` e count separado | ✅ Linha 59-60 |
| 3 | `src/tools/collections.ts` | `documentStructure` incluido na listagem (130KB+) | Removido campo da query list | ✅ Linha 39-45 |
### Servidor MCP - PROBLEMA
**PROBLEMA:** O servidor MCP nao esta a carregar no Claude Code.
**Causa identificada:** `hasTrustDialogAccepted: false` na configuracao do projecto em `~/.claude.json`
```json
"outline-postgresql": {
"command": "node",
"args": ["/home/ealmeida/mcp-servers/mcp-outline-postgresql/dist/index.js"],
"env": {
"DATABASE_URL": "postgres://postgres:***@localhost:5433/descomplicar",
"LOG_LEVEL": "error"
}
"/home/ealmeida/mcp-servers/mcp-outline-postgresql": {
"hasTrustDialogAccepted": false, // <-- Precisa ser aceite
...
}
```
## ANTES DE COMEÇAR
**Solucao:**
1. Reiniciar Claude Code neste projecto
2. Aceitar o dialogo de confianca quando aparecer
3. As tools MCP ficarao disponiveis na lista de ferramentas diferidas
**Teste alternativo (HTTP):**
```bash
# Iniciar servidor HTTP (funciona independente do Claude Code)
DATABASE_URL="postgres://postgres:9817e213507113fe607d@localhost:5433/descomplicar" \
LOG_LEVEL=error node dist/index-http.js &
# Verificar health
curl http://localhost:3200/health
curl http://localhost:3200/stats
```
---
## Proximos Passos
### Round 3: Write Operations (Prioridade Alta)
Testar operacoes de criacao e actualizacao com dados de teste.
#### Documents (7 tools por testar)
```javascript
// Criar documento de teste
create_document({
title: "Teste MCP - Documento",
collection_id: "951a06ff-d500-4714-9aa0-6b9f9c34318a", // Planeamento-v2
text: "# Documento de Teste\n\nCriado via MCP para validacao."
})
// Actualizar documento
update_document({
id: "<doc-id>",
title: "Teste MCP - Actualizado",
text: "# Conteudo actualizado"
})
// Arquivar/restaurar
archive_document({ id: "<doc-id>" })
restore_document({ id: "<doc-id>" })
// Mover documento
move_document({
id: "<doc-id>",
collection_id: "<target-collection>"
})
```
#### Collections (5 tools por testar)
```javascript
// Criar collection de teste
create_collection({
name: "Teste-MCP",
description: "Collection criada via MCP"
})
// Actualizar
update_collection({
id: "<collection-id>",
name: "Teste-MCP-Renamed"
})
// Memberships
add_user_to_collection({ collection_id: "<id>", user_id: "<id>" })
remove_user_from_collection({ collection_id: "<id>", user_id: "<id>" })
```
#### Users (5 tools por testar)
```javascript
// Nao criar utilizadores reais - testar apenas com utilizador existente
// User ID: e46960fd-ac44-4d32-a3c1-bcc10ac75afe (Emanuel Almeida)
// Testar update (cuidado - dados reais)
outline_update_user({
id: "e46960fd-ac44-4d32-a3c1-bcc10ac75afe",
name: "Emanuel Almeida" // mesmo valor para nao alterar
})
```
#### Groups (5 tools por testar)
```javascript
// Criar grupo de teste
outline_create_group({ name: "Teste-MCP-Group" })
// Adicionar utilizador
outline_add_user_to_group({
group_id: "<group-id>",
user_id: "e46960fd-ac44-4d32-a3c1-bcc10ac75afe"
})
```
### Round 4: Delete Operations (Cuidado)
Testar soft deletes com entidades de teste criadas no Round 3.
```javascript
// Apagar documento de teste
delete_document({ id: "<test-doc-id>" })
// Apagar collection de teste (deve estar vazia)
delete_collection({ id: "<test-collection-id>" })
// Apagar grupo de teste
outline_delete_group({ id: "<test-group-id>" })
```
### Round 5: Edge Cases
```javascript
// UUIDs invalidos
get_document({ id: "invalid-uuid" })
get_document({ id: "" })
// IDs inexistentes
get_document({ id: "00000000-0000-0000-0000-000000000000" })
// Limites de paginacao
list_documents({ limit: 0 })
list_documents({ limit: 1000 })
list_documents({ offset: -1 })
// Queries vazias
search_documents({ query: "" })
outline_search_documents_advanced({ query: "*" })
```
---
## Tools Por Testar (97 restantes)
### Operacoes de Escrita
| Modulo | Tools | Prioridade |
|--------|-------|------------|
| Documents | create, update, archive, restore, move, unpublish, templatize, export, import, add_user, remove_user | Alta |
| Collections | create, update, delete, add_user, remove_user, add_group, remove_group, export, export_all | Alta |
| Users | create, update, delete, suspend, activate, promote, demote | Media |
| Groups | create, update, delete, add_user, remove_user | Media |
| Comments | create, update, delete, resolve | Media |
| Shares | create, update, revoke | Media |
| Stars | create, delete | Baixa |
| Pins | create, delete | Baixa |
| Views | create | Baixa |
| Reactions | create, delete | Baixa |
| API Keys | create, update, delete | Baixa |
| Webhooks | create, update, delete | Baixa |
| Notifications | mark_read, mark_all_read | Baixa |
| Subscriptions | subscribe, unsubscribe | Baixa |
| Templates | create_from, convert_to, convert_from | Media |
| Imports | create, cancel | Baixa |
| Emojis | create, delete | Baixa |
| User Permissions | grant, revoke | Media |
| Bulk Operations | archive, delete, move, restore, add_users, remove_users | Alta |
| Export/Import | export_markdown, import_markdown | Alta |
| Desk Sync | create_project_doc, link_task | Media |
| Teams | update, update_settings | Baixa |
| Integrations | create, update, delete, sync | Baixa |
---
## IDs Uteis para Testes
### Team
- **Team ID:** `c3b7d636-5106-463c-9000-5b154431f18f`
- **Team Name:** Descomplicar
### User
- **User ID:** `e46960fd-ac44-4d32-a3c1-bcc10ac75afe`
- **Name:** Emanuel Almeida
- **Email:** emanuel@descomplicar.pt
### Collections
| ID | Nome | Docs |
|----|------|------|
| `951a06ff-d500-4714-9aa0-6b9f9c34318a` | Planeamento-v2 | 282 |
| `e27bb4ad-5113-43f8-bd8b-56b3d8a89028` | Planeamento | 180 |
### Documents de Teste (podem ser usados)
| ID | Titulo |
|----|--------|
| `eeb408ff-e4e2-4c7b-bdf9-6f71d4d9ea28` | Titulo de teste (orphan) |
| `6e1a2220-83e7-4bfe-a496-62d978591185` | (template vazio, orphan) |
---
## Resultados dos Testes (Round 1 & 2)
### Tools Testadas e Funcionais (67)
| Categoria | Tools | Status |
|-----------|-------|--------|
| Documents | list_documents, search_documents | OK |
| Collections | list_collections | OK (fixed) |
| Users | list_users, get_user | OK |
| Groups | list_groups | OK |
| Comments | comments_list | OK |
| Shares | shares_list | OK |
| Revisions | revisions_list | OK |
| Events | events_list, events_stats | OK |
| Attachments | attachments_list, attachments_stats | OK |
| File Operations | file_operations_list | OK |
| OAuth | oauth_clients_list, oauth_authentications_list | OK |
| Auth | auth_info, auth_config | OK (fixed) |
| Stars | stars_list | OK |
| Pins | pins_list | OK |
| Views | views_list | OK |
| Reactions | reactions_list | OK |
| API Keys | api_keys_list | OK |
| Webhooks | webhooks_list | OK |
| Backlinks | backlinks_list | OK |
| Search Queries | search_queries_list, search_queries_stats | OK |
| Teams | get_team, get_team_stats, list_team_domains | OK |
| Integrations | list_integrations | OK |
| Notifications | list_notifications, get_notification_settings | OK |
| Subscriptions | list_subscriptions, get_subscription_settings | OK (fixed) |
| Templates | list_templates | OK |
| Imports | list_imports | OK |
| Emojis | list_emojis | OK |
| User Permissions | list_user_permissions | OK |
| Analytics | Todos 6 tools | OK |
| Advanced Search | Todos 6 tools | OK |
---
## Comandos Uteis
```bash
# 1. Verificar/iniciar túnel SSH
/home/ealmeida/mcp-servers/mcp-outline-postgresql/start-tunnel.sh status
# Rebuild apos alteracoes
npm run build
# Se inactivo:
/home/ealmeida/mcp-servers/mcp-outline-postgresql/start-tunnel.sh start
# Correr testes
npm test
# 2. Reiniciar Claude Code se necessário
# Ver logs do servidor (se HTTP)
tail -f /tmp/mcp-outline.log
# Verificar tunnel SSH
./start-tunnel.sh status
# Iniciar tunnel se necessario
./start-tunnel.sh start
```
---
## PLANO DE TESTES - 164 Tools
## Ficheiros Relevantes
### Fase 1: Core (50 tools) - CRÍTICO
#### Documents (19 tools)
```
outline_list_documents # Listar documentos
outline_get_document # Obter documento por ID
outline_search_documents # Pesquisar documentos
outline_create_document # Criar documento
outline_update_document # Actualizar documento
outline_archive_document # Arquivar documento
outline_restore_document # Restaurar documento
outline_delete_document # Eliminar documento
outline_move_document # Mover documento
outline_duplicate_document # Duplicar documento
outline_get_document_info # Info detalhada
outline_list_document_children # Filhos do documento
outline_get_document_path # Caminho do documento
outline_list_document_backlinks # Backlinks
outline_get_document_memberships # Membros
outline_add_document_member # Adicionar membro
outline_remove_document_member # Remover membro
outline_star_document # Marcar favorito
outline_unstar_document # Desmarcar favorito
```
#### Collections (14 tools)
```
outline_list_collections # Listar colecções
outline_get_collection # Obter colecção
outline_create_collection # Criar colecção
outline_update_collection # Actualizar colecção
outline_delete_collection # Eliminar colecção
outline_list_collection_documents # Docs da colecção
outline_add_user_to_collection # Adicionar utilizador
outline_remove_user_from_collection # Remover utilizador
outline_list_collection_memberships # Membros
outline_add_group_to_collection # Adicionar grupo
outline_remove_group_from_collection # Remover grupo
outline_list_collection_group_memberships # Membros grupo
outline_export_collection # Exportar
outline_get_collection_stats # Estatísticas
```
#### Users (9 tools)
```
outline_list_users # Listar utilizadores
outline_get_user # Obter utilizador
outline_create_user # Criar utilizador (CUIDADO)
outline_update_user # Actualizar utilizador
outline_delete_user # Eliminar utilizador (CUIDADO)
outline_suspend_user # Suspender
outline_activate_user # Activar
outline_promote_user # Promover admin
outline_demote_user # Despromover
```
#### Groups (8 tools)
```
outline_list_groups # Listar grupos
outline_get_group # Obter grupo
outline_create_group # Criar grupo
outline_update_group # Actualizar grupo
outline_delete_group # Eliminar grupo
outline_list_group_members # Membros do grupo
outline_add_user_to_group # Adicionar ao grupo
outline_remove_user_from_group # Remover do grupo
```
### Fase 2: Collaboration (14 tools)
#### Comments (6 tools)
```
outline_comments_list # Listar comentários
outline_comments_info # Info comentário
outline_comments_create # Criar comentário
outline_comments_update # Actualizar comentário
outline_comments_delete # Eliminar comentário
outline_comments_resolve # Resolver comentário
```
#### Shares (5 tools)
```
outline_shares_list # Listar partilhas
outline_shares_info # Info partilha
outline_shares_create # Criar partilha
outline_shares_update # Actualizar partilha
outline_shares_revoke # Revogar partilha
```
#### Revisions (3 tools)
```
outline_revisions_list # Listar revisões
outline_revisions_info # Info revisão
outline_revisions_compare # Comparar revisões
```
### Fase 3: System (12 tools)
#### Events (3 tools)
```
outline_events_list # Listar eventos
outline_events_info # Info evento
outline_events_stats # Estatísticas
```
#### Attachments (5 tools)
```
outline_attachments_list # Listar anexos
outline_attachments_info # Info anexo
outline_attachments_create # Criar anexo
outline_attachments_delete # Eliminar anexo
outline_attachments_stats # Estatísticas
```
#### File Operations (4 tools)
```
outline_file_operations_list # Listar operações
outline_file_operations_info # Info operação
outline_file_operations_redirect # Redirect
outline_file_operations_delete # Eliminar
```
### Fase 4: Authentication (10 tools)
#### OAuth (8 tools)
```
outline_oauth_clients_list # Listar clientes OAuth
outline_oauth_clients_info # Info cliente
outline_oauth_clients_create # Criar cliente
outline_oauth_clients_update # Actualizar cliente
outline_oauth_clients_rotate_secret # Rodar secret
outline_oauth_clients_delete # Eliminar cliente
outline_oauth_authentications_list # Listar autenticações
outline_oauth_authentications_delete # Eliminar autenticação
```
#### Auth (2 tools)
```
outline_auth_info # Info autenticação
outline_auth_config # Configuração
```
### Fase 5: User Engagement (14 tools)
#### Stars (3 tools)
```
outline_stars_list # Listar favoritos
outline_stars_create # Criar favorito
outline_stars_delete # Eliminar favorito
```
#### Pins (3 tools)
```
outline_pins_list # Listar pins
outline_pins_create # Criar pin
outline_pins_delete # Eliminar pin
```
#### Views (2 tools)
```
outline_views_list # Listar visualizações
outline_views_create # Registar visualização
```
#### Reactions (3 tools)
```
outline_reactions_list # Listar reacções
outline_reactions_create # Criar reacção
outline_reactions_delete # Eliminar reacção
```
#### Emojis (3 tools)
```
outline_emojis_list # Listar emojis
outline_emojis_create # Criar emoji
outline_emojis_delete # Eliminar emoji
```
### Fase 6: API & Integration (14 tools)
#### API Keys (4 tools)
```
outline_api_keys_list # Listar API keys
outline_api_keys_create # Criar API key
outline_api_keys_update # Actualizar API key
outline_api_keys_delete # Eliminar API key
```
#### Webhooks (4 tools)
```
outline_webhooks_list # Listar webhooks
outline_webhooks_create # Criar webhook
outline_webhooks_update # Actualizar webhook
outline_webhooks_delete # Eliminar webhook
```
#### Integrations (6 tools)
```
outline_integrations_list # Listar integrações
outline_integrations_get # Obter integração
outline_integrations_create # Criar integração
outline_integrations_update # Actualizar integração
outline_integrations_delete # Eliminar integração
outline_integrations_sync # Sincronizar
```
### Fase 7: Notifications (8 tools)
#### Notifications (4 tools)
```
outline_notifications_list # Listar notificações
outline_notifications_mark_read # Marcar lida
outline_notifications_mark_all_read # Marcar todas
outline_notifications_settings # Configurações
```
#### Subscriptions (4 tools)
```
outline_subscriptions_list # Listar subscrições
outline_subscriptions_subscribe # Subscrever
outline_subscriptions_unsubscribe # Dessubscrever
outline_subscriptions_settings # Configurações
```
### Fase 8: Templates & Imports (9 tools)
#### Templates (5 tools)
```
outline_templates_list # Listar templates
outline_templates_get # Obter template
outline_templates_create_from # Criar de documento
outline_templates_convert_to # Converter para
outline_templates_convert_from # Converter de
```
#### Imports (4 tools)
```
outline_imports_list # Listar imports
outline_imports_status # Estado import
outline_imports_create # Criar import
outline_imports_cancel # Cancelar import
```
### Fase 9: Permissions & Bulk (9 tools)
#### User Permissions (3 tools)
```
outline_user_permissions_list # Listar permissões
outline_user_permissions_grant # Conceder permissão
outline_user_permissions_revoke # Revogar permissão
```
#### Bulk Operations (6 tools)
```
outline_bulk_archive_documents # Arquivar em massa
outline_bulk_delete_documents # Eliminar em massa
outline_bulk_move_documents # Mover em massa
outline_bulk_restore_documents # Restaurar em massa
outline_bulk_add_users_to_collection # Adicionar users
outline_bulk_remove_users_from_collection # Remover users
```
### Fase 10: Analytics & Search (15 tools)
#### Backlinks (1 tool)
```
outline_backlinks_list # Listar backlinks
```
#### Search Queries (2 tools)
```
outline_search_queries_list # Listar pesquisas
outline_search_queries_stats # Estatísticas
```
#### Advanced Search (6 tools)
```
outline_advanced_search # Pesquisa avançada
outline_search_facets # Facetas
outline_recent_documents # Recentes
outline_user_activity # Actividade user
outline_orphaned_documents # Documentos órfãos
outline_duplicate_documents # Duplicados
```
#### Analytics (6 tools)
```
outline_analytics_overview # Visão geral
outline_analytics_user_activity # Actividade users
outline_analytics_content_insights # Insights conteúdo
outline_analytics_collection_stats # Stats colecções
outline_analytics_growth_metrics # Métricas crescimento
outline_analytics_search # Analytics pesquisa
```
### Fase 11: Teams & External (9 tools)
#### Teams (5 tools)
```
outline_teams_get # Obter equipa
outline_teams_update # Actualizar equipa
outline_teams_stats # Estatísticas
outline_teams_domains # Domínios
outline_teams_settings # Configurações
```
#### Export/Import (2 tools)
```
outline_export_collection_to_markdown # Exportar MD
outline_import_markdown_folder # Importar MD
```
#### Desk Sync (2 tools)
```
outline_create_desk_project_doc # Criar doc projecto
outline_link_desk_task # Linkar tarefa
```
| Ficheiro | Descricao |
|----------|-----------|
| `TESTING-GUIDE.md` | Guia completo com status de cada tool |
| `CHANGELOG.md` | Historico de alteracoes |
| `CLAUDE.md` | Instrucoes para Claude Code |
| `src/tools/*.ts` | Implementacao das ferramentas |
| `src/utils/security.ts` | Validacoes e seguranca |
| `dist/` | Codigo compilado (usado pelo MCP) |
---
## Testes Rápidos de Sanidade
## Padrao de Teste
```
# 1. Listar documentos (confirma conexão)
outline_list_documents
Para cada tool:
# 2. Pesquisar (confirma full-text search)
outline_search_documents query="teste"
1. **Carregar a tool:**
```
ToolSearch: select:mcp__outline-postgresql__<tool_name>
```
# 3. Listar colecções
outline_list_collections
2. **Invocar com parametros validos:**
```
mcp__outline-postgresql__<tool_name>({ param: value })
```
# 4. Listar utilizadores
outline_list_users
3. **Verificar resultado:**
- OK - Retorna dados esperados
- WARN - Funciona com limitacoes (documentar)
- BUG - Erro (investigar e corrigir)
# 5. Analytics (confirma queries complexas)
outline_analytics_overview
```
4. **Actualizar TESTING-GUIDE.md** com resultado
---
## Notas Importantes
1. **Nao criar dados de producao** - usar prefixo "Teste-MCP" para identificar
2. **Limpar dados de teste** - apagar entidades criadas apos validar
3. **Cuidado com operacoes destrutivas** - testar primeiro em entidades de teste
4. **Documentar bugs** - adicionar ao Bug Tracker no TESTING-GUIDE.md
5. **Commit apos cada round** - manter historico de alteracoes
---
## Prompt Para Continuar
```
Continuo o trabalho no MCP Outline PostgreSQL.
Continuo os testes do MCP Outline PostgreSQL.
Path: /home/ealmeida/mcp-servers/mcp-outline-postgresql
Versao: 1.3.5
Estado: 67/164 tools testadas (Round 1 & 2 completos)
Estado: v1.3.1 em PRODUÇÃO (hub.descomplicar.pt, 448 docs)
- 164 tools em 33 módulos
- Túnel SSH activo na porta 5433
- Configurado em ~/.claude.json como "outline-postgresql"
PROXIMA TAREFA: Round 3 - Write Operations
- Criar documento de teste
- Criar collection de teste
- Criar grupo de teste
- Testar update operations
- Documentar resultados em TESTING-GUIDE.md
TAREFA: Testar todas as 164 ferramentas do MCP seguindo o plano em CONTINUE.md.
Começar pela Fase 1 (Core) e avançar sistematicamente.
Ver CONTINUE.md para detalhes completos.
```
---
## Ficheiros Chave
| Ficheiro | Descrição |
|----------|-----------|
| `src/index.ts` | Entry point stdio |
| `src/index-http.ts` | Entry point HTTP |
| `src/server/` | Lógica partilhada |
| `src/tools/*.ts` | 33 módulos de tools |
| `start-tunnel.sh` | Script túnel SSH |
| `CREDENTIALS-BACKUP.md` | Credenciais backup |
| `CHANGELOG.md` | Histórico alterações |
| `SPEC-MCP-OUTLINE.md` | Especificação completa |
---
## Notas de Teste
- **READ-ONLY primeiro:** Começar com operações de leitura
- **WRITE com cuidado:** Criar docs/users de teste, não alterar dados reais
- **BULK Operations:** Testar com IDs de teste apenas
- **Rollback:** Se algo correr mal, usar outline_restore_document
---
*Última actualização: 2026-01-31 (v1.3.1 - Produção)*
*Criado: 2026-01-31 | Proxima sessao: Continuar com Round 3 (Write Operations)*