Skip to content

Commit fc57c2c

Browse files
akshan-mainhubbard-zleemaxisbey
authored
test: fix progress notification assertions for related_request_id (#2038)
Co-authored-by: Lee Hubbard <hubbard.zlee@unknowncyber.com> Co-authored-by: Max Isbey <224885523+maxisbey@users.noreply.github.com>
1 parent 92140e5 commit fc57c2c

File tree

3 files changed

+44
-4
lines changed

3 files changed

+44
-4
lines changed

src/mcp/server/mcpserver/server.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,6 +1163,7 @@ async def report_progress(self, progress: float, total: float | None = None, mes
11631163
progress=progress,
11641164
total=total,
11651165
message=message,
1166+
related_request_id=self.request_id,
11661167
)
11671168

11681169
async def read_resource(self, uri: str | AnyUrl) -> Iterable[ReadResourceContents]:

tests/issues/test_176_progress_token.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ async def test_progress_token_zero_first_call():
3535

3636
# Verify progress notifications
3737
assert mock_session.send_progress_notification.call_count == 3, "All progress notifications should be sent"
38-
mock_session.send_progress_notification.assert_any_call(progress_token=0, progress=0.0, total=10.0, message=None)
39-
mock_session.send_progress_notification.assert_any_call(progress_token=0, progress=5.0, total=10.0, message=None)
40-
mock_session.send_progress_notification.assert_any_call(progress_token=0, progress=10.0, total=10.0, message=None)
38+
mock_session.send_progress_notification.assert_any_call(
39+
progress_token=0, progress=0.0, total=10.0, message=None, related_request_id="test-request"
40+
)
41+
mock_session.send_progress_notification.assert_any_call(
42+
progress_token=0, progress=5.0, total=10.0, message=None, related_request_id="test-request"
43+
)
44+
mock_session.send_progress_notification.assert_any_call(
45+
progress_token=0, progress=10.0, total=10.0, message=None, related_request_id="test-request"
46+
)

tests/server/mcpserver/test_server.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import base64
22
from pathlib import Path
33
from typing import Any
4-
from unittest.mock import patch
4+
from unittest.mock import AsyncMock, MagicMock, patch
55

66
import pytest
77
from inline_snapshot import snapshot
@@ -10,6 +10,8 @@
1010
from starlette.routing import Mount, Route
1111

1212
from mcp.client import Client
13+
from mcp.server.context import ServerRequestContext
14+
from mcp.server.experimental.request_context import Experimental
1315
from mcp.server.mcpserver import Context, MCPServer
1416
from mcp.server.mcpserver.exceptions import ToolError
1517
from mcp.server.mcpserver.prompts.base import Message, UserMessage
@@ -1436,3 +1438,34 @@ def test_streamable_http_no_redirect() -> None:
14361438

14371439
# Verify path values
14381440
assert streamable_routes[0].path == "/mcp", "Streamable route path should be /mcp"
1441+
1442+
1443+
async def test_report_progress_passes_related_request_id():
1444+
"""Test that report_progress passes the request_id as related_request_id.
1445+
1446+
Without related_request_id, the streamable HTTP transport cannot route
1447+
progress notifications to the correct SSE stream, causing them to be
1448+
silently dropped. See #953 and #2001.
1449+
"""
1450+
mock_session = AsyncMock()
1451+
mock_session.send_progress_notification = AsyncMock()
1452+
1453+
request_context = ServerRequestContext(
1454+
request_id="req-abc-123",
1455+
session=mock_session,
1456+
meta={"progress_token": "tok-1"},
1457+
lifespan_context=None,
1458+
experimental=Experimental(),
1459+
)
1460+
1461+
ctx = Context(request_context=request_context, mcp_server=MagicMock())
1462+
1463+
await ctx.report_progress(50, 100, message="halfway")
1464+
1465+
mock_session.send_progress_notification.assert_awaited_once_with(
1466+
progress_token="tok-1",
1467+
progress=50,
1468+
total=100,
1469+
message="halfway",
1470+
related_request_id="req-abc-123",
1471+
)

0 commit comments

Comments
 (0)