{"ok":true,"data":{"name":"peski-mcp","version":"0.4.0","product":"Peski","mode":"dashboard-source-of-truth","auth":["supabase_jwt","mcp_api_key","legacy_advisor_api_key"],"key_stability_policy":"MCP keys are stable. Product updates should not require key rotation for normal capability expansion.","agent_update_policy":"Agents should read the manifest regularly to detect new tools, capabilities and operating guidance.","compatibility":{"existing_keys_continue_to_work":true,"authorization_model":"server_side_persona_capabilities"},"semantic_search_contract":{"enabled":true,"tool":"search-student-documents-semantic","embedding_model":"nomic-embed-text","embedding_dimensions":768,"generated_by":"client_agent","accepted_formats":["number[]","pgvector_string"],"fallback_tools":["search-student-documents-text","get-student-document-context"]},"resources":[{"id":"context","path":"/resources/context","description":"Contexto do usuario e personas MCP disponiveis."},{"id":"skills","path":"/resources/skills","description":"Mapa estrategico e skills operacionais do Peski."},{"id":"advisor-onboarding","path":"/resources/onboarding/advisor","description":"Onboarding estruturado para o agente do orientador."},{"id":"changelog","path":"/resources/changelog","description":"Resumo das ultimas evolucoes relevantes para agentes integrados."}],"tools":["switch-operating-context","list-students","get-student-journey-steps","get-student-tasks","list-recent-deliveries","list-pending-document-analyses","list-student-documents","get-student-document","get-student-document-context","search-student-documents-text","search-student-documents-semantic","get-delivery-review-brief","get-delivery-monitoring-brief","get-advisor-weekly-brief","list-analysis-history","get-student-analysis-thread","save-methodological-analysis","save-journey-analysis","create-orientation-meeting","update-orientation-meeting","delete-orientation-meeting","record-advisor-private-note","record-external-action","list-external-action-log","upsert-agent-preferences","publish-orientation-report","list-orientation-reports","set-report-visibility","list-orientation-messages","get-oral-check-context","save-oral-check","delete-oral-check"],"tool_descriptions":{"delete-oral-check":"Apaga uma checagem oral (a sessao + roteiro privado + respostas + a task da etapa). Params: session_id OU task_id. So funciona para aluno do proprio orientador. Use para remover uma checagem criada por engano.","get-oral-check-context":"Monta TODO o contexto para o agente do orientador GERAR uma checagem oral ancorada no aluno: config do orientador (modalidades, duracao, instrucoes ao assistente), projeto_texto (texto integral do documento de projeto), fichamentos, textos entregues, dissertacao/desenvolvimento, relatorios quinzenais, tarefas por etapa (com a etapa atual sinalizada), devolutivas do orientador (pareceres), mensagens do mensageiro e sessoes orais anteriores. Params: student_id (obrigatorio), step_id (opcional; default = etapa atual), tipo_sessao (autoria|compreensao|duvidas). Retorna tambem o contrato_saida (o formato do roteiro que voce deve gerar e mandar para save-oral-check). NAO inventa linha_pesquisa: se nao houver, omite. So funciona para aluno do proprio orientador.","save-oral-check":"Salva uma checagem oral PRE-GERADA pelo agente do orientador. O gabarito NUNCA chega ao dispositivo do aluno: o app recebe so a projecao das perguntas; gabarito, sinais de alerta e relatorio ficam no servidor (oral_check_plan_private). Params: student_id (obrigatorio), step_id (opcional; se dado, cria a task checagem_oral na etapa), tipo_sessao (autoria|compreensao|duvidas), roteiro (array, obrigatorio; cada item { ordem, tipo, pergunta, tipo_resposta(voz|digitacao), tts, tempo_estimado_seg, gabarito, sinais_alerta, follow_ups:[{when,pergunta}], reservas:[{pergunta}] }), relatorio (objeto template), duracao_prevista_seg. Cria a sessao com status \"disponivel\" para o aluno iniciar no app. Retorna session_id e roteiro_hash (referencia imutavel para avaliacao posterior).","list-orientation-messages":"Lista as mensagens trocadas entre aluno e orientador no mensageiro do app Peski (contexto da orientacao). Use para incorporar a conversa recente na analise metodologica do aluno. Params: student_id (obrigatorio), limit (int <=300, default 100). Retorna mensagens em ordem cronologica com sender_role (student|advisor), body e created_at.","publish-orientation-report":"PUBLICA um relatorio de orientacao em PDF sobre um aluno — este e o UNICO local de publicacao de relatorios no Peski. Use apenas quando o orientador aprovar e pedir para \"publicar\". Params: student_id (obrigatorio), title (obrigatorio), pdf_base64 (obrigatorio, o PDF em base64), step_refs (array de rotulos das etapas, ex [\"Etapa 6 - Projeto\"]), step_numbers (array de numeros das etapas, ex [6,7]), student_name (RECOMENDADO: nome do aluno para conferencia dupla — se divergir do aluno da chave, a publicacao e cancelada). SEGURANCA: so e possivel publicar para um aluno do proprio orientador dono da chave; qualquer outro aluno e rejeitado. Antes de publicar, CONFIRME o aluno correto. Retorna report_number (sequencial por aluno), student_name e published_at.","list-orientation-reports":"Lista os relatorios de orientacao de um aluno (numero, titulo, etapas, data) e o campo published_to_student (se ja esta visivel para o aluno). Param: student_id.","set-report-visibility":"Publica ou oculta um relatorio PARA O ALUNO (toggle). O relatorio nasce OCULTO; use published=true para faze-lo aparecer na aba \"Relatorios de Orientacao\" do aluno, ou published=false para ocultar. Params: published (boolean, obrigatorio) e report_id OU (student_id + report_number). So funciona para relatorio de um aluno do proprio orientador.","switch-operating-context":"Alterna a persona operacional ativa, especialmente coordinator -> advisor.","list-students":"Lista orientandos no escopo do chamador. Parametros: limit (int <=200), search (string, busca por nome ou email usando ilike). Retorna id, full_name, email, advisor_id, etc.","get-student-journey-steps":"Retorna todas as student_steps da jornada do aluno, ordenadas por global_number, com id, titulo, delivery_status, datas operacionais e esperadas. Uso tipico: achar o student_step_id da etapa N antes de criar uma reuniao vinculada (linked_step_id).","get-student-tasks":"Tarefas de um aluno com status CLARO (concluidas/pendentes/atrasadas), agrupadas por etapa (by_step), com a etapa ATUAL sinalizada (is_current) e uma reading_note. Feito para NAO confundir tarefa antiga de etapa ja concluida com atraso: neste banco a tarefa so tem status concluido|pendente e o ATRASO e CALCULADO pela due_date, contando SO quando a etapa NAO esta validada. Tarefa pendente de etapa validada = historico (pendentes_historico), nao e atraso. O summary traz total, concluidas, pendentes, em_andamento(=0), atrasadas e pendentes_historico; alem de overdue_tasks (o que de fato importa) e current_step. Param: student_id (obrigatorio). So retorna dados de aluno do proprio orientador (tenancy/RLS respeitados).","create-orientation-meeting":"Cria uma reuniao de orientacao e ESPELHA ela como tarefa do tipo reuniao na etapa do aluno (se linked_step_id for fornecido). Na UI do Peski, \"reuniao\" = student_step_tasks com task_type=reuniao e task_data.meeting_date/time. O MCP mantem os dois registros em sincronia automaticamente. Params principais: student_id, meeting_type (scheduled|occurred), scheduled_at ou occurred_at (ISO 8601), linked_step_id (student_steps.id da etapa alvo), agenda, duration_minutes, modality (online|presencial|hibrido). Para criar reuniao visivel na etapa 9 de um aluno: primeiro busque o student_step_id via get-student-journey-steps, depois chame este tool com linked_step_id=esse id + scheduled_at. A task aparece na UI automaticamente. O horario de scheduled_at deve vir com offset (ex.: 2026-09-01T10:00:00-03:00 para 10h de Brasilia); a UI mostra em horario de Brasilia. Ao criar reuniao agendada, o Peski JA sincroniza no Google Calendar do orientador (se ele tiver conectado o Google no Peski).","update-orientation-meeting":"Edita uma reuniao de orientacao existente pelo id. Param obrigatorio: meeting_id. Campos opcionais (patch parcial, so muda o que voce mandar): scheduled_at (ISO 8601 com offset), occurred_at, meeting_type (scheduled|occurred|cancelled), modality (online|presencial|hibrido), duration_minutes, agenda, summary, action_items, meeting_url. Re-espelha o horario (Brasilia) e o titulo na task da etapa e re-sincroniza o Google Calendar do orientador. Use para corrigir horario/agenda em vez de criar uma reuniao nova e duplicar.","delete-orientation-meeting":"Exclui uma reuniao de orientacao pelo id. Param obrigatorio: meeting_id. Remove a reuniao, a task espelhada da etapa e o evento do Google Calendar do orientador. Use para desfazer uma reuniao criada errada (ex.: duplicada ou com horario incorreto que nao dava pra corrigir).","list-pending-document-analyses":"Lista entregas em student_documents que foram marcadas como entregues e ainda exigem analise.","list-student-documents":"Lista documentos embutidos atuais do aluno no Peski.","get-student-document":"Retorna o documento embutido e, opcionalmente, suas versoes anteriores.","get-student-document-context":"Retorna documento, versoes, configuracao do orientador, analises previas e contexto de etapa.","search-student-documents-text":"Busca full-text em documentos do aluno.","search-student-documents-semantic":"Busca semantica em documentos do aluno usando embedding enviado pelo cliente.","save-journey-analysis":"Grava uma analise estruturada no historico novo de peski_journey_analyses.","record-external-action":"Registra no log do MCP uma acao executada fora do Peski.","list-external-action-log":"Consulta o historico de acoes externas registradas."},"capabilities_by_persona":{"institution_admin":["read:profiles","read:tasks","read:weekly_brief","write:preferences"],"coordinator":["read:profiles","read:tasks","read:files","read:weekly_brief","read:analysis","read:meetings","write:meetings","write:analysis","write:preferences","read:reports","write:reports"],"advisor":["read:profiles","read:tasks","read:files","read:weekly_brief","read:analysis","read:meetings","write:meetings","write:analysis","write:notes","write:preferences","read:reports","write:reports"],"student":["read:profiles","read:tasks","read:files","write:preferences"]}},"error":null}