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.
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"}'
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étodo | Caminho | Permissão | O que faz |
|---|---|---|---|
| GET | /health | pública | Status do serviço e versão. |
| GET | / | pública | Lista os endpoints disponíveis. |
| GET | /api/knowledge/search | read | Busca no Knowledge Book (query, search_type, limit, offset, filters). |
| GET | /api/knowledge/search/tags | read | Itens que têm qualquer uma das tags informadas (tags=a,b), com as tags que mais batem primeiro. |
| GET | /api/knowledge/:id/related | read | Conhecimentos relacionados ao item informado. |
| GET | /api/knowledge/trending-tags | read | Tags mais usadas da organização. |
| GET | /api/knowledge/needing-review | read | Fila de revisão: itens que precisam de validação humana. |
| GET | /api/knowledge/high-confidence | read | Itens com confiança VERIFIED ou OFFICIAL. |
| GET | /api/knowledge/embeddings/stats | read | Quantos itens já têm embedding e quantos faltam. |
| POST | /api/knowledge/classify | write | Classifica um texto: tipo, confiança, tags e resumo. Corpo: title, content, source_system. |
| POST | /api/knowledge/:id/validate | write | Registra um voto de validação: approve, reject, needs_review ou mark_outdated. |
| POST | /api/knowledge/:id/feedback | read | Feedback de utilidade: helpful (obrigatório) e comment. |
| POST | /api/knowledge/embeddings/generate | write | Gera embeddings para os itens que ainda não têm. |
| POST | /api/mcp | read | Servidor 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.
| Status | Quando | Mensagem |
|---|---|---|
| 400 | Parâmetro ou corpo inválido, JSON malformado, UUID inválido | Invalid request |
| 401 | Sem cabeçalho, esquema desconhecido, chave inválida ou expirada, token inválido | Missing authorization header, Invalid authorization scheme, Invalid API key, API key expired, Invalid token |
| 403 | Chave sem a permissão necessária | Insufficient permissions |
| 404 | Rota inexistente | Not 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.
POST https://SEU-HOST/api/mcp, com Authorization: Key SUA_CHAVE. O modo é stateless e responde JSON ou SSE.| Ferramenta | Tipo | Para que serve |
|---|---|---|
| search_knowledge | leitura | Busca no Knowledge Book com os quatro modos. |
| search_knowledge_by_tags | leitura | Busca por uma ou mais tags. |
| get_related_knowledge | leitura | Itens relacionados a um conhecimento. |
| get_trending_tags | leitura | Tags mais usadas. |
| list_knowledge_needing_review | leitura | Fila de revisão humana. |
| list_high_confidence_knowledge | leitura | Conhecimentos de alta confiança. |
| get_embedding_stats | leitura | Cobertura de embeddings. |
| give_knowledge_feedback | leitura | Registra se um item foi útil. |
| classify_knowledge | escrita | Classifica e armazena um novo conhecimento. |
| validate_knowledge | escrita | Registra 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.
| Comando | O que faz | Opções principais |
|---|---|---|
| vertal ingest | Importa conhecimento de fontes externas. | --source gitmoom | documentation | deployment_logs | github | all · --docs-path |
| vertal classify | Classifica um texto. | --title, --content, --source |
| vertal embed | Gera 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 stats | Estatí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ável | Usada por | Descrição |
|---|---|---|
| SUPABASE_URL | API, CLI | URL do projeto Supabase. |
| SUPABASE_KEY | API, CLI | Chave de serviço do Supabase. |
| PORT | API | Porta HTTP (padrão 3000). |
| CORS_ORIGIN | API | Origens permitidas para CORS. |
| OPENROUTER_API_KEY | Embeddings | Chave do OpenRouter. Sem ela, a geração de embeddings falha antes de chamar o provedor. |
| EMBEDDINGS_API_URL | Embeddings | Base de um provedor compatível com OpenAI (padrão https://openrouter.ai/api/v1). |
| EMBEDDINGS_MODEL | Embeddings | Modelo (padrão openai/text-embedding-3-small, 1536 dimensões). |
| VERTAL_API_URL / VERTAL_API_KEY | MCP stdio | Endereço e chave usados pelo executável local. |
| GITMOOM_API_URL / GITMOOM_API_KEY | Ingestão | Fonte gitmoom. |
| GITHUB_OWNER / GITHUB_REPO / GITHUB_TOKEN | Ingestão | Fonte GitHub. |
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.