microsoft-agents-a365-tooling-extensions-semantickernel 0.2.0.dev5__py3-none-any.whl → 0.2.1.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- microsoft_agents_a365/tooling/extensions/semantickernel/services/__init__.py +2 -1
- microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py +23 -46
- {microsoft_agents_a365_tooling_extensions_semantickernel-0.2.0.dev5.dist-info → microsoft_agents_a365_tooling_extensions_semantickernel-0.2.1.dev0.dist-info}/METADATA +1 -1
- microsoft_agents_a365_tooling_extensions_semantickernel-0.2.1.dev0.dist-info/RECORD +7 -0
- {microsoft_agents_a365_tooling_extensions_semantickernel-0.2.0.dev5.dist-info → microsoft_agents_a365_tooling_extensions_semantickernel-0.2.1.dev0.dist-info}/WHEEL +1 -1
- {microsoft_agents_a365_tooling_extensions_semantickernel-0.2.0.dev5.dist-info → microsoft_agents_a365_tooling_extensions_semantickernel-0.2.1.dev0.dist-info}/top_level.txt +1 -0
- microsoft_agents_a365_tooling_extensions_semantickernel-0.2.0.dev5.dist-info/RECORD +0 -7
microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
# Copyright (c) Microsoft
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
2
3
|
|
|
3
4
|
"""
|
|
4
5
|
MCP Tool Registration Service implementation for Semantic Kernel.
|
|
@@ -20,10 +21,9 @@ from microsoft_agents_a365.runtime.utility import Utility
|
|
|
20
21
|
from microsoft_agents_a365.tooling.services.mcp_tool_server_configuration_service import (
|
|
21
22
|
McpToolServerConfigurationService,
|
|
22
23
|
)
|
|
23
|
-
from microsoft_agents_a365.tooling.models
|
|
24
|
+
from microsoft_agents_a365.tooling.models import ToolOptions
|
|
24
25
|
from microsoft_agents_a365.tooling.utils.constants import Constants
|
|
25
26
|
from microsoft_agents_a365.tooling.utils.utility import (
|
|
26
|
-
get_tools_mode,
|
|
27
27
|
get_mcp_platform_authentication_scope,
|
|
28
28
|
)
|
|
29
29
|
|
|
@@ -36,6 +36,8 @@ class McpToolRegistrationService:
|
|
|
36
36
|
tool servers with Semantic Kernel agents.
|
|
37
37
|
"""
|
|
38
38
|
|
|
39
|
+
_orchestrator_name: str = "SemanticKernel"
|
|
40
|
+
|
|
39
41
|
def __init__(
|
|
40
42
|
self,
|
|
41
43
|
logger: Optional[logging.Logger] = None,
|
|
@@ -107,42 +109,40 @@ class McpToolRegistrationService:
|
|
|
107
109
|
self._validate_inputs(kernel, agentic_app_id, auth_token)
|
|
108
110
|
|
|
109
111
|
# Get and process servers
|
|
112
|
+
options = ToolOptions(orchestrator_name=self._orchestrator_name)
|
|
110
113
|
servers = await self._mcp_server_configuration_service.list_tool_servers(
|
|
111
|
-
agentic_app_id, auth_token
|
|
114
|
+
agentic_app_id, auth_token, options
|
|
112
115
|
)
|
|
113
116
|
self._logger.info(f"🔧 Adding MCP tools from {len(servers)} servers")
|
|
114
117
|
|
|
115
|
-
# Get tools mode
|
|
116
|
-
tools_mode = get_tools_mode()
|
|
117
|
-
|
|
118
118
|
# Process each server (matching C# foreach pattern)
|
|
119
119
|
for server in servers:
|
|
120
120
|
try:
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
headers = {
|
|
122
|
+
Constants.Headers.AUTHORIZATION: f"{Constants.Headers.BEARER_PREFIX} {auth_token}",
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
headers[Constants.Headers.USER_AGENT] = Utility.get_user_agent_header(
|
|
126
|
+
self._orchestrator_name
|
|
127
|
+
)
|
|
124
128
|
|
|
125
|
-
|
|
129
|
+
# Use the URL from server (always populated by the configuration service)
|
|
130
|
+
server_url = server.url
|
|
126
131
|
|
|
127
|
-
if
|
|
128
|
-
|
|
129
|
-
headers[Constants.Headers.AUTHORIZATION] = mock_auth_header
|
|
130
|
-
else:
|
|
131
|
-
headers = {
|
|
132
|
-
Constants.Headers.AUTHORIZATION: f"{Constants.Headers.BEARER_PREFIX} {auth_token}",
|
|
133
|
-
}
|
|
132
|
+
# Use mcp_server_name if available (not None or empty), otherwise fall back to mcp_server_unique_name
|
|
133
|
+
server_name = server.mcp_server_name or server.mcp_server_unique_name
|
|
134
134
|
|
|
135
135
|
plugin = MCPStreamableHttpPlugin(
|
|
136
|
-
name=
|
|
137
|
-
url=
|
|
138
|
-
headers=headers
|
|
136
|
+
name=server_name,
|
|
137
|
+
url=server_url,
|
|
138
|
+
headers=headers,
|
|
139
139
|
)
|
|
140
140
|
|
|
141
141
|
# Connect the plugin
|
|
142
142
|
await plugin.connect()
|
|
143
143
|
|
|
144
144
|
# Add plugin to kernel
|
|
145
|
-
kernel.add_plugin(plugin,
|
|
145
|
+
kernel.add_plugin(plugin, server_name)
|
|
146
146
|
|
|
147
147
|
# Store reference to keep plugin alive throughout application lifecycle
|
|
148
148
|
# By storing plugin references in _connected_plugins, we prevent Python's garbage collector from cleaning up the plugin objects
|
|
@@ -151,7 +151,7 @@ class McpToolRegistrationService:
|
|
|
151
151
|
self._connected_plugins.append(plugin)
|
|
152
152
|
|
|
153
153
|
self._logger.info(
|
|
154
|
-
f"✅ Connected and added MCP plugin
|
|
154
|
+
f"✅ Connected and added MCP plugin for: {server.mcp_server_name}"
|
|
155
155
|
)
|
|
156
156
|
|
|
157
157
|
except Exception as e:
|
|
@@ -172,29 +172,6 @@ class McpToolRegistrationService:
|
|
|
172
172
|
if not auth_token or not auth_token.strip():
|
|
173
173
|
raise ValueError("auth_token cannot be null or empty")
|
|
174
174
|
|
|
175
|
-
async def _add_hardcoded_tools_for_server(self, kernel: Any, server: MCPServerConfig) -> None:
|
|
176
|
-
"""Add hardcoded tools for a specific server (equivalent to C# hardcoded tool logic)."""
|
|
177
|
-
server_name = server.mcp_server_name
|
|
178
|
-
|
|
179
|
-
if server_name.lower() == "mcp_mailtools":
|
|
180
|
-
# TODO: Implement hardcoded mail tools
|
|
181
|
-
# kernel.plugins.add(KernelPluginFactory.create_from_type(HardCodedMailTools, server.mcp_server_name, self._service_provider))
|
|
182
|
-
self._logger.info(f"Adding hardcoded mail tools for {server_name}")
|
|
183
|
-
elif server_name.lower() == "mcp_sharepointtools":
|
|
184
|
-
# TODO: Implement hardcoded SharePoint tools
|
|
185
|
-
# kernel.plugins.add(KernelPluginFactory.create_from_type(HardCodedSharePointTools, server.mcp_server_name, self._service_provider))
|
|
186
|
-
self._logger.info(f"Adding hardcoded SharePoint tools for {server_name}")
|
|
187
|
-
elif server_name.lower() == "onedrivemcpserver":
|
|
188
|
-
# TODO: Implement hardcoded OneDrive tools
|
|
189
|
-
# kernel.plugins.add(KernelPluginFactory.create_from_type(HardCodedOneDriveTools, server.mcp_server_name, self._service_provider))
|
|
190
|
-
self._logger.info(f"Adding hardcoded OneDrive tools for {server_name}")
|
|
191
|
-
elif server_name.lower() == "wordmcpserver":
|
|
192
|
-
# TODO: Implement hardcoded Word tools
|
|
193
|
-
# kernel.plugins.add(KernelPluginFactory.create_from_type(HardCodedWordTools, server.mcp_server_name, self._service_provider))
|
|
194
|
-
self._logger.info(f"Adding hardcoded Word tools for {server_name}")
|
|
195
|
-
else:
|
|
196
|
-
self._logger.warning(f"No hardcoded tools available for server: {server_name}")
|
|
197
|
-
|
|
198
175
|
# ============================================================================
|
|
199
176
|
# Private Methods - Kernel Function Creation
|
|
200
177
|
# ============================================================================
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
microsoft_agents_a365/tooling/extensions/semantickernel/__init__.py,sha256=IvWvvW3Yajk0vX0Il0zisWbN0F-2EIWBmSpAkTeEETw,398
|
|
2
|
+
microsoft_agents_a365/tooling/extensions/semantickernel/services/__init__.py,sha256=gS6eaKMSKI0PCvXzjUt5gx8xvwMcy2Ym0XLj8cJOqvQ,373
|
|
3
|
+
microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py,sha256=kwl95y7yUfeWMXzy3eLWrIf8c58nVKNQ81gQd1AZcjY,8449
|
|
4
|
+
microsoft_agents_a365_tooling_extensions_semantickernel-0.2.1.dev0.dist-info/METADATA,sha256=FowwmMCo-naJWr9kK_31ZXXJ0vyOMPxyLsLXhWwHrlo,3364
|
|
5
|
+
microsoft_agents_a365_tooling_extensions_semantickernel-0.2.1.dev0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
6
|
+
microsoft_agents_a365_tooling_extensions_semantickernel-0.2.1.dev0.dist-info/top_level.txt,sha256=m90AvzRnjbL6fpi20mzOj6HUVkR2LWuf2JuXm4LL9LU,27
|
|
7
|
+
microsoft_agents_a365_tooling_extensions_semantickernel-0.2.1.dev0.dist-info/RECORD,,
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
microsoft_agents_a365/tooling/extensions/semantickernel/__init__.py,sha256=IvWvvW3Yajk0vX0Il0zisWbN0F-2EIWBmSpAkTeEETw,398
|
|
2
|
-
microsoft_agents_a365/tooling/extensions/semantickernel/services/__init__.py,sha256=uao2omD_YpBZJFqHuK-Lnk7Hy0d2_3blvZcXWI-1dRg,348
|
|
3
|
-
microsoft_agents_a365/tooling/extensions/semantickernel/services/mcp_tool_registration_service.py,sha256=sxPzkg41K0FjE4UaoAWrYm91_1iYuMGsc1b5BoJ0R5I,10095
|
|
4
|
-
microsoft_agents_a365_tooling_extensions_semantickernel-0.2.0.dev5.dist-info/METADATA,sha256=ZUkzFBK4kXKubnKaKkWutxL1EPrUNyOk-KF32WG34IM,3364
|
|
5
|
-
microsoft_agents_a365_tooling_extensions_semantickernel-0.2.0.dev5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
6
|
-
microsoft_agents_a365_tooling_extensions_semantickernel-0.2.0.dev5.dist-info/top_level.txt,sha256=G3c2_4sy5_EM_BWO67SbK2tKj4G8XFn-QXRbh8g9Lgk,22
|
|
7
|
-
microsoft_agents_a365_tooling_extensions_semantickernel-0.2.0.dev5.dist-info/RECORD,,
|