1313- Error capture and instrumentation
1414- PII and include_prompts flag behavior
1515- Request context data extraction
16- - Transport detection (stdio, http, sse )
16+ - Transport metadata (in-memory, HTTP, SSE )
1717
1818All tests invoke tools/prompts/resources through the MCP Server's low-level
1919request handlers (via CallToolRequest, GetPromptRequest, ReadResourceRequest)
@@ -334,7 +334,7 @@ def add_numbers(a: int, b: int) -> dict:
334334 assert span ["name" ] == "tools/call add_numbers"
335335 assert span ["attributes" ][SPANDATA .MCP_TOOL_NAME ] == "add_numbers"
336336 assert span ["attributes" ][SPANDATA .MCP_METHOD_NAME ] == "tools/call"
337- assert span [ "attributes" ][ SPANDATA .MCP_TRANSPORT ] == "stdio"
337+ assert SPANDATA .MCP_TRANSPORT not in span [ "attributes" ]
338338 assert span ["attributes" ][SPANDATA .MCP_REQUEST_ID ] == "req-123"
339339
340340 # Check PII-sensitive data
@@ -367,7 +367,7 @@ def add_numbers(a: int, b: int) -> dict:
367367 assert span ["description" ] == "tools/call add_numbers"
368368 assert span ["data" ][SPANDATA .MCP_TOOL_NAME ] == "add_numbers"
369369 assert span ["data" ][SPANDATA .MCP_METHOD_NAME ] == "tools/call"
370- assert span [ "data" ][ SPANDATA .MCP_TRANSPORT ] == "stdio"
370+ assert SPANDATA .MCP_TRANSPORT not in span [ "data" ]
371371 assert span ["data" ][SPANDATA .MCP_REQUEST_ID ] == "req-123"
372372
373373 # Check PII-sensitive data
@@ -455,7 +455,10 @@ async def multiply_numbers(x: int, y: int) -> dict:
455455 assert span ["name" ] == "tools/call multiply_numbers"
456456 assert span ["attributes" ][SPANDATA .MCP_TOOL_NAME ] == "multiply_numbers"
457457 assert span ["attributes" ][SPANDATA .MCP_METHOD_NAME ] == "tools/call"
458- assert span ["attributes" ][SPANDATA .MCP_TRANSPORT ] == "http"
458+ assert (
459+ span ["attributes" ][SPANDATA .MCP_TRANSPORT ]
460+ == "StreamableHTTPServerTransport"
461+ )
459462 assert span ["attributes" ][SPANDATA .MCP_REQUEST_ID ] == "req-456"
460463 assert span ["attributes" ][SPANDATA .MCP_SESSION_ID ] == session_id
461464
@@ -495,7 +498,7 @@ async def multiply_numbers(x: int, y: int) -> dict:
495498 assert span ["description" ] == "tools/call multiply_numbers"
496499 assert span ["data" ][SPANDATA .MCP_TOOL_NAME ] == "multiply_numbers"
497500 assert span ["data" ][SPANDATA .MCP_METHOD_NAME ] == "tools/call"
498- assert span ["data" ][SPANDATA .MCP_TRANSPORT ] == "http "
501+ assert span ["data" ][SPANDATA .MCP_TRANSPORT ] == "StreamableHTTPServerTransport "
499502 assert span ["data" ][SPANDATA .MCP_REQUEST_ID ] == "req-456"
500503 assert span ["data" ][SPANDATA .MCP_SESSION_ID ] == session_id
501504
@@ -1319,7 +1322,10 @@ def sse_tool(value: str) -> dict:
13191322 assert len (mcp_spans ) >= 1
13201323 span = mcp_spans [0 ]
13211324 # Check that SSE transport is detected
1322- assert span ["attributes" ].get (SPANDATA .MCP_TRANSPORT ) == "sse"
1325+ assert span ["attributes" ][SPANDATA .MCP_TRANSPORT ] == "SseServerTransport"
1326+ assert span ["attributes" ][SPANDATA .NETWORK_PROTOCOL_NAME ] == "http"
1327+ assert span ["attributes" ][SPANDATA .NETWORK_PROTOCOL_VERSION ] == "1.1"
1328+ assert SPANDATA .NETWORK_TRANSPORT not in span ["attributes" ]
13231329 else :
13241330 events = capture_events ()
13251331
@@ -1355,7 +1361,10 @@ def sse_tool(value: str) -> dict:
13551361 assert len (mcp_spans ) >= 1
13561362 span = mcp_spans [0 ]
13571363 # Check that SSE transport is detected
1358- assert span ["data" ].get (SPANDATA .MCP_TRANSPORT ) == "sse"
1364+ assert span ["data" ][SPANDATA .MCP_TRANSPORT ] == "SseServerTransport"
1365+ assert span ["data" ][SPANDATA .NETWORK_PROTOCOL_NAME ] == "http"
1366+ assert span ["data" ][SPANDATA .NETWORK_PROTOCOL_VERSION ] == "1.1"
1367+ assert SPANDATA .NETWORK_TRANSPORT not in span ["data" ]
13591368
13601369
13611370@pytest .mark .parametrize ("FastMCP" , fastmcp_implementations , ids = fastmcp_ids )
@@ -1423,7 +1432,13 @@ def http_tool(data: str) -> dict:
14231432 span = spans [0 ]
14241433
14251434 # Check that HTTP transport is detected
1426- assert span ["attributes" ].get (SPANDATA .MCP_TRANSPORT ) == "http"
1435+ assert (
1436+ span ["attributes" ][SPANDATA .MCP_TRANSPORT ]
1437+ == "StreamableHTTPServerTransport"
1438+ )
1439+ assert span ["attributes" ][SPANDATA .NETWORK_PROTOCOL_NAME ] == "http"
1440+ assert span ["attributes" ][SPANDATA .NETWORK_PROTOCOL_VERSION ] == "1.1"
1441+ assert SPANDATA .NETWORK_TRANSPORT not in span ["attributes" ]
14271442 else :
14281443 events = capture_events ()
14291444
@@ -1450,21 +1465,24 @@ def http_tool(data: str) -> dict:
14501465 span = tx ["spans" ][0 ]
14511466
14521467 # Check that HTTP transport is detected
1453- assert span ["data" ].get (SPANDATA .MCP_TRANSPORT ) == "http"
1468+ assert span ["data" ][SPANDATA .MCP_TRANSPORT ] == "StreamableHTTPServerTransport"
1469+ assert span ["data" ][SPANDATA .NETWORK_PROTOCOL_NAME ] == "http"
1470+ assert span ["data" ][SPANDATA .NETWORK_PROTOCOL_VERSION ] == "1.1"
1471+ assert SPANDATA .NETWORK_TRANSPORT not in span ["data" ]
14541472
14551473
14561474@pytest .mark .asyncio
14571475@pytest .mark .parametrize ("FastMCP" , fastmcp_implementations , ids = fastmcp_ids )
14581476@pytest .mark .parametrize ("span_streaming" , [True , False ])
1459- async def test_fastmcp_stdio_transport (
1477+ async def test_fastmcp_in_memory_transport (
14601478 sentry_init ,
14611479 capture_events ,
14621480 capture_items ,
14631481 FastMCP ,
14641482 stdio ,
14651483 span_streaming ,
14661484):
1467- """Test that FastMCP correctly detects stdio transport"""
1485+ """In-memory streams do not identify the MCP or network transport. """
14681486 sentry_init (
14691487 integrations = [MCPIntegration ()],
14701488 traces_sample_rate = 1.0 ,
@@ -1500,9 +1518,10 @@ def stdio_tool(n: int) -> dict:
15001518
15011519 assert len (mcp_spans ) >= 1
15021520 span = mcp_spans [0 ]
1503- # Check that stdio transport is detected
1504-
1505- assert span ["attributes" ].get (SPANDATA .MCP_TRANSPORT ) == "stdio"
1521+ assert SPANDATA .MCP_TRANSPORT not in span ["attributes" ]
1522+ assert SPANDATA .NETWORK_TRANSPORT not in span ["attributes" ]
1523+ assert SPANDATA .NETWORK_PROTOCOL_NAME not in span ["attributes" ]
1524+ assert SPANDATA .NETWORK_PROTOCOL_VERSION not in span ["attributes" ]
15061525 else :
15071526 events = capture_events ()
15081527 with start_transaction (name = "fastmcp tx" ):
@@ -1523,9 +1542,10 @@ def stdio_tool(n: int) -> dict:
15231542
15241543 assert len (mcp_spans ) >= 1
15251544 span = mcp_spans [0 ]
1526- # Check that stdio transport is detected
1527-
1528- assert span ["data" ].get (SPANDATA .MCP_TRANSPORT ) == "stdio"
1545+ assert SPANDATA .MCP_TRANSPORT not in span ["data" ]
1546+ assert SPANDATA .NETWORK_TRANSPORT not in span ["data" ]
1547+ assert SPANDATA .NETWORK_PROTOCOL_NAME not in span ["data" ]
1548+ assert SPANDATA .NETWORK_PROTOCOL_VERSION not in span ["data" ]
15291549
15301550
15311551@pytest .mark .asyncio
0 commit comments