Skip to content

Commit 09c2ae7

Browse files
committed
Updates client session to handle all server notifications
1 parent da4fce2 commit 09c2ae7

File tree

1 file changed

+93
-2
lines changed

1 file changed

+93
-2
lines changed

src/mcp/client/session.py

Lines changed: 93 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,45 @@ async def __call__(
4848
) -> None: ...
4949

5050

51+
class CancelledFnT(Protocol):
52+
async def __call__(
53+
self,
54+
params: types.CancelledNotificationParams,
55+
) -> None: ...
56+
57+
58+
class ProgressNotificationFnT(Protocol):
59+
async def __call__(
60+
self,
61+
params: types.ProgressNotificationParams,
62+
) -> None: ...
63+
64+
65+
class ResourceUpdatedFnT(Protocol):
66+
async def __call__(
67+
self,
68+
params: types.ResourceUpdatedNotificationParams,
69+
) -> None: ...
70+
71+
72+
class ResourceListChangedFnT(Protocol):
73+
async def __call__(
74+
self,
75+
) -> None: ...
76+
77+
78+
class ToolListChangedFnT(Protocol):
79+
async def __call__(
80+
self,
81+
) -> None: ...
82+
83+
84+
class PromptListChangedFnT(Protocol):
85+
async def __call__(
86+
self,
87+
) -> None: ...
88+
89+
5190
class MessageHandlerFnT(Protocol):
5291
async def __call__(
5392
self,
@@ -96,6 +135,36 @@ async def _default_logging_callback(
96135
pass
97136

98137

138+
async def _default_cancelled_callback(
139+
params: types.CancelledNotificationParams,
140+
) -> None:
141+
pass
142+
143+
144+
async def _default_progress_callback(
145+
params: types.ProgressNotificationParams,
146+
) -> None:
147+
pass
148+
149+
150+
async def _default_resource_updated_callback(
151+
params: types.ResourceUpdatedNotificationParams,
152+
) -> None:
153+
pass
154+
155+
156+
async def _default_resource_list_changed_callback() -> None:
157+
pass
158+
159+
160+
async def _default_tool_list_changed_callback() -> None:
161+
pass
162+
163+
164+
async def _default_prompt_list_changed_callback() -> None:
165+
pass
166+
167+
99168
ClientResponse: TypeAdapter[types.ClientResult | types.ErrorData] = TypeAdapter(types.ClientResult | types.ErrorData)
100169

101170

@@ -117,6 +186,12 @@ def __init__(
117186
elicitation_callback: ElicitationFnT | None = None,
118187
list_roots_callback: ListRootsFnT | None = None,
119188
logging_callback: LoggingFnT | None = None,
189+
cancelled_callback: CancelledFnT | None = None,
190+
progress_notification_callback: ProgressNotificationFnT | None = None,
191+
resource_updated_callback: ResourceUpdatedFnT | None = None,
192+
resource_list_changed_callback: ResourceListChangedFnT | None = None,
193+
tool_list_changed_callback: ToolListChangedFnT | None = None,
194+
prompt_list_changed_callback: PromptListChangedFnT | None = None,
120195
message_handler: MessageHandlerFnT | None = None,
121196
client_info: types.Implementation | None = None,
122197
) -> None:
@@ -132,6 +207,12 @@ def __init__(
132207
self._elicitation_callback = elicitation_callback or _default_elicitation_callback
133208
self._list_roots_callback = list_roots_callback or _default_list_roots_callback
134209
self._logging_callback = logging_callback or _default_logging_callback
210+
self._cancelled_callback = cancelled_callback or _default_cancelled_callback
211+
self._progress_notification_callback = progress_notification_callback or _default_progress_callback
212+
self._resource_updated_callback = resource_updated_callback or _default_resource_updated_callback
213+
self._resource_list_changed_callback = resource_list_changed_callback or _default_resource_list_changed_callback
214+
self._tool_list_changed_callback = tool_list_changed_callback or _default_tool_list_changed_callback
215+
self._prompt_list_changed_callback = prompt_list_changed_callback or _default_prompt_list_changed_callback
135216
self._message_handler = message_handler or _default_message_handler
136217
self._tool_output_schemas: dict[str, dict[str, Any] | None] = {}
137218
self._server_capabilities: types.ServerCapabilities | None = None
@@ -549,5 +630,15 @@ async def _received_notification(self, notification: types.ServerNotification) -
549630
match notification.root:
550631
case types.LoggingMessageNotification(params=params):
551632
await self._logging_callback(params)
552-
case _:
553-
pass
633+
case types.CancelledNotification(params=params):
634+
await self._cancelled_callback(params)
635+
case types.ProgressNotification(params=params):
636+
await self._progress_notification_callback(params)
637+
case types.ResourceUpdatedNotification(params=params):
638+
await self._resource_updated_callback(params)
639+
case types.ResourceListChangedNotification():
640+
await self._resource_list_changed_callback()
641+
case types.ToolListChangedNotification():
642+
await self._tool_list_changed_callback()
643+
case types.PromptListChangedNotification():
644+
await self._prompt_list_changed_callback()

0 commit comments

Comments
 (0)