Vertal Dephin
KUBO Protocol · Knowledge Book

Conhecimento da sua organização,
pronto para humanos e agentes de IA.

Guarde, classifique, valide e busque conhecimento técnico com busca semântica e textual. Tudo por uma API REST, um servidor MCP para agentes de IA e uma CLI.

11endpoints REST de conhecimento
10ferramentas MCP
20tipos de conhecimento
1536dimensões de embedding

Começar em três passos

Todas as chamadas são JSON. Use uma chave de API no cabeçalho Authorization.

Obtenha uma chave de API

As chaves são guardadas como hash SHA-256 na tabela api_keys, com organização, permissões (read e/ou write) e validade opcional. Cada uso é registrado em api_key_logs.

Faça sua primeira busca

curl "https://SEU-HOST/api/knowledge/search?query=deploy+pnpm&limit=5" \
  -H "Authorization: Key SUA_CHAVE"

Classifique um novo conhecimento

curl -X POST "https://SEU-HOST/api/knowledge/classify" \
  -H "Authorization: Key SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{"title":"Como corrigir CORS","content":"Adicione o header e reinicie o express.","source_system":"vertal"}'
Chaves com permissão read podem buscar e consultar. Endpoints de escrita (classificar, validar e gerar embeddings) exigem write; caso contrário a resposta é 403.

Endpoints

Todos ficam sob /api/knowledge e exigem autenticação. Os endpoints públicos são / e /health.

MétodoCaminhoPermissãoO que faz
GET/healthpúblicaStatus do serviço e versão.
GET/públicaLista os endpoints disponíveis.
GET/api/knowledge/searchreadBusca no Knowledge Book (query, search_type, limit, offset, filters).
GET/api/knowledge/search/tagsreadItens que têm qualquer uma das tags informadas (tags=a,b), com as tags que mais batem primeiro.
GET/api/knowledge/:id/relatedreadConhecimentos relacionados ao item informado.
GET/api/knowledge/trending-tagsreadTags mais usadas da organização.
GET/api/knowledge/needing-reviewreadFila de revisão: itens que precisam de validação humana.
GET/api/knowledge/high-confidencereadItens com confiança VERIFIED ou OFFICIAL.
GET/api/knowledge/embeddings/statsreadQuantos itens já têm embedding e quantos faltam.
POST/api/knowledge/classifywriteClassifica um texto: tipo, confiança, tags e resumo. Corpo: title, content, source_system.
POST/api/knowledge/:id/validatewriteRegistra um voto de validação: approve, reject, needs_review ou mark_outdated.
POST/api/knowledge/:id/feedbackreadFeedback de utilidade: helpful (obrigatório) e comment.
POST/api/knowledge/embeddings/generatewriteGera embeddings para os itens que ainda não têm.
POST/api/mcpreadServidor MCP (Streamable HTTP). Veja a seção MCP.

Formato de respostas e erros

Erros de validação retornam 400 com error: "Invalid request" e uma lista em details.

StatusQuandoMensagem
400Parâmetro ou corpo inválido, JSON malformado, UUID inválidoInvalid request
401Sem cabeçalho, esquema desconhecido, chave inválida ou expirada, token inválidoMissing authorization header, Invalid authorization scheme, Invalid API key, API key expired, Invalid token
403Chave sem a permissão necessáriaInsufficient permissions
404Rota inexistenteNot found (JSON com path e method)

Busca

A busca roda sobre o mesmo índice nos quatro modos. Os resultados vêm sempre com a mesma forma.

Modos de busca (search_type)

combined padrão: combina ranking semântico e textual.
fulltext casa palavras.
metadata casa títulos.
semantic usa embeddings (vetores de 1536 dimensões).

Parâmetros e filtros

query obrigatório · limit de 1 a 100 (padrão 20) · offset para paginação · filters.knowledge_type e filters.confidence_level.

Exemplo de resposta

{
  "query": "deploy",
  "count": 1,
  "results": [{
    "id": "d9a13b67-2b81-4751-aa04-a51760a2243d",
    "title": "Deploy pnpm",
    "description": "How to",
    "source_system": "vertal",
    "knowledge_type": "PROCEDURE",
    "confidence_level": "HIGH",
    "relevance_score": 0.4
  }]
}

Validação e confiança

Cada voto em /validate pode trazer confidence_vote (increase, decrease ou maintain). A confiança do item é a média dos votos, e um voto por revisor é substituído se ele votar de novo.

Servidor MCP

Para agentes de IA. Expõe as mesmas capacidades da API como ferramentas. Pode ser usado remotamente por HTTP ou localmente por stdio.

HTTP: POST https://SEU-HOST/api/mcp, com Authorization: Key SUA_CHAVE. O modo é stateless e responde JSON ou SSE.
FerramentaTipoPara que serve
search_knowledgeleituraBusca no Knowledge Book com os quatro modos.
search_knowledge_by_tagsleituraBusca por uma ou mais tags.
get_related_knowledgeleituraItens relacionados a um conhecimento.
get_trending_tagsleituraTags mais usadas.
list_knowledge_needing_reviewleituraFila de revisão humana.
list_high_confidence_knowledgeleituraConhecimentos de alta confiança.
get_embedding_statsleituraCobertura de embeddings.
give_knowledge_feedbackleituraRegistra se um item foi útil.
classify_knowledgeescritaClassifica e armazena um novo conhecimento.
validate_knowledgeescritaRegistra um voto de validação.

Cada ferramenta valida a entrada com um esquema. Entrada inválida retorna erro de ferramenta, sem chamar a API. Erros da API viram isError com a mensagem original.

Local (stdio)

Depois do build, o pacote vertal-mcp instala o executável vertal-mcp (dist/stdio.js). Ele lê VERTAL_API_URL e VERTAL_API_KEY.

{
  "mcpServers": {
    "vertal": {
      "command": "vertal-mcp",
      "env": {
        "VERTAL_API_URL": "https://SEU-HOST",
        "VERTAL_API_KEY": "SUA_CHAVE"
      }
    }
  }
}

CLI vertal

Para operar a base direto do terminal, com acesso ao banco. Os comandos pedem --org-id e, quando aplicável, --user-id.

ComandoO que fazOpções principais
vertal ingestImporta conhecimento de fontes externas.--source gitmoom | documentation | deployment_logs | github | all · --docs-path
vertal classifyClassifica um texto.--title, --content, --source
vertal embedGera embeddings pendentes.--org-id
vertal search <query>Busca no terminal.--type semantic | fulltext | metadata | combined · --limit (padrão 10)
vertal validate <knowledgeId>Registra validação.--action approve | reject | needs_review | mark_outdated · --user-id · --comment
vertal statsEstatísticas da base.--org-id

Fontes de ingestão

gitmoom documentation deployment_logs github · configuração em GITMOOM_API_URL, GITMOOM_API_KEY, GITHUB_OWNER, GITHUB_REPO, GITHUB_TOKEN.

Modelo de dados

Definido nas migrações SQL de infrastructure/supabase/migrations.

Tipos de conhecimento (20)

FACTCONCEPTTUTORIALPROCEDURESOLUTIONBUGDECISIONARCHITECTURECODE_PATTERNSECURITY_RULEPROMPTWORKFLOWDOCUMENTATIONRESEARCHEXPERIMENTLESSON_LEARNEDAPI_REFERENCEPROJECT_KNOWLEDGEBUSINESS_RULEPRODUCT_KNOWLEDGE

Confiança

UNVERIFIEDLOWMEDIUMHIGHVERIFIEDOFFICIAL

Classificação

PUBLICINTERNALPRIVATESENSITIVESECRET

Status

draftpublishedarchived

Permissões de chave

read buscar e consultar, enviar feedback e acessar o MCP.
write classificar, validar e gerar embeddings.

Chaves também podem ter expires_at e status active, revoked ou expired.

Multi-organização

Toda consulta é filtrada pela organização da chave (org_id). Uma chave nunca enxerga dados de outra organização.

Configuração

Variáveis de ambiente lidas pelo serviço.

VariávelUsada porDescrição
SUPABASE_URLAPI, CLIURL do projeto Supabase.
SUPABASE_KEYAPI, CLIChave de serviço do Supabase.
PORTAPIPorta HTTP (padrão 3000).
CORS_ORIGINAPIOrigens permitidas para CORS.
OPENROUTER_API_KEYEmbeddingsChave do OpenRouter. Sem ela, a geração de embeddings falha antes de chamar o provedor.
EMBEDDINGS_API_URLEmbeddingsBase de um provedor compatível com OpenAI (padrão https://openrouter.ai/api/v1).
EMBEDDINGS_MODELEmbeddingsModelo (padrão openai/text-embedding-3-small, 1536 dimensões).
VERTAL_API_URL / VERTAL_API_KEYMCP stdioEndereço e chave usados pelo executável local.
GITMOOM_API_URL / GITMOOM_API_KEYIngestãoFonte gitmoom.
GITHUB_OWNER / GITHUB_REPO / GITHUB_TOKENIngestãoFonte GitHub.
Nunca coloque chaves em código ou em commits. Configure-as como variáveis de ambiente do serviço.

Status do projeto

O que já está pronto e o que vem a seguir.

✔ Fase 1: API de conhecimento

Busca, classificação, validação, feedback, fila de revisão, tags, relacionados, estatísticas e embeddings.

✔ Fase 2: servidor MCP

10 ferramentas via HTTP em /api/mcp e via stdio, com validação de entrada.

✔ Fase 3: testes offline

Suíte Jest que roda sem banco, sem rede e sem chave, com Supabase, embeddings e fetch simulados.

✔ Embeddings via OpenRouter

Geração em lote com openai/text-embedding-3-small, validando 1536 dimensões.

Em breve Projetos e builds

Gestão de projetos, builds, deploys e contêineres.

Planejado Gestão de chaves pela API

Criação e revogação de chaves por endpoint, hoje feitas direto no banco.