Ce face Securitatea serverelor MCP remote (Streamable HTTP)
Pentru transportul Streamable HTTP, specificația cere ca serverul să valideze antetul Origin la toate conexiunile, ca protecție împotriva atacurilor DNS rebinding; un Origin prezent și invalid primește 403 Forbidden. Rulat local, serverul ar trebui să asculte doar pe 127.0.0.1, nu pe toate interfețele (0.0.0.0), și ar trebui să autentifice toate conexiunile. Fără aceste protecții, un site web poate interacționa cu servere MCP locale.
Antetele MCP-Protocol-Version, Mcp-Method, Mcp-Name și Mcp-Param-* oglindesc câmpuri din corpul cererii, ca intermediarii să poată ruta cererile. Orice server care procesează corpul trebuie să verifice că antetele corespund corpului și să respingă nepotrivirile cu 400 și eroarea -32020 (HeaderMismatch); altfel un load balancer și serverul ar putea lucra pe valori diferite. Parametrii sensibili nu se marchează cu x-mcp-header, pentru că valorile din antete sunt vizibile în rețea.
Pentru tokenuri: serverul acceptă doar tokenuri emise pentru el și nu le transmite mai departe; clientul și serverul le stochează în siguranță; endpoint-urile serverului de autorizare sunt servite prin HTTPS, iar URI-urile de redirect sunt localhost sau HTTPS. Pentru unelte, serverele trebuie să valideze intrările, să aplice controlul accesului, să limiteze rata apelurilor și să curețe ieșirile. Un requestState care influențează autorizarea trebuie protejat la integritate, iar un rezultat marcat cacheScope: "public" poate fi servit altor utilizatori.
Sintaxă și opțiuni
| Opțiune / Parametru | Descriere |
|---|---|
Origin |
Validat la fiecare conexiune; invalid → 403 Forbidden. |
127.0.0.1 |
Adresa de legare recomandată pentru servere locale. |
Authorization: Bearer |
La fiecare cerere HTTP; niciodată în URL. |
Mcp-Method / Mcp-Name / MCP-Protocol-Version |
Antete obligatorii; trebuie să corespundă corpului. |
-32020 HeaderMismatch |
Răspunsul la antete lipsă, invalide sau diferite de corp, cu HTTP 400. |
Token audience |
Serverul respinge tokenurile care nu îl au ca destinatar. |
Token passthrough |
Interzis: serverul nu trimite mai departe tokenul primit de la client. |
Validare unelte |
Intrări validate, control de acces, limitare de rată, ieșiri curățate (cerințe MUST pentru server). |
Exemple practice
Exemplul 1: Cerere POST cu antetele standard
POST /mcp HTTP/1.1
Content-Type: application/json
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: get_weather
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_weather",
"arguments": {
"location": "Seattle, WA"
},
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": {
"name": "ExampleClient",
"version": "1.0.0"
},
"io.modelcontextprotocol/clientCapabilities": {}
}
}
}
Exemplul 2: Respingerea unei nepotriviri antet-corp
Trimis cu statusul HTTP 400 Bad Request.
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32020,
"message": "Header mismatch: Mcp-Name header value 'foo' does not match body value 'bar'"
}
}
Greșeli frecvente și bune practici
- Pornești un server HTTP local pe
0.0.0.0fără validareaOrigin. Orice pagină web deschisă în browser poate ajunge la el prin DNS rebinding. - Rutezi sau limitezi rata după antetele
Mcp-*fără să verifici că serverul le validează. Intermediarii ar trebui să respingă cererile cu versiuni mai vechi sau fără antet de versiune, în loc să aibă încredere în valori nevalidate. - Te bazezi pe
cacheScopeca să ascunzi date. Specificația cere control de acces separat pentru fiecare primitivă.