From e2a7178675882484fc332c29442a98cb6bd493a5 Mon Sep 17 00:00:00 2001 From: Jesus Terrazas Date: Tue, 9 Dec 2025 15:10:18 -0800 Subject: [PATCH 01/11] Add User-Agent header to list servers call and to server calls --- .../agentframework/services/mcp_tool_registration_service.py | 2 ++ .../azureaifoundry/services/mcp_tool_registration_service.py | 2 ++ .../extensions/openai/mcp_tool_registration_service.py | 5 ++++- .../semantickernel/services/mcp_tool_registration_service.py | 2 ++ .../services/mcp_tool_server_configuration_service.py | 4 ++++ .../microsoft_agents_a365/tooling/utils/constants.py | 3 +++ 6 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py index 2b2ea04f..61052882 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py @@ -105,6 +105,8 @@ async def add_tool_servers_to_agent( f"{Constants.Headers.BEARER_PREFIX} {auth_token}" ) + headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header("AgentFramework") + server_name = getattr(config, "mcp_server_name", "Unknown") # Create and configure MCPStreamableHTTPTool diff --git a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py index 22816ce1..e8dd4265 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py @@ -189,6 +189,8 @@ async def _get_mcp_tool_definitions_and_resources( ) mcp_tool.update_headers(Constants.Headers.AUTHORIZATION, header_value) + mcp_tool.update_headers(Constants.Headers.USER_AGENT, Utility.get_user_agent_header("AzureAIFoundry")) + # Add to collections tool_definitions.extend(mcp_tool.definitions) if mcp_tool.resources and mcp_tool.resources.mcp: diff --git a/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py index eca9bede..11860cfd 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py @@ -17,6 +17,7 @@ McpToolServerConfigurationService, ) +from microsoft_agents_a365.tooling.utils.constants import Constants from microsoft_agents_a365.tooling.utils.utility import ( get_mcp_platform_authentication_scope, ) @@ -132,7 +133,9 @@ async def add_tool_servers_to_agent( # Prepare headers with authorization headers = si.headers or {} if auth_token: - headers["Authorization"] = f"Bearer {auth_token}" + headers[Constants.Headers.AUTHORIZATION] = f"Bearer {auth_token}" + + headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header("OpenAI") # Create MCPServerStreamableHttpParams with proper configuration params = MCPServerStreamableHttpParams(url=si.url, headers=headers) diff --git a/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py index 836b27a1..5022bc59 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py @@ -132,6 +132,8 @@ async def add_tool_servers_to_agent( Constants.Headers.AUTHORIZATION: f"{Constants.Headers.BEARER_PREFIX} {auth_token}", } + headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header("SemanticKernel") + plugin = MCPStreamableHttpPlugin( name=server.mcp_server_name, url=server.mcp_server_unique_name, diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py index df6c1830..e448ec6a 100644 --- a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py @@ -32,6 +32,9 @@ from ..utils import Constants from ..utils.utility import get_tooling_gateway_for_digital_worker, build_mcp_server_url +# Runtime Imports +from microsoft_agents_a365.runtime.utility import Utility as RuntimeUtility + # ============================================================================== # MAIN SERVICE CLASS @@ -335,6 +338,7 @@ def _prepare_gateway_headers(self, auth_token: str) -> Dict[str, str]: """ return { "Authorization": f"{Constants.Headers.BEARER_PREFIX} {auth_token}", + "User-Agent": RuntimeUtility.get_user_agent_header(), } async def _parse_gateway_response( diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/utils/constants.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/utils/constants.py index eabb0f2d..46f3e03c 100644 --- a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/utils/constants.py +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/utils/constants.py @@ -20,3 +20,6 @@ class Headers: #: The prefix used for Bearer authentication tokens in HTTP headers. BEARER_PREFIX = "Bearer" + + #: The header name for User-Agent information. + USER_AGENT = "User-Agent" From 7ed47c74c3c0124c27d1ba47156dad8f80e8ec25 Mon Sep 17 00:00:00 2001 From: Jesus Terrazas Date: Tue, 9 Dec 2025 15:17:35 -0800 Subject: [PATCH 02/11] format --- .../agentframework/services/mcp_tool_registration_service.py | 4 +++- .../azureaifoundry/services/mcp_tool_registration_service.py | 4 +++- .../semantickernel/services/mcp_tool_registration_service.py | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py index 61052882..21b26da4 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py @@ -105,7 +105,9 @@ async def add_tool_servers_to_agent( f"{Constants.Headers.BEARER_PREFIX} {auth_token}" ) - headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header("AgentFramework") + headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header( + "AgentFramework" + ) server_name = getattr(config, "mcp_server_name", "Unknown") diff --git a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py index e8dd4265..cd109e1b 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py @@ -189,7 +189,9 @@ async def _get_mcp_tool_definitions_and_resources( ) mcp_tool.update_headers(Constants.Headers.AUTHORIZATION, header_value) - mcp_tool.update_headers(Constants.Headers.USER_AGENT, Utility.get_user_agent_header("AzureAIFoundry")) + mcp_tool.update_headers( + Constants.Headers.USER_AGENT, Utility.get_user_agent_header("AzureAIFoundry") + ) # Add to collections tool_definitions.extend(mcp_tool.definitions) diff --git a/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py index 5022bc59..c0701ef1 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py @@ -132,7 +132,9 @@ async def add_tool_servers_to_agent( Constants.Headers.AUTHORIZATION: f"{Constants.Headers.BEARER_PREFIX} {auth_token}", } - headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header("SemanticKernel") + headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header( + "SemanticKernel" + ) plugin = MCPStreamableHttpPlugin( name=server.mcp_server_name, From dad575570dbd388fa9e1efaef4f8ba59ee2d415c Mon Sep 17 00:00:00 2001 From: Jesus Terrazas Date: Tue, 9 Dec 2025 15:46:56 -0800 Subject: [PATCH 03/11] pass orchestrator name for list tool servers --- .../microsoft_agents_a365/runtime/utility.py | 2 +- .../services/mcp_tool_registration_service.py | 4 +++- .../services/mcp_tool_registration_service.py | 5 +++-- .../services/mcp_tool_registration_service.py | 5 +++-- .../mcp_tool_server_configuration_service.py | 12 ++++++------ 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/libraries/microsoft-agents-a365-runtime/microsoft_agents_a365/runtime/utility.py b/libraries/microsoft-agents-a365-runtime/microsoft_agents_a365/runtime/utility.py index bd5341b9..9a26ccc1 100644 --- a/libraries/microsoft-agents-a365-runtime/microsoft_agents_a365/runtime/utility.py +++ b/libraries/microsoft-agents-a365-runtime/microsoft_agents_a365/runtime/utility.py @@ -86,7 +86,7 @@ def resolve_agent_identity(context: Any, auth_token: Optional[str]) -> str: return Utility.get_app_id_from_token(auth_token) @staticmethod - def get_user_agent_header(orchestrator: str = "") -> str: + def get_user_agent_header(orchestrator: Optional[str] = None) -> str: """ Generates a User-Agent header string for SDK requests. diff --git a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py index 21b26da4..28cc3e39 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py @@ -27,6 +27,7 @@ class McpToolRegistrationService: This service handles registration and management of MCP (Model Context Protocol) tool servers with Agent Framework agents. """ + _orchestrator_name: str = "AgentFramework" def __init__(self, logger: Optional[logging.Logger] = None): """ @@ -81,6 +82,7 @@ async def add_tool_servers_to_agent( server_configs = await self._mcp_server_configuration_service.list_tool_servers( agentic_app_id=agentic_app_id, auth_token=auth_token, + orchestrator=self._orchestrator_name ) self._logger.info(f"Loaded {len(server_configs)} MCP server configurations") @@ -106,7 +108,7 @@ async def add_tool_servers_to_agent( ) headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header( - "AgentFramework" + self._orchestrator_name ) server_name = getattr(config, "mcp_server_name", "Unknown") diff --git a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py index cd109e1b..56c80e20 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py @@ -44,6 +44,7 @@ class McpToolRegistrationService: >>> service = McpToolRegistrationService() >>> service.add_tool_servers_to_agent(project_client, agent_id, token) """ + _orchestrator_name: str = "AzureAIFoundry" def __init__( self, @@ -141,7 +142,7 @@ async def _get_mcp_tool_definitions_and_resources( # Get MCP server configurations try: servers = await self._mcp_server_configuration_service.list_tool_servers( - agentic_app_id, auth_token + agentic_app_id, auth_token, self.orchestrator_name ) except Exception as ex: self._logger.error( @@ -190,7 +191,7 @@ async def _get_mcp_tool_definitions_and_resources( mcp_tool.update_headers(Constants.Headers.AUTHORIZATION, header_value) mcp_tool.update_headers( - Constants.Headers.USER_AGENT, Utility.get_user_agent_header("AzureAIFoundry") + Constants.Headers.USER_AGENT, Utility.get_user_agent_header(self._orchestrator_name) ) # Add to collections diff --git a/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py index c0701ef1..6bfe8b03 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py @@ -35,6 +35,7 @@ class McpToolRegistrationService: This service handles registration and management of MCP (Model Context Protocol) tool servers with Semantic Kernel agents. """ + _orchestrator_name: str = "SemanticKernel" def __init__( self, @@ -108,7 +109,7 @@ async def add_tool_servers_to_agent( # Get and process servers servers = await self._mcp_server_configuration_service.list_tool_servers( - agentic_app_id, auth_token + agentic_app_id, auth_token, self._orchestrator_name ) self._logger.info(f"🔧 Adding MCP tools from {len(servers)} servers") @@ -133,7 +134,7 @@ async def add_tool_servers_to_agent( } headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header( - "SemanticKernel" + self._orchestrator_name ) plugin = MCPStreamableHttpPlugin( diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py index e448ec6a..4acb79aa 100644 --- a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py @@ -69,7 +69,7 @@ def __init__(self, logger: Optional[logging.Logger] = None): # -------------------------------------------------------------------------- async def list_tool_servers( - self, agentic_app_id: str, auth_token: str + self, agentic_app_id: str, auth_token: str, orchestrator_name: Optional[str] = None ) -> List[MCPServerConfig]: """ Gets the list of MCP Servers that are configured for the agent. @@ -94,7 +94,7 @@ async def list_tool_servers( if self._is_development_scenario(): return self._load_servers_from_manifest() else: - return await self._load_servers_from_gateway(agentic_app_id, auth_token) + return await self._load_servers_from_gateway(agentic_app_id, auth_token, orchestrator_name) # -------------------------------------------------------------------------- # ENVIRONMENT DETECTION @@ -278,7 +278,7 @@ def _log_manifest_search_failure(self) -> None: # -------------------------------------------------------------------------- async def _load_servers_from_gateway( - self, agentic_app_id: str, auth_token: str + self, agentic_app_id: str, auth_token: str, orchestrator_name: Optional[str] = None ) -> List[MCPServerConfig]: """ Reads MCP server configurations from tooling gateway endpoint for production scenario. @@ -297,7 +297,7 @@ async def _load_servers_from_gateway( try: config_endpoint = get_tooling_gateway_for_digital_worker(agentic_app_id) - headers = self._prepare_gateway_headers(auth_token) + headers = self._prepare_gateway_headers(auth_token, orchestrator_name) self._logger.info(f"Calling tooling gateway endpoint: {config_endpoint}") @@ -326,7 +326,7 @@ async def _load_servers_from_gateway( return mcp_servers - def _prepare_gateway_headers(self, auth_token: str) -> Dict[str, str]: + def _prepare_gateway_headers(self, auth_token: str, orchestrator_name: Optional[str] = None) -> Dict[str, str]: """ Prepares headers for tooling gateway requests. @@ -338,7 +338,7 @@ def _prepare_gateway_headers(self, auth_token: str) -> Dict[str, str]: """ return { "Authorization": f"{Constants.Headers.BEARER_PREFIX} {auth_token}", - "User-Agent": RuntimeUtility.get_user_agent_header(), + "User-Agent": RuntimeUtility.get_user_agent_header(orchestrator_name), } async def _parse_gateway_response( From 57a5e6076f5ad3b92b5ede3f91a060b6ad5cc489 Mon Sep 17 00:00:00 2001 From: Jesus Terrazas Date: Tue, 9 Dec 2025 15:48:33 -0800 Subject: [PATCH 04/11] update openai --- .../extensions/openai/mcp_tool_registration_service.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py index 11860cfd..8cf1534e 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py @@ -38,6 +38,7 @@ class MCPServerInfo: class McpToolRegistrationService: """Service for managing MCP tools and servers for an agent""" + _orchestrator_name: str = "OpenAI" def __init__(self, logger: Optional[logging.Logger] = None): """ @@ -89,6 +90,7 @@ async def add_tool_servers_to_agent( mcp_server_configs = await self.config_service.list_tool_servers( agentic_app_id=agentic_app_id, auth_token=auth_token, + orchestrator_name=self._orchestrator_name, ) self._logger.info(f"Loaded {len(mcp_server_configs)} MCP server configurations") @@ -133,9 +135,9 @@ async def add_tool_servers_to_agent( # Prepare headers with authorization headers = si.headers or {} if auth_token: - headers[Constants.Headers.AUTHORIZATION] = f"Bearer {auth_token}" + headers[Constants.Headers.AUTHORIZATION] = f"{Constants.Headers.BEARER_PREFIX} {auth_token}" - headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header("OpenAI") + headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header(self._orchestrator_name) # Create MCPServerStreamableHttpParams with proper configuration params = MCPServerStreamableHttpParams(url=si.url, headers=headers) From a2b446b7394b0f141932e40a430aa7283249e444 Mon Sep 17 00:00:00 2001 From: Jesus Terrazas Date: Tue, 9 Dec 2025 15:50:06 -0800 Subject: [PATCH 05/11] fix wrong named arg --- .../agentframework/services/mcp_tool_registration_service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py index 28cc3e39..8dcbd476 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py @@ -82,7 +82,7 @@ async def add_tool_servers_to_agent( server_configs = await self._mcp_server_configuration_service.list_tool_servers( agentic_app_id=agentic_app_id, auth_token=auth_token, - orchestrator=self._orchestrator_name + orchestrator_name=self._orchestrator_name ) self._logger.info(f"Loaded {len(server_configs)} MCP server configurations") From bd46a0ca0966c21dd1511bae1b2bbdfbd2e6bcdc Mon Sep 17 00:00:00 2001 From: Jesus Terrazas Date: Tue, 9 Dec 2025 15:52:50 -0800 Subject: [PATCH 06/11] format --- .../services/mcp_tool_registration_service.py | 3 ++- .../services/mcp_tool_registration_service.py | 1 + .../extensions/openai/mcp_tool_registration_service.py | 9 +++++++-- .../services/mcp_tool_registration_service.py | 1 + .../services/mcp_tool_server_configuration_service.py | 8 ++++++-- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py index 8dcbd476..7ef81175 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py @@ -27,6 +27,7 @@ class McpToolRegistrationService: This service handles registration and management of MCP (Model Context Protocol) tool servers with Agent Framework agents. """ + _orchestrator_name: str = "AgentFramework" def __init__(self, logger: Optional[logging.Logger] = None): @@ -82,7 +83,7 @@ async def add_tool_servers_to_agent( server_configs = await self._mcp_server_configuration_service.list_tool_servers( agentic_app_id=agentic_app_id, auth_token=auth_token, - orchestrator_name=self._orchestrator_name + orchestrator_name=self._orchestrator_name, ) self._logger.info(f"Loaded {len(server_configs)} MCP server configurations") diff --git a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py index 56c80e20..7a7733e4 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py @@ -44,6 +44,7 @@ class McpToolRegistrationService: >>> service = McpToolRegistrationService() >>> service.add_tool_servers_to_agent(project_client, agent_id, token) """ + _orchestrator_name: str = "AzureAIFoundry" def __init__( diff --git a/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py index 8cf1534e..7446a91c 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py @@ -38,6 +38,7 @@ class MCPServerInfo: class McpToolRegistrationService: """Service for managing MCP tools and servers for an agent""" + _orchestrator_name: str = "OpenAI" def __init__(self, logger: Optional[logging.Logger] = None): @@ -135,9 +136,13 @@ async def add_tool_servers_to_agent( # Prepare headers with authorization headers = si.headers or {} if auth_token: - headers[Constants.Headers.AUTHORIZATION] = f"{Constants.Headers.BEARER_PREFIX} {auth_token}" + headers[Constants.Headers.AUTHORIZATION] = ( + f"{Constants.Headers.BEARER_PREFIX} {auth_token}" + ) - headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header(self._orchestrator_name) + headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header( + self._orchestrator_name + ) # Create MCPServerStreamableHttpParams with proper configuration params = MCPServerStreamableHttpParams(url=si.url, headers=headers) diff --git a/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py index 6bfe8b03..8df51a0b 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py @@ -35,6 +35,7 @@ class McpToolRegistrationService: This service handles registration and management of MCP (Model Context Protocol) tool servers with Semantic Kernel agents. """ + _orchestrator_name: str = "SemanticKernel" def __init__( diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py index 4acb79aa..8b757700 100644 --- a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py @@ -94,7 +94,9 @@ async def list_tool_servers( if self._is_development_scenario(): return self._load_servers_from_manifest() else: - return await self._load_servers_from_gateway(agentic_app_id, auth_token, orchestrator_name) + return await self._load_servers_from_gateway( + agentic_app_id, auth_token, orchestrator_name + ) # -------------------------------------------------------------------------- # ENVIRONMENT DETECTION @@ -326,7 +328,9 @@ async def _load_servers_from_gateway( return mcp_servers - def _prepare_gateway_headers(self, auth_token: str, orchestrator_name: Optional[str] = None) -> Dict[str, str]: + def _prepare_gateway_headers( + self, auth_token: str, orchestrator_name: Optional[str] = None + ) -> Dict[str, str]: """ Prepares headers for tooling gateway requests. From 9ae5bb663ba2151bfe8a981e3769ad6a92db0df0 Mon Sep 17 00:00:00 2001 From: Jesus Terrazas Date: Tue, 9 Dec 2025 16:06:48 -0800 Subject: [PATCH 07/11] copilot comments 1x --- .../azureaifoundry/services/mcp_tool_registration_service.py | 2 +- .../tooling/services/mcp_tool_server_configuration_service.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py index 7a7733e4..fc406a52 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py @@ -143,7 +143,7 @@ async def _get_mcp_tool_definitions_and_resources( # Get MCP server configurations try: servers = await self._mcp_server_configuration_service.list_tool_servers( - agentic_app_id, auth_token, self.orchestrator_name + agentic_app_id, auth_token, self._orchestrator_name ) except Exception as ex: self._logger.error( diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py index 8b757700..396db123 100644 --- a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py @@ -77,6 +77,7 @@ async def list_tool_servers( Args: agentic_app_id: Agentic App ID for the agent. auth_token: Authentication token to access the MCP servers. + orchestrator_name: Optional orchestrator name to include in User-Agent header. Returns: List[MCPServerConfig]: Returns the list of MCP Servers that are configured. @@ -288,6 +289,7 @@ async def _load_servers_from_gateway( Args: agentic_app_id: Agentic App ID for the agent. auth_token: Authentication token to access the tooling gateway. + orchestrator_name: Optional orchestrator name to include in User-Agent header. Returns: List[MCPServerConfig]: List of MCP server configurations from tooling gateway. @@ -336,6 +338,7 @@ def _prepare_gateway_headers( Args: auth_token: Authentication token. + orchestrator_name: Optional orchestrator name to include in User-Agent header. Returns: Dictionary of HTTP headers. From d8018e1d8789ae8461bfdd9d549e7672eed6bb5e Mon Sep 17 00:00:00 2001 From: Jesus Terrazas Date: Tue, 9 Dec 2025 16:19:14 -0800 Subject: [PATCH 08/11] Use constants in tooling core --- .../tooling/services/mcp_tool_server_configuration_service.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py index 396db123..7ffef101 100644 --- a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py @@ -344,8 +344,8 @@ def _prepare_gateway_headers( Dictionary of HTTP headers. """ return { - "Authorization": f"{Constants.Headers.BEARER_PREFIX} {auth_token}", - "User-Agent": RuntimeUtility.get_user_agent_header(orchestrator_name), + Constants.Headers.AUTHORIZATION: f"{Constants.Headers.BEARER_PREFIX} {auth_token}", + Constants.Headers.USER_AGENT: RuntimeUtility.get_user_agent_header(orchestrator_name), } async def _parse_gateway_response( From 4e698377308082cc60f62fecc618d5278173ba54 Mon Sep 17 00:00:00 2001 From: Jesus Terrazas Date: Thu, 11 Dec 2025 17:28:20 -0800 Subject: [PATCH 09/11] Add tool options --- .../services/mcp_tool_registration_service.py | 5 ++++- .../services/mcp_tool_registration_service.py | 4 +++- .../openai/mcp_tool_registration_service.py | 4 +++- .../services/mcp_tool_registration_service.py | 5 +++-- .../tooling/models/__init__.py | 2 +- .../tooling/models/tool_options.py | 16 +++++++++++++++ .../mcp_tool_server_configuration_service.py | 20 +++++++++++-------- 7 files changed, 42 insertions(+), 14 deletions(-) create mode 100644 libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/tool_options.py diff --git a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py index 7ef81175..267680d6 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/microsoft_agents_a365/tooling/extensions/agentframework/services/mcp_tool_registration_service.py @@ -13,6 +13,7 @@ from microsoft_agents_a365.tooling.services.mcp_tool_server_configuration_service import ( McpToolServerConfigurationService, ) +from microsoft_agents_a365.tooling.models import ToolOptions from microsoft_agents_a365.tooling.utils.constants import Constants from microsoft_agents_a365.tooling.utils.utility import ( @@ -79,11 +80,13 @@ async def add_tool_servers_to_agent( self._logger.info(f"Listing MCP tool servers for agent {agentic_app_id}") + options = ToolOptions(orchestrator_name=self._orchestrator_name) + # Get MCP server configurations server_configs = await self._mcp_server_configuration_service.list_tool_servers( agentic_app_id=agentic_app_id, auth_token=auth_token, - orchestrator_name=self._orchestrator_name, + options=options, ) self._logger.info(f"Loaded {len(server_configs)} MCP server configurations") diff --git a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py index fc406a52..bce73892 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py @@ -21,6 +21,7 @@ from microsoft_agents_a365.tooling.services.mcp_tool_server_configuration_service import ( McpToolServerConfigurationService, ) +from microsoft_agents_a365.tooling.Models import ToolOptions from microsoft_agents_a365.tooling.utils.constants import Constants from microsoft_agents_a365.tooling.utils.utility import get_mcp_platform_authentication_scope @@ -141,9 +142,10 @@ async def _get_mcp_tool_definitions_and_resources( return ([], None) # Get MCP server configurations + options = ToolOptions(orchestrator_name=self._orchestrator_name) try: servers = await self._mcp_server_configuration_service.list_tool_servers( - agentic_app_id, auth_token, self._orchestrator_name + agentic_app_id, auth_token, options ) except Exception as ex: self._logger.error( diff --git a/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py index 7446a91c..1d6e6cc9 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-openai/microsoft_agents_a365/tooling/extensions/openai/mcp_tool_registration_service.py @@ -17,6 +17,7 @@ McpToolServerConfigurationService, ) +from microsoft_agents_a365.tooling.models import ToolOptions from microsoft_agents_a365.tooling.utils.constants import Constants from microsoft_agents_a365.tooling.utils.utility import ( get_mcp_platform_authentication_scope, @@ -86,12 +87,13 @@ async def add_tool_servers_to_agent( # mcp_server_configs = [] # TODO: radevika: Update once the common project is merged. + options = ToolOptions(orchestrator_name=self._orchestrator_name) agentic_app_id = Utility.resolve_agent_identity(context, auth_token) self._logger.info(f"Listing MCP tool servers for agent {agentic_app_id}") mcp_server_configs = await self.config_service.list_tool_servers( agentic_app_id=agentic_app_id, auth_token=auth_token, - orchestrator_name=self._orchestrator_name, + options=options, ) self._logger.info(f"Loaded {len(mcp_server_configs)} MCP server configurations") diff --git a/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py index 8df51a0b..e0b43e8c 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py @@ -20,7 +20,7 @@ from microsoft_agents_a365.tooling.services.mcp_tool_server_configuration_service import ( McpToolServerConfigurationService, ) -from microsoft_agents_a365.tooling.models.mcp_server_config import MCPServerConfig +from microsoft_agents_a365.tooling.models import MCPServerConfig, ToolOptions from microsoft_agents_a365.tooling.utils.constants import Constants from microsoft_agents_a365.tooling.utils.utility import ( get_tools_mode, @@ -109,8 +109,9 @@ async def add_tool_servers_to_agent( self._validate_inputs(kernel, agentic_app_id, auth_token) # Get and process servers + options = ToolOptions(orchestrator_name=self._orchestrator_name) servers = await self._mcp_server_configuration_service.list_tool_servers( - agentic_app_id, auth_token, self._orchestrator_name + agentic_app_id, auth_token, options ) self._logger.info(f"🔧 Adding MCP tools from {len(servers)} servers") diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/__init__.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/__init__.py index fc83626d..65f87fbd 100644 --- a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/__init__.py +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/__init__.py @@ -8,4 +8,4 @@ from .mcp_server_config import MCPServerConfig -__all__ = ["MCPServerConfig"] +__all__ = ["MCPServerConfig", "ToolOptions"] diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/tool_options.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/tool_options.py new file mode 100644 index 00000000..9c5c7604 --- /dev/null +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/tool_options.py @@ -0,0 +1,16 @@ +# Copyright (c) Microsoft. All rights reserved. + +""" +Tooling Options model. +""" + +from dataclasses import dataclass +from typing import Optional + + +@dataclass +class ToolOptions: + """Configuration options for tooling operations.""" + + #: Gets or sets the name of the orchestrator. + orchestrator_name: Optional[str] diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py index 7ffef101..a5cf9d07 100644 --- a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py @@ -28,7 +28,7 @@ import aiohttp # Local imports -from ..models import MCPServerConfig +from ..models import MCPServerConfig, ToolOptions from ..utils import Constants from ..utils.utility import get_tooling_gateway_for_digital_worker, build_mcp_server_url @@ -69,7 +69,7 @@ def __init__(self, logger: Optional[logging.Logger] = None): # -------------------------------------------------------------------------- async def list_tool_servers( - self, agentic_app_id: str, auth_token: str, orchestrator_name: Optional[str] = None + self, agentic_app_id: str, auth_token: str, options: Optional[ToolOptions] = None ) -> List[MCPServerConfig]: """ Gets the list of MCP Servers that are configured for the agent. @@ -77,7 +77,7 @@ async def list_tool_servers( Args: agentic_app_id: Agentic App ID for the agent. auth_token: Authentication token to access the MCP servers. - orchestrator_name: Optional orchestrator name to include in User-Agent header. + options: Optional ToolOptions instance containing optional parameters. Returns: List[MCPServerConfig]: Returns the list of MCP Servers that are configured. @@ -89,6 +89,10 @@ async def list_tool_servers( # Validate input parameters self._validate_input_parameters(agentic_app_id, auth_token) + # Use default options if none provided + if options is None: + options = ToolOptions(orchestrator_name=None) + self._logger.info(f"Listing MCP tool servers for agent {agentic_app_id}") # Determine configuration source based on environment @@ -96,7 +100,7 @@ async def list_tool_servers( return self._load_servers_from_manifest() else: return await self._load_servers_from_gateway( - agentic_app_id, auth_token, orchestrator_name + agentic_app_id, auth_token, options ) # -------------------------------------------------------------------------- @@ -281,7 +285,7 @@ def _log_manifest_search_failure(self) -> None: # -------------------------------------------------------------------------- async def _load_servers_from_gateway( - self, agentic_app_id: str, auth_token: str, orchestrator_name: Optional[str] = None + self, agentic_app_id: str, auth_token: str, options: ToolOptions ) -> List[MCPServerConfig]: """ Reads MCP server configurations from tooling gateway endpoint for production scenario. @@ -301,7 +305,7 @@ async def _load_servers_from_gateway( try: config_endpoint = get_tooling_gateway_for_digital_worker(agentic_app_id) - headers = self._prepare_gateway_headers(auth_token, orchestrator_name) + headers = self._prepare_gateway_headers(auth_token, options) self._logger.info(f"Calling tooling gateway endpoint: {config_endpoint}") @@ -331,7 +335,7 @@ async def _load_servers_from_gateway( return mcp_servers def _prepare_gateway_headers( - self, auth_token: str, orchestrator_name: Optional[str] = None + self, auth_token: str, options: ToolOptions ) -> Dict[str, str]: """ Prepares headers for tooling gateway requests. @@ -345,7 +349,7 @@ def _prepare_gateway_headers( """ return { Constants.Headers.AUTHORIZATION: f"{Constants.Headers.BEARER_PREFIX} {auth_token}", - Constants.Headers.USER_AGENT: RuntimeUtility.get_user_agent_header(orchestrator_name), + Constants.Headers.USER_AGENT: RuntimeUtility.get_user_agent_header(options.orchestrator_name), } async def _parse_gateway_response( From c8c359c7db9db3e33c01584e321d951f65dd8908 Mon Sep 17 00:00:00 2001 From: Jesus Terrazas Date: Thu, 11 Dec 2025 17:30:16 -0800 Subject: [PATCH 10/11] format --- .../mcp_tool_server_configuration_service.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py index a5cf9d07..a149cc77 100644 --- a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py @@ -99,9 +99,7 @@ async def list_tool_servers( if self._is_development_scenario(): return self._load_servers_from_manifest() else: - return await self._load_servers_from_gateway( - agentic_app_id, auth_token, options - ) + return await self._load_servers_from_gateway(agentic_app_id, auth_token, options) # -------------------------------------------------------------------------- # ENVIRONMENT DETECTION @@ -334,9 +332,7 @@ async def _load_servers_from_gateway( return mcp_servers - def _prepare_gateway_headers( - self, auth_token: str, options: ToolOptions - ) -> Dict[str, str]: + def _prepare_gateway_headers(self, auth_token: str, options: ToolOptions) -> Dict[str, str]: """ Prepares headers for tooling gateway requests. @@ -349,7 +345,9 @@ def _prepare_gateway_headers( """ return { Constants.Headers.AUTHORIZATION: f"{Constants.Headers.BEARER_PREFIX} {auth_token}", - Constants.Headers.USER_AGENT: RuntimeUtility.get_user_agent_header(options.orchestrator_name), + Constants.Headers.USER_AGENT: RuntimeUtility.get_user_agent_header( + options.orchestrator_name + ), } async def _parse_gateway_response( From a8088c08b2d0de1bbb4fc770e8e12195c354b3d1 Mon Sep 17 00:00:00 2001 From: Jesus Terrazas Date: Thu, 11 Dec 2025 17:36:13 -0800 Subject: [PATCH 11/11] import and doc fixes --- .../azureaifoundry/services/mcp_tool_registration_service.py | 2 +- .../microsoft_agents_a365/tooling/models/__init__.py | 1 + .../tooling/services/mcp_tool_server_configuration_service.py | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py index bce73892..1342b870 100644 --- a/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py +++ b/libraries/microsoft-agents-a365-tooling-extensions-azureaifoundry/microsoft_agents_a365/tooling/extensions/azureaifoundry/services/mcp_tool_registration_service.py @@ -21,7 +21,7 @@ from microsoft_agents_a365.tooling.services.mcp_tool_server_configuration_service import ( McpToolServerConfigurationService, ) -from microsoft_agents_a365.tooling.Models import ToolOptions +from microsoft_agents_a365.tooling.models import ToolOptions from microsoft_agents_a365.tooling.utils.constants import Constants from microsoft_agents_a365.tooling.utils.utility import get_mcp_platform_authentication_scope diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/__init__.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/__init__.py index 65f87fbd..23785962 100644 --- a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/__init__.py +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/models/__init__.py @@ -7,5 +7,6 @@ """ from .mcp_server_config import MCPServerConfig +from .tool_options import ToolOptions __all__ = ["MCPServerConfig", "ToolOptions"] diff --git a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py index a149cc77..aec53f2e 100644 --- a/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py +++ b/libraries/microsoft-agents-a365-tooling/microsoft_agents_a365/tooling/services/mcp_tool_server_configuration_service.py @@ -291,7 +291,7 @@ async def _load_servers_from_gateway( Args: agentic_app_id: Agentic App ID for the agent. auth_token: Authentication token to access the tooling gateway. - orchestrator_name: Optional orchestrator name to include in User-Agent header. + options: ToolOptions instance containing optional parameters. Returns: List[MCPServerConfig]: List of MCP server configurations from tooling gateway. @@ -338,7 +338,7 @@ def _prepare_gateway_headers(self, auth_token: str, options: ToolOptions) -> Dic Args: auth_token: Authentication token. - orchestrator_name: Optional orchestrator name to include in User-Agent header. + options: ToolOptions instance containing optional parameters. Returns: Dictionary of HTTP headers.