@@ -38,6 +38,7 @@ def __init__(self, context: UiPathMcpRuntimeContext):
3838 self .server : Optional [McpServer ] = None
3939 self .signalr_client : Optional [SignalRClient ] = None
4040 self .session_servers : Dict [str , SessionServer ] = {}
41+ self ._uipath = UiPath ()
4142
4243 async def execute (self ) -> Optional [UiPathRuntimeResult ]:
4344 """
@@ -216,6 +217,7 @@ async def handle_signalr_open(self) -> None:
216217 self .session_servers [self .server .session_id ] = session_server
217218 await session_server .get_incoming_messages ()
218219 except Exception as e :
220+ self .dispose_session ()
219221 logger .error (f"Error starting session server: { str (e )} " )
220222
221223 async def handle_signalr_close (self ) -> None :
@@ -273,6 +275,7 @@ async def _register(self) -> None:
273275
274276 # Now that we're outside the context managers, check if initialization succeeded
275277 if not initialization_successful :
278+ self .dispose_session ()
276279 error_message = "The server process failed to initialize. Verify environment variables are set correctly."
277280 if server_stderr_output :
278281 error_message += f"\n Server error output:\n { server_stderr_output } "
@@ -306,8 +309,7 @@ async def _register(self) -> None:
306309 client_info ["tools" ].append (tool_info )
307310
308311 # Register with UiPath MCP Server
309- uipath = UiPath ()
310- uipath .api_client .request (
312+ self ._uipath .api_client .request (
311313 "POST" ,
312314 f"mcp_/api/servers-with-tools/{ self .server .name } " ,
313315 json = client_info ,
@@ -322,6 +324,26 @@ async def _register(self) -> None:
322324 UiPathErrorCategory .SYSTEM ,
323325 ) from e
324326
327+ async def dispose_session (self ) -> None :
328+ """Dispose of the session on the server."""
329+ try :
330+ response = self ._uipath .api_client .request (
331+ "POST" ,
332+ f"mcp_/mcp/{ self .server .name } /dispose?sessionId={ self .server .session_id } "
333+ )
334+ if response .status_code == 202 :
335+ logger .info (
336+ f"Sent session dispose signalr to UiPath MCP Server: { self .server .session_id } "
337+ )
338+ else :
339+ logger .error (
340+ f"Error sending session dispose signalr to UiPath MCP Server: { response .status_code } - { response .text } "
341+ )
342+ except Exception as e :
343+ logger .error (
344+ f"Error sending session dispose signalr to UiPath MCP Server: { e } "
345+ )
346+
325347 async def cleanup (self ) -> None :
326348 """Clean up all resources."""
327349 logger .info ("Cleaning up all resources" )
0 commit comments