Microsoft Foundry-verktygslåda

En Microsoft Foundry Toolbox är en namngiven version av serversidans paket med värdbaserade verktygskonfigurationer, till exempel kodtolk, filsökning, bildgenerering, MCP och webbsökning. Med verktygslådor kan du hantera verktygskonfigurationen en gång i Foundry och återanvända den mellan agenter.

Agent Framework täcker användning av Toolbox. Skapa och uppdatera verktygslådans versioner via Foundry-portalen eller azure-ai-projects SDK:t.

Important

FoundryToolbox tillhandahålls av beta-paketet agent-framework-foundry-hosting och kan ändras innan en stabil version släpps.

För en tjänsthanterad FoundryAgent kopplar du verktygslådan till agentdefinitionen i Foundry. Vägledning för .NET toolbox-förbrukning på klientsidan är för närvarande inte dokumenterad.

Installera programvarupaketen

pip install agent-framework-foundry-hosting agent-framework-foundry --pre

FoundryToolbox importeras från agent_framework.foundry och tillhandahålls av agent-framework-foundry-hosting.

Konfigurera verktygslådan

Ange en explicit MCP-slutpunkt för verktygslådan:

TOOLBOX_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<name>/mcp?api-version=v1"

Eller låt FoundryToolbox konstruera ändpunkten:

FOUNDRY_PROJECT_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>"
TOOLBOX_NAME="<toolbox-name>"

Exemplen på hosted-agent använder också AZURE_AI_MODEL_DEPLOYMENT_NAME för FoundryChatClient.

Använda FoundryToolbox med en värdbaserad agent

FoundryToolbox fastställer sin slutpunkt, autentiserar varje MCP-begäran med de angivna Azure-autentiseringsuppgifterna, vidarebefordrar Foundrys anrops-ID per begäran och deltar i agentens anslutnings livscykel.

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()

Exponera Toolbox-färdigheter

En verktygslåda kan exponera agentkunskaper över MCP. Ange load_tools=False när endast färdigheter ska vara modellsynliga, lägg sedan till Toolbox som ett verktyg så att dess MCP-session ansluter, och använd as_skills_provider() som en kontextleverantör.

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()

Godkännande är fortfarande aktiverat som standard för kompetensåtgärder. Inaktivera endast enskilda godkännanden för betrodda, obevakade scenarier.

Använd verktygslådan med FoundryAgent

Anslut Toolbox till Prompt- eller Hosted Agent-definitionen i Foundry. FoundryAgent använder den sparade verktygskonfigurationen; att skicka Toolbox på klientsidan lägger inte till den i den hanterade agenten.

Anslut via rå MCP

Använd MCPStreamableHTTPTool direkt när programmet inte använder värdomslutningen FoundryToolbox . Ange Toolbox-slutpunkten och en Entra ID-bearertoken via 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}")

Exemplet på lägre nivå använder FOUNDRY_TOOLBOX_ENDPOINT. Toolbox-färdighetsexemplet använder FOUNDRY_TOOLBOX_MCP_SERVER_URL; de här namnen hör till dessa exempel och är åtskilda från FoundryToolbox-klassens TOOLBOX_ENDPOINT- och TOOLBOX_NAME-inställningar.

Limitations

  • MCP-verktyg i en verktygslåda använder autentisering på serversidan via en Foundry project_connection_id. Agent Framework-klienten innehåller inte den överordnade MCP-ägartoken.
  • Att använda en verktygslåda som en MCP-server kräver klientbaserad Entra ID-autentisering för Toolbox-slutpunkten.
  • Medgivandeflödessvar som CONSENT_REQUIRED hanteras medan agenten körs, inte när toolbox-anslutningen skapas.

Samples

Sample Beskrivning
foundry_toolbox/main.py FoundryToolbox med en hostad Responses-agent
foundry_toolbox_mcp_skills/main.py Agentfärdigheter med verktygsstöd
foundry_chat_client_with_toolbox.py Användning av Toolbox MCP med MCPStreamableHTTPTool
foundry_chat_client_with_toolbox_skills.py Konfiguration av färdigheter som stöds av Toolbox
invoke_foundry_toolbox_mcp MCP-förbrukning på arbetsflödessidan

Go tillhandahåller för närvarande ingen hjälpfunktion för Foundry Toolbox. Konfigurera verktygslådor via Foundry och använd lokala eller värdbaserade verktygsdeklarationer som stöds för Go-agenter.