2323)
2424
2525from sap_cloud_sdk .agentgateway ._models import MCPTool
26+ from sap_cloud_sdk .agentgateway ._mcp_session import invoke_mcp_tool
2627from sap_cloud_sdk .agentgateway ._token_cache import _GatewayUrlCache , _TokenCache
2728from sap_cloud_sdk .agentgateway .exceptions import MCPServerNotFoundError
2829
@@ -148,19 +149,7 @@ def get_ias_fragment_name(tenant_subdomain: str) -> str:
148149 Raises:
149150 MCPServerNotFoundError: If no IAS fragment is found.
150151 """
151- client = create_fragment_client (instance = _DESTINATION_INSTANCE )
152- fragments = client .list_instance_fragments (
153- filter = ListOptions (
154- filter_labels = [Label (key = _LABEL_KEY , values = [_IAS_LABEL_VALUE ])]
155- ),
156- tenant = tenant_subdomain ,
157- )
158- if not fragments :
159- raise MCPServerNotFoundError (
160- f"No IAS fragment found (label { _LABEL_KEY } ={ _IAS_LABEL_VALUE } ) "
161- f"for tenant '{ tenant_subdomain } '"
162- )
163- return fragments [0 ].name
152+ return _get_labeled_fragment_name (tenant_subdomain , _IAS_LABEL_VALUE )
164153
165154
166155def get_ias_user_fragment_name (tenant_subdomain : str ) -> str :
@@ -178,16 +167,25 @@ def get_ias_user_fragment_name(tenant_subdomain: str) -> str:
178167 Raises:
179168 MCPServerNotFoundError: If no IAS user fragment is found.
180169 """
170+ return _get_labeled_fragment_name (tenant_subdomain , _IAS_USER_LABEL_VALUE )
171+
172+
173+ def _get_labeled_fragment_name (tenant_subdomain : str , label_value : str ) -> str :
174+ """Return the name of the first fragment matching a managed-runtime label.
175+
176+ Raises:
177+ MCPServerNotFoundError: If no matching fragment is found.
178+ """
181179 client = create_fragment_client (instance = _DESTINATION_INSTANCE )
182180 fragments = client .list_instance_fragments (
183181 filter = ListOptions (
184- filter_labels = [Label (key = _LABEL_KEY , values = [_IAS_USER_LABEL_VALUE ])]
182+ filter_labels = [Label (key = _LABEL_KEY , values = [label_value ])]
185183 ),
186184 tenant = tenant_subdomain ,
187185 )
188186 if not fragments :
189187 raise MCPServerNotFoundError (
190- f"No IAS user fragment found (label { _LABEL_KEY } ={ _IAS_USER_LABEL_VALUE } ) "
188+ f"No fragment found (label { _LABEL_KEY } ={ label_value } ) "
191189 f"for tenant '{ tenant_subdomain } '"
192190 )
193191 return fragments [0 ].name
@@ -462,23 +460,4 @@ async def call_mcp_tool_lob(
462460 Returns:
463461 Tool execution result as string.
464462 """
465- async with httpx .AsyncClient (
466- headers = {
467- "Authorization" : f"Bearer { user_auth_token } " ,
468- "x-correlation-id" : str (uuid .uuid4 ()),
469- },
470- timeout = timeout ,
471- ) as http_client :
472- async with streamable_http_client (tool .url , http_client = http_client ) as (
473- read ,
474- write ,
475- _ ,
476- ):
477- async with ClientSession (read , write ) as session :
478- await session .initialize ()
479- result = await session .call_tool (tool .name , kwargs )
480- if not result .content :
481- logger .warning ("Tool '%s' returned empty content" , tool .name )
482- return ""
483- first = result .content [0 ]
484- return str (getattr (first , "text" , "" ))
463+ return await invoke_mcp_tool (tool , user_auth_token , timeout , ** kwargs )
0 commit comments