Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Eine Microsoft Foundry Toolbox ist ein benanntes serverseitiges Paket gehosteter Toolkonfigurationen, z. B. Codedolmetscher, Dateisuche, Bildgenerierung, MCP und Websuche. Toolboxen ermöglichen es Ihnen, die Toolkonfiguration einmal in Foundry zu verwalten und sie für alle Agents wiederzuverwenden.
Das Agent-Framework deckt die Toolboxnutzung ab. Erstellen und aktualisieren Sie Toolbox-Versionen über das Foundry-Portal oder das azure-ai-projects SDK.
Important
FoundryToolbox wird durch das Beta-Paket agent-framework-foundry-hosting bereitgestellt und kann sich vor der stabilen Freigabe ändern.
Verknüpfen Sie bei einer dienstverwalteten FoundryAgent die Toolbox mit der Agentdefinition in Foundry. Anleitungen zur clientseitigen Verwendung der .NET-Toolbox sind derzeit nicht dokumentiert.
Installieren der Pakete
pip install agent-framework-foundry-hosting agent-framework-foundry --pre
FoundryToolbox wird aus agent_framework.foundry importiert und von agent-framework-foundry-hosting bereitgestellt.
Konfigurieren der Toolbox
Festlegen eines expliziten Toolbox-MCP-Endpunkts:
TOOLBOX_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<name>/mcp?api-version=v1"
Oder lassen Sie FoundryToolbox den Endpunkt erstellen:
FOUNDRY_PROJECT_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>"
TOOLBOX_NAME="<toolbox-name>"
Die Beispiele für gehostete Agents verwenden ebenfalls AZURE_AI_MODEL_DEPLOYMENT_NAME für FoundryChatClient.
Verwenden Sie FoundryToolbox mit einem gehosteten Agenten
FoundryToolboxlöst seinen Endpunkt auf, authentifiziert jede MCP-Anforderung mit den bereitgestellten Azure Anmeldeinformationen, leitet die Foundry-Anruf-ID pro Anforderung weiter und nimmt am Verbindungslebenszyklus des Agents teil.
import asyncio
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient, FoundryToolbox, ResponsesHostServer
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
async def main():
credential = DefaultAzureCredential()
# FoundryToolbox resolves the toolbox endpoint from the environment
# (TOOLBOX_ENDPOINT, or FOUNDRY_PROJECT_ENDPOINT + TOOLBOX_NAME), authenticates
# every request with the credential, and transparently forwards the platform
# per-request call-id to the toolbox. The hosting server enters the agent, which
# connects the toolbox on first use and closes it at shutdown.
toolbox = FoundryToolbox(credential)
# Create the chat client
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=credential,
)
agent = Agent(
client=client,
instructions="You are a friendly assistant. Keep your answers brief.",
tools=toolbox,
# History will be managed by the hosting infrastructure, thus there
# is no need to store history by the service. Learn more at:
# https://developers.openai.com/api/reference/resources/responses/methods/create
default_options={"store": False},
)
server = ResponsesHostServer(agent)
await server.run_async()
Verfügbarmachen von Toolbox-Fähigkeiten
Eine Toolbox kann Agent-Fähigkeiten über MCP verfügbar machen. Setzen Sie load_tools=False, wenn nur Fähigkeiten für das Modell sichtbar sein sollen, fügen Sie dann die Toolbox als Tool hinzu, damit die MCP-Sitzung verbunden wird, und verwenden Sie as_skills_provider() als Kontextanbieter.
import asyncio
import os
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient, FoundryToolbox, ResponsesHostServer
from azure.identity import DefaultAzureCredential
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
async def main() -> None:
credential = DefaultAzureCredential()
# FoundryToolbox resolves the toolbox endpoint from the environment
# (TOOLBOX_ENDPOINT, or FOUNDRY_PROJECT_ENDPOINT + TOOLBOX_NAME), authenticates
# every request with the credential, and forwards the platform per-request
# call-id. ``load_tools=False`` keeps the toolbox's tools hidden so only its
# Agent Skills (SEP-2640) are surfaced; passing it via ``tools=`` connects the
# MCP session that ``as_skills_provider()`` reads from.
toolbox = FoundryToolbox(credential, load_tools=False)
# as_skills_provider() discovers skills from skill://index.json on the toolbox
# MCP session and exposes them as an agent context provider; SKILL.md bodies are
# fetched on demand via resources/read. disable_load_skill_approval=True registers
# the load_skill tool with approval_mode="never_require" so this unattended agent
# can load skills without an approval round-trip -- the Responses host runs the
# agent without an AgentSession, which the default approval flow requires.
skills_provider = toolbox.as_skills_provider(disable_load_skill_approval=True)
client = FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=credential,
)
agent = Agent(
client=client,
name=os.environ.get("AGENT_NAME", "hosted-toolbox-mcp-skills"),
instructions="You are a helpful assistant.",
tools=toolbox,
context_providers=[skills_provider],
# History will be managed by the hosting infrastructure, thus there
# is no need to store history by the service. Learn more at:
# https://developers.openai.com/api/reference/resources/responses/methods/create
default_options={"store": False},
)
server = ResponsesHostServer(agent)
await server.run_async()
Die Genehmigung bleibt standardmäßig für Qualifikationsvorgänge aktiviert. Deaktivieren Sie einzelne Genehmigungen nur für vertrauenswürdige, unbeaufsichtigte Szenarien.
Verwenden Sie eine Toolbox mit FoundryAgent
Fügen Sie die Toolbox zur Prompt- oder Hosted-Agent-Definition in Foundry hinzu.
FoundryAgent verwendet diese gespeicherte Toolkonfiguration; Das Übergeben einer clientseitigen Toolbox fügt sie nicht zum verwalteten Agent hinzu.
Herstellen einer Verbindung über unformatierte MCP
Verwenden Sie MCPStreamableHTTPTool direkt, wenn die Anwendung den FoundryToolbox Hostwrapper nicht verwendet. Übergeben Sie den Toolbox-Endpunkt und ein Entra ID-Bearer-Token über header_provider.
import asyncio
import os
from collections.abc import Callable
from typing import Any, cast
from agent_framework import Agent, MCPStreamableHTTPTool
from agent_framework.foundry import FoundryChatClient
from azure.core.credentials import TokenCredential
from azure.identity import AzureCliCredential, DefaultAzureCredential, get_bearer_token_provider
from dotenv import load_dotenv
def make_toolbox_header_provider(credential: TokenCredential) -> Callable[[dict[str, Any]], dict[str, str]]:
"""Build a header_provider that injects a fresh Azure AI bearer token on every MCP request."""
get_token = get_bearer_token_provider(credential, "https://ai.azure.com/.default")
def provide(_kwargs: dict[str, Any]) -> dict[str, str]:
return {
"Authorization": f"Bearer {get_token()}",
}
return provide
async def main() -> None:
credential = DefaultAzureCredential()
toolbox_tool = MCPStreamableHTTPTool(
name="foundry_toolbox",
description="Tools exposed by the configured Foundry toolbox",
url=os.environ["FOUNDRY_TOOLBOX_ENDPOINT"],
header_provider=make_toolbox_header_provider(credential),
load_prompts=False,
)
async with Agent(
client=FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["FOUNDRY_MODEL"],
credential=credential,
),
instructions="You are a helpful assistant. Use the available toolbox tools to answer the user.",
tools=toolbox_tool,
) as agent:
query = "What tools do you have access to?"
print(f"User: {query}")
result = await agent.run(query)
print(f"Assistant: {result}")
Das Beispiel der unteren Ebene verwendet FOUNDRY_TOOLBOX_ENDPOINT. Das Beispiel für Toolbox-Funktionen verwendet FOUNDRY_TOOLBOX_MCP_SERVER_URL; diese Namen gehören zu diesen Beispielen und sind von den Einstellungen TOOLBOX_ENDPOINT und TOOLBOX_NAME der Klasse FoundryToolbox getrennt.
Einschränkungen
- MCP-Tools innerhalb einer Toolbox verwenden die serverseitige Authentifizierung über eine Foundry
project_connection_id; der Agent-Framework-Client verfügt nicht über das Upstream-MCP-Bearer-Token. - Die Nutzung einer Toolbox als MCP-Server erfordert eine clientseitige Entra-ID-Authentifizierung für den Toolbox-Endpunkt.
- Antworten im Zustimmungsablauf wie z. B.
CONSENT_REQUIREDwerden verarbeitet, während der Agent ausgeführt wird, nicht beim Erstellen der Toolbox-Verbindung.
Samples
| Beispiel | Description |
|---|---|
| foundry_toolbox/main.py |
FoundryToolbox mit einem gehosteten Antwort-Agent |
| foundry_toolbox_mcp_skills/main.py | Agentenfunktionen mit Toolbox-Unterstützung |
| foundry_chat_client_with_toolbox.py | McP-Verbrauch der Toolbox mit MCPStreamableHTTPTool |
| foundry_chat_client_with_toolbox_skills.py | Konfiguration von Toolbox-gestützten Fähigkeiten |
| invoke_foundry_toolbox_mcp | Workflowseitiger MCP-Verbrauch |
Go stellt derzeit keine Hilfsfunktion für die Foundry Toolbox bereit. Konfigurieren Sie Toolboxen über Foundry und verwenden Sie unterstützte lokale oder gehostete Tooldeklarationen für Go-Agents.