No tópico anterior o agente ganhou mãos quando ligamos o MCP.
Agora vamos abrir a caixa: o que é o Model Context Protocol, por que ele existe —
e você vai construir o seu próprio servidor MCP que lista pods, lê logs
e mata pods no OpenShift.
Cada modelo/agente (M) precisa falar com cada ferramenta ou sistema (N). Sem padrão, são M × N integrações sob medida.
🔌
MCP é o USB-C dos agentes: um único protocolo entre o agente e qualquer ferramenta. Vira M + N.
♻️
Escreveu um servidor MCP uma vez? Qualquer agente que fale MCP passa a usá-lo — Claude, o seu agente do workshop, IDEs.
💡
A ideia central
MCP padroniza como um agente descobre e chama
ferramentas — não quais ferramentas. Você expõe capacidades
(listar pods, ler logs…) e qualquer host compatível sabe usá-las,
com os argumentos certos.
Definição
Um protocolo aberto entre agente e ferramentas
MCP (Model Context Protocol) é um protocolo aberto, baseado em
JSON-RPC 2.0, que padroniza a conexão entre aplicações de IA e fontes
externas de contexto e ação. O agente descobre o que existe e chama
de forma estruturada — nada de colar texto no prompt na mão.
🧭
Três verbos que importam
Descobrir (tools/list) · Chamar (tools/call)
· Receber o resultado estruturado de volta. É só isso — e é poderoso.
🤖
Host
a aplicação de IA (o seu agente)
🔗
Client
1 conexão MCP por servidor
🧰
Server
expõe ferramentas e dados
⛵
Sistema real
OpenShift, banco, API…
Arquitetura
Do agente ao cluster, em uma linha
tools/call → cliente→ servidor MCP→ ação no clusterresultado de volta
Capacidades
O que um servidor MCP expõe
🛠️ Tools
Ações que o agente pode executar — com nome, descrição e um schema de argumentos. Ex.: listar_pods(namespace). É o que vamos construir hoje.
📄 Resources
Dados que o agente pode ler como contexto — arquivos, registros, trechos de log — endereçados por URI.
💬 Prompts
Modelos de prompt reutilizáveis que o servidor oferece ao host — fluxos prontos que o usuário pode invocar.
🔎 Discovery
O host chama tools/list e recebe o catálogo com os schemas. O agente passa a saber, sozinho, o que existe e como chamar.
🎯
Hoje focamos em Tools
São o coração do "agente que age". Um servidor com 3 ferramentas
bem descritas já muda o jogo — o modelo escolhe qual chamar e com quais argumentos.
Como conversa
Transporte e o handshake
🖥️
stdio — servidor local, o host o inicia como subprocesso. Ótimo para ferramentas de desktop/IDE.
🌐
HTTP + SSE — servidor remoto, acessível pela rede. É o que usamos no cluster: o agente fala com o MCP server por uma Route.
🤝
initialize — toda sessão começa com um handshake: versão do protocolo, capacidades e clientInfo. Só depois vêm tools/list e tools/call.
⚠️
Detalhe que pega todo mundo
Se o initialize não mandar o clientInfo,
alguns servidores nunca respondem e o handshake trava. Foi exatamente o bug
que enfrentamos ao construir o Forge. Bom saber antes de depurar por horas.
Ciclo de vida
O que acontece numa chamada de ferramenta
01 · DESCOBRE
📇 tools/list
O host pede o catálogo. O servidor devolve nome, descrição e schema de cada ferramenta.
02 · DECIDE
🧠 o LLM escolhe
Diante da pergunta, o modelo decide qual ferramenta usar e monta os argumentos.
03 · CHAMA
📞 tools/call
O cliente envia a chamada. O servidor executa de verdade — aqui, fala com o OpenShift.
04 · RESPONDE
📦 result
O servidor devolve um resultado estruturado. O agente usa para responder ou encadear a próxima ação.
🔒
Determinístico e rastreável
Diferente de "o modelo escreveu um comando", a tool call é um contrato:
argumentos validados por schema, execução no servidor, resultado registrado. É isso que
torna o agente seguro o bastante para agir num cluster.
Governança
MCP Gateway: poder com controle
Dar ao agente uma ferramenta que mata pods é poderoso — e
precisa de guarda-corpos. Um MCP Gateway fica entre o agente e os servidores MCP
e aplica política: quais ferramentas são permitidas, para quem, com que limites.
✅
Permitir listar_pods e ver_logs para todos…
🛑
…mas exigir aprovação (ou bloquear) matar_pod, ou limitar a taxa (ex.: 5/min).
📊
E registrar tudo: quem chamou o quê, quando. Auditoria de ponta a ponta.
🧭
No workshop
Hoje você constrói o servidor MCP "cru", para sentir o poder.
Mais à frente colocamos o Gateway na frente e vemos, ao vivo, uma política
bloquear o kill e filtrar conteúdo — o mesmo servidor, agora governado.
Exercício 2 · Mão na massa
Construa seu MCP server em Quarkus
1️⃣ Scaffold
Um projeto Quarkus com a extensão quarkus-mcp-server-sse. Sem UI, sem banco — só ferramentas.
2️⃣ Três ferramentas
listar_pods, ver_logs(pod) e matar_pod(pod) — cada uma um método anotado com @Tool.
3️⃣ Deploy no seu namespace
Build binário e deploy no OpenShift, com permissão para ler/apagar pods do seu ambiente.
4️⃣ Ligue no seu agente
Aponte o toggle MCP do seu agente para a URL do seu servidor e peça: "liste meus pods".
🏁
Objetivo
Ao final, o seu agente vai matar um pod chamando uma ferramenta
que você escreveu — e você vai entender, na prática, por que o MCP é o que
transforma um chatbot num operador do cluster. O passo a passo está no seu Mission Control.
O código
Uma ferramenta é um método anotado
// Cada método @Tool vira uma ferramenta que o agente descobre e chama.@Singletonpublic classClusterTools {
@InjectKubernetesClient k8s;
@Tool(description = "Lista os pods de um namespace")
publicString listar_pods(@ToolArg(description = "Namespace") String namespace) {
return k8s.pods().inNamespace(namespace).list().getItems().stream()
.map(p -> p.getMetadata().getName() + " · " + p.getStatus().getPhase())
.collect(Collectors.joining("\n"));
}
@Tool(description = "Mata (deleta) um pod pelo nome")
publicString matar_pod(@ToolArg(description="Namespace") String namespace,
@ToolArg(description="Nome do pod") String pod) {
k8s.pods().inNamespace(namespace).withName(pod).delete();
return"pod " + pod + " deletado";
}
}
✨
O que o Quarkus faz por você
A extensão gera o schema JSON a partir da assinatura do método, expõe
o endpoint SSE e responde a tools/list/tools/call. Você escreve
só a lógica — a descrição do @Tool é o que o modelo lê para decidir usá-la.
Fechando o ciclo
Conecte e veja o agente agir
🌐
Seu servidor sobe com uma Route. Copie a URL do endpoint SSE (ex.: /mcp/sse).
🔌
No seu agente, ligue MCP e cole a URL. O agente faz o handshake e descobre suas 3 ferramentas.
🗣️
Peça em linguagem natural: "liste os pods do meu namespace", "mostre os logs do victim", "reinicie o victim matando o pod dele".
👀
Observe as tool calls aparecerem ao vivo — com argumentos e resultado. O agente escolheu, chamou e agiu.
🤖
Seu agente
toggle MCP ligado
🔗
MCP Client
handshake + tools/list
🧰
Seu MCP Server
listar · logs · matar
⛵
Seu namespace
pods de verdade
Bora construir
Do chat à ação
Quando o seu agente chamar uma ferramenta que você escreveu e um pod
sumir do cluster de verdade, o MCP deixa de ser sigla e vira poder. Três métodos
anotados — e o agente ganha mãos.