@@ -1285,6 +1285,100 @@ func TestStreamableHTTPServer_TLS(t *testing.T) {
12851285 })
12861286}
12871287
1288+ func TestStreamableHTTPServer_WithDisableStreaming (t * testing.T ) {
1289+ t .Run ("WithDisableStreaming blocks GET requests" , func (t * testing.T ) {
1290+ mcpServer := NewMCPServer ("test-mcp-server" , "1.0.0" )
1291+ server := NewTestStreamableHTTPServer (mcpServer , WithDisableStreaming (true ))
1292+ defer server .Close ()
1293+
1294+ // Attempt a GET request (which should be blocked)
1295+ req , err := http .NewRequest (http .MethodGet , server .URL , nil )
1296+ if err != nil {
1297+ t .Fatalf ("Failed to create request: %v" , err )
1298+ }
1299+ req .Header .Set ("Content-Type" , "text/event-stream" )
1300+
1301+ resp , err := server .Client ().Do (req )
1302+ if err != nil {
1303+ t .Fatalf ("Failed to send request: %v" , err )
1304+ }
1305+ defer resp .Body .Close ()
1306+
1307+ // Verify the request is rejected with 405 Method Not Allowed
1308+ if resp .StatusCode != http .StatusMethodNotAllowed {
1309+ t .Errorf ("Expected status 405 Method Not Allowed, got %d" , resp .StatusCode )
1310+ }
1311+
1312+ // Verify the error message
1313+ bodyBytes , err := io .ReadAll (resp .Body )
1314+ if err != nil {
1315+ t .Fatalf ("Failed to read response body: %v" , err )
1316+ }
1317+
1318+ expectedMessage := "Streaming is disabled on this server"
1319+ if ! strings .Contains (string (bodyBytes ), expectedMessage ) {
1320+ t .Errorf ("Expected error message to contain '%s', got '%s'" , expectedMessage , string (bodyBytes ))
1321+ }
1322+ })
1323+
1324+ t .Run ("POST requests still work with WithDisableStreaming" , func (t * testing.T ) {
1325+ mcpServer := NewMCPServer ("test-mcp-server" , "1.0.0" )
1326+ server := NewTestStreamableHTTPServer (mcpServer , WithDisableStreaming (true ))
1327+ defer server .Close ()
1328+
1329+ // POST requests should still work
1330+ resp , err := postJSON (server .URL , initRequest )
1331+ if err != nil {
1332+ t .Fatalf ("Failed to send message: %v" , err )
1333+ }
1334+ defer resp .Body .Close ()
1335+
1336+ if resp .StatusCode != http .StatusOK {
1337+ t .Errorf ("Expected status 200, got %d" , resp .StatusCode )
1338+ }
1339+
1340+ // Verify the response is valid
1341+ bodyBytes , _ := io .ReadAll (resp .Body )
1342+ var responseMessage jsonRPCResponse
1343+ if err := json .Unmarshal (bodyBytes , & responseMessage ); err != nil {
1344+ t .Fatalf ("Failed to unmarshal response: %v" , err )
1345+ }
1346+ if responseMessage .Result ["protocolVersion" ] != mcp .LATEST_PROTOCOL_VERSION {
1347+ t .Errorf ("Expected protocol version %s, got %s" , mcp .LATEST_PROTOCOL_VERSION , responseMessage .Result ["protocolVersion" ])
1348+ }
1349+ })
1350+
1351+ t .Run ("Streaming works when WithDisableStreaming is false" , func (t * testing.T ) {
1352+ mcpServer := NewMCPServer ("test-mcp-server" , "1.0.0" )
1353+ server := NewTestStreamableHTTPServer (mcpServer , WithDisableStreaming (false ))
1354+ defer server .Close ()
1355+
1356+ ctx , cancel := context .WithTimeout (context .Background (), 500 * time .Millisecond )
1357+ defer cancel ()
1358+
1359+ // GET request should work when streaming is enabled
1360+ req , err := http .NewRequestWithContext (ctx , http .MethodGet , server .URL , nil )
1361+ if err != nil {
1362+ t .Fatalf ("Failed to create request: %v" , err )
1363+ }
1364+ req .Header .Set ("Content-Type" , "text/event-stream" )
1365+
1366+ resp , err := server .Client ().Do (req )
1367+ if err != nil {
1368+ t .Fatalf ("Failed to send request: %v" , err )
1369+ }
1370+ defer resp .Body .Close ()
1371+
1372+ if resp .StatusCode != http .StatusOK {
1373+ t .Errorf ("Expected status 200, got %d" , resp .StatusCode )
1374+ }
1375+
1376+ if resp .Header .Get ("content-type" ) != "text/event-stream" {
1377+ t .Errorf ("Expected content-type text/event-stream, got %s" , resp .Header .Get ("content-type" ))
1378+ }
1379+ })
1380+ }
1381+
12881382func postJSON (url string , bodyObject any ) (* http.Response , error ) {
12891383 jsonBody , _ := json .Marshal (bodyObject )
12901384 req , _ := http .NewRequest (http .MethodPost , url , bytes .NewBuffer (jsonBody ))
0 commit comments