feat: v1.3.1 - Multi-transport + Production deployment
- Add HTTP transport (StreamableHTTPServerTransport) - Add shared server module (src/server/) - Configure production for hub.descomplicar.pt - Add SSH tunnel script (start-tunnel.sh) - Fix connection leak in pg-client.ts - Fix atomicity bug in comments deletion - Update docs with test plan for 164 tools Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
498
CONTINUE.md
498
CONTINUE.md
@@ -2,97 +2,386 @@
|
||||
|
||||
## Estado Actual
|
||||
|
||||
**MCP Outline PostgreSQL v1.2.3** - DESENVOLVIMENTO COMPLETO + SECURITY HARDENED
|
||||
**MCP Outline PostgreSQL v1.3.1** - PRODUÇÃO CONFIGURADA
|
||||
|
||||
- 164 tools implementadas em 33 módulos
|
||||
- Conectado a **hub.descomplicar.pt** (448 documentos)
|
||||
- Build passa sem erros
|
||||
- Repositório: https://git.descomplicar.pt/ealmeida/mcp-outline-postgresql
|
||||
- Configurado em `~/.claude.json` como `outline-postgresql`
|
||||
- **Security Score: 8.5/10** (após auditorias v1.2.2 e v1.2.3)
|
||||
|
||||
## Security Fixes (v1.2.3)
|
||||
|
||||
- Cryptographic random generation (`crypto.randomBytes()`) para OAuth secrets, API keys, share URLs
|
||||
- API keys armazenam apenas hash (SHA-256), nunca texto plain
|
||||
- Validação URL HTTP(S) para prevenir javascript:, data:, file: XSS
|
||||
- Validação de inteiros para IDs externos (Desk CRM)
|
||||
- Memory leak fix no rate limiter (lifecycle com start/stop)
|
||||
- Graceful shutdown handler no index.ts
|
||||
|
||||
## Módulos Implementados (33 total, 164 tools)
|
||||
|
||||
### Core (50 tools)
|
||||
- documents (19) - CRUD, search, archive, move, templates, memberships
|
||||
- collections (14) - CRUD, memberships, groups, export
|
||||
- users (9) - CRUD, suspend, activate, promote, demote
|
||||
- groups (8) - CRUD, memberships
|
||||
|
||||
### Collaboration (14 tools)
|
||||
- comments (6) - CRUD, resolve
|
||||
- shares (5) - CRUD, revoke
|
||||
- revisions (3) - list, info, compare
|
||||
|
||||
### System (12 tools)
|
||||
- events (3) - audit log, statistics
|
||||
- attachments (5) - CRUD, stats
|
||||
- file-operations (4) - import/export jobs
|
||||
|
||||
### Authentication (10 tools)
|
||||
- oauth (8) - OAuth clients, authentications
|
||||
- auth (2) - auth info, config
|
||||
|
||||
### User Engagement (14 tools)
|
||||
- stars (3) - bookmarks
|
||||
- pins (3) - pinned documents
|
||||
- views (2) - view tracking
|
||||
- reactions (3) - emoji reactions
|
||||
- emojis (3) - custom emojis
|
||||
|
||||
### API & Integration (14 tools)
|
||||
- api-keys (4) - programmatic access
|
||||
- webhooks (4) - event subscriptions
|
||||
- integrations (6) - external integrations (Slack, embeds)
|
||||
|
||||
### Notifications (8 tools)
|
||||
- notifications (4) - user notifications
|
||||
- subscriptions (4) - document subscriptions
|
||||
|
||||
### Templates & Imports (9 tools)
|
||||
- templates (5) - document templates
|
||||
- imports (4) - import job management
|
||||
|
||||
### Permissions (3 tools)
|
||||
- user-permissions (3) - grant/revoke permissions
|
||||
|
||||
### Bulk Operations (6 tools)
|
||||
- bulk-operations (6) - batch archive, delete, move, restore, user management
|
||||
|
||||
### Analytics & Search (15 tools)
|
||||
- backlinks (1) - document link references
|
||||
- search-queries (2) - search analytics
|
||||
- advanced-search (6) - faceted search, recent, orphaned, duplicates
|
||||
- analytics (6) - overview, user activity, content insights, growth metrics
|
||||
|
||||
### Teams (5 tools)
|
||||
- teams (5) - team/workspace management
|
||||
|
||||
### Export/Import & External Sync (4 tools)
|
||||
- export-import (2) - Markdown export/import with hierarchy
|
||||
- desk-sync (2) - Desk CRM integration
|
||||
- Multi-transport: stdio + HTTP
|
||||
- Security hardened (v1.2.2-v1.2.5)
|
||||
|
||||
## Configuração Actual
|
||||
|
||||
**Produção:** hub.descomplicar.pt via túnel SSH
|
||||
|
||||
```json
|
||||
"outline-postgresql": {
|
||||
"command": "node",
|
||||
"args": ["/home/ealmeida/mcp-servers/mcp-outline-postgresql/dist/index.js"],
|
||||
"env": {
|
||||
"DATABASE_URL": "postgres://outline:outline_dev_2026@localhost:5432/outline",
|
||||
"DATABASE_URL": "postgres://postgres:***@localhost:5433/descomplicar",
|
||||
"LOG_LEVEL": "error"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ANTES DE COMEÇAR
|
||||
|
||||
```bash
|
||||
# 1. Verificar/iniciar túnel SSH
|
||||
/home/ealmeida/mcp-servers/mcp-outline-postgresql/start-tunnel.sh status
|
||||
|
||||
# Se inactivo:
|
||||
/home/ealmeida/mcp-servers/mcp-outline-postgresql/start-tunnel.sh start
|
||||
|
||||
# 2. Reiniciar Claude Code se necessário
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## PLANO DE TESTES - 164 Tools
|
||||
|
||||
### 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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Testes Rápidos de Sanidade
|
||||
|
||||
```
|
||||
# 1. Listar documentos (confirma conexão)
|
||||
outline_list_documents
|
||||
|
||||
# 2. Pesquisar (confirma full-text search)
|
||||
outline_search_documents query="teste"
|
||||
|
||||
# 3. Listar colecções
|
||||
outline_list_collections
|
||||
|
||||
# 4. Listar utilizadores
|
||||
outline_list_users
|
||||
|
||||
# 5. Analytics (confirma queries complexas)
|
||||
outline_analytics_overview
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Prompt Para Continuar
|
||||
|
||||
```
|
||||
@@ -100,34 +389,39 @@ Continuo o trabalho no MCP Outline PostgreSQL.
|
||||
|
||||
Path: /home/ealmeida/mcp-servers/mcp-outline-postgresql
|
||||
|
||||
Estado: v1.2.3 completo com 164 tools em 33 módulos.
|
||||
Security hardened após auditorias (SQL injection, crypto, URL validation, transactions).
|
||||
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"
|
||||
|
||||
O MCP está configurado em ~/.claude.json como "outline-postgresql".
|
||||
```
|
||||
|
||||
## Ficheiros Chave
|
||||
|
||||
- `src/index.ts` - Entry point MCP
|
||||
- `src/tools/*.ts` - 31 módulos de tools
|
||||
- `src/pg-client.ts` - Cliente PostgreSQL
|
||||
- `.env` - Configuração BD local
|
||||
- `SPEC-MCP-OUTLINE.md` - Especificação completa
|
||||
- `CHANGELOG.md` - Histórico de alterações
|
||||
|
||||
## Utils Disponíveis (v1.2.3)
|
||||
|
||||
```
|
||||
src/utils/
|
||||
├── security.ts # Validações, rate limiting, URL validation
|
||||
├── transaction.ts # Transacções com retry logic
|
||||
├── query-builder.ts # Query builder parametrizado
|
||||
├── validation.ts # Validação Zod-based
|
||||
├── audit.ts # Audit logging
|
||||
├── monitoring.ts # Pool health monitoring
|
||||
├── pagination.ts # Cursor-based pagination
|
||||
└── logger.ts # Logging
|
||||
TAREFA: Testar todas as 164 ferramentas do MCP seguindo o plano em CONTINUE.md.
|
||||
Começar pela Fase 1 (Core) e avançar sistematicamente.
|
||||
```
|
||||
|
||||
---
|
||||
*Última actualização: 2026-01-31 (v1.2.3)*
|
||||
|
||||
## 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)*
|
||||
|
||||
Reference in New Issue
Block a user