verktygslådan Microsoft Foundry

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 omfattar förbrukning av verktygslåda. Skapa och uppdatera verktygslådans versioner via Foundry-portalen eller azure-ai-projects SDK:t.

Important

FoundryToolbox tillhandahålls av betapaketet agent-framework-foundry-hosting och kan ändras innan den släpps stabilt.

För en tjänsthanterad FoundryAgentbifogar 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 så kan du FoundryToolbox skapa slutpunkten:

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

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

Använda FoundryToolbox med en värdbaserad agent

FoundryToolboxlöser sin slutpunkt, autentiserar varje MCP-begäran med den angivna Azure autentiseringsuppgifter, vidarebefordrar anrops-ID:t för Foundry per begäran och deltar i agentens anslutningslivscykel.

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

Visa verktygslådan

En verktygslåda kan exponera agentkunskaper över MCP. Ange load_tools=False när endast färdigheter ska vara modell synliga och lägg sedan till verktygslådan som ett verktyg så att mcp-sessionen ansluter och använder as_skills_provider() den som en kontextprovider.

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ända en verktygslåda med FoundryAgent

Koppla verktygslådan till definitionen Fråga eller Värdbaserad agent i Foundry. FoundryAgent använder den lagrade verktygskonfigurationen. Att skicka en Toolbox-klientsida lägger inte till den i den hanterade agenten.

Ansluta via rå MCP

Använd MCPStreamableHTTPTool direkt när programmet inte använder värdomslutningen FoundryToolbox . Ange toolbox-slutpunkten och en Entra ID ägartoken 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. Exempel på verktygslådans färdigheter använder FOUNDRY_TOOLBOX_MCP_SERVER_URL. Dessa namn tillhör dessa exempel och är separata från FoundryToolbox klassens TOOLBOX_ENDPOINT och TOOLBOX_NAME inställningarna.

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.
  • Användning av en verktygslåda som EN MCP-server kräver Entra ID autentisering på klientsidan för Toolbox-slutpunkten.
  • Medgivandeflödessvar som CONSENT_REQUIRED hanteras medan agenten körs, inte när toolbox-anslutningen skapas.

Samples

Sample Description
foundry_toolbox/main.py FoundryToolbox med en värdbaserad svarsagent
foundry_toolbox_mcp_skills/main.py Verktygslådebaserade agentkunskaper
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 exponerar för närvarande inte någon Foundry Toolbox-hjälp. Konfigurera verktygslådor via Foundry och använd lokala eller värdbaserade verktygsdeklarationer som stöds för Go-agenter.