11from typing import List
2+ from urllib .parse import quote
23
34from uipath .core .tracing import traced
45
56from ..common ._base_service import BaseService
6- from ..common ._bindings import resource_override
7+ from ..common ._bindings import resolve_retrieve_identifier , resource_override
78from ..common ._config import UiPathApiConfig
89from ..common ._execution_context import UiPathExecutionContext
910from ..common ._folder_context import FolderContext , header_folder
@@ -66,7 +67,7 @@ def list(
6667
6768 return [McpServer .model_validate (server ) for server in response .json ()]
6869
69- @traced (name = "mcp_list " , run_type = "uipath" )
70+ @traced (name = "mcp_list_async " , run_type = "uipath" )
7071 async def list_async (
7172 self ,
7273 * ,
@@ -109,18 +110,21 @@ async def main():
109110
110111 return [McpServer .model_validate (server ) for server in response .json ()]
111112
113+ @resource_override (resource_type = "mcpServer" , resource_identifier = "name" )
112114 @resource_override (resource_type = "mcpServer" , resource_identifier = "slug" )
113115 @traced (name = "mcp_retrieve" , run_type = "uipath" )
114116 def retrieve (
115117 self ,
116- slug : str ,
118+ slug : str | None = None ,
117119 * ,
120+ name : str | None = None ,
118121 folder_path : str | None = None ,
119122 ) -> McpServer :
120- """Retrieve a specific MCP server by its slug.
123+ """Retrieve a specific MCP server by its display name or legacy slug.
121124
122125 Args:
123- slug (str): The unique slug identifier for the server.
126+ slug (Optional[str]): The legacy slug identifier of the server.
127+ name (Optional[str]): The display name of the server.
124128 folder_path (Optional[str]): The path of the folder where the server is located.
125129
126130 Returns:
@@ -132,12 +136,13 @@ def retrieve(
132136
133137 client = UiPath()
134138
135- server = client.mcp.retrieve(slug="my-server-slug ", folder_path="MyFolder")
139+ server = client.mcp.retrieve(name="My Server ", folder_path="MyFolder")
136140 print(f"Server: {server.name}, URL: {server.mcp_url}")
137141 ```
138142 """
143+ identifier = resolve_retrieve_identifier (name = name , slug = slug )
139144 spec = self ._retrieve_spec (
140- slug = slug ,
145+ name = identifier ,
141146 folder_path = folder_path ,
142147 )
143148
@@ -150,18 +155,21 @@ def retrieve(
150155
151156 return McpServer .model_validate (response .json ())
152157
158+ @resource_override (resource_type = "mcpServer" , resource_identifier = "name" )
153159 @resource_override (resource_type = "mcpServer" , resource_identifier = "slug" )
154- @traced (name = "mcp_retrieve " , run_type = "uipath" )
160+ @traced (name = "mcp_retrieve_async " , run_type = "uipath" )
155161 async def retrieve_async (
156162 self ,
157- slug : str ,
163+ slug : str | None = None ,
158164 * ,
165+ name : str | None = None ,
159166 folder_path : str | None = None ,
160167 ) -> McpServer :
161- """Asynchronously retrieve a specific MCP server by its slug.
168+ """Asynchronously retrieve an MCP server by its display name or legacy slug.
162169
163170 Args:
164- slug (str): The unique slug identifier for the server.
171+ slug (Optional[str]): The legacy slug identifier of the server.
172+ name (Optional[str]): The display name of the server.
165173 folder_path (Optional[str]): The path of the folder where the server is located.
166174
167175 Returns:
@@ -176,14 +184,15 @@ async def retrieve_async(
176184 sdk = UiPath()
177185
178186 async def main():
179- server = await sdk.mcp.retrieve_async(slug="my-server-slug ", folder_path="MyFolder")
187+ server = await sdk.mcp.retrieve_async(name="My Server ", folder_path="MyFolder")
180188 print(f"Server: {server.name}, URL: {server.mcp_url}")
181189
182190 asyncio.run(main())
183191 ```
184192 """
193+ identifier = resolve_retrieve_identifier (name = name , slug = slug )
185194 spec = self ._retrieve_spec (
186- slug = slug ,
195+ name = identifier ,
187196 folder_path = folder_path ,
188197 )
189198
@@ -223,14 +232,14 @@ def _list_spec(
223232
224233 def _retrieve_spec (
225234 self ,
226- slug : str ,
235+ name : str ,
227236 * ,
228237 folder_path : str | None ,
229238 ) -> RequestSpec :
230239 folder_key = self ._resolve_folder_key (folder_path )
231240 return RequestSpec (
232241 method = "GET" ,
233- endpoint = Endpoint (f"/agenthub_/api/servers/{ slug } " ),
242+ endpoint = Endpoint (f"/agenthub_/api/servers/{ quote ( name , safe = '' ) } " ),
234243 headers = {
235244 ** header_folder (folder_key , None ),
236245 },
0 commit comments