Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
from microsoft_agents_a365.tooling.models.mcp_server_config import MCPServerConfig
from microsoft_agents_a365.tooling.utils.constants import Constants
from microsoft_agents_a365.tooling.utils.utility import (
get_tools_mode,
get_mcp_platform_authentication_scope,
)

Expand Down Expand Up @@ -112,30 +111,17 @@ async def add_tool_servers_to_agent(
)
self._logger.info(f"🔧 Adding MCP tools from {len(servers)} servers")

# Get tools mode
tools_mode = get_tools_mode()

# Process each server (matching C# foreach pattern)
for server in servers:
try:
if tools_mode == "HardCodedTools":
await self._add_hardcoded_tools_for_server(kernel, server)
continue

headers = {}

if tools_mode == "MockMCPServer":
if mock_auth_header := os.getenv("MOCK_MCP_AUTHORIZATION"):
headers[Constants.Headers.AUTHORIZATION] = mock_auth_header
else:
headers = {
Constants.Headers.AUTHORIZATION: f"{Constants.Headers.BEARER_PREFIX} {auth_token}",
}
headers = {
Constants.Headers.AUTHORIZATION: f"{Constants.Headers.BEARER_PREFIX} {auth_token}",
}

plugin = MCPStreamableHttpPlugin(
name=server.mcp_server_name,
url=server.mcp_server_unique_name,
headers=headers or None,
headers=headers,
)

# Connect the plugin
Expand All @@ -151,7 +137,7 @@ async def add_tool_servers_to_agent(
self._connected_plugins.append(plugin)

self._logger.info(
f"✅ Connected and added MCP plugin ({tools_mode}) for: {server.mcp_server_name}"
f"✅ Connected and added MCP plugin for: {server.mcp_server_name}"
)

except Exception as e:
Expand All @@ -172,29 +158,6 @@ def _validate_inputs(self, kernel: Any, agentic_app_id: str, auth_token: str) ->
if not auth_token or not auth_token.strip():
raise ValueError("auth_token cannot be null or empty")

async def _add_hardcoded_tools_for_server(self, kernel: Any, server: MCPServerConfig) -> None:
"""Add hardcoded tools for a specific server (equivalent to C# hardcoded tool logic)."""
server_name = server.mcp_server_name

if server_name.lower() == "mcp_mailtools":
# TODO: Implement hardcoded mail tools
# kernel.plugins.add(KernelPluginFactory.create_from_type(HardCodedMailTools, server.mcp_server_name, self._service_provider))
self._logger.info(f"Adding hardcoded mail tools for {server_name}")
elif server_name.lower() == "mcp_sharepointtools":
# TODO: Implement hardcoded SharePoint tools
# kernel.plugins.add(KernelPluginFactory.create_from_type(HardCodedSharePointTools, server.mcp_server_name, self._service_provider))
self._logger.info(f"Adding hardcoded SharePoint tools for {server_name}")
elif server_name.lower() == "onedrivemcpserver":
# TODO: Implement hardcoded OneDrive tools
# kernel.plugins.add(KernelPluginFactory.create_from_type(HardCodedOneDriveTools, server.mcp_server_name, self._service_provider))
self._logger.info(f"Adding hardcoded OneDrive tools for {server_name}")
elif server_name.lower() == "wordmcpserver":
# TODO: Implement hardcoded Word tools
# kernel.plugins.add(KernelPluginFactory.create_from_type(HardCodedWordTools, server.mcp_server_name, self._service_provider))
self._logger.info(f"Adding hardcoded Word tools for {server_name}")
else:
self._logger.warning(f"No hardcoded tools available for server: {server_name}")

# ============================================================================
# Private Methods - Kernel Function Creation
# ============================================================================
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
get_tooling_gateway_for_digital_worker,
get_mcp_base_url,
build_mcp_server_url,
get_tools_mode,
get_mcp_platform_authentication_scope,
)

Expand All @@ -19,6 +18,5 @@
"get_tooling_gateway_for_digital_worker",
"get_mcp_base_url",
"build_mcp_server_url",
"get_tools_mode",
"get_mcp_platform_authentication_scope",
]
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,6 @@
"""

import os
from enum import Enum


class ToolsMode(Enum):
"""Enumeration for different tools modes."""

MOCK_MCP_SERVER = "MockMCPServer"
MCP_PLATFORM = "MCPPlatform"


# Constants for base URLs
Expand Down Expand Up @@ -43,13 +35,6 @@ def get_mcp_base_url() -> str:
Returns:
str: The base URL for MCP servers.
"""
environment = _get_current_environment().lower()

if environment == "development":
tools_mode = get_tools_mode()
if tools_mode == ToolsMode.MOCK_MCP_SERVER:
return os.getenv("MOCK_MCP_SERVER_URL", "http://localhost:5309/mcp-mock/agents/servers")

return f"{_get_mcp_platform_base_url()}/agents/servers"


Expand Down Expand Up @@ -91,30 +76,13 @@ def _get_mcp_platform_base_url() -> str:
return MCP_PLATFORM_PROD_BASE_URL


def get_tools_mode() -> ToolsMode:
"""
Gets the tools mode for the application.

Returns:
ToolsMode: The tools mode enum value.
"""
tools_mode = os.getenv("TOOLS_MODE", "MCPPlatform").lower()

if tools_mode == "mockmcpserver":
return ToolsMode.MOCK_MCP_SERVER
else:
return ToolsMode.MCP_PLATFORM


def get_mcp_platform_authentication_scope():
"""
Gets the MCP platform authentication scope based on the current environment.
Gets the MCP platform authentication scope.

Returns:
list: A list containing the appropriate MCP platform authentication scope.
"""
environment = _get_current_environment().lower()

envScope = os.getenv("MCP_PLATFORM_AUTHENTICATION_SCOPE", "")

if envScope:
Expand Down
Loading