MCP Outline - Especificação Completa
Versão: 1.0.0
Data: 2026-01-31
Autor: Descomplicar®
1. Visão Geral
Objectivo
MCP para acesso directo à base de dados PostgreSQL do Outline, seguindo os padrões estabelecidos pelo mcp-desk-crm-sql-v3.
Arquitectura
Decisões Técnicas
| Aspecto |
Decisão |
Razão |
| Acesso |
SQL Directo (não API) |
Performance, controlo total |
| BD |
PostgreSQL 15 |
Compatível com Outline |
| Transporte |
stdio (dev), SSE (prod) |
Padrão MCP |
| Linguagem |
TypeScript |
Type safety, padrão Desk |
2. Ambiente de Desenvolvimento
Configuração Local
Estrutura do Projecto
3. Dependências
package.json
tsconfig.json
4. Tipos Base (Padrão Desk)
src/types/tools.ts
5. API Outline → Tools MCP
5.1 Documents (17 tools)
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
documents.list |
list_documents |
SELECT |
P1 |
documents.info |
get_document |
SELECT |
P1 |
documents.create |
create_document |
INSERT |
P1 |
documents.update |
update_document |
UPDATE |
P1 |
documents.delete |
delete_document |
UPDATE (soft) |
P1 |
documents.search |
search_documents |
SELECT FTS |
P1 |
documents.drafts |
list_drafts |
SELECT |
P2 |
documents.viewed |
list_viewed_documents |
SELECT |
P2 |
documents.archive |
archive_document |
UPDATE |
P2 |
documents.restore |
restore_document |
UPDATE |
P2 |
documents.move |
move_document |
UPDATE |
P2 |
documents.unpublish |
unpublish_document |
UPDATE |
P3 |
documents.templatize |
templatize_document |
INSERT |
P3 |
documents.export |
export_document |
SELECT |
P2 |
documents.import |
import_document |
INSERT |
P3 |
documents.users |
list_document_users |
SELECT |
P2 |
documents.memberships |
list_document_memberships |
SELECT |
P3 |
Exemplo: list_documents
export const listDocuments: BaseTool = {
name: 'list_documents',
description: 'Lista documentos com filtros. Suporta paginação e ordenação.',
inputSchema: {
type: 'object',
properties: {
collection_id: {
type: 'string',
description: 'UUID da collection para filtrar'
},
user_id: {
type: 'string',
description: 'UUID do autor para filtrar'
},
template: {
type: 'boolean',
description: 'Filtrar apenas templates'
},
published: {
type: 'boolean',
description: 'Filtrar apenas publicados (default: true)'
},
limit: {
type: 'number',
description: 'Máximo de resultados (default: 25, max: 100)'
},
offset: {
type: 'number',
description: 'Offset para paginação'
},
sort: {
type: 'string',
enum: ['updatedAt', 'createdAt', 'title', 'index'],
description: 'Campo para ordenação'
},
direction: {
type: 'string',
enum: ['ASC', 'DESC'],
description: 'Direcção da ordenação'
}
}
},
handler: async (args, pgClient) => {
const limit = Math.min(args.limit || 25, 100);
const offset = args.offset || 0;
const sort = args.sort || 'updatedAt';
const direction = args.direction || 'DESC';
let sql = `
SELECT
d.id,
d.title,
d.text,
d."collectionId",
d."parentDocumentId",
d."createdById",
d."publishedAt",
d."updatedAt",
d."archivedAt",
d.template,
c.name as collection_name,
u.name as author_name
FROM documents d
LEFT JOIN collections c ON d."collectionId" = c.id
LEFT JOIN users u ON d."createdById" = u.id
WHERE d."deletedAt" IS NULL
`;
const params: any[] = [];
let paramIndex = 1;
if (args.collection_id) {
sql += ` AND d."collectionId" = $${paramIndex++}`;
params.push(args.collection_id);
}
if (args.user_id) {
sql += ` AND d."createdById" = $${paramIndex++}`;
params.push(args.user_id);
}
if (args.template !== undefined) {
sql += ` AND d.template = $${paramIndex++}`;
params.push(args.template);
}
if (args.published !== false) {
sql += ` AND d."publishedAt" IS NOT NULL`;
}
sql += ` ORDER BY d."${sort}" ${direction}`;
sql += ` LIMIT $${paramIndex++} OFFSET $${paramIndex++}`;
params.push(limit, offset);
const result = await pgClient.query(sql, params);
return {
content: [{
type: 'text',
text: JSON.stringify({
documents: result.rows,
pagination: { limit, offset, count: result.rows.length }
}, null, 2)
}]
};
}
};
5.2 Collections (13 tools)
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
collections.list |
list_collections |
SELECT |
P1 |
collections.info |
get_collection |
SELECT |
P1 |
collections.create |
create_collection |
INSERT |
P1 |
collections.update |
update_collection |
UPDATE |
P1 |
collections.delete |
delete_collection |
UPDATE (soft) |
P2 |
collections.documents |
list_collection_documents |
SELECT |
P1 |
collections.add_user |
add_user_to_collection |
INSERT |
P2 |
collections.remove_user |
remove_user_from_collection |
DELETE |
P2 |
collections.memberships |
list_collection_memberships |
SELECT |
P2 |
collections.add_group |
add_group_to_collection |
INSERT |
P3 |
collections.remove_group |
remove_group_from_collection |
DELETE |
P3 |
collections.group_memberships |
list_collection_group_memberships |
SELECT |
P3 |
collections.export |
export_collection |
SELECT |
P3 |
5.3 Users (7 tools)
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
users.list |
list_users |
SELECT |
P1 |
users.info |
get_user |
SELECT |
P1 |
users.create |
create_user |
INSERT |
P2 |
users.update |
update_user |
UPDATE |
P2 |
users.delete |
delete_user |
UPDATE (soft) |
P3 |
users.suspend |
suspend_user |
UPDATE |
P2 |
users.activate |
activate_user |
UPDATE |
P2 |
5.4 Groups (7 tools)
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
groups.list |
list_groups |
SELECT |
P1 |
groups.info |
get_group |
SELECT |
P1 |
groups.create |
create_group |
INSERT |
P2 |
groups.update |
update_group |
UPDATE |
P2 |
groups.delete |
delete_group |
DELETE |
P3 |
groups.memberships |
list_group_members |
SELECT |
P2 |
groups.add_user |
add_user_to_group |
INSERT |
P2 |
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
comments.list |
list_comments |
SELECT |
P1 |
comments.info |
get_comment |
SELECT |
P2 |
comments.create |
create_comment |
INSERT |
P1 |
comments.update |
update_comment |
UPDATE |
P2 |
comments.delete |
delete_comment |
DELETE |
P2 |
5.6 Shares (4 tools)
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
shares.info |
get_share |
SELECT |
P2 |
shares.create |
create_share |
INSERT |
P2 |
shares.update |
update_share |
UPDATE |
P3 |
shares.delete |
delete_share |
DELETE |
P2 |
5.7 Revisions (2 tools)
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
revisions.list |
list_revisions |
SELECT |
P2 |
revisions.info |
get_revision |
SELECT |
P2 |
5.8 Events (1 tool)
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
events.list |
list_events |
SELECT |
P2 |
5.9 Attachments (3 tools)
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
attachments.create |
create_attachment |
INSERT |
P3 |
attachments.redirect |
get_attachment_url |
SELECT |
P3 |
attachments.delete |
delete_attachment |
DELETE |
P3 |
5.10 Auth (2 tools)
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
auth.info |
get_auth_info |
SELECT |
P3 |
auth.config |
get_auth_config |
SELECT |
P3 |
5.11 Stars (3 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
stars.list |
list_stars |
SELECT |
P2 |
stars.create |
star_document |
INSERT |
P2 |
stars.delete |
unstar_document |
DELETE |
P2 |
5.12 Pins (3 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
pins.list |
list_pins |
SELECT |
P2 |
pins.create |
pin_document |
INSERT |
P2 |
pins.delete |
unpin_document |
DELETE |
P2 |
5.13 Views (2 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
views.list |
list_document_views |
SELECT |
P2 |
views.create |
register_view |
INSERT |
P3 |
5.14 Reactions (3 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
reactions.list |
list_reactions |
SELECT |
P3 |
reactions.create |
add_reaction |
INSERT |
P3 |
reactions.delete |
remove_reaction |
DELETE |
P3 |
5.15 API Keys (4 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
apiKeys.list |
list_api_keys |
SELECT |
P2 |
apiKeys.create |
create_api_key |
INSERT |
P2 |
apiKeys.delete |
delete_api_key |
DELETE |
P2 |
apiKeys.info |
get_api_key |
SELECT |
P3 |
5.16 Webhooks (4 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
webhooks.list |
list_webhooks |
SELECT |
P3 |
webhooks.create |
create_webhook |
INSERT |
P3 |
webhooks.update |
update_webhook |
UPDATE |
P3 |
webhooks.delete |
delete_webhook |
DELETE |
P3 |
5.17 Backlinks (1 tool) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
backlinks.list |
list_backlinks |
SELECT |
P2 |
5.18 Search Queries (2 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
searchQueries.list |
list_search_queries |
SELECT |
P3 |
searchQueries.popular |
get_popular_searches |
SELECT |
P3 |
5.19 Teams (5 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
teams.info |
get_team |
SELECT |
P1 |
teams.update |
update_team |
UPDATE |
P2 |
teams.stats |
get_team_stats |
SELECT |
P2 |
teams.domains |
list_team_domains |
SELECT |
P2 |
teams.settings |
update_team_settings |
UPDATE |
P2 |
5.20 Integrations (6 tools) - CRÍTICO para embeds
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
integrations.list |
list_integrations |
SELECT |
P1 |
integrations.info |
get_integration |
SELECT |
P1 |
integrations.create |
create_integration |
INSERT |
P1 |
integrations.update |
update_integration |
UPDATE |
P2 |
integrations.delete |
delete_integration |
DELETE |
P2 |
integrations.sync |
sync_integration |
UPDATE |
P2 |
5.21 Notifications (4 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
notifications.list |
list_notifications |
SELECT |
P1 |
notifications.read |
mark_notification_read |
UPDATE |
P2 |
notifications.readAll |
mark_all_notifications_read |
UPDATE |
P2 |
notifications.settings |
get_notification_settings |
SELECT |
P2 |
5.22 Subscriptions (4 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
subscriptions.list |
list_subscriptions |
SELECT |
P1 |
subscriptions.create |
subscribe_to_document |
INSERT |
P2 |
subscriptions.delete |
unsubscribe_from_document |
DELETE |
P2 |
subscriptions.settings |
get_subscription_settings |
SELECT |
P2 |
5.23 Imports (4 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
imports.list |
list_imports |
SELECT |
P2 |
imports.status |
get_import_status |
SELECT |
P2 |
imports.create |
create_import |
INSERT |
P2 |
imports.cancel |
cancel_import |
UPDATE |
P2 |
5.24 Emojis (3 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
emojis.list |
list_emojis |
SELECT |
P2 |
emojis.create |
create_emoji |
INSERT |
P3 |
emojis.delete |
delete_emoji |
DELETE |
P3 |
5.25 User Permissions (3 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
userPermissions.list |
list_user_permissions |
SELECT |
P2 |
userPermissions.grant |
grant_permission |
INSERT |
P2 |
userPermissions.revoke |
revoke_permission |
DELETE |
P2 |
5.26 Bulk Operations (6 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
bulk.moveDocuments |
bulk_move_documents |
UPDATE |
P2 |
bulk.archiveDocuments |
bulk_archive_documents |
UPDATE |
P2 |
bulk.deleteDocuments |
bulk_delete_documents |
DELETE |
P2 |
bulk.updateDocuments |
bulk_update_documents |
UPDATE |
P2 |
documents.duplicate |
duplicate_document |
INSERT |
P2 |
collections.merge |
merge_collections |
UPDATE |
P2 |
5.27 Export/Import Avançado (4 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
export.collectionMarkdown |
export_collection_to_markdown |
SELECT |
P2 |
export.documentTree |
export_document_tree |
SELECT |
P2 |
import.markdownFolder |
import_markdown_folder |
INSERT |
P2 |
import.fromUrl |
import_from_url |
INSERT |
P3 |
5.28 Advanced Search (6 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
search.byDateRange |
search_by_date_range |
SELECT |
P2 |
search.byAuthor |
search_by_author |
SELECT |
P2 |
search.inCollection |
search_in_collection |
SELECT |
P2 |
search.orphanDocuments |
find_orphan_documents |
SELECT |
P2 |
search.emptyCollections |
find_empty_collections |
SELECT |
P2 |
search.brokenLinks |
find_broken_links |
SELECT |
P2 |
5.29 Analytics (6 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
analytics.workspace |
get_workspace_stats |
SELECT |
P2 |
analytics.userActivity |
get_user_activity |
SELECT |
P2 |
analytics.collection |
get_collection_stats |
SELECT |
P2 |
analytics.mostViewed |
get_most_viewed_documents |
SELECT |
P2 |
analytics.mostEdited |
get_most_edited_documents |
SELECT |
P2 |
analytics.stale |
get_stale_documents |
SELECT |
P2 |
5.30 External Sync (5 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
sync.deskProject |
create_desk_project_doc |
INSERT |
P3 |
sync.deskTask |
link_desk_task |
INSERT |
P3 |
embeds.create |
create_embed |
INSERT |
P2 |
embeds.update |
update_embed |
UPDATE |
P2 |
embeds.list |
list_document_embeds |
SELECT |
P2 |
5.31 Templates (5 tools) - NOVO
| API Endpoint |
Tool MCP |
Operação |
Prioridade |
templates.list |
list_templates |
SELECT |
P1 |
templates.info |
get_template |
SELECT |
P1 |
templates.create |
create_from_template |
INSERT |
P1 |
templates.convert |
convert_to_template |
UPDATE |
P2 |
templates.unconvert |
convert_from_template |
UPDATE |
P2 |
6. Resumo de Tools
Por Prioridade
| Prioridade |
Quantidade |
Descrição |
| P1 |
32 |
Core: CRUD, search, templates, integrations, notifications |
| P2 |
85 |
Secundárias: bulk ops, analytics, search avançado, embeds |
| P3 |
27 |
Avançadas: OAuth, sync externo, import URL |
| Total |
144 |
|
Por Módulo
| Módulo |
Tools |
Estado |
| Documents |
17 |
✅ Implementado |
| Collections |
13 |
✅ Implementado |
| Users |
7 |
✅ Implementado |
| Groups |
7 |
✅ Implementado |
| Comments |
5 |
✅ Implementado |
| Shares |
4 |
✅ Implementado |
| Revisions |
2 |
✅ Implementado |
| Events |
1 |
✅ Implementado |
| Attachments |
3 |
✅ Implementado |
| Auth |
2 |
✅ Implementado |
| OAuth |
8 |
✅ Implementado |
| File Operations |
4 |
✅ Implementado |
| Stars |
3 |
A implementar |
| Pins |
3 |
A implementar |
| Views |
2 |
A implementar |
| Reactions |
3 |
A implementar |
| API Keys |
4 |
A implementar |
| Webhooks |
4 |
A implementar |
| Backlinks |
1 |
A implementar |
| Search Queries |
2 |
A implementar |
| Teams |
5 |
A implementar |
| Integrations |
6 |
A implementar (CRÍTICO) |
| Notifications |
4 |
A implementar |
| Subscriptions |
4 |
A implementar |
| Imports |
4 |
A implementar |
| Emojis |
3 |
A implementar |
| User Permissions |
3 |
A implementar |
| Bulk Operations |
6 |
A implementar |
| Export/Import |
4 |
A implementar |
| Advanced Search |
6 |
A implementar |
| Analytics |
6 |
A implementar |
| External Sync |
5 |
A implementar |
| Templates |
5 |
A implementar |
7. Schema PostgreSQL (Outline)
Tabelas Reais (41 tabelas - verificado 2026-01-31)
Relações Chave
8. Implementação
Fase 1: Setup (MVP)
Fase 2: Core Tools (P1)
Implementar por ordem:
list_documents, get_document, search_documents
list_collections, get_collection
list_users, get_user
create_document, update_document
create_collection, update_collection
Fase 3: Secondary Tools (P2)
- Comments (CRUD)
- Memberships
- Revisions
- Shares
- Events
Fase 4: Advanced Tools (P3)
- Templates
- Attachments
- OAuth
- Import/Export
9. Configuração Claude Code
~/.claude.json
10. Testes
Estrutura
Exemplo Test
11. Padrões de Código (do Desk)
Response Format
Error Handling
Naming Conventions
| Tipo |
Padrão |
Exemplo |
| Tool name |
snake_case |
list_documents |
| Function |
camelCase |
listDocuments |
| Type |
PascalCase |
DocumentRow |
| File |
kebab-case |
documents.ts |
12. Checklist de Implementação
Setup
Tools P1
Tools P2 (novas)
Integração
Documentação
13. Referências
Documento gerado: 2026-01-31
Autor: Descomplicar®