Pular para conteúdo

Aula 05 - Comunicação Cliente ↔ Servidor 🔄

Turnos, Mensagens e Fluxo de Dados


Agenda de Hoje 📅

  1. Requisições vs Notificações
  2. O Papel do ID na Comunicação
  3. Tratamento de Erros e Timeouts
  4. SSE (Server-Sent Events) na Prática
  5. 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)

{
  "jsonrpc": "2.0",
  "method": "foo",
  "id": "abc-123"
}
  • 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.
  • stdin para o servidor receber.
  • stdout para 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."