MCP — Embrapa4Dev
O servidor Embrapa4Dev MCP expõe uma biblioteca de snippets BootstrapBlazor para assistentes de IA das IDEs. Conectado via Model Context Protocol (MCP), permite que o assistente consulte automaticamente exemplos validados antes de gerar código .NET/Blazor.
Endpoint:
https://mcp-e4devia-d.nuvem.ti.embrapa.br/mcp
Fluxo de uso
Sempre que você faz uma pergunta sobre implementação .NET/Blazor/BootstrapBlazor, o assistente executa automaticamente os passos abaixo — sem precisar de instruções manuais.
- Recuperar sessões passadas similares
—
recall_similar_sessionsbusca histórico relevante para evitar retrabalho (limiar 0.75; zero resultado é normal em tópico novo). - Recuperar convenções institucionais (em paralelo com o passo 1)
—
get_project_conventionstraz regras curadas pelo Arquiteto. Convenção sempre prevalece sobre snippet em caso de conflito. - Buscar snippets
—
search_snippetsfaz busca híbrida (semântica + lexical) na biblioteca de exemplos validados, nas 4 linguagens (razor,csharp,javascript,json). - Avaliar aderência ao cenário
—
search_snippetsjá retorna ocodecompleto de cada resultado; filtrar portitle/description/tagscontra o cenário real. Se nada aderir, perguntar ao desenvolvedor se pode buscar HTML/CSS puro como último recurso. - Obter metadados extras (opcional)
—
get_snippet_detailsó é necessário quando faltam dados que o search não traz (status de embedding, autor, datas). - Implementar com os snippets como fonte primária — padrões exatos da versão de BootstrapBlazor instalada no projeto.
- Avaliar a sessão (obrigatório)
—
rate_interactionenvia feedback para melhoria contínua da biblioteca.
Arquitetura
| Componente | Tecnologia |
|---|---|
| Framework | .NET 10 / ASP.NET Core |
| Protocolo | Model Context Protocol (MCP) — Streamable HTTP |
| Banco de dados | PostgreSQL + extensão pgvector |
| Embeddings | Ollama (busca semântica) |
| Rastreamento de sessão | Header HTTP mcp-session-id |
| Telemetria | Canal de background (duração, query, contagem de resultados) |
Referência das ferramentas MCP
| Ferramenta | Finalidade | Quando chamar |
|---|---|---|
recall_similar_sessions |
Sessões passadas similares à tarefa atual | Passo 1 — sempre, antes de tudo |
get_project_conventions |
Regras institucionais curadas pelo Arquiteto (arquitetura, nomenclatura, integração) | Passo 1b — sempre, em paralelo com o passo 1, sempre com topic. Convenção prevalece sobre snippet em conflito |
list_components |
Lista todos os componentes com snippets disponíveis | Passo 2a — se o nome do componente for desconhecido (paralelo ao passo 1) |
search_snippets |
Busca híbrida (semântica + lexical); resultado já traz o code completo |
Passo 2b — sempre (2 queries em paralelo se componente tiver ≥ 5 snippets) |
get_snippet_detail |
Metadados extras de um snippet (o code já veio do search) |
Passo 3 — opcional, só quando falta metadado (embeddingStatus, datas, autor) ou o code do search chegou truncado |
list_snippets |
Inventário paginado (id, componente, linguagem, título, tags) com filtros componentName/language, sem ranking de relevância |
Levantamento exaustivo ou checagem de duplicidade antes de contribuir um snippet novo |
ping |
Retorna pong |
Só para diagnosticar problemas de transporte MCP |
rate_interaction |
Envia feedback de utilidade para aprendizado contínuo | Passo 5 — fim de toda sessão MCP |
recall_similar_sessionsRecupera sessões de desenvolvimento anteriores similares à tarefa atual, fornecendo contexto sobre padrões e decisões já tomadas no projeto.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
query | string | Sim | Descrição em linguagem natural do que se deseja implementar |
top_k | int | Não | Número de sessões a retornar (1–10, padrão: 3) |
Retorna: sessionId, toolName, turnText, similarityScore, createdAt, sessionRating
get_project_conventionsRetorna as regras institucionais curadas pelo Arquiteto — decisões de arquitetura, padrões de nomenclatura, padrões de integração. Convenção prevalece sobre snippet quando há conflito.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
topic | string | Sim | Um dos valores: ui-patterns, http, i18n, config, audit, auth, security, data-access. Escolher 1–2 tópicos relevantes ao cenário e chamar em paralelo |
⚠️ Nunca chamar sem topic: o payload completo tem ~64 KB e estoura o limite de resultado da maioria dos harnesses — a chamada falha ou é despejada em arquivo que precisa ser fatiado manualmente.
Retorna: convenções do tópico pedido; se topic for desconhecido/incorreto, retorna vazio + availableTopics (nunca é erro)
search_snippetsBusca híbrida (semântica + lexical) sobre a biblioteca de snippets BootstrapBlazor, cobrindo as 4 linguagens (razor, csharp, javascript, json). O nome literal do componente/método na query eleva o resultado certo via lexicalScore.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
query | string | Sim | Descrição comportamental (ação do usuário + reação do componente + gestão de estado), incluindo nomes exatos de componente/método/callback conhecidos |
component | string | Não | Nome do componente BootstrapBlazor (ex.: Table, Form, Modal) |
category | string | Não | Categoria (ex.: Data Display, Form Input) |
top_k | int | Não | Número de resultados (1–20, padrão: 5) |
Retorna: id, title, componentName, categoryName, description, code, tags, language, bootstrapBlazorVersion, similarityScore, lexicalScore, combinedScore (ordena os resultados)
Quando nenhum snippet ultrapassa o limiar de similaridade, a resposta muda de formato: em vez de array puro, retorna
{ message, results[] } com cada item marcado partial_match: true.
Itens com essa flag nunca são fonte primária de implementação — servem só de inspiração para refinar a query.
list_snippetsInventário paginado da biblioteca — sem ranking de relevância. Útil para levantamento exaustivo ou checagem de duplicidade antes de contribuir um snippet novo.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
componentName | string | Não | Filtro por componente BootstrapBlazor |
language | string | Não | Filtro por linguagem (razor, csharp, javascript, json) |
Retorna: lista paginada com id, componentName, language, title, tags
pingSem parâmetros. Retorna pong. Usar apenas para diagnosticar problemas de transporte MCP.
list_componentsLista todos os componentes BootstrapBlazor que possuem snippets na biblioteca, com a contagem de exemplos disponíveis por componente.
Sem parâmetros.
Retorna: array de { componentName, snippetCount }
get_snippet_detail OpcionalOpcionalNa maioria das sessões é desnecessário — search_snippets já retorna o code completo.
Chamar apenas quando faltar algo que o search não traz: metadados extras (embeddingStatus, createdAt/updatedAt, createdBy),
confirmar versão/autoria antes de reportar divergência, ou se o code do resultado do search chegou truncado pelo harness.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | Guid | Sim | UUID do snippet obtido via search_snippets |
Retorna: McpSnippetDto completo incluindo createdAt, updatedAt, createdBy, embeddingStatus
rate_interaction ObrigatórioObrigatórioSubmete uma avaliação de utilidade para a sessão. Deve ser chamado ao final de toda sessão em que ferramentas MCP foram utilizadas — o assistente não deve aguardar o desenvolvedor solicitar.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
score | int | Sim | Nota de 1 (nada útil) a 5 (extremamente útil) |
comment | string | Não | Observação sobre o que ajudou ou o que faltou |
Guia de pontuação:
| Nota | Significado |
|---|---|
| 5 | Snippet encontrado, usado diretamente, implementação correta |
| 4 | Snippet encontrado, precisou de adaptação leve |
| 3 | Snippet parcialmente útil; adaptação significativa |
| 2 | Snippet encontrado mas enganoso/desatualizado; foi ignorado |
| 1 | Nenhum snippet relevante encontrado; MCP não ajudou na sessão |
https://mcp-e4devia-d.nuvem.ti.embrapa.br/mcpPasso 1 — Configure o servidor MCP em Trae → Preferences → MCP:
{
"mcpServers": {
"e4devia-mcp": {
"url": "https://mcp-e4devia-d.nuvem.ti.embrapa.br/mcp"
}
}
}
Passo 2 — Baixe o arquivo de skill acima e peça ao agente no chat do Trae:
Instale a skill embrapa4dev neste projeto: copie o arquivo embrapa4dev.mdc que baixei para .trae/skills/embrapa4dev/embrapa4dev.mdc
O agente criará o diretório se necessário. O frontmatter alwaysApply: true ativa a skill em todas as conversas automaticamente.
Passo 1 — Adicione o servidor MCP via CLI:
claude mcp add e4devia-mcp --transport http https://mcp-e4devia-d.nuvem.ti.embrapa.br/mcp
Passo 2 — Baixe o arquivo de skill acima e peça em uma sessão Claude Code:
Instale a skill embrapa4dev neste projeto: copie o arquivo embrapa4dev.md que baixei para .claude/skills/embrapa4dev/SKILL.md
O agente criará o diretório e renomeará o arquivo para SKILL.md. Verifique com /skills dentro de uma sessão Claude Code.
Passo 1 — Configure em Cursor → Settings → MCP:
{
"mcpServers": {
"e4devia-mcp": {
"url": "https://mcp-e4devia-d.nuvem.ti.embrapa.br/mcp"
}
}
}
Passo 2 — Baixe o arquivo de skill acima e peça ao agente no chat do Cursor:
Instale a skill embrapa4dev neste projeto: copie o arquivo embrapa4dev.mdc que baixei para .cursor/skills/embrapa4dev/embrapa4dev.mdc
O agente criará o diretório se necessário. O frontmatter alwaysApply: true ativa a skill em todas as conversas automaticamente.
Passo 1 — Configure em Windsurf → Settings → MCP Servers:
{
"mcpServers": {
"e4devia-mcp": {
"url": "https://mcp-e4devia-d.nuvem.ti.embrapa.br/mcp"
}
}
}
Passo 2 — Baixe o arquivo de skill acima e peça ao agente no chat do Windsurf:
Instale a skill embrapa4dev neste projeto: copie o arquivo embrapa4dev.md que baixei para .windsurf/skills/embrapa4dev/embrapa4dev.md
O agente criará o diretório se necessário.
Passo 1 — Configure o servidor MCP em .vscode/mcp.json:
{
"servers": {
"e4devia-mcp": {
"type": "http",
"url": "https://mcp-e4devia-d.nuvem.ti.embrapa.br/mcp"
}
}
}
Passo 2 — Baixe o arquivo de skill acima e peça ao Copilot no chat do VS Code:
Adicione o conteúdo do arquivo copilot-instructions-snippet.md que baixei ao arquivo .github/copilot-instructions.md deste projeto (crie-o se não existir)
O agente criará o arquivo se necessário e fará o merge do conteúdo sem sobrescrever instruções existentes.
Verificação
Após instalar, faça uma pergunta de implementação no chat do assistente:
"Como implemento uma tabela BootstrapBlazor com paginação server-side?"
O assistente deve chamar recall_similar_sessions e search_snippets
automaticamente antes de responder. Se as ferramentas não forem chamadas, confirme que
o servidor MCP está conectado e a skill foi instalada na IDE.
Arquivos de skill
| Arquivo | Formato | IDE alvo | Download |
|---|---|---|---|
embrapa4dev.md |
Markdown | Claude Code, Windsurf | Download |
embrapa4dev.mdc |
MDC (com frontmatter) | Cursor, Trae | Download |
copilot-instructions-snippet.md |
Markdown (trecho) | VS Code GitHub Copilot | Download |
claude-md-snippet.md |
Markdown (trecho) | Qualquer projeto — inserir no CLAUDE.md |
Download |
O arquivo CLAUDE.md é lido automaticamente pelo Claude Code no início de cada sessão
e orienta o assistente sobre as convenções do projeto. Adicione o bloco abaixo ao CLAUDE.md
do seu projeto para que o assistente consulte o MCP Embrapa4Dev sempre que trabalhar
com componentes BootstrapBlazor.
Adicionar ao CLAUDE.md do projeto
Passo 1 — Baixe o arquivo acima.
Passo 2 — Abra o projeto no Claude Code e peça:
Adicione o conteúdo do arquivo claude-md-snippet.md ao CLAUDE.md deste projeto
O Claude localizará ou criará o CLAUDE.md e inserirá o bloco de orientações na seção adequada.
Detalhamento das diretrizes
A skill deve ser invocada antes de escrever qualquer código que envolva:
- Componentes BootstrapBlazor no markup Razor:
Tab,Table,Modal,Toast,Form,Select,Uploade similares. - Código C# de suporte a componentes BB:
ToastService,IDbContextFactoryem páginas, callbacks comoOnQueryAsynceOnClickTabItemAsync, padrões JSInterop, uso de@ref.
| Linguagem | O que cobre | Exemplos |
|---|---|---|
razor |
Markup e layout de componentes | Estrutura de Tab, Table, Modal |
csharp |
Lógica, callbacks e serviços | OnQueryAsync, ToastService, @ref |
javascript |
JSInterop | window.open, foco, scroll |
json |
Configuração e localização | appsettings.json, Locales/*.json, seeds |
Uma feature costuma cruzar linguagens — busque snippets para cada parte (markup + C# + JS + JSON), não apenas o markup.
Snippets catalogados com componentName Html/* ou com a tag html
só devem ser usados quando o prompt solicitar explicitamente HTML/CSS puro.
Caso contrário, descarte-os e utilize o componente BootstrapBlazor nativo equivalente —
misturar HTML puro com componentes BB gera inconsistências visuais e quebra a API esperada pela versão instalada.
Quando nenhum snippet nativo aderir ao cenário, o assistente deve perguntar explicitamente ao desenvolvedor
se pode buscar HTML/CSS puro como alternativa, antes de usar qualquer snippet Html/*.
A resposta afirmativa do desenvolvedor é a "solicitação expressa" exigida por essa regra.
Sem confirmação, ou se o desenvolvedor recusar, o assistente implementa via documentação oficial
da versão de BootstrapBlazor instalada no projeto, declarando que nenhum snippet foi reutilizado.
Exemplo de uso integrado
Ao receber uma tarefa como "Adicionar uma tabela com paginação server-side", o assistente deve:
- Invocar
recall_similar_sessions— verificar sessões anteriores com padrão similar. - Invocar
get_project_conventionsem paralelo, comtopic="ui-patterns"— checar regras institucionais que se apliquem ao cenário. - Invocar
search_snippetscomquery="Table OnQueryAsync paginação server-side"(linguagemrazor). - Invocar
search_snippetsnovamente para a linguagemcsharp— callbackOnQueryAsync. - Avaliar os resultados contra o cenário real (interação, carga, estado) usando
title/description/tagse ocodejá retornado — descartar itenspartial_match: truee snippetsHtml/*não solicitados. - Se nada aderir, perguntar ao desenvolvedor se pode buscar HTML/CSS puro; só então (com confirmação) considerar
Html/*. - Implementar direto com o
codedos snippets escolhidos —get_snippet_detailsó se faltar metadado ou o código chegar truncado. - Implementar usando os snippets encontrados como fonte primária, respeitando as convenções institucionais quando houver conflito.
- Invocar
rate_interactionao final da sessão.
Além da skill embrapa4dev, as skills abaixo complementam o fluxo de desenvolvimento assistido por IA — uma para entender codebases e outra para reduzir consumo de tokens.
Transforma o codebase (código, documentação, PDFs, esquemas SQL) em um grafo de conhecimento consultável. Permite explorar conexões entre conceitos sem depender de busca textual — útil para entender arquitetura, dependências entre subsistemas e impacto de mudanças.
Instalação
Pré-requisitos: Python 3.10+ e uv (ou pipx).
uv tool install graphifyy
graphify install
Para uma IDE específica: graphify install --platform claude-code (suporta Claude Code, Cursor, Gemini CLI e outras).
Uso básico
| Comando | O que faz |
|---|---|
/graphify . | Constrói o grafo do diretório atual |
graphify query "pergunta" | Consulta o grafo em linguagem natural |
graphify path "A" "B" | Traça o caminho entre dois conceitos |
graphify explain "Conceito" | Explica um nó específico do grafo |
Saídas: graph.html (visualização interativa), GRAPH_REPORT.md (destaques e conexões)
e graph.json (grafo completo). Análise de código é local (AST determinístico, ~40 linguagens via tree-sitter);
identifica god nodes (conceitos mais conectados) e comunidades (subsistemas).
Faz o agente de IA responder de forma ultra-concisa — mesmas respostas técnicas com ~65% menos tokens de saída. Código, comandos, URLs e mensagens de erro permanecem intactos; só a narrativa é comprimida. Suporta Claude Code, Cursor, Codex, Gemini e outros.
Instalação
Requer Node ≥ 18. Um único comando detecta e instala em todos os agentes disponíveis:
# Windows PowerShell
irm https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.ps1 | iex
# macOS / Linux / WSL
curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh | bash
Uso básico
| Comando | O que faz |
|---|---|
/caveman [nível] | Ativa a compressão para a sessão (níveis: lite, full — padrão, ultra) |
/caveman-commit | Mensagens de commit convencionais e curtas |
/caveman-review | Comentários de revisão de PR em uma linha |
/caveman-stats | Exibe a economia de tokens da sessão |
/caveman-compress <arquivo> | Comprime arquivos de memória (ex.: CLAUDE.md) em ~46% |
Desativa com "normal mode" no chat. A compressão preserva o idioma original da conversa e afeta apenas tokens de saída — input e reasoning não mudam.
