Skip to content

Commit bee91dc

Browse files
committed
test(mcp): align FastMCP transport attribute expectations
1 parent ff0beae commit bee91dc

1 file changed

Lines changed: 37 additions & 17 deletions

File tree

‎tests/integrations/fastmcp/test_fastmcp.py‎

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
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
1818
All tests invoke tools/prompts/resources through the MCP Server's low-level
1919
request 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

Comments
 (0)