Aula 05 - Comunicação Cliente ↔ Servidor 🔄
Turnos, Mensagens e Fluxo de Dados
Agenda de Hoje 📅
- Requisições vs Notificações
- O Papel do ID na Comunicação
- Tratamento de Erros e Timeouts
- SSE (Server-Sent Events) na Prática
- Sampling: O Caminho Inverso
1. Requisições (Requests) 📩
- Exigem uma resposta (Response).
- Possuem um identificador único (
id). - Blocos de construção das Tools.
2. Notificações (Notifications) 📣
- "Fire and forget" (Dispare e esqueça).
- Não possuem
id. - Usadas para logs, progresso ou avisos.
3. O Identificador de Requisição (ID)
- Essencial para conversas assíncronas.
- Vincula a resposta à pergunta original.
4. O Fluxo de Samplig 🔄
- O Servidor pede algo para o Cliente (IA).
- "Gere um resumo deste artigo".
- Inversão de papéis no MCP.
5. Diagrama de Sampling
sequenceDiagram
participant S as Servidor
participant C as Cliente
participant M as Modelo
S->>C: mcp/sampling (prompt)
C->>M: Gere texto solicitado
M-->>C: Texto gerado
C-->>S: Resposta do Sampling
6. Tratamento de Erros Técnicos ⚠️
-32700: Parse Error.-32601: Method not found.-32602: Invalid params.
7. Timeouts e Resiliência 🛡️
- O Cliente não espera para sempre.
- Definição de limites de tempo saudáveis.
- Tratamento de conexões interrompidas.
8. SSE: Server-Sent Events 🌊
- Unidirecional (Servidor -> Cliente).
- Perfeito para streaming de respostas e logs.
- Menos complexo que WebSockets para IA.
9. Prática: Inspecionando Requisições
$ mcp-inspect call my_tool --debug
[SEND] --> {"id": 1, "method": "tools/call", ...}
[RECV] <-- {"id": 1, "result": {...}}
[SUCCESS] Ciclo completo!
10. Organização de Mensagens
graph TD
A[Mensagem MCP] --> B(Request)
A --> C(Notification)
A --> D(Response)
B --> B1[id, method, params]
C --> C1[method, params]
D --> D1[id, result/error]
11. O Papel do Stdio 📂
- Pipes de comunicação.
stdinpara o servidor receber.stdoutpara o servidor responder.
12. Resumo ✅
- Requests exigem IDs e Respostas.
- Notifications são apenas informativas.
- Sampling permite que o servidor use a IA.
13. Mini-Projeto: Log de Handshake
- Simular a sequência de initialize no papel.
14. Dúvidas? 🤔
"A clareza na comunicação evita o caos na implementação."