Skip to content

Commit fd30951

Browse files
authored
Merge pull request #44 from UiPath/fix/samples
fix: dispose server session on error
2 parents 9135cfa + 7d131c2 commit fd30951

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "uipath-mcp"
3-
version = "0.0.40"
3+
version = "0.0.41"
44
description = "UiPath MCP SDK"
55
readme = { file = "README.md", content-type = "text/markdown" }
66
requires-python = ">=3.10"

src/uipath_mcp/_cli/_runtime/_runtime.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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"\nServer 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

Comments
 (0)