From 88b8564df4cf09ad476a280186d48ffb8a87810a Mon Sep 17 00:00:00 2001 From: "diana.grecu" Date: Tue, 24 Mar 2026 16:15:34 +0200 Subject: [PATCH 1/3] feat: add fallback for folder_key in mcp service --- .../platform/orchestrator/_mcp_service.py | 11 ++++++-- .../tests/services/test_mcp_service.py | 28 +++++++++++++------ 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/packages/uipath-platform/src/uipath/platform/orchestrator/_mcp_service.py b/packages/uipath-platform/src/uipath/platform/orchestrator/_mcp_service.py index a0f7b5e2a..195eb8240 100644 --- a/packages/uipath-platform/src/uipath/platform/orchestrator/_mcp_service.py +++ b/packages/uipath-platform/src/uipath/platform/orchestrator/_mcp_service.py @@ -200,12 +200,19 @@ async def main(): def custom_headers(self) -> dict[str, str]: return self.folder_headers + def _resolve_folder_key(self, folder_path: str | None) -> str | None: + """Resolve folder key from folder_path, falling back to FolderContext.""" + if folder_path is not None: + return self._folders_service.retrieve_folder_key(folder_path) + + return self._folder_key + def _list_spec( self, *, folder_path: str | None, ) -> RequestSpec: - folder_key = self._folders_service.retrieve_folder_key(folder_path) + folder_key = self._resolve_folder_key(folder_path) return RequestSpec( method="GET", endpoint=Endpoint("/agenthub_/api/servers"), @@ -220,7 +227,7 @@ def _retrieve_spec( *, folder_path: str | None, ) -> RequestSpec: - folder_key = self._folders_service.retrieve_folder_key(folder_path) + folder_key = self._resolve_folder_key(folder_path) return RequestSpec( method="GET", endpoint=Endpoint(f"/agenthub_/api/servers/{slug}"), diff --git a/packages/uipath-platform/tests/services/test_mcp_service.py b/packages/uipath-platform/tests/services/test_mcp_service.py index 70d41d2ea..fdc5d8ee1 100644 --- a/packages/uipath-platform/tests/services/test_mcp_service.py +++ b/packages/uipath-platform/tests/services/test_mcp_service.py @@ -105,14 +105,18 @@ def test_list_with_folder_path( assert HEADER_FOLDER_KEY in servers_request.headers assert servers_request.headers[HEADER_FOLDER_KEY] == "resolved-folder-key" - def test_list_without_folder_raises_error( + def test_list_without_folder_path_falls_back_to_folder_key( self, + httpx_mock: HTTPXMock, config: UiPathApiConfig, execution_context: UiPathExecutionContext, + base_url: str, + org: str, + tenant: str, monkeypatch: pytest.MonkeyPatch, ) -> None: - """Test that listing servers without a folder_path raises ValueError.""" - monkeypatch.delenv("UIPATH_FOLDER_KEY", raising=False) + """Test that listing servers without folder_path falls back to folder_key from FolderContext.""" + monkeypatch.setenv("UIPATH_FOLDER_KEY", "fallback-folder-key") monkeypatch.delenv("UIPATH_FOLDER_PATH", raising=False) folders_service = FolderService( @@ -124,11 +128,19 @@ def test_list_without_folder_raises_error( folders_service=folders_service, ) - with pytest.raises( - ValueError, - match="Cannot obtain folder_key without providing folder_path", - ): - service.list() + httpx_mock.add_response( + url=f"{base_url}{org}{tenant}/agenthub_/api/servers", + status_code=200, + json=[], + ) + + servers = service.list() + + assert servers == [] + requests = httpx_mock.get_requests() + assert len(requests) == 1 + assert HEADER_FOLDER_KEY in requests[0].headers + assert requests[0].headers[HEADER_FOLDER_KEY] == "fallback-folder-key" @pytest.mark.anyio async def test_list_async( From afeb3619fafaad97e0ed97e3abca18af132c36c1 Mon Sep 17 00:00:00 2001 From: "diana.grecu" Date: Tue, 24 Mar 2026 16:33:22 +0200 Subject: [PATCH 2/3] chore: update versions --- packages/uipath-platform/pyproject.toml | 2 +- packages/uipath-platform/uv.lock | 2 +- packages/uipath/uv.lock | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/uipath-platform/pyproject.toml b/packages/uipath-platform/pyproject.toml index c9a630490..1162943a1 100644 --- a/packages/uipath-platform/pyproject.toml +++ b/packages/uipath-platform/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "uipath-platform" -version = "0.1.8" +version = "0.1.9" description = "HTTP client library for programmatic access to UiPath Platform" readme = { file = "README.md", content-type = "text/markdown" } requires-python = ">=3.11" diff --git a/packages/uipath-platform/uv.lock b/packages/uipath-platform/uv.lock index fecbb12ab..735fde6a2 100644 --- a/packages/uipath-platform/uv.lock +++ b/packages/uipath-platform/uv.lock @@ -1088,7 +1088,7 @@ dev = [ [[package]] name = "uipath-platform" -version = "0.1.8" +version = "0.1.9" source = { editable = "." } dependencies = [ { name = "httpx" }, diff --git a/packages/uipath/uv.lock b/packages/uipath/uv.lock index 7b65dda64..b56b550d7 100644 --- a/packages/uipath/uv.lock +++ b/packages/uipath/uv.lock @@ -2682,7 +2682,7 @@ dev = [ [[package]] name = "uipath-platform" -version = "0.1.8" +version = "0.1.9" source = { editable = "../uipath-platform" } dependencies = [ { name = "httpx" }, From 10630576c4684b5dee3bc2ad74f8af743d9983ad Mon Sep 17 00:00:00 2001 From: "diana.grecu" Date: Wed, 25 Mar 2026 16:12:24 +0200 Subject: [PATCH 3/3] chore: update uipath --- packages/uipath/pyproject.toml | 4 ++-- packages/uipath/uv.lock | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/uipath/pyproject.toml b/packages/uipath/pyproject.toml index a8edbc08a..efb5b3c62 100644 --- a/packages/uipath/pyproject.toml +++ b/packages/uipath/pyproject.toml @@ -1,13 +1,13 @@ [project] name = "uipath" -version = "2.10.30" +version = "2.10.31" description = "Python SDK and CLI for UiPath Platform, enabling programmatic interaction with automation services, process management, and deployment tools." readme = { file = "README.md", content-type = "text/markdown" } requires-python = ">=3.11" dependencies = [ "uipath-core>=0.5.2, <0.6.0", "uipath-runtime>=0.9.1, <0.10.0", - "uipath-platform>=0.1.4, <0.2.0", + "uipath-platform>=0.1.9, <0.2.0", "click>=8.3.1", "httpx>=0.28.1", "pyjwt>=2.10.1", diff --git a/packages/uipath/uv.lock b/packages/uipath/uv.lock index b56b550d7..39fa9f714 100644 --- a/packages/uipath/uv.lock +++ b/packages/uipath/uv.lock @@ -2543,7 +2543,7 @@ wheels = [ [[package]] name = "uipath" -version = "2.10.30" +version = "2.10.31" source = { editable = "." } dependencies = [ { name = "applicationinsights" },