skills/integration/notion/SKILL.md
Integração completa com Notion usando MCP customizado (notion-automation-suite)
npx skillsauth add lucasbiason/cursor-multiagent-system notion-integrationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Integração completa com Notion usando MCP customizado notion-automation-suite.
Última Atualização: 2026-01-27
MCP Server: notion-automation-suite
Localização: notion-automation-suite (Infraestrutura)
Tudo que envolve cards no Notion deve ficar no contexto do projeto respectivo.
Estudos/Apostilas e Materiais de Cursos/[PyCodeBR] Fast Master/Modulo-01-Introducao/conteudo-e-resumos.mdEstudos/Apostilas e Materiais de Cursos/[Nome do Curso]/... ou Estudos/Resumos de Cursos/...IDs dos cards (page_id): Sempre usar os IDs armazenados no contexto privado do projeto, nunca na skill pública (informação sigilosa).
config/studies/estacao-pessoal/ (NOTION_CARDS_EXISTENTES_ESTACAO_PESSOAL.md, checklist, roadmap).config/studies/catalogo/[fonte]/ (ex.: fullcycle/mba-engenharia-software-ia.md, pycodebr).config/studies/projetos/em-andamento/[projeto]/ (ex.: threat-modeling-ai).Ao criar ou atualizar cards de um curso/formação:
conteudo-e-resumos.md).Aplicar esta skill quando:
notion-automation-suiteQUANDO O USUÁRIO PEDIR PARA CRIAR/ATUALIZAR CARDS NO NOTION, EXECUTAR ATÉ O FINAL.
❌ ERRADO:
✅ CORRETO:
Localização: notion-automation-suite (Infraestrutura)
Como usar no Cursor: Configurar o servidor MCP no Cursor (Settings → MCP) apontando para o notion-automation-suite (stdio ou Docker). Ver docs/mcp/SETUP_CURSOR.md no repositório do MCP. As tools só ficam disponíveis no Composer quando o MCP está conectado ao workspace (ex.: Infraestrutura).
Configuração:
notion-automation-suite/config/README.mdnotion-automation-suite/config/defaults/env.examplenotion-automation-suite/config/.env ou config/notion-mcp.env (gitignored)Variáveis de Ambiente Obrigatórias:
NOTION_API_TOKEN - Token da API do NotionNOTION_WORK_DATABASE_ID - ID da base de trabalhoNOTION_STUDIES_DATABASE_ID - ID da base de estudosNOTION_PERSONAL_DATABASE_ID - ID da base pessoalNOTION_YOUTUBER_DATABASE_ID - ID da base YouTube⚠️ IMPORTANTE: Os IDs das databases ficam no projeto do MCP via variáveis de ambiente. O cursor-multiagent-system não deve ter acesso direto a esses IDs, apenas usar o MCP construído.
Execução:
# Via stdio
notion-mcp-server
# Via Docker
docker run -i --rm \
-e NOTION_API_TOKEN=secret_xxx \
-e NOTION_WORK_DATABASE_ID=... \
-e NOTION_STUDIES_DATABASE_ID=... \
-e NOTION_PERSONAL_DATABASE_ID=... \
-e NOTION_YOUTUBER_DATABASE_ID=... \
notion-mcp-server
O MCP expõe tools especializadas por domínio:
work_create_project - Criar projeto de trabalhowork_create_sprint - Criar sprint com subtarefaswork_create_task - Criar tarefa/subitem vinculadowork_update_status - Atualizar statuswork_assign_project - Alterar projeto vinculadowork_query_projects - Consultar cards por filtrosstudy_create_course - Criar curso (apenas data, sem horário)study_create_course_complete - Criar curso completo com fases/seções/aulasstudy_create_phase - Criar fase vinculada a cursostudy_create_section - Criar seção vinculadastudy_create_class - Criar aula (com horário, respeita regras 19h-21h)study_reschedule_section - Reagendar aulas de uma seçãostudy_query_schedule - Consultar aulas por período/statusstudy_update_card - Atualizar card de estudo (status, período, descrição/resumo). Uso: marcar aula/módulo como Concluído, preencher resumo e período. Status Studies: "Concluido" (sem acento).personal_create_task - Criar tarefa pessoalpersonal_create_subtask - Criar subtarefa vinculadapersonal_use_template - Usar template genérico (ex: weekly_planning)personal_create_medical_appointment - Criar consulta médicayoutuber_create_series - Criar série completa com episódios automáticosyoutuber_create_episode - Criar episódio vinculado a sérieyoutuber_schedule_recordings - Gerar episódios sequenciaisyoutuber_update_episode_status - Atualizar status do episódioyoutuber_reschedule_episode - Reagendar gravação/publicaçãoyoutuber_query_schedule - Consultar episódios por filtrosCampo de Título: Nome do projeto
Campo de Relação: item principal
Uso: Projetos profissionais (ExpenseIQ, HubTravel, etc.)
Nome do projeto (title) - Título do cardStatus (status) - Estado atualCliente (select) - Astracode, Pessoal, FIAPProjeto (select) - ExpenseIQ, HubTravel, AvulsoPrioridade (select) - Baixa, Normal, Média, Alta, UrgentePeriodo (date) - Data/hora de execuçãoitem principal (relation) - Vínculo com card paiNão iniciado (padrão)Em AndamentoEm RevisãoConcluídoPausadoCanceladocliente: "Astracode" (padrão para trabalho profissional)projeto: "Avulso" (quando não especificado)prioridade: "Normal"status: "Não iniciado"# Via MCP tool
work_create_project(
title="Implementar Feature X",
cliente="Astracode",
projeto="ExpenseIQ",
prioridade="Alta",
icon="🚀"
)
Campo de Título: Nome da tarefa
Campo de Relação: tarefa principal
Campo de Data: Data (não Periodo)
Uso: Tarefas pessoais, organização, hábitos
Nome da tarefa (title) - Título da tarefaStatus (status) - Estado atualAtividade (select) - Tipo de atividadeData (date) - Data da tarefa (campo específico)Descrição (rich_text) - Descrição detalhadatarefa principal (relation) - Tarefa principal (pai)Não iniciado (padrão)Em AndamentoConcluídoCanceladoDesenvolvimentoOrganizaçãoEstudoTestePlanejamentoFinanceiroSaúdeLazer# Via MCP tool
personal_create_task(
title="Organizar Documentos",
atividade="Organização",
data={
"start": "2025-10-15T19:00:00-03:00",
"end": "2025-10-15T20:00:00-03:00"
},
icon="👤"
)
Campo de Título: Project name
Campo de Relação: Parent item
Campo de Data: Período (com acento)
Uso: Cursos, formações, aulas, estudos
Project name (title) - Nome do curso/aulaStatus (status) - Estado atualCategorias (multi_select) - Tags do cursoPrioridade (select) - Nível de prioridadePeríodo (date) - Quando estudarTempo Total (rich_text) - Duração estimada (HH:MM:SS)Parent item (relation) - Item pai (curso/seção)Não AdquiridoPara Fazer (padrão)Em RevisãoEm PausaEm AndamentoDescontinuadoConcluido (sem acento)Formação/Curso (sem horário)
├── Fase/Bloco (sem horário)
│ ├── Seção/Módulo (sem horário)
│ │ ├── Aula 1 (COM horário 19:00-21:00)
│ │ ├── Aula 2 (COM horário 19:00-21:00)
│ │ └── Aula 3 (COM horário 19:00-21:00)
# Curso (sem horário)
study_create_course(
title="FIAP IA para Devs",
categorias=["FIAP", "Inteligência Artificial"],
periodo={"start": "2025-10-16", "end": "2025-12-15"},
tempo_total="40:00:00",
icon="🎓"
)
# Aula (com horário)
study_create_class(
parent_id=section_id,
title="Aula 1: Introdução",
start_time="2025-10-16T19:00:00-03:00",
duration_minutes=120, # 2 horas (19:00-21:00)
icon="🎯"
)
Campo de Título: Nome do projeto
Campo de Relação: item principal
Uso: Séries de jogos e episódios do canal
Nome do projeto (title) - Nome da série/episódioStatus (status) - Estado atualPeriodo (date) - Data/hora de GRAVAÇÃOData de Lançamento (date) - Data/hora de PUBLICAÇÃOResumo do Episodio (rich_text) - Sinopse do episódio/sérieLink do Video (url) - URL do vídeo publicadoitem principal (relation) - Série (para episódios)Para GravarNão iniciado (padrão)GravandoPara EdiçãoEditandoEditadoPublicadoConcluídoPeriodo (Data de Gravação):
2025-10-16T21:00:00-03:00 até 2025-10-16T23:30:00-03:00Data de Lançamento (Publicação):
2025-10-17T12:00:00-03:00Série Principal (sem Data de Lançamento)
└─ Periodo: início da gravação do 1º ep → fim da gravação do último ep
├── Episódio 01 (com Periodo E Data de Lançamento)
├── Episódio 02 (com Periodo E Data de Lançamento)
└── Episódio 03 (com Periodo E Data de Lançamento)
Periodo (gravação), NÃO tem Data de LançamentoPeriodo e Data de Lançamento)Resumo do Episodio# Série
youtuber_create_series(
title="The Legend of Heroes",
sinopse="Série completa sobre...",
total_episodes=10,
first_recording="2025-10-16T21:00:00-03:00",
recording_interval_days=1,
publication_hour=12,
icon="🎮"
)
# Episódio
youtuber_create_episode(
parent_id=series_id,
episode_number=1,
title="Episódio 01",
recording_date="2025-10-16T21:00:00-03:00",
publication_date="2025-10-17T12:00:00-03:00",
resumo_episodio="Sinopse da série completa...", # Obrigatório no ep 1
icon="📺"
)
SEMPRE usar GMT-3 (São Paulo)
NUNCA usar UTC
Com Horário:
'start': '2025-10-16T19:00:00-03:00'
'end': '2025-10-16T21:00:00-03:00'
Sem Horário (apenas data):
'start': '2025-10-16'
'end': '2025-10-30'
from datetime import datetime, timezone, timedelta
SAO_PAULO_TZ = timezone(timedelta(hours=-3))
dt = datetime(2025, 10, 16, 19, 0, 0, tzinfo=SAO_PAULO_TZ)
data_notion = dt.isoformat() # '2025-10-16T19:00:00-03:00'
Emojis SEMPRE como ícone da página
NUNCA no título do card
# ✅ CORRETO
{
"icon": {"emoji": "🎓"}, # Ícone aqui
"properties": {
"Project name": {
"title": [{"text": {"content": "Meu Curso"}}] # Sem emoji
}
}
}
# ❌ ERRADO
"title": [{"text": {"content": "🎓 Meu Curso"}}]
WORK:
🚀, 💼, 🏢📋, ✅, 🔧PERSONAL:
👤, 📝, 🎯✅, 📌, ⚡STUDIES:
🎓, 📚, 🎯📖, 📑📑, 📂🎯, 📝, 💡YOUTUBER:
🎬, 🎮, 📺📺, 🎥, ▶️Sub-itens DEVEM ter campo de relação preenchido
| Base | Para Criar Sub-item | Campo a Usar | Valor |
|------|---------------------|--------------|-------|
| WORK | Sub-item de projeto | item_principal | ID do projeto pai |
| PERSONAL | Subtarefa | tarefa_principal | ID da tarefa pai |
| STUDIES | Aula de curso | parent_item | ID do curso/seção |
| YOUTUBER | Episódio de série | item_principal | ID da série |
# 1. Criar projeto principal
project_id = work_create_project(
title="Projeto Principal",
cliente="Astracode",
projeto="ExpenseIQ"
)
# 2. Criar sub-item LINKADO
task_id = work_create_task(
parent_id=project_id, # ← VÍNCULO
title="Sub-item 1"
)
| Base | Campo de Data | Formato |
|------|---------------|---------|
| WORK | Periodo | Com horário (ex: 2025-10-16T09:00:00-03:00) |
| PERSONAL | Data | Com horário (ex: 2025-10-16T19:00:00-03:00) |
| STUDIES | Período (com acento) | Sem horário para cursos/seções, com horário para aulas |
| YOUTUBER | Periodo + Data de Lançamento | Ambos com horário |
Antes de criar qualquer card:
| Base | Você Passa | Vira no Notion |
|------|------------|----------------|
| WORK | title | Nome do projeto |
| | cliente | Cliente |
| | projeto | Projeto |
| | prioridade | Prioridade |
| | periodo | Periodo |
| | item_principal | item principal |
| PERSONAL | title | Nome da tarefa |
| | atividade | Atividade |
| | data | Data |
| | tarefa_principal | tarefa principal |
| STUDIES | title | Project name |
| | categorias | Categorias |
| | prioridade | Prioridade |
| | tempo_total | Tempo Total |
| | periodo | Período |
| | parent_item | Parent item |
| YOUTUBER | title | Nome do projeto |
| | periodo | Periodo |
| | data_lancamento | Data de Lançamento |
| | resumo_episodio | Resumo do Episodio |
| | item_principal | item principal |
# Via MCP tool
project = work_create_project(
title="Implementar Feature X",
cliente="Astracode",
projeto="ExpenseIQ",
prioridade="Alta",
icon="🚀"
)
# Criar subtarefas
for task_title in ["Mapear requisitos", "Implementar", "Testar"]:
work_create_task(
parent_id=project["id"],
title=task_title,
icon="📋"
)
# Curso (sem horário)
course = study_create_course(
title="FIAP IA para Devs - Fase 5",
categorias=["FIAP", "Inteligência Artificial"],
periodo={"start": "2025-01-15", "end": "2025-03-31"},
tempo_total="80:00:00",
icon="🎓"
)
# Seção (sem horário)
section = study_create_section(
parent_id=course["id"],
title="Seção 1: Fundamentos",
periodo={"start": "2025-01-15", "end": "2025-01-31"},
tempo_total="16:00:00",
icon="📑"
)
# Aula (com horário, respeita 19h-21h)
class_card = study_create_class(
parent_id=section["id"],
title="Aula 1: Introdução",
start_time="2025-01-15T19:00:00-03:00",
duration_minutes=120, # 2 horas (19:00-21:00)
icon="🎯"
)
# Série completa (gera episódios automaticamente)
series = youtuber_create_series(
title="The Legend of Heroes",
sinopse="Série completa sobre...",
total_episodes=10,
first_recording="2025-10-16T21:00:00-03:00",
recording_interval_days=1,
publication_hour=12,
icon="🎮"
)
# Ou criar episódio individual
episode = youtuber_create_episode(
parent_id=series["id"],
episode_number=1,
title="Episódio 01",
recording_date="2025-10-16T21:00:00-03:00",
publication_date="2025-10-17T12:00:00-03:00",
resumo_episodio="Sinopse da série completa...", # Obrigatório no ep 1
icon="📺"
)
data_lancamento, Episódios COM data_lancamento# ❌ ERRADO - YOUTUBER
'status': 'Para Fazer' # Não existe nesta base
# ✅ CORRETO - YOUTUBER
'status': 'Não iniciado'
# ❌ ERRADO - PERSONAL
'periodo': {...} # Campo não existe
# ✅ CORRETO - PERSONAL
'data': {...} # Campo correto
# ❌ ERRADO - STUDIES
'item_principal': 'id' # Campo errado
# ✅ CORRETO - STUDIES
'parent_item': 'id' # Campo correto
# ❌ ERRADO
'title': '🎓 Meu Curso'
# ✅ CORRETO
'title': 'Meu Curso', 'icon': '🎓'
# ❌ ERRADO - Seção de curso
'periodo': {'start': '2025-10-16T19:00:00-03:00'} # Não deve ter horário
# ✅ CORRETO - Seção de curso
'periodo': {'start': '2025-10-16'} # Apenas data
notion-automation-suiteconfig/notion/ (compromissos, projetos e informações pessoais por frente)config/CONTEXTO_GERAL.md (horários e rotina - NUNCA duplicar aqui)Sempre usar o MCP customizado notion-automation-suite para garantir que todas as regras sejam respeitadas automaticamente.
testing
Execução e análise de testes automatizados
development
Gera resumos didáticos extensos e estruturados de aulas/cursos para cards do Notion. Use ao resumir aulas, apostilas, transcrições ou materiais de estudo para incluir no corpo do card (não apenas no campo Descrição), com flashcards, exemplos de código, diagramas Mermaid, mapa conceitual e perguntas de reforço.
development
Padroniza documentação existente no formato canônico Spec-Driven. Remove duplicação e melhora rastreabilidade.
development
Processo universal e repetível para criar especificações a partir de qualquer input (texto, docs, código). Usado em Plan mode.