{
  "title": "stdio vs Streamable HTTP Technical Matrix",
  "schemaVersion": "1.0",
  "researchFreeze": "2026-08-26",
  "protocolRevision": "MCP 2026-07-28",
  "sourcePackage": "research/10",
  "integrityNote": "All 108 listed ordinary archive payloads verify. The package contains two incompatible numeric source namespaces; public records preserve an explicit archive namespace and never resolve IDs across families.",
  "evidencePolicy": "Only manually curated build_context source groups appear in sourceIds. Raw row tokens are preserved under archive and are not treated as publication citations.",
  "checkedAt": "2026-08-26",
  "count": 14,
  "records": [
    {
      "Dimension": "Binding",
      "stdio": "Reliable newline-delimited byte stream plus subprocess lifecycle",
      "Streamable HTTP": "HTTP POST per message to one endpoint; JSON or request-scoped SSE response",
      "Notes": "Current 2026-07-28",
      "id": "R10-WIREM001",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 1,
        "sourceIds": [],
        "raw": {
          "Dimension": "Binding",
          "stdio": "Reliable newline-delimited byte stream plus subprocess lifecycle",
          "Streamable HTTP": "HTTP POST per message to one endpoint; JSON or request-scoped SSE response",
          "Notes": "Current 2026-07-28"
        }
      }
    },
    {
      "Dimension": "Server startup",
      "stdio": "Client launches process",
      "Streamable HTTP": "Independent service",
      "Notes": "Protocol roles remain the same",
      "id": "R10-WIREM002",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 2,
        "sourceIds": [],
        "raw": {
          "Dimension": "Server startup",
          "stdio": "Client launches process",
          "Streamable HTTP": "Independent service",
          "Notes": "Protocol roles remain the same"
        }
      }
    },
    {
      "Dimension": "Address",
      "stdio": "Command, arguments, working directory and environment",
      "Streamable HTTP": "HTTPS URL",
      "Notes": "Remote may sit behind gateway/load balancer",
      "id": "R10-WIREM003",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 3,
        "sourceIds": [],
        "raw": {
          "Dimension": "Address",
          "stdio": "Command, arguments, working directory and environment",
          "Streamable HTTP": "HTTPS URL",
          "Notes": "Remote may sit behind gateway/load balancer"
        }
      }
    },
    {
      "Dimension": "Authentication",
      "stdio": "Current MCP HTTP auth profile should not be used; credentials come from environment or OS mechanisms",
      "Streamable HTTP": "HTTP authorization SHOULD follow MCP OAuth profile when authorization is supported",
      "Notes": "Authorization remains optional in protocol, but exposed services generally need it",
      "id": "R10-WIREM004",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 4,
        "sourceIds": [],
        "raw": {
          "Dimension": "Authentication",
          "stdio": "Current MCP HTTP auth profile should not be used; credentials come from environment or OS mechanisms",
          "Streamable HTTP": "HTTP authorization SHOULD follow MCP OAuth profile when authorization is supported",
          "Notes": "Authorization remains optional in protocol, but exposed services generally need it"
        }
      }
    },
    {
      "Dimension": "Message framing",
      "stdio": "One JSON-RPC message per newline",
      "Streamable HTTP": "One JSON-RPC request/notification per HTTP POST",
      "Notes": "Same JSON-RPC semantics",
      "id": "R10-WIREM005",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 5,
        "sourceIds": [],
        "raw": {
          "Dimension": "Message framing",
          "stdio": "One JSON-RPC message per newline",
          "Streamable HTTP": "One JSON-RPC request/notification per HTTP POST",
          "Notes": "Same JSON-RPC semantics"
        }
      }
    },
    {
      "Dimension": "Streaming",
      "stdio": "Shared stdout channel; notifications correlated by IDs/subscription metadata",
      "Streamable HTTP": "Per-request SSE or subscriptions/listen stream",
      "Notes": "No standalone GET stream in 2026 revision",
      "id": "R10-WIREM006",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 6,
        "sourceIds": [],
        "raw": {
          "Dimension": "Streaming",
          "stdio": "Shared stdout channel; notifications correlated by IDs/subscription metadata",
          "Streamable HTTP": "Per-request SSE or subscriptions/listen stream",
          "Notes": "No standalone GET stream in 2026 revision"
        }
      }
    },
    {
      "Dimension": "Cancellation",
      "stdio": "notifications/cancelled",
      "Streamable HTTP": "Close request response stream",
      "Notes": "Binding-specific signal",
      "id": "R10-WIREM007",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 7,
        "sourceIds": [],
        "raw": {
          "Dimension": "Cancellation",
          "stdio": "notifications/cancelled",
          "Streamable HTTP": "Close request response stream",
          "Notes": "Binding-specific signal"
        }
      }
    },
    {
      "Dimension": "Logging",
      "stdio": "stderr",
      "Streamable HTTP": "Application/infrastructure logs",
      "Notes": "Never log non-protocol text to stdout",
      "id": "R10-WIREM008",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 8,
        "sourceIds": [],
        "raw": {
          "Dimension": "Logging",
          "stdio": "stderr",
          "Streamable HTTP": "Application/infrastructure logs",
          "Notes": "Never log non-protocol text to stdout"
        }
      }
    },
    {
      "Dimension": "Shutdown",
      "stdio": "Close stdin, await process, then terminate if needed",
      "Streamable HTTP": "Ordinary service lifecycle",
      "Notes": "Client does not normally own remote service",
      "id": "R10-WIREM009",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 9,
        "sourceIds": [],
        "raw": {
          "Dimension": "Shutdown",
          "stdio": "Close stdin, await process, then terminate if needed",
          "Streamable HTTP": "Ordinary service lifecycle",
          "Notes": "Client does not normally own remote service"
        }
      }
    },
    {
      "Dimension": "Restart",
      "stdio": "Client may restart failed process",
      "Streamable HTTP": "Orchestrator/service operator replaces instance",
      "Notes": "Stateless requests can be retried",
      "id": "R10-WIREM010",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 10,
        "sourceIds": [],
        "raw": {
          "Dimension": "Restart",
          "stdio": "Client may restart failed process",
          "Streamable HTTP": "Orchestrator/service operator replaces instance",
          "Notes": "Stateless requests can be retried"
        }
      }
    },
    {
      "Dimension": "Concurrency",
      "stdio": "One process can handle multiple JSON-RPC IDs; implementation-dependent",
      "Streamable HTTP": "HTTP handlers and fleet concurrency",
      "Notes": "Do not assume stdio must serialize all work",
      "id": "R10-WIREM011",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 11,
        "sourceIds": [],
        "raw": {
          "Dimension": "Concurrency",
          "stdio": "One process can handle multiple JSON-RPC IDs; implementation-dependent",
          "Streamable HTTP": "HTTP handlers and fleet concurrency",
          "Notes": "Do not assume stdio must serialize all work"
        }
      }
    },
    {
      "Dimension": "Routing metadata",
      "stdio": "Only in message body",
      "Streamable HTTP": "MCP version, method/name and selected parameters mirrored to headers",
      "Notes": "Enables gateways without body parsing",
      "id": "R10-WIREM012",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 12,
        "sourceIds": [],
        "raw": {
          "Dimension": "Routing metadata",
          "stdio": "Only in message body",
          "Streamable HTTP": "MCP version, method/name and selected parameters mirrored to headers",
          "Notes": "Enables gateways without body parsing"
        }
      }
    },
    {
      "Dimension": "Local exposure risk",
      "stdio": "Child-process authority and package trust",
      "Streamable HTTP": "Origin, DNS rebinding, token and network risks",
      "Notes": "A localhost HTTP server belongs in the HTTP column",
      "id": "R10-WIREM013",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 13,
        "sourceIds": [],
        "raw": {
          "Dimension": "Local exposure risk",
          "stdio": "Child-process authority and package trust",
          "Streamable HTTP": "Origin, DNS rebinding, token and network risks",
          "Notes": "A localhost HTTP server belongs in the HTTP column"
        }
      }
    },
    {
      "Dimension": "Backward compatibility",
      "stdio": "Probe server/discover, then fall back to initialize for legacy server",
      "Streamable HTTP": "Modern endpoint plus legacy detection/translation where supported",
      "Notes": "Mixed-era behavior must be tested",
      "id": "R10-WIREM014",
      "sourceIds": [
        "S057",
        "S132",
        "S131"
      ],
      "evidenceStatus": "curated-dataset-level-evidence; not an archive row-level citation mapping",
      "archive": {
        "namespace": "research/10/stdio_vs_streamable_http_matrix.json",
        "row": 14,
        "sourceIds": [],
        "raw": {
          "Dimension": "Backward compatibility",
          "stdio": "Probe server/discover, then fall back to initialize for legacy server",
          "Streamable HTTP": "Modern endpoint plus legacy detection/translation where supported",
          "Notes": "Mixed-era behavior must be tested"
        }
      }
    }
  ]
}