Transport MCP: stdio și Streamable HTTP în Model Context Protocol (MCP)

Transport, Configurare & Clienți Specificația MCP 2026-07-28

Cele două transporturi standard MCP în revizia 2026-07-28: stdio pentru servere lansate ca subproces și Streamable HTTP pentru servere independente.

Specificație & cod MCP
stdio: un mesaj JSON-RPC pe linie (stdin/stdout)  |  Streamable HTTP: POST pe un singur endpoint, răspuns JSON sau SSE

Ce face Transport MCP: stdio și Streamable HTTP

Transportul definește doar încadrarea și livrarea mesajelor; semantica este aceeași peste tot. stdio: clientul lansează serverul ca subproces. Serverul citește mesaje JSON-RPC din stdin și scrie pe stdout, câte un mesaj pe linie, fără newline-uri în interior. Pe stdout nu are voie să apară nimic altceva decât mesaje MCP valide; logurile merg pe stderr, iar clientul nu tratează stderr ca semn de eroare. Anularea se face cu notifications/cancelled. Oprirea: clientul închide stdin, așteaptă ieșirea și, la nevoie, termină procesul forțat (pe POSIX de la SIGTERM la SIGKILL). Dacă serverul cade, clientul îl repornește și reîncearcă cererile.

Streamable HTTP: serverul expune un singur endpoint MCP (de exemplu https://example.com/mcp) care acceptă POST. Fiecare mesaj al clientului este un POST separat, cu Accept pentru application/json și text/event-stream. La o notificare acceptată serverul răspunde 202 Accepted fără corp; la o cerere, cu un obiect JSON sau cu un stream SSE care conține notificări legate de cerere și apoi răspunsul final. Serverul nu trimite cereri proprii pe stream. Notificările de schimbare vin pe stream-ul unei cereri subscriptions/listen. Anularea înseamnă închiderea stream-ului răspunsului. Serverele ar trebui să adauge X-Accel-Buffering: no la stream-urile SSE.

Fiecare POST conține MCP-Protocol-Version (egal cu versiunea din _meta), Mcp-Method și, pentru tools/call, resources/read și prompts/get, Mcp-Name; valorile care nu sunt ASCII sigur se codifică =?base64?...?=. O metodă necunoscută primește 404 cu eroarea -32601. Față de 2025-11-25 au dispărut endpoint-ul GET, sesiunile cu Mcp-Session-Id (și închiderea lor cu DELETE) și reluarea stream-urilor cu Last-Event-ID; un server doar modern răspunde la GET sau DELETE cu 405. Transportul HTTP+SSE din 2024-11-05 este depreciat.

Sintaxă și opțiuni

Opțiune / Parametru Descriere
stdin / stdout Canalul mesajelor JSON-RPC pe stdio, câte unul pe linie.
stderr Loguri ale serverului stdio; clientul le poate captura, redirecționa sau ignora.
POST pe endpoint-ul MCP Singura metodă HTTP a transportului; un mesaj JSON-RPC per cerere.
Content-Type: application/json sau text/event-stream Răspunsul la o cerere: un obiect JSON sau un stream SSE; clientul trebuie să le suporte pe ambele.
202 Accepted Răspunsul la o notificare acceptată.
MCP-Protocol-Version Obligatoriu; trebuie să corespundă _meta, altfel 400 + -32020.
Mcp-Method / Mcp-Name Antete obligatorii care oglindesc method și params.name sau params.uri.
Mcp-Param-{nume} Antete pentru parametrii de unealtă marcați cu x-mcp-header.
405 Method Not Allowed Răspunsul recomandat la GET sau DELETE pe endpoint, pentru clienți vechi.

Exemple practice

Exemplul 1: Citirea unei resurse prin Streamable HTTP

POST /mcp HTTP/1.1
Content-Type: application/json
MCP-Protocol-Version: 2026-07-28
Mcp-Method: resources/read
Mcp-Name: file:///projects/myapp/config.json

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "resources/read",
  "params": {
    "uri": "file:///projects/myapp/config.json",
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "ExampleClient",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}

Exemplul 2: Antet cu valoare codificată în base64

Valorile cu caractere non-ASCII, caractere de control sau spații la capete se trimit codificate.

Mcp-Param-Greeting: =?base64?SGVsbG8sIOS4lueVjA==?=

Greșeli frecvente și bune practici

  • Afișezi mesaje de depanare pe stdout într-un server stdio. Orice text care nu e mesaj MCP strică fluxul; scrie pe stderr.
  • Păstrezi stare în Mcp-Session-Id sau deschizi un GET pentru notificări. Ambele au dispărut în 2026-07-28; folosește identificatori expliciți și subscriptions/listen.
  • Te bazezi pe reluarea unui stream SSE întrerupt. Nu mai este suportată; retrimite cererea cu un id nou.

Comenzi înrudite