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.
Warning
Wenn Sie eine Verbindung zu Nicht-Foundry-Tools herstellen, können Ihnen Kosten entstehen, und Daten können außerhalb des Compliance-Bereichs von Foundry gesendet und gemäß den geltenden Bedingungen und Richtlinien zur Datenverarbeitung verarbeitet werden. In der Dokumentation des Tools erfahren Sie, wie Sie den Zugriff auf das Tool verwalten.
Ein einzelner Agent kann von mehreren Tools abhängig sein – APIs, MCP-Server (Model Context Protocol), Connectors und Flows – jeweils mit seinem eigenen Authentifizierungsmodell und einem eigenen Team. Wenn Sie in einer Organisation skalieren, implementieren Teams die gleichen Tools unabhängig neu, Anmeldeinformationen werden dupliziert, Die Governance wird inkonsistent, und es gibt wenig Einblick in die vorhandenen Tools oder wer sie verwendet. Entwickler stocken, nicht weil die Modelle nicht in der Lage sind, sondern weil die Integration von Werkzeugen zum Engpass wird.
Unternehmen verfügen bereits über die Infrastruktur: Gateways, Anmeldedaten-Tresore, Richtlinien und Observierbarkeit. Es fehlt eine Entwicklererfahrung, die diese Infrastruktur in etwas wiederverwendbares, auffindbares und automatisch verwaltetes verwandelt.
Toolbox bietet diese Erfahrung. Definieren Sie einen kuratierten Satz von Tools einmal, verwalten Sie sie zentral in Foundry, und machen Sie sie über einen einzelnen MCP-kompatiblen Endpunkt verfügbar, den jeder Agent nutzen kann. Die Plattform führt die Injektion von Anmeldeinformationen, die Tokenaktualisierung und die Durchsetzung von Unternehmensrichtlinien zur Laufzeit durch.
Toolbox deckt den vollständigen Toollebenszyklus über vier Säulen ab – Build und Konsumieren sind heute bereitgestellt:
| Säule | Status | Was dies ermöglicht |
|---|---|---|
| Bauen | Heute verfügbar | Wählen Sie Tools aus, konfigurieren Sie die Authentifizierung zentral, und veröffentlichen Sie eine wiederverwendbare Toolbox, die jedes Team nutzen kann. |
| Verbrauchen | Heute verfügbar | Verbinden Sie jeden Agent mit einem einzelnen MCP-kompatiblen Endpunkt, um alle Tools in der Toolbox dynamisch zu ermitteln und aufzurufen. |
Sie erstellen Toolboxen in Foundry, aber die Verbrauchsoberfläche ist geöffnet. Jede MCP-kompatible Agentlaufzeit oder jeder Client kann eine Toolbox verwenden – einschließlich Agents, die mit jedem Framework, MCP-fähigen IDEs und benutzerdefiniertem Code erstellt wurden.
Da es sich bei einer Toolbox um eine verwaltete Ressource handelt, können Sie Tools hinzufügen, entfernen oder neu konfigurieren, ohne Code in Ihrem Agent zu ändern. Ihr Agent stellt immer eine Verbindung zu einem einzelnen Endpunkt her. Die Versionierung von Toolboxes bietet Ihnen die explizite Kontrolle darüber, wann Änderungen wirksam werden - Sie können eine neue Version erstellen und testen und diese dann als Standardversion festlegen, wenn Sie bereit sind. Jeder Agent, der auf die Toolbox verweist, nimmt die höhergestufte Version automatisch auf, ohne Codeänderungen und keine erneute Bereitstellung.
In diesem Artikel erfahren Sie, wie Sie:
- Erstellen Sie eine Toolbox mit einem oder mehreren Tools.
- Rufen Sie den MCP-Endpunkt der Toolbox ab.
- Stellen Sie sicher, dass Tools ordnungsgemäß geladen werden.
- Integrieren Sie eine Toolbox in Ihren gehosteten Agent.
- Toolboxversionen verwalten und eine Version zur Standardversion machen.
- Wenden Sie eine Leitlinie (RAI-Richtlinie) auf eine Toolboxversion an.
Informationen zur Toolkonfigurationssyntax und Authentifizierungsoptionen für jeden Tooltyp finden Sie unter Konfigurieren von Tools.
Featureunterstützung
| Funktion | Python SDK | REST-API | .NET SDK | JavaScript SDK | azd | Gießerei-Werkzeugsatz |
|---|---|---|---|---|---|---|
| Toolbox Aktualisierung, auflisten, abrufen und löschen | ✔️ | ✔️ | ✔️ | ✔️ | N/A | ✔️ |
| Toolboxversion erstellen | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Toolboxversionsliste, Abrufen und Löschen | ✔️ | ✔️ | ✔️ | ✔️ | N/A | Nein. Die Benutzeroberfläche zeigt nur die neueste Version an. |
| MCP-Tool | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Websuche-Tool | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Azure KI-Suche Tool | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Codedolmetschertool | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Tool für die Dateisuche | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| OpenAPI-Tool | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Nein |
| Agent-zu-Agent-Tool (A2A) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Nein |
| Fabric IQ Tool | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Leitplanke (RAI-Richtlinie) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Qualifikationsreferenzen | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Nein |
| Tool der Toolsuche | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Arbeits-IQ-Tool | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Browserautomatisierungstool | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Nein |
Voraussetzungen
Ein aktives Microsoft Foundry-Projekt.
RBAC: Gewähren Sie der Rolle " Foundry User " im Foundry-Projekt jede Identität, die für Ihr Szenario gilt:
- Entwickler (immer erforderlich) – die Identität, die Toolboxversionen erstellt, aktualisiert und verwaltet.
- Agentidentität (erforderlich bei Verwendung eines gehosteten Agents) – die verwaltete Identität des Agents, die Tools zur Laufzeit aufruft.
- Endbenutzer (nur für OAuth-Flüsse erforderlich) – jeder Benutzer, dessen Identität über OAuth- oder UserEntraToken-Verbindungen (z. B. OAuth-basiertes MCP- oder Benutzer-Entra-Token (verwaltete Benutzeridentitäts-Passthrough) übertragen wird.
Ihr Foundry-Projekt muss sich in einer der unterstützten Regionen befinden. Einzelne Werkzeugtypen in einer Toolbox sind nach Region und Modell weiter eingeschränkt – nicht alle Werkzeugtypen sind in jeder Region oder mit jedem Modell verfügbar. Siehe Region und Modellkompatibilität.
Installieren Sie das Microsoft Foundry Toolkit für Visual Studio Code Erweiterung aus dem Visual Studio Code Marketplace.
Python SDK:
pip install azure-ai-projects azure-identity.NET SDK:
dotnet add package Azure.AI.Projects --prereleaseunddotnet add package Azure.IdentityJavaScript SDK:
npm install @azure/ai-projects @azure/identityAzure Developer CLI: Installieren Sie die Azure Developer CLI (
azd, 1,25 oder höher) und das einheitliche Foundry CLI-Erweiterungspaket:# Install the unified bundle (provides azd ai agent, connection, inspector, # project, routine, skill, and toolbox). azd ext install microsoft.foundry
Wichtig
- Eine Toolbox unterstützt höchstens one Tool ohne
nameFeld pro Tooltyp (Websuche, Azure KI-Suche, Codedolmetscher, Dateisuche). Wenn Sie mehrere Instanzen desselben Tooltyps einschließen möchten, legen Sie für jede Instanz eine eindeutigenameInstanz fest, um sie zu unterscheiden. Wenn Sie zwei Instanzen desselben Typs ohne einnameeinschließen, wird eininvalid_payloadFehler zurückgegeben. Ausführliche Informationen finden Sie unter "Mehrere Tooltypen". - Fügen Sie jedem Werkzeug in Ihrem Werkzeugkasten ein
descriptionhinzu, um dem Modell bei der Auswahl des richtigen Werkzeugs für jede Anforderung zu helfen. - Lesen Sie die Dokumentation der einzelnen Tools sorgfältig, um mehr über die Einrichtung, Einschränkungen und Warnungen der einzelnen Tools zu erfahren.
Tip
Wenn Sie GitHub Copilot für Azure zum Erstellen eines Gerüsts für einen gehosteten Agent verwenden, der die Toolbox verwendet, beschreiben die folgenden Qualifikationsverweise denselben Endpunktvertrag (env var, headers, MCP-Protokoll, Zitatmuster und Problembehandlung), den der Agent implementieren muss:
- Toolbox-Referenz – Endpunktformat, MCP-Protokoll, OAuth-Zustimmungsbehandlung, Zitatmuster und Problembehandlung.
- Verwenden einer Toolbox in einem gehosteten Agent: Endpunktauflösung, Umgebungsvariablenvertrag, Nutzlaststruktur, Muster für die Codeintegration und Ablaufverfolgung.
Schritt 1: Erstellen einer Toolboxversion
Erstellen Sie eine Toolboxversion basierend auf den benötigten Tools.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import MCPTool, ToolboxSearchPreviewTool, WebSearchTool
# Create Foundry project client
endpoint = "https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>"
project = AIProjectClient(
endpoint=endpoint,
credential=DefaultAzureCredential(),
)
# Create toolbox version with web search and MCP tools
toolbox_version = project.toolboxes.create_toolbox_version(
name="my-toolbox",
description="Toolbox with web search and an MCP server",
tools=[
WebSearchTool(),
MCPTool(
server_label="myserver",
server_url="https://your-mcp-server.example.com",
require_approval="never",
project_connection_id="my-key-auth-connection",
),
ToolboxSearchPreviewTool(),
],
)
print(f"Created toolbox: {toolbox_version.name}, version: {toolbox_version.version}")
using Azure.Identity;
using Azure.AI.Projects;
// Create Foundry project client
var projectEndpoint = "https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>";
AIProjectClient projectClient = new(new Uri(projectEndpoint), new DefaultAzureCredential());
AgentToolboxes toolboxClient = projectClient.AgentAdministrationClient.GetAgentToolboxes();
ProjectsAgentTool webTool = ProjectsAgentTool.AsProjectTool(
ResponseTool.CreateWebSearchTool());
ProjectsAgentTool mcpTool = ProjectsAgentTool.AsProjectTool(ResponseTool.CreateMcpTool(
serverLabel: "myserver",
serverUri: new Uri("https://your-mcp-server.example.com"),
toolCallApprovalPolicy: new McpToolCallApprovalPolicy(
GlobalMcpToolCallApprovalPolicy.NeverRequireApproval
)
));
ToolboxSearchPreviewTool searchTool = new() { Name = "ToolBoxSearch" };
ToolboxVersion toolboxVersion = await toolboxClient.CreateToolboxVersionAsync(
toolboxName: "my-toolbox",
tools: [webTool, mcpTool, searchTool],
description: "Toolbox with web search, MCP, and tool search"
);
Console.WriteLine($"Created toolbox: {toolboxVersion.Name}, version: {toolboxVersion.Version}");
POST {project_endpoint}/toolboxes/my-toolbox/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{
"description": "Toolbox with web search, MCP, and tool search",
"tools": [
{
"type": "web_search",
"description": "Search the web for current information"
},
{
"type": "mcp",
"server_label": "myserver",
"server_url": "https://your-mcp-server.example.com",
"require_approval": "never",
"project_connection_id": "my-key-auth-connection"
},
{
"type": "toolbox_search_preview"
}
]
}
Hinweis
Verwenden Sie den Tokenbereich https://ai.azure.com/.default beim Abrufen des Bearer-Tokens.
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
// Create Foundry project client
const projectEndpoint = "https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>";
const project = new AIProjectClient(projectEndpoint, new DefaultAzureCredential());
const toolboxVersion = await project.toolboxes.createVersion(
"my-toolbox",
[
{
type: "web_search",
description: "Search the web for current information",
},
{
type: "mcp",
server_label: "myserver",
server_url: "https://your-mcp-server.example.com",
require_approval: "never",
project_connection_id: "my-key-auth-connection",
},
{ type: "toolbox_search_preview" },
],
{
description: "Toolbox with web search, MCP, and tool search",
},
);
console.log(`Created toolbox: ${toolboxVersion.name}, version: ${toolboxVersion.version}`);
Verwenden Sie das Microsoft Foundry Toolkit für Visual Studio Code Erweiterung, um eine Toolbox aus der Ansicht Tools zu erstellen und zu veröffentlichen.
- Wählen Sie das Foundry Toolkit in der Aktivitätsleiste aus.
- Erweitern Sie unter "Meine Ressourcen"Ihren Projektnamen>Tools.
- Wählen Sie das Symbol "+Toolbox hinzufügen " aus.
- Geben Sie auf der Registerkarte " Benutzerdefinierte Toolbox erstellen" den Namen und die Beschreibung der Toolbox ein, und fügen Sie die gewünschten Tools hinzu.
- Wählen Sie zum Aktivieren der absichtsbasierten Toolrouting die Option "Toolsuche" aus.
- Wählen Sie "Veröffentlichen" aus.
Beim Veröffentlichen einer neuen Toolbox wird die erste Version erstellt. Diese Version wird automatisch zur Standardversion.
Erstellen Sie mit dem einheitlichen microsoft.foundryErweiterungspaket (siehe Voraussetzungen) eine Toolbox in zwei Schritten:
- Verwenden Sie
azd ai connection create, um jede Projektverbindung zu registrieren, auf die die Toolbox verweist (ein Aufruf pro Anmeldeinformationssatz). - Verwenden Sie
azd ai toolbox create --from-file <toolbox.yaml>, um die Toolbox zu erstellen. Die YAML verweist auf Verbindungen nach Namen und bettet niemals Anmeldeinformationen ein.
Das Muster ist für jede Verbindungsart und jeden Authentifizierungstyp identisch:
Legen Sie das aktive Projekt einmal pro Shell fest:
azd ai project set $PROJECT_ENDPOINTErstellen Sie eine Verbindung mit
azd ai connection create. Die Flags unterscheiden sich je nach Authentifizierungstyp, aber die Befehlsstruktur ist immer:azd ai connection create <name> \ --kind <remote-tool|remote-a2a|cognitive-search|GroundingWithCustomSearch> \ --target <endpoint-url> \ --auth-type <none|custom-keys|api-key|oauth2|user-entra-token|project-managed-identity|agentic-identity> \ [--custom-key "Header=Value" | --key <key> | --client-id ... --client-secret ... --authorization-url ... --token-url ... | --audience <aad-resource-uri>]Verwenden Sie
azd ai connection listundazd ai connection show <name>, um Verbindungen zu prüfen, undazd ai connection delete <name> --force, um sie zu entfernen.Erstellen Sie eine Toolbox-YAML, die auf eine oder mehrere vorhandene Verbindungen anhand des Namens verweist. YaML bettet niemals Anmeldeinformationen ein:
# my-toolbox.yaml description: <human-readable description> connections: - name: <project-connection-name> # must already exist in the project # Optional: add connectionless built-in tools and policies. tools: - type: web_search name: web - type: code_interpreter container: { type: auto } name: code # Tool search is connectionless. - type: toolbox_search_preview # For Azure AI Search, set the index in the tool entry: # - type: azure_ai_search # name: search # azure_ai_search: # indexes: # - project_connection_id: <azure-ai-search-connection-name> # index_name: <search-index-name> # For Bing Custom Search, set the instance in the tool entry: # - type: bing_custom_search # name: bing # custom_search_configuration: # project_connection_id: <bing-connection-name> # instance_name: <bing-instance-name> # Optional: attach existing project skills as MCP resources. skills: - name: <skill-name> # uses the skill's default version - name: <other-skill> version: "2" # pin to a specific skill version (string) policies: rai_config: rai_policy_name: <policy-name> # must already exist on the projectMindestens einer von
connections,skillsodertoolsmuss nicht leer sein. Verweise auf Fähigkeiten müssen auf Fähigkeiten verweisen, die bereits im selben Foundry-Projekt vorhanden sind; siehe Fähigkeiten in Foundry verwenden, um sie mitazd ai skill createzu erstellen. Einzelheiten zur Einrichtung der End-to-End-Toolsuche finden Sie unter Toolsuche verwenden.Erstellen Sie die Toolbox aus dieser Datei:
azd ai toolbox create <toolbox-name> --from-file ./my-toolbox.yamlDie erste Version wird automatisch zum Standard. Verwenden Sie
azd ai toolbox list,azd ai toolbox show <name>,azd ai toolbox version list <name>undazd ai toolbox delete <name> --forcezum Verwalten von Toolboxen.
Beispiel: MCP-Server mit schlüsselbasierter Authentifizierung
# 1. Create the connection
azd ai connection create my-gh-conn \
--kind remote-tool \
--target https://api.githubcopilot.com/mcp/ \
--auth-type custom-keys \
--custom-key "Authorization=Bearer $GITHUB_PAT"
# 2. Create the toolbox
azd ai toolbox create my-toolbox \
--from-file ./my-toolbox.yaml \
--no-prompt
# my-toolbox.yaml
description: GitHub MCP toolbox
connections:
- name: my-gh-conn
Schritt 2: Abrufen des MCP-Endpunkts der Toolbox
Je nach Rolle sind zwei Endpunktmuster vorhanden:
| Rolle | Endpunkt | Wann verwendet werden soll |
|---|---|---|
| Toolboxentwickler | {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1 |
Testen oder überprüfen Sie eine bestimmte Version, bevor Sie sie als Standard bewerben. |
| Toolbox-Verbraucher | {project_endpoint}/toolboxes/{toolbox_name}/mcp?api-version=v1 |
Verbinden Sie Agents mit der Toolbox. Dient immer dem default_version. Die von Ihnen erstellte erste Version wird automatisch als Standard festgelegt. |
Ersetzen Sie die Platzhalter durch Ihre eigenen Werte:
-
{project_endpoint}ist Ihr Foundry-Projektendpunkt im Formularhttps://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>. Kopieren Sie es von der Seite „Übersicht“ Ihres Projekts im Foundry-Portal oder aus der Spalte Endpunkt-URL in der Ansicht „Toolboxes“ des Microsoft Foundry Toolkit für Visual Studio Code. -
{toolbox_name}und{version}sind der Name und die Version der Toolbox, die Sie in Schritt 1 erstellt haben.
Tip
Verbinden Sie Agenten mit dem Toolbox-Consumerendpunkt. Es liefert immer das default_version aus, sodass Sie neue Versionen freigeben können, ohne den Agentcode zu ändern oder ihn neu bereitzustellen. Reservieren Sie den Toolbox-Entwicklerendpunkt (versionsspezifisch) zum Testen einer Version, bevor Sie sie höher stufen.
Hinweis
Die erste Version einer neuen Toolbox wird automatisch auf default_version (v1) heraufgestuft. Wenn Sie die Standardeinstellung später ändern müssen, lesen Sie Eine Version als Standardversion festlegen.
Kopieren Sie in der Erweiterung Microsoft Foundry Toolkit for Visual Studio Code den Verbraucher-Endpunkt der Toolbox aus der Ansicht Toolboxes.
- Wählen Sie das Foundry Toolkit in der Aktivitätsleiste aus.
- Erweitern Sie unter "Meine Ressourcen"Ihren Projektnamen>Tools.
- Suchen Sie auf der Registerkarte "Toolboxes " Ihre Toolbox.
- Kopieren Sie den Endpunkt in der Spalte "Endpunkt-URL ".
Der Endpunkt-URL-Wert ist der Toolbox-Verbraucherendpunkt. Verwenden Sie das in der vorherigen Tabelle gezeigte Entwicklermuster, um einen versionsspezifischen Endpunkt zu erstellen.
Schritt 3: Überprüfen der Verfügbarkeit des Tools
Vergewissern Sie sich vor dem Ausführen des vollständigen Agents, dass die Toolbox die erwarteten Tools mithilfe eines MCP-Client-SDK für den Endpunkt lädt. Verwenden Sie den versionsspezifischen Endpunkt , um eine Version zu überprüfen, bevor Sie sie als Standard festlegen.
Installieren Sie das MCP-Client-SDK:
pip install mcp
Verbinden Sie sich mit der Toolbox und listen Sie die Werkzeuge auf.
import asyncio
from azure.identity import DefaultAzureCredential
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession
url = "https://<account>.services.ai.azure.com/api/projects/<proj>/toolboxes/<name>/versions/<version>/mcp?api-version=v1"
token = DefaultAzureCredential().get_token("https://ai.azure.com/.default").token
headers = {
"Authorization": f"Bearer {token}",
}
async def verify_toolbox():
async with streamablehttp_client(url, headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
# List available tools
tools_result = await session.list_tools()
print(f"Tools found: {len(tools_result.tools)}")
for tool in tools_result.tools:
print(f" - {tool.name}: {(tool.description or '')[:80]}")
# Call a tool (replace with actual tool name and arguments)
result = await session.call_tool("<tool_name>", arguments={})
print(result)
asyncio.run(verify_toolbox())
Hinweis
Verwenden Sie die Registerkarte "REST-API", um die Verfügbarkeit von Tools aus .NET zu überprüfen, oder verwenden Sie das Python MCP-Client-SDK.
Verwenden Sie den versionsspezifischen Endpunkt (/versions/{version}/mcp), um eine Version zu überprüfen, bevor Sie sie bewerben.
1. Initialisieren der MCP-Sitzung:
POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}
2. Senden Sie die initialisierte Benachrichtigung:
POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{"jsonrpc":"2.0","method":"notifications/initialized"}
3. Verfügbare Tools auflisten:
POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
4. Aufrufen eines Tools:
POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"<TOOL_NAME>","arguments":{}}}
Installieren Sie das MCP-Client-SDK:
npm install @modelcontextprotocol/sdk
Verbinden Sie sich mit der Toolbox und listen Sie die Werkzeuge auf.
import { DefaultAzureCredential } from "@azure/identity";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
const url = "https://<account>.services.ai.azure.com/api/projects/<proj>/toolboxes/<name>/versions/<version>/mcp?api-version=v1";
const credential = new DefaultAzureCredential();
const token = await credential.getToken("https://ai.azure.com/.default");
const transport = new StreamableHTTPClientTransport(
new URL(url),
{
requestInit: {
headers: {
Authorization: `Bearer ${token.token}`,
},
},
},
);
const client = new Client({ name: "test", version: "1.0" });
await client.connect(transport);
// List available tools
const toolsResult = await client.listTools();
console.log(`Tools found: ${toolsResult.tools.length}`);
for (const tool of toolsResult.tools) {
console.log(` - ${tool.name}: ${(tool.description || "").slice(0, 80)}`);
}
// Call a tool (replace with actual tool name and arguments)
const result = await client.callTool({ name: "<tool_name>", arguments: {} });
console.log(result);
await client.close();
Verwenden Sie den Endpunkt aus Schritt 2 zusammen mit einer Gerüstvorlage für gehostete Agenten, um die Toolbox-Ladung in Visual Studio Code zu validieren.
- Suchen Sie im Foundry Toolkit unter Meine Ressourcen>dein Projektname>Tools die Toolbox, die Sie testen möchten.
- Wählen Sie "Scaffold Code-Template" aus.
- Wählen Sie einen Projektordner aus, wenn Sie dazu aufgefordert werden.
- Folgen Sie der generierten
README.md, um Abhängigkeiten zu installieren, Umgebungsvariablen zu konfigurieren und das Beispiel lokal auszuführen. - Verwenden Sie Agent Inspector oder führen Sie
python main.pyaus, um zu bestätigen, dass die Werkzeuge der Toolbox geladen werden und reagieren.
Verwenden Sie für die versionsspezifische Überprüfung in diesem Schritt die Python- oder REST-API-Registerkarte, bevor Sie eine neue Toolbox-Version veröffentlichen.
Hinweis
Verwenden Sie die Registerkarte "REST-API", um die Verfügbarkeit des Tools zu überprüfen, oder verwenden Sie das Python MCP-Client-SDK.
Check – initialize: HTTP 200. Wenn Sie den Initialisierungsschritt überspringen, schlagen nachfolgende Aufrufe fehl.
Prüfung — tools/list:
len(tools) > 0– leer bedeutet, dass die Toolboxversion nicht ordnungsgemäß bereitgestellt wurde.Jedes Tool verfügt über
name,descriptionundinputSchema. Informationen zu Toolbenennungskonventionen finden Sie in der MCP-Spezifikation.inputSchemaweist einpropertiesFeld auf (einige MCP-Server lassen dieses Feld aus, wodurch OpenAI unterbrochen wird).Toolnamen werden nach Tooltyp namespacesiert:
Tooltyp Toolnamenformat Example MCP {server_label}.{tool_name}myserver.some_toolOpenAPI {openapi_name}.{operationId}weatherapi.getForecastA2A Der Name des Tools name(Agentname) oder der Verbindungsname, fallsnameweggelassen wirdmyagentAlle anderen Tooltypen Der nameFeldwert oder der Standardtoolnameweb_searchMCP-Tools enthalten einen
_meta.tool_configurationBlock, der Laufzeiteinstellungen enthält, z. B.require_approval. Siehe Behandeln von Toolgenehmigungsanforderungen.Notieren Sie sich die genauen Parameternamen für den Aufrufschritt (z. B
query. vsqueries).
Überprüfung - tools/call:
- Kein Top-Level-Feld
error. Wenn vorhanden, prüfen Sieerror.code. Standard-MCP-Fehlercodes finden Sie in der MCP-Spezifikation:-
-32006→ OAuth-Zustimmung erforderlich (URL extrahieren auserror.message). - Andere Codes → serverseitiger Fehler.
-
-
result.content[]enthält Einträge mit"type": "text"- dies ist die Toolausgabe. - Bei AI Search:
result.structuredContent.documents[]auf Blockmetadaten prüfen (title,url,id,score). - Überprüfen Sie
result.content[].resource._metabei der Dateisuche auf Blockmetadaten (title,file_id,document_chunk_id,score). - Für die Websuche überprüfen Sie
result.content[].resource._meta.annotations[]auf URL-Zitate (type,url,title,start_index,end_index). - Überprüfen Sie für Fabric IQ
result.structuredContent.documents[]auf Zitatblöcke. Jedes Dokument enthälttitleundurlFelder, die auf das Fabric Element (Ontology, Data Agent oder Power BI Semantikmodell) zeigen, mit dem die Antwort geerdet wird. - Achten Sie auf
"ServerError"in Textinhalten – das Tool wurde ausgeführt, ist jedoch auf einen internen Fehler gestoßen.
Toolspezifische tools/call Argumentbeispiele:
| Tooltyp | Argumente |
|---|---|
| KI-Suche | {"query": "search text"} |
| Dateisuche | {"queries": ["search text"]} |
| Codedolmetscher | {"code": "print(2 ** 100)"} |
| Websuche | {"search_query": "weather in seattle"} |
| A2A | {"message": {"parts": [{"type": "text", "text": "Hello"}]}} |
| Fabric IQ | Variiert je nach verfügbaren Tool – in der Regel {"query": "..."} für Abfragetools |
| Arbeit IQ | {"message": {"parts": [{"type": "text", "text": "Hello"}]}} |
| MCP | {"query": "what is agent service"} |
Schritt 4: Integrieren der Toolbox in Ihren Agent
LangGraph
Sehen Sie sich das vollständige Beispiel für die vollständige Implementierung an.
.env Datei:
FOUNDRY_PROJECT_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>
TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1
TOOLBOX_NAME=agent-tools
AZURE_AI_MODEL_DEPLOYMENT_NAME=gpt-4o
main.py (Schlüsselmuster):
from langchain_azure_ai.tools import AzureAIProjectToolbox
toolbox = AzureAIProjectToolbox(toolbox_name=TOOLBOX_NAME)
tools = await toolbox.get_tools()
Wichtig
Klasse langchain_azure_ai.tools.AzureAIProjectToolbox erfordert langchain-azure-ai[tools]>1.2.3.
Microsoft Agent Framework
Verwenden Sie MCPStreamableHTTPTool aus dem Agent Framework SDK, um direkt eine Verbindung zum MCP-Endpunkt der Toolbox herzustellen.
.env Datei:
FOUNDRY_PROJECT_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>
TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1
AZURE_AI_MODEL_DEPLOYMENT_NAME=gpt-4o
main.py (Schlüsselmuster):
# Auth: wrap token provider in an httpx.Auth subclass
credential = DefaultAzureCredential()
token_provider = get_bearer_token_provider(credential, "https://ai.azure.com/.default")
http_client = httpx.AsyncClient(
auth=_ToolboxAuth(token_provider),
timeout=120.0,
)
# Toolbox MCP endpoint (platform-injected at runtime via TOOLBOX_ENDPOINT)
TOOLBOX_ENDPOINT = "https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1"
# Connect MCPStreamableHTTPTool to the toolbox endpoint
mcp_tool = MCPStreamableHTTPTool(
name="toolbox",
url=TOOLBOX_ENDPOINT,
http_client=http_client,
load_prompts=False,
)
agent = chat_client.as_agent(
name="my-toolbox-agent",
instructions="You are a helpful assistant with access to Foundry toolbox tools.",
tools=[mcp_tool],
)
ResponsesAgentServerHost().run()
Sehen Sie sich das vollständige Beispiel für die vollständige Implementierung an.
Copilot SDK
Verwenden Sie das GitHub Copilot SDK, um einen auf Toolbox basierenden Agenten zu erstellen, der die Werkzeugaufrufe von Copilot mit dem MCP-Endpunkt der Foundry-Toolbox verbindet.
Hinweis
Das Copilot SDK lehnt Toolnamen ab, die Punkte enthalten. Die Brücke ersetzt . automatisch durch _ in Toolnamen. Beispielsweise myserver.get_info wird myserver_get_info.
.env Datei:
GITHUB_TOKEN=<your-github-token>
TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1
agent.py (Schlüsselmuster — MCP-Brücke):
# 1. Open an MCP session to the toolbox endpoint
bridge = McpBridge(endpoint=TOOLBOX_ENDPOINT, token=_get_toolbox_token())
await bridge.initialize()
mcp_tools = await bridge.list_tools()
# 2. Map MCP tool list to Copilot SDK tool definitions
# Dots in tool names are replaced with underscores (Copilot SDK requirement)
copilot_tools = [
{
"name": t["name"].replace(".", "_"),
"description": t.get("description", ""),
"parameters": t.get("inputSchema", {}),
}
for t in mcp_tools
]
# 3. Wire tool calls back to the MCP session
async def tool_handler(name: str, arguments: dict) -> str:
return await bridge.call_tool(name.replace("_", ".", 1), arguments)
# 4. Run the Copilot SDK agent
agent = Agent(
tools=copilot_tools,
tool_handler=tool_handler,
token=os.environ["GITHUB_TOKEN"],
)
Microsoft Agent Framework
Verwenden Sie ResponsesServer aus dem Agent Framework SDK mit einem benutzerdefinierten ToolboxMcpClient, um Tools der Toolbox über den MCP-Endpunkt zu ermitteln und aufzurufen.
Umgebungsvariablen:
AZURE_OPENAI_ENDPOINT=https://<account>.services.ai.azure.com
AZURE_AI_MODEL_DEPLOYMENT_NAME=gpt-4o
TOOLBOX_MCP_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1
Program.cs (Schlüsselmuster):
using Azure.AI.AgentServer.Responses;
using Azure.AI.AgentServer.Responses.Models;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Extensions.DependencyInjection;
using OpenAI.Chat;
// Azure OpenAI endpoint and model deployment
var openAiEndpoint = "https://<account>.services.ai.azure.com";
var deployment = "gpt-4o"; // supports all toolbox tool types
// Toolbox MCP endpoint (platform-injected at runtime via TOOLBOX_MCP_ENDPOINT)
var toolboxEndpoint = "https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1";
// Azure OpenAI client
var credential = new DefaultAzureCredential();
var openAIClient = new AzureOpenAIClient(new Uri(openAiEndpoint), credential);
var chatClient = openAIClient.GetChatClient(deployment);
// Toolbox MCP client — discovers tools via tools/list, calls them via tools/call
var toolboxClient = new ToolboxMcpClient(toolboxEndpoint, credential);
ResponsesServer.Run<ToolboxHandler>(configure: builder =>
{
builder.Services.AddSingleton(new AgentConfig(chatClient, toolboxClient));
});
ToolboxMcpClient umschließt direkte JSON-RPC Aufrufe an den MCP-Endpunkt.
ToolboxHandler verbindet LLM-Toolaufrufe mithilfe einer standardmäßigen Toolaufrufschleife wieder mit dem MCP-Client. Die vollständige Implementierung beider Klassen finden Sie im vollständigen Beispiel.
Hinweis
Integrationsbeispiele für diesen Schritt sind nur für Python und .NET verfügbar.
Hinweis
Integrationsbeispiele für diesen Schritt sind nur für Python und .NET verfügbar.
Verwenden Sie die Microsoft Foundry Toolkit-Erweiterung für Visual Studio Code, um das Grundgerüst für eine Beispielanwendung für einen gehosteten Agenten zu erstellen, die bereits mit Ihrer Toolbox verbunden ist.
- Wählen Sie das Foundry Toolkit in der Aktivitätsleiste aus.
- Erweitern Sie unter "Meine Ressourcen"Ihren Projektnamen>Tools.
- Suchen Sie auf der Registerkarte Toolboxes die Toolbox, die Sie verwenden möchten, und wählen Sie dann die Gerüstcodevorlage aus.
- Wählen Sie in der Befehlspalette einen Projektordner aus, wenn Sie dazu aufgefordert werden.
- Öffnen Sie das generierte
README.mdElement, und folgen Sie den Setup-, lokalen Ausführungs- und Bereitstellungsschritten für das Gerüst.
Das generierte Projekt beinhaltet den Einstiegspunkt des Hosted Agents, Bereitstellungsdateien und eine README.md-Datei mit den genauen Schritten für Einrichtung, Ausführung und Bereitstellung.
Wenn Sie eine Toolbox in ein vorhandenes gehostetes Agent-Projekt integrieren möchten, anstatt ein neues Beispiel zu generieren, verwenden Sie den kopierten Endpunkt aus Schritt 2 mit den Python- oder .NET-Mustern in diesem Abschnitt.
Übergeben Sie den Toolbox-Endpunkt an Ihren Agenten
Nachdem Sie die Toolbox in Schritt 1 erstellt haben, rufen Sie den MCP-Endpunkt mit azd ai toolbox show und übergeben diesen Endpunkt als Umgebungsvariable an Ihren Agentcode. Der Agent liest die Variable beim Start und verwendet sie zum Herstellen einer Verbindung mit der Toolbox.
Rufen Sie den Toolbox-Endpunkt ab:
azd ai toolbox show <toolbox-name> --output jsonDas Feld
mcp_endpointin der Antwort ist der Consumerendpunkt, der immer in dendefault_versionder Toolbox aufgelöst wird.Legen Sie den Endpunkt als Umgebungsvariable fest, die Ihr Agent beim Start liest:
# .env (or however your runtime loads environment variables) TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/mcp?api-version=v1Lesen Sie in Ihrem Agentcode
TOOLBOX_ENDPOINTund verbinden Sie sich mit ihm über einen MCP-Client. Verwenden Sie die Python oder .NET Integrationsmuster weiter oben in diesem Abschnitt als Referenz für die Clienteinrichtung und das Entra-Token (https://ai.azure.com/.defaultBereich).
Anforderungen an die Werkzeugfreigabe behandeln
Die Toolbox gibt ein _meta.tool_configuration-Objekt für jeden Tooleintrag zurück, der von tools/list zurückgegeben wird. Wenn für ein Tool require_approval auf "always" festgelegt ist, muss die Runtime des Agents Benutzer*innen über die ausstehende Aktion informieren und vor dem Aufrufen des Tools auf eine Bestätigung warten. Der MCP-Endpunkt blockiert nicht – tools/call die Durchsetzung liegt vollständig in der Verantwortung der Laufzeitumgebung des Agents.
Lesen require_approval von tools/list
Jeder Tooleintrag in einer tools/list Antwort enthält einen _meta von der Toolbox zurückgegebenen Block:
{
"name": "myserver.my_tool",
"description": "...",
"inputSchema": { "type": "object" },
"_meta": {
"tool_configuration": {
"type": "mcp",
"server_label": "myserver",
"server_url": "https://your-mcp-server.example.com",
"require_approval": "always"
}
}
}
require_approval Wert |
Verhalten |
|---|---|
"always" |
Der Agent muss den Benutzer vor jedem Aufruf zur Bestätigung auffordern. |
"never" |
Der Agent kann das Tool frei aufrufen. |
Implementieren des Genehmigungsgatings (LangGraph)
Führen Sie beim Start eine Abfrage tools/list aus, um eine Genehmigungszuordnung zu erstellen, und fügen Sie anschließend eine Einschränkung in die Systemmeldung für jedes Tool ein, das eine Genehmigung erfordert.
async def _fetch_require_approval_tools(
endpoint: str,
auth: httpx.Auth,
extra_headers: dict,
) -> dict[str, str]:
async with httpx.AsyncClient(auth=auth, headers=extra_headers, timeout=30.0) as hc:
payload = {"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}
resp = await hc.post(endpoint, json=payload)
resp.raise_for_status()
return {
t["name"]: t["_meta"]["tool_configuration"]["require_approval"]
for t in resp.json().get("result", {}).get("tools", [])
if t.get("_meta", {}).get("tool_configuration", {}).get("require_approval")
}
Ermitteln Sie nach dem Laden von Tools vom MCP-Client, welche Tools eine Genehmigung erfordern, und passen Sie die Systemaufforderung an:
approval_map = await _fetch_require_approval_tools(
TOOLBOX_ENDPOINT, toolbox_auth, extra_headers
)
always_approval = [name for name, val in approval_map.items() if val == "always"]
Hinweis
- Die Erkennung erfolgt beim Start. Die Freigabeprüfung wird einmal ausgeführt, wenn der Agent initialisiert wird. Es gibt keinen Mehraufwand pro Anruf.
- Elegante Fallback-Lösung. Wenn keine Tools vorhanden sind
require_approval: "always", ist die Systemaufforderung unverändert, und der Agent verhält sich wie zuvor. -
require_approvalwird vom Agent erzwungen. Der Toolbox-MCP-Proxy wird unabhängig von dieser Einstellungtools/callausgeführt. Die Runtime des Agents muss das Gating des Aufrufs durchführen.
Konfigurieren von require_approval für ein Tool
Legen Sie require_approval fest, wenn Sie eine Toolbox-Version erstellen. Die MCP-Toolbeispiele in Schritt 1 zeigen sowohl "always" als auch "never" die Werte an. Sie können sie auch über das SDK festlegen:
from azure.ai.projects.models import MCPTool
# Set require_approval on an MCP tool
toolbox_version = project.toolboxes.create_toolbox_version(
name="my-toolbox",
tools=[
MCPTool(
server_label="myserver",
server_url="https://your-mcp-server.example.com",
require_approval="always", # "always" | "never"
project_connection_id="my-connection",
)
],
)
{
"tools": [
{
"type": "mcp",
"server_label": "myserver",
"server_url": "https://your-mcp-server.example.com",
"require_approval": "always",
"project_connection_id": "my-connection"
}
]
}
ProjectsAgentTool mcpTool = ProjectsAgentTool.AsProjectTool(ResponseTool.CreateMcpTool(
serverLabel: "myserver",
serverUri: new Uri("https://your-mcp-server.example.com"),
toolCallApprovalPolicy: new McpToolCallApprovalPolicy(
GlobalMcpToolCallApprovalPolicy.AlwaysRequireApproval
)
));
const tools = [
{
type: "mcp",
server_label: "myserver",
server_url: "https://your-mcp-server.example.com",
require_approval: "always",
project_connection_id: "my-connection",
},
];
Verwenden Sie die Registerkarte Python, .NET, JavaScript, REST-API oder azd, um require_approval in Ihrer Toolboxdefinition zu konfigurieren. Der Workflow der Erweiterung „Microsoft Foundry Toolkit für Visual Studio Code“ in diesem Artikel konzentriert sich auf das Erstellen und Verwenden der Toolbox in Visual Studio Code.
resources:
- kind: toolbox
name: my-toolbox
tools:
- type: mcp
server_label: myserver
server_url: https://your-mcp-server.example.com
require_approval: always
project_connection_id: my-connection
Schritt 5: Verwalten von Toolboxversionen
Hinweis
Sie können Toolboxversionen nur über das Python SDK, .NET SDK, JavaScript SDK und REST-API löschen. Die azd CLI unterstützt die Vorgänge Auflisten, Abrufen und Veröffentlichen (hochgestufte Standardversion).
Toolboxversionen sind unveränderliche Momentaufnahmen der Toolkonfiguration einer Toolbox. Jeder Aufruf des Create-Endpunkts erzeugt einen neuen ToolboxVersionObject. Das übergeordnete Element ToolboxObject hat ein default_version Feld, das steuert, welche Version der MCP-Endpunkt bereitstellt. Das Erstellen einer neuen Version bedeutet keine automatische Höherstufung – Sie entscheiden, wann Sie default_version aktualisieren. Mit diesem Prozess können Sie Änderungen stufen, eine neue Version unabhängig testen und für die Produktion in Ihrem eigenen Zeitplan bewerben.
Hinweis
Für die Azure Developer CLI erstellt jeder ändernde Vorgang, der auf die aktuelle Standardversion abzielt – azd ai toolbox connection add/remove und azd ai toolbox skill add/remove –, eine neue Toolbox-Version, die alle zuvor zugeordneten Verbindungen und Fähigkeiten übernimmt, wobei die angeforderte Änderung angewendet wird. Keiner dieser Befehle ändert default_version automatisch; führen Sie azd ai toolbox publish <toolbox-name> <version> aus, wenn Sie bereit sind, die neue Version zu aktivieren. Um eine ausstehende (nicht standardmäßige) Version zu prüfen, verwenden Sie azd ai toolbox show <name> --version <n>.
| Objekt | Schlüsselfelder | Beschreibung |
|---|---|---|
ToolboxObject |
id, namedefault_version |
Der Toolboxcontainer.
default_version verweist auf die aktive Version. |
ToolboxVersionObject |
id, , nameversion, description, created_at, , tools[]policies |
Eine unveränderliche Momentaufnahme der Werkzeugliste der Toolbox zu einem bestimmten Zeitpunkt.
policies.rai_config.rai_policy_name Gibt die optionale Schutzschiene an, die auf diese Version angewendet wird. |
Erstellen einer neuen Version
Jeder Erstellungsaufruf erzeugt eine neue Version. Falls die Toolbox noch nicht vorhanden ist, wird sie automatisch erstellt. Wenn Sie die erste Version einer neuen Toolbox erstellen, ist v1 die Standardversion so lange, bis Sie manuell auf eine andere Version aktualisieren.
# Create a new toolbox version
toolbox_version = project.toolboxes.create_toolbox_version(
name="my-toolbox",
description="Updated tools v2",
tools=[...],
)
print(f"Created version: {toolbox_version.version}")
ToolboxVersion toolboxVersion = await toolboxClient.CreateToolboxVersionAsync(
toolboxName: "<toolbox-name>",
tools: [tool],
description: "Updated tools v2"
);
Console.WriteLine($"Created version: {toolboxVersion.Version}");
POST {project_endpoint}/toolboxes/<toolbox-name>/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{
"description": "Updated tools v2",
"tools": [...]
}
const toolboxVersion = await project.toolboxes.createVersion(
"<toolbox-name>",
[/* tools array */],
{ description: "Updated tools v2" },
);
console.log(`Created version: ${toolboxVersion.version}`);
Verwenden Sie die Registerkarte Python, .NET, JavaScript oder REST-API, um eine neue Toolboxversion zu erstellen. Der Workflow der Erweiterung Microsoft Foundry Toolkit für Visual Studio Code, der in diesem Artikel beschrieben wird, konzentriert sich auf das Erstellen einer Toolbox und das Generieren des Grundgerüsts für einen gehosteten Agenten, der sie verwendet.
Dieser Vorgang wird mit der Azure Developer CLI nicht unterstützt. Verwenden Sie zum Erstellen einer Toolboxversion die Registerkarte Python, .NET, REST-API oder JavaScript.
Die Antwort ist ein ToolboxVersionObject, das den neuen version Bezeichner enthält.
Versionen auflisten
# List all toolbox versions
versions = list(project.toolboxes.list_toolbox_versions(name="<toolbox-name>"))
for v in versions:
print(f"{v.version} — created {v.created_at}")
List<ToolboxVersion> versions = await toolboxClient
.GetToolboxVersionsAsync("<toolbox-name>")
.ToListAsync();
Console.WriteLine($"Found {versions.Count} toolbox version(s).");
foreach (ToolboxVersion v in versions)
{
Console.WriteLine($" - {v.Name} ({v.Version})");
}
GET {project_endpoint}/toolboxes/<toolbox-name>/versions?api-version=v1
Authorization: Bearer {token}
const versions = project.toolboxes.listVersions("<toolbox-name");
for await (const v of versions) {
console.log(`${v.version} — created ${v.created_at}`);
}
Verwenden Sie die Registerkarte Python, .NET, JavaScript oder REST-API, um Toolboxversionen aufzulisten.
# The current default version is marked with *
azd ai toolbox version list <toolbox-name>
Eine bestimmte Version abrufen
# Get a specific toolbox version
version_obj = project.toolboxes.get_toolbox_version(
toolbox_name="<toolbox-name>",
version="<version_id>",
)
ToolboxVersion versionObj = await toolboxClient.GetToolboxVersionAsync(
"<toolbox-name>",
"<version_id>"
);
Console.WriteLine($"Retrieved toolbox: {versionObj.Name} ({versionObj.Id})");
GET {project_endpoint}/toolboxes/<toolbox-name>/versions/{version}?api-version=v1
Authorization: Bearer {token}
const versionObj = await project.toolboxes.getVersion(
"<toolbox-name>",
"<version_id>",
);
console.log(`Retrieved version: ${versionObj.version}`);
Verwenden Sie die Registerkarte Python, .NET, JavaScript oder REST-API, um eine bestimmte Toolboxversion abzurufen.
azd ai toolbox version get <toolbox-name> <version_id>
Höherstufen einer Version auf Standard
Der MCP-Endpunkt dient immer dem default_version. Um zu wechseln, welche Version aktiv ist, aktualisieren Sie die Toolbox:
# Promote a version to default
toolbox = project.toolboxes.update(
toolbox_name="<toolbox-name>",
default_version="<version_id>",
)
print(f"Active version: {toolbox.default_version}")
ToolboxRecord record = await toolboxClient.UpdateToolboxAsync(
"<toolbox-name>",
"<version_id>"
);
Console.WriteLine($"Active version: {record.DefaultVersion}");
PATCH {project_endpoint}/toolboxes/<toolbox-name>?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{
"default_version": "<version_id>"
}
default_version darf nicht leer sein. Ersetzen Sie sie durch eine neue Version.
const toolbox = await project.toolboxes.update(
"<toolbox-name>",
"<version_id>",
);
console.log(`Active version: ${toolbox.default_version}`);
Verwenden Sie die Registerkarte Python, .NET, JavaScript oder REST-API, um eine Toolboxversion als Standard festzulegen.
Toolboxversionen sind unveränderlich. Verwenden Sie publish, um eine vorhandene Version zur neuen Standardversion zu machen:
# Roll back or forward to a specific version
azd ai toolbox publish <toolbox-name> <version_id> --no-prompt
publish ist der einzige Weg, mit dem default_version über die CLI geändert wird; mutierende Verben (connection add/remove, skill add/remove) erstellen immer eine neue Version, ohne sie heraufzustufen.
Löschen einer Version
# Delete a toolbox version
project.toolboxes.delete_toolbox_version(
toolbox_name="<toolbox-name>",
version="<version_id>",
)
await toolboxClient.DeleteToolboxVersionAsync(
"<toolbox-name>",
"<version_id>"
);
DELETE {project_endpoint}/toolboxes/<toolbox-name>/versions/{version}?api-version=v1
Authorization: Bearer {token}
await project.toolboxes.deleteVersion(
"<toolbox-name>",
"<version_id>",
);
Verwenden Sie die Registerkarte Python, .NET, JavaScript oder REST-API, um eine Toolboxversion zu löschen.
Dieser Vorgang wird mit der Azure Developer CLI nicht unterstützt. Verwenden Sie zum Löschen einer Toolboxversion die Registerkarte Python, .NET, REST-API oder JavaScript.
Konfigurieren von Tools
Wählen Sie den Tooltyp und das Authentifizierungsmuster aus, das Ihrem Szenario entspricht. Wählen Sie die Registerkarte für Ihre bevorzugte SDK- oder Bereitstellungsmethode aus.
Die unten stehende Registerkarte azd jedes Tools zeigt deklaratives Toolbox-YAML. Um ohne Agentprojekt imperativ eine Toolbox zu erstellen, verwenden Sie den generischen vierstufigen azd ai toolbox create --from-fileWorkflow und wenden Sie die in den folgenden Abschnitten gezeigten toolbezogenen Daten an. Um eine Toolbox mit einem gehosteten Agenten bereitzustellen, modellieren Sie sie in azure.ai.toolbox als azure.yaml-Dienst und binden Sie den Agenten mit uses: oder toolboxes: daran an.
Mehrere Tooltypen
Eine einzelne Toolbox kann verschiedene Tooltypen bündeln. Im folgenden Beispiel werden Websuche, Azure KI-Suche und ein MCP-Server in einer Toolbox kombiniert:
{
"description": "Web search, knowledge base search, and custom MCP server",
"tools": [
{
"type": "web_search",
"description": "Search the web for current information"
},
{
"type": "azure_ai_search",
"name": "my_aisearch",
"description": "Search internal product documentation",
"azure_ai_search": {
"indexes": [
{
"index_name": "<INDEX_NAME>",
"project_connection_id": "<CONNECTION_NAME>"
}
]
}
},
{
"type": "mcp",
"server_label": "myserver",
"server_url": "https://your-mcp-server.example.com",
"require_approval": "never",
"project_connection_id": "my-key-auth-connection"
}
]
}
Hinweis
Jeder Werkzeugtyp (web_search, azure_ai_search, code_interpreter, file_search) kann höchstens ohne Feld name angezeigt werden. Um mehrere Instanzen desselben Typs einzuschließen, legen Sie für jede Instanz eine eindeutige name Fest. Weitere Informationen finden Sie im nächsten Beispiel.
Einschränkungen für mehrere Tools
Sie können höchstens eine Instanz jedes integrierten Tooltyps ohne Feld name in einer Toolbox einschließen. Wenn Sie zwei Instanzen desselben Typs ohne ein name einschließen, gibt die API Folgendes zurück:
400 invalid_payload: Multiple tools without identifiers found...
Zwei Instanzen desselben Tooltyps
Verwenden Sie das name Feld, um mehrere Instanzen desselben Tooltyps in einer Toolbox einzuschließen. Jede benannte Instanz wird als separates Tool behandelt und muss einen eindeutigen Namen haben.
{
"description": "Two Azure AI Search indexes in a single toolbox",
"tools": [
{
"type": "azure_ai_search",
"name": "product-search",
"description": "Search product catalog and specifications",
"azure_ai_search": {
"indexes": [
{
"index_name": "<PRODUCT_INDEX_NAME>",
"project_connection_id": "<PRODUCT_CONNECTION_NAME>"
}
]
}
},
{
"type": "azure_ai_search",
"name": "support-search",
"description": "Search support tickets and troubleshooting guides",
"azure_ai_search": {
"indexes": [
{
"index_name": "<SUPPORT_INDEX_NAME>",
"project_connection_id": "<SUPPORT_CONNECTION_NAME>"
}
]
}
}
]
}
In den folgenden Abschnitten wird die Konfiguration der einzelnen Tooltypen detailliert angezeigt.
Modellkontextprotokoll (MCP)
Hinweis
Der Toolbox-MCP-Endpunkt unterstützt lang andauernde Vorgänge mithilfe von MCP-Aufgaben, die derzeit als Vorschau verfügbar sind. Um Tools mit langer Laufzeit zu verwenden, stellen Sie sicher, dass Ihr Agent-Framework MCP-Aufgaben unterstützt.
Schlüsselbasierte Authentifizierung:
{
"description": "my-mcp-toolbox",
"tools": [
{
"type": "mcp",
"server_label": "myserver",
"server_url": "https://your-mcp-server.example.com",
"project_connection_id": "my-mcp-connection"
}
]
}
Keine Authentifizierung (öffentlicher MCP-Server):
{
"description": "Public MCP server",
"tools": [
{
"type": "mcp",
"server_label": "myserver",
"server_url": "https://your-mcp-server.example.com"
}
]
}
OAuth oder identitätsbasierte Authentifizierung:
Erstellen Sie für OAuth (verwalteter Connector, benutzerdefinierte App-Registrierung), Agentidentität oder Benutzer-Entra-Tokenauthentifizierung zuerst die entsprechende Verbindung in Ihrem Foundry-Projekt, und verweisen Sie darauf mit project_connection_id:
{
"description": "MCP server with OAuth/identity auth",
"tools": [
{
"type": "mcp",
"server_label": "myserver",
"server_url": "https://your-mcp-server.example.com",
"project_connection_id": "<OAUTH_OR_IDENTITY_CONNECTION_NAME>"
}
]
}
Die Verbindung authType bestimmt den Authentifizierungsfluss. Unterstützte Verbindungsauthentifizierungstypen für MCP umfassen CustomKeys, OAuth2 (verwaltet oder benutzerdefiniert), AgenticIdentityTokenund UserEntraToken. Sehen Sie sich auf der Registerkarte azd Beispiele für Verbindungskonfigurationen für die einzelnen Authentifizierungstypen an.
from azure.ai.projects.models import MCPTool
tools = [
MCPTool(
server_label="myserver",
server_url="https://your-mcp-server.example.com",
project_connection_id="my-mcp-connection",
)
]
ProjectsAgentTool tool = ProjectsAgentTool.AsProjectTool(ResponseTool.CreateMcpTool(
serverLabel: "myserver",
serverUri: new Uri("https://your-mcp-server.example.com")
));
ToolboxVersion toolboxVersion = await toolboxClient.CreateToolboxVersionAsync(
toolboxName: "my-toolbox",
tools: [tool],
description: "my-mcp-toolbox"
);
const tools = [
{
type: "mcp",
server_label: "myserver",
server_url: "https://your-mcp-server.example.com",
project_connection_id: "my-mcp-connection",
},
];
Erstellen Sie eine Projektverbindung für Ihren MCP-Server mit dem Authentifizierungstyp, der Ihrem Szenario entspricht, und verweisen Sie dann aus einer minimalen Toolbox-YAML darauf.
Schritt 1. Erstellen der Verbindung
Hinweis
Exportieren Sie Ihren Projektendpunkt, und legen Sie ihn als aktives Projekt für die azd ai Befehle fest:
PROJECT_ENDPOINT="https://<account>.services.ai.azure.com/api/projects/<project>"
azd ai project set $PROJECT_ENDPOINT
Wählen Sie die Authentifizierungsvariante aus, die Sie benötigen:
# No auth — public MCP server
azd ai connection create my-mcp-conn \
--kind remote-tool \
--target https://learn.microsoft.com/api/mcp \
--auth-type none
# Custom-keys header (for example, GitHub PAT)
azd ai connection create my-mcp-conn \
--kind remote-tool \
--target https://api.githubcopilot.com/mcp/ \
--auth-type custom-keys \
--custom-key "Authorization=Bearer $GITHUB_PAT"
# OAuth — bring your own app registration
azd ai connection create my-mcp-conn \
--kind remote-tool \
--target https://your-mcp-server.example.com \
--auth-type oauth2 \
--authorization-url https://auth.example.com/authorize \
--token-url https://auth.example.com/token \
--client-id <oauth-client-id> \
--client-secret <oauth-client-secret> \
--scopes "<scope1> <scope2>"
# User Entra token (managed user identity passthrough; for example, Microsoft Fabric)
azd ai connection create my-mcp-conn \
--kind remote-tool \
--target https://api.fabric.microsoft.com/v1/mcp/fabricaihub/integrations/m365 \
--auth-type user-entra-token \
--audience https://analysis.windows.net/powerbi/api
# Project managed identity — the project's system-assigned MI
azd ai connection create my-mcp-conn \
--kind remote-tool \
--target https://<resource>.cognitiveservices.azure.com/language/mcp \
--auth-type project-managed-identity \
--audience https://cognitiveservices.azure.com
# Agentic identity — the agent's per-project identity
azd ai connection create my-mcp-conn \
--kind remote-tool \
--target https://<resource>.cognitiveservices.azure.com/language/mcp \
--auth-type agentic-identity \
--audience https://cognitiveservices.azure.com
--auth-type |
Zusätzliche Flags |
|---|---|
none |
— |
custom-keys |
--custom-key "Header=Value" (wiederholbar) |
oauth2 |
--authorization-url, --token-url, --client-id, --client-secret, , --scopes |
user-entra-token |
--audience <entra-audience> |
project-managed-identity |
--audience <entra-audience> (wahlweise) |
agentic-identity |
--audience <entra-audience> |
Weisen Sie bei identitätsbasierter Authentifizierung (user-entra-token, project-managed-identity, agentic-identity) dem entsprechenden Prinzipal die erforderliche RBAC-Rolle für die Zielressource zu, bevor Sie die Toolbox aufrufen.
Schritt 2. Definieren der Toolbox
# my-toolbox.yaml
description: MCP server tools
connections:
- name: my-mcp-conn
Schritt 3: Erstellen der Toolbox
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Wichtig
Wenn ein Benutzer erstmals eine Toolbox mit einem OAuth-basierten MCP in einem Projekt aufruft, gibt der MCP-Endpunkt einen CONSENT_REQUIRED Fehler (Code -32006) mit einer Zustimmungs-URL zurück:
{
"error": {
"code": -32006,
"message": "User consent is required. Please visit: https://..."
}
}
Dieser Fehler wird erwartet. Öffnen Sie die Zustimmungs-URL in einem Browser, schließen Sie den OAuth-Autorisierungsfluss ab, und wiederholen Sie dann den Agentanruf. Nachfolgende Anrufe sind ohne erneute Aufforderung erfolgreich.
Websuche
Wichtig
- Die Websuche nutzt Grounding mit Bing-Suche und/oder Grounding mit benutzerdefinierter Bing-Suche, bei denen es sich um Erstanbieter-Verbrauchsdienste handelt, die durch diese Nutzungsbedingungen für das Grounding mit Bing und die Microsoft-Datenschutzbestimmungen geregelt werden.
- Der Microsoft Datenschutz-Zusatz gilt nicht für Daten, die an Grounding mit Bing Search und Grounding mit Bing Custom Search gesendet werden. Wenn Sie Grounding mit Bing Search und Grounding mit der benutzerdefinierten Bing-Suche verwenden, erfolgen Datenübertragungen außerhalb von Vorschriften und geografischen Grenzen.
- Die Verwendung von Grounding mit Bing Search und Grounding mit Bing Custom Search kann Kosten verursachen. Details finden Sie unter "Preise ".
- Im Abschnitt Management finden Sie Informationen dazu, wie Azure Administratoren den Zugriff auf die Verwendung der Websuche verwalten können.
Verwenden Sie dieses Muster, um die Websuche hinzuzufügen. Für die Websuche mit Grounding mit Bing ist keine Projektverbindung erforderlich. Um ein Grounding mit benutzerdefinierter Bing Search-Instanz zu verwenden, fügen Sie ein web_search.custom_search_configuration Objekt hinzu, das auf Ihr Grounding mit bing Custom Search-Verbindung zeigt.
{
"description": "Built-in web search",
"tools": [
{
"type": "web_search",
"name": "<OPTIONAL_TOOL_NAME>",
"description": "<Optional description for the model>"
}
]
}
Mit einer Verbindung mit „Grounding mit benutzerdefinierter Bing-Suche“:
{
"description": "Custom Bing Search instance",
"tools": [
{
"type": "web_search",
"name": "<OPTIONAL_TOOL_NAME>",
"description": "<Optional description for the model>",
"web_search": {
"custom_search_configuration": {
"project_connection_id": "<BING_CONNECTION_NAME>",
"instance_name": "<BING_INSTANCE_NAME>"
}
}
}
]
}
from azure.ai.projects.models import WebSearchTool
tools = [
WebSearchTool()
]
ProjectsAgentTool tool = ProjectsAgentTool.AsProjectTool(
ResponseTool.CreateWebSearchTool()
);
ToolboxVersion toolboxVersion = await toolboxClient.CreateToolboxVersionAsync(
toolboxName: "my-toolbox",
tools: [tool],
description: "Built-in web search"
);
const tools = [
{
type: "web_search",
name: "<OPTIONAL_TOOL_NAME>",
description: "<Optional description for the model>",
},
];
Standard (Grounding mit Bing-Suche, keine Verbindung erforderlich):
# my-toolbox.yaml
description: Web search toolbox
tools:
- type: web_search
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Verankerung mit Bing Custom Search:
# Step 1. Create the Bing Custom Search connection
azd ai connection create my-bing-custom \
--kind GroundingWithCustomSearch \
--target https://api.bing.microsoft.com/ \
--auth-type api-key \
--key "<bing-custom-search-key>"
--kind GroundingWithCustomSearch erfordert exakte PascalCase-Schreibweise.
# Step 2. Define the toolbox (my-toolbox.yaml)
description: Bing Custom Search toolbox
connections:
- name: my-bing-custom
instance_name: your-bing-custom-instance
# Step 3. Create the toolbox
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Hinweis
Wenn die Websuche Ergebnisse über MCP zurückgibt, handelt es sich bei der Antwort um ein resource Inhaltselement, das die synthetisierte Antwort mit Inline-Markdown-Quelllinks enthält. URL-Zitate befinden sich in content[].resource._meta.annotations[]. Zum Beispiel:
{
"jsonrpc": "2.0",
"id": "ws-call-1",
"result": {
"_meta": {
"tool_configuration": {
"type": "web_search",
"name": "web-search-default"
}
},
"content": [
{
"type": "resource",
"resource": {
"uri": "about:web-search-answer",
"mimeType": "text/plain",
"text": "Here are the latest updates on Azure OpenAI Service...\n\n- **GPT-image-1 Release (January 7, 2026)** Microsoft introduced GPT-image-1 ([serverless-solutions.com](https://...)).\n\n..."
},
"annotations": {
"audience": ["assistant"]
},
"_meta": {
"annotations": [
{
"type": "url_citation",
"url": "https://www.serverless-solutions.com/blog/...",
"title": "Microsoft Expands Azure AI Foundry with Powerful New OpenAI Models",
"start_index": 741,
"end_index": 879
}
],
"action": {
"type": "search",
"query": "Azure OpenAI service updates 2026",
"queries": ["Azure OpenAI service updates 2026"]
},
"response_id": "resp_001fcebcc300..."
}
}
],
"isError": false
}
}
Azure KI-Suche
{
"description": "Azure AI Search over my data",
"tools": [
{
"type": "azure_ai_search",
"name": "<OPTIONAL_TOOL_NAME>",
"description": "<Optional description for the model>",
"azure_ai_search": {
"indexes": [
{
"index_name": "<INDEX_NAME>",
"project_connection_id": "<CONNECTION_NAME>"
}
]
}
}
]
}
from azure.ai.projects.models import AzureAISearchTool
tools = [
AzureAISearchTool(
index_name="<INDEX_NAME>",
project_connection_id="<CONNECTION_NAME>",
)
]
ProjectsAgentTool tool = new AzureAISearchTool(
new AzureAISearchToolOptions(
indexes: [
new AzureAISearchIndexResource(
indexName: "<INDEX_NAME>",
projectConnectionId: "<CONNECTION_NAME>"
)
]
)
);
ToolboxVersion toolboxVersion = await toolboxClient.CreateToolboxVersionAsync(
toolboxName: "my-toolbox",
tools: [tool],
description: "Azure AI Search over my data"
);
const tools = [
{
type: "azure_ai_search",
name: "<OPTIONAL_TOOL_NAME>",
description: "<Optional description for the model>",
azure_ai_search: {
indexes: [
{
index_name: "<INDEX_NAME>",
project_connection_id: "<CONNECTION_NAME>",
},
],
},
},
];
# Step 1. Create the Azure AI Search connection
azd ai connection create my-search \
--kind cognitive-search \
--target "https://<your-search>.search.windows.net/" \
--auth-type api-key \
--key "<aisearch-admin-key>"
cognitive-search Verbindungen akzeptieren auch --auth-type project-managed-identity (kein Schlüssel). Wenn Sie projektverwaltete Identität verwenden, weisen Sie die vom System zugewiesene verwaltete Identität des Projekts der Rolle "Suchindexdatenleser " im Suchdienst zu.
# Step 2. Define the toolbox (my-toolbox.yaml)
description: Azure AI Search toolbox
connections:
- name: my-search
index: your-index-name
# Step 3. Create the toolbox
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Konfigurieren von Toolparametern
| Azure AI-Suche Tool-Parameter | Erforderlich | Notizen |
|---|---|---|
project_connection_id |
Ja | Die Ressourcen-ID der Projektverbindung mit Azure KI-Suche. |
index_name |
Ja | Der Name des Indexes in Ihrer Azure KI-Suche Ressource. |
top_k |
Nein | Der Standardwert ist 5. |
query_type |
Nein | Standardmäßig auf vector_semantic_hybrid. Unterstützte Werte: simple, vector, semantic, vector_simple_hybrid, vector_semantic_hybrid. |
filter |
Nein | Gilt für alle Abfragen, die der Agent an den Index sendet. |
Die Suchergebnisse enthalten Blockmetadaten in result.structuredContent.documents[]. Jedes Dokument enthält title, url, idund score Felder, die Sie zum Generieren von Zitatdetails in Ihrer Anwendung verwenden können.
Codedolmetscher
Verwenden Sie dieses Muster, damit der Agent Python Code schreiben und ausführen kann. Für das Muster ist keine Projektverbindung oder zusätzliche Konfiguration erforderlich.
Um eine Datei hochzuladen, damit Code Interpreter sie über eine Toolbox verwenden kann, laden Sie die Datei über den Files-Endpunkt auf Ressourcenebene (POST {account_endpoint}/openai/v1/files) mit dem Header x-aml-project-id hoch. Im Gegensatz zum Prompt-Agent-Flow erhalten Dateien, die über den projektbezogenen Files-Endpunkt (/api/projects/{name}/openai/v1/files) hochgeladen werden, ein owner_id, das der Toolbox-Container nicht verifizieren kann, sodass tools/call mit einem Besitzüberprüfungsfehler fehlschlägt.
Rufen Sie die Projekt-GUID aus Azure Resource Manager ab. Verwenden
properties.amlWorkspace.internalId(gestricheltes UUID-Format), nichtproperties.internalId(keine Gedankenstriche – der Toolboxcontainer lehnt es ab):ARM_TOKEN=$(az account get-access-token --query accessToken -o tsv) PROJECT_GUID=$(curl -s -H "Authorization: Bearer $ARM_TOKEN" \ "https://management.azure.com/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{account}/projects/{project}?api-version=2025-06-01" \ | jq -r '.properties.amlWorkspace.internalId')Laden Sie die Datei auf Kontoebene (Ressourcenebene) mit dem
x-aml-project-idHeader hoch:TOKEN=$(az account get-access-token --resource https://ai.azure.com/.default --query accessToken -o tsv) curl -X POST "https://{account}.services.ai.azure.com/openai/v1/files" \ -H "Authorization: Bearer $TOKEN" \ -H "x-aml-project-id: $PROJECT_GUID" \ -F "purpose=assistants" \ -F "file=@your-file.csv"
Die zurückgegebene Datei id ist der Wert, den Sie wie <FILE_ID> in der Toolkonfiguration angeben. Dateien werden in der Sandbox unter /mnt/data/{file-id}-{original-filename} eingehängt. Weitere Uploadbeispiele und sprachspezifische Beispiele finden Sie unter Code Interpreter .
Wichtig
Wenn Codedolmetscher über eine Toolbox in einem gehosteten Agent verwendet wird, wird die Benutzerisolation nicht unterstützt. Alle Benutzer im selben Projekt verwenden denselben Containerkontext.
{
"description": "Code interpreter for data analysis",
"tools": [
{
"type": "code_interpreter",
"name": "<OPTIONAL_TOOL_NAME>",
"description": "<Optional description for the model>",
"container": {
"type": "auto",
"file_ids": ["<FILE_ID>"]
}
}
]
}
from azure.ai.projects.models import CodeInterpreterTool
tools = [
CodeInterpreterTool()
]
ProjectsAgentTool tool = ProjectsAgentTool.AsProjectTool(
ResponseTool.CreateCodeInterpreterTool(
new CodeInterpreterToolContainer()
)
);
ToolboxVersion toolboxVersion = await toolboxClient.CreateToolboxVersionAsync(
toolboxName: "my-toolbox",
tools: [tool],
description: "Code interpreter for data analysis"
);
const tools = [
{
type: "code_interpreter",
name: "<OPTIONAL_TOOL_NAME>",
description: "<Optional description for the model>",
container: {
type: "auto",
file_ids: ["<FILE_ID>"],
},
},
];
Code Interpreter ist verbindungslos. Deklarieren Sie sie direkt unter tools:.
# my-toolbox.yaml
description: Code interpreter toolbox
tools:
- type: code_interpreter
container: { type: auto }
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Herunterladen von Ausgabedateien von Code Interpreter
Wenn Codedolmetscher Ausgabedateien (z. B. eine generierte CSV- oder Diagrammdatei) erzeugt, führen Sie die folgenden Schritte aus, um sie aufzulisten und herunterzuladen.
Schritt 1: Auflisten von Dateien mithilfe der Container-API
Extrahieren Sie das container_id aus content[]._meta.container_id in der tools/call-Antwort, und rufen Sie dann die Container Files API auf, um alle Dateien im Container aufzulisten.
GET {project_endpoint}/containers/{container_id}/files?api-version=v1
Authorization: Bearer {token}
Die Antwort gibt eine Liste von Dateien mit ihren Namen und IDs zurück.
Schritt 2: Herunterladen der Datei mithilfe der Datei-API
Verwenden Sie den von Schritt 1 zurückgegebenen Dateinamen, um die Datei über den Downloadendpunkt der Datei-API herunterzuladen.
Dateisuche
Verwenden Sie dieses Muster, damit der Agent hochgeladene Dateien durchsuchen kann, die in einem Vektorspeicher gespeichert sind. Stellen Sie referenzierende vector_store_ids-Vektorspeicher bereit, die bereits in Ihrem Foundry-Projekt erstellt wurden.
Um eine Datei und einen Vektorspeicher zur Verwendung mit einer Toolbox zu erstellen, laden Sie die Datei am Files-Endpunkt auf Ressourcenebene mit dem Header x-aml-project-id hoch (dieselbe Anforderung wie beim Code Interpreter – im vorherigen Abschnitt erfahren Sie, wie Sie die Projekt-GUID aus properties.amlWorkspace.internalId abrufen):
- Laden Sie Ihre Datei hoch:
POST {account_endpoint}/openai/v1/filesmitpurpose=assistantsund Headerx-aml-project-id: {project-guid}. - Erstellen Sie einen Vektorspeicher:
POST {account_endpoint}/openai/v1/vector_storesmit der zurückgegebenen Datei-ID und demselbenx-aml-project-idHeader.
Die resultierende Vektorspeicher-ID ist der Wert, den Sie angeben.<VECTOR_STORE_ID> Vollständige Beispiele für jede Sprache finden Sie in der Dateisuche .
Wichtig
Wenn die Dateisuche über eine Toolbox in einem gehosteten Agent verwendet wird, wird die Benutzerisolation nicht unterstützt. Alle Benutzer im selben Projekt teilen den Zugriff auf denselben Vektorspeicher.
{
"description": "Search over uploaded documents",
"tools": [
{
"type": "file_search",
"name": "<OPTIONAL_TOOL_NAME>",
"description": "<Optional description for the model>",
"file_search": {
"vector_store_ids": ["<VECTOR_STORE_ID>"]
}
}
]
}
from azure.ai.projects.models import FileSearchTool
tools = [
FileSearchTool(
vector_store_ids=["<VECTOR_STORE_ID>"]
)
]
ProjectsAgentTool tool = ProjectsAgentTool.AsProjectTool(
ResponseTool.CreateFileSearchTool(
vectorStoreIds: ["<VECTOR_STORE_ID>"]
)
);
ToolboxVersion toolboxVersion = await toolboxClient.CreateToolboxVersionAsync(
toolboxName: "my-toolbox",
tools: [tool],
description: "Search over uploaded documents"
);
const tools = [
{
type: "file_search",
name: "<OPTIONAL_TOOL_NAME>",
description: "<Optional description for the model>",
file_search: {
vector_store_ids: ["<VECTOR_STORE_ID>"],
},
},
];
Die Dateisuche ist ohne Verbindung, erfordert jedoch eine vorhandene Vektorspeicher-ID. Deklarieren Sie sie direkt unter tools:.
# my-toolbox.yaml
description: File search toolbox
tools:
- type: file_search
vector_store_ids:
- vs_xxxxxxxxxxxx
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Hinweis
Wenn die Dateisuche Ergebnisse über MCP zurückgibt, werden Blockmetadaten als Markierungen in den Toolantwortinhalt 【index†filename†file_id【 eingebettet. Zum Beispiel:
{
"jsonrpc": "2.0",
"id": "fs-call-1",
"result": {
"content": [
{
"type": "resource",
"resource": {
"uri": "file://assistant-tvfqncbtruyffxkfewenyy/",
"_meta": {
"title": "mcp-test-file.txt",
"file_id": "assistant-TVfQnCBtRuyfFxkfeweNYY",
"document_chunk_id": "f7327b7f-5ed0-43c6-9bee-e8e9552afcb5",
"score": 0.03333333507180214
},
"text": "# 【0†mcp-test-file.txt†assistant-TVfQnCBtRuyfFxkfeweNYY【\nContent Snippet:\nAzure OpenAI Service is a cloud service..."
}
}
]
}
}
Der _meta-Block in jedem Ressourcenelement enthält title, file_id, document_chunk_id und Relevanz-score für den übereinstimmenden Block. Verwenden Sie diese Metadatenfelder in Ihrer Anwendung, um Zitatdetails oder Deep-Link zurück zur Quelldatei zu generieren.
OpenAPI
Verwenden Sie dieses Muster, um eine REST-API offenzulegen, die durch eine OpenAPI-Spezifikation beschrieben wird. Wählen Sie das auth.type, das dem Sicherheitsmodell Ihrer API entspricht.
Wichtig
Wenn verwaltete Identitätsauthentifizierung verwendet wird, müssen Sie die entsprechende RBAC-Rolle der verwalteten Identität Ihres Foundry-Projekts für den Zieldienst zuweisen. Weisen Sie der Zielressource in Azure beispielsweise "Reader" oder eine höhere Rolle zu. Ohne diese Zuweisung empfängt der Agent beim Aufrufen der API eine 401 Unauthorized Antwort. Vollständige Einrichtungsschritte finden Sie unter Authentifizieren mithilfe der verwalteten Identität.
Anonyme Authentifizierung:
{
"description": "REST API via OpenAPI spec",
"tools": [
{
"type": "openapi",
"openapi": {
"name": "my-api",
"spec": { "<paste OpenAPI spec object here>" },
"auth": {
"type": "anonymous"
}
}
}
]
}
Projekt-Authentifizierung:
Verwenden Sie dieses Muster, wenn für die API ein Schlüssel oder Token erforderlich ist, der in einer Foundry-Projektverbindung gespeichert ist.
{
"description": "REST API with connection-based auth",
"tools": [
{
"type": "openapi",
"openapi": {
"name": "my-api",
"spec": { "<paste OpenAPI spec object here>" },
"auth": {
"type": "connection",
"security_scheme": {
"project_connection_id": "<CONNECTION_NAME>"
}
}
}
}
]
}
Verwaltete Identitätsauthentifizierung:
Verwenden Sie dieses Muster, wenn sich die Ziel-API über Microsoft Entra ID authentifiziert. Die verwaltete Identität des Foundry-Projekts ruft die API im Namen des Agents auf. Stellen Sie sicher, dass die verwaltete Identität über die erforderliche RBAC-Rolle für den Zieldienst verfügt, bevor Sie dieses Muster verwenden.
{
"description": "REST API with managed identity auth",
"tools": [
{
"type": "openapi",
"openapi": {
"name": "my-api",
"spec": { "<paste OpenAPI spec object here>" },
"auth": {
"type": "managed_identity",
"security_scheme": {
"audience": "<TARGET_SERVICE_AUDIENCE>"
}
}
}
}
]
}
from azure.ai.projects.models import OpenAPITool
tools = [
OpenAPITool(
name="my-api",
spec={"<paste OpenAPI spec object here>"},
auth={"type": "anonymous"},
)
]
BinaryData specBytes = BinaryData.FromString("<OpenAPI spec JSON>");
ProjectsAgentTool tool = new OpenAPITool(
new OpenApiFunctionDefinition(
name: "my-api",
spec: specBytes,
openApiAuthentication: new OpenApiAnonymousAuthDetails()
)
);
ToolboxVersion toolboxVersion = await toolboxClient.CreateToolboxVersionAsync(
toolboxName: "my-toolbox",
tools: [tool],
description: "REST API via OpenAPI spec"
);
const tools = [
{
type: "openapi",
openapi: {
name: "my-api",
spec: { /* paste OpenAPI spec object here */ },
auth: {
type: "anonymous",
},
},
},
];
OpenAPI-Tools betten die Spezifikation direkt unter tools: ein. Verbindungsbasierte Authentifizierung (connection_auth) verweist auf eine Projektverbindung. Anonyme OpenAPI-Tools benötigen keine Verbindung.
Schritt 1. (Optional) Erstellen der Authentifizierungsverbindung
Überspringen Sie diesen Schritt für anonyme OpenAPI-Tools.
# API-key auth (passed by the platform on every call)
azd ai connection create my-api-conn \
--kind remote-tool \
--target https://api.example.com \
--auth-type custom-keys \
--custom-key "Authorization=Bearer <token>"
OpenAPI-Tools akzeptieren auch --auth-type oauth2 Verbindungen. Den vollständigen Satz von azd ai connection create Flags finden Sie oben im MCP-Abschnitt.
Schritt 2. Definieren der Toolbox
Die OpenAPI-Spezifikation ist inline unter tools[].openapi.spec.
# my-toolbox.yaml
description: OpenAPI toolbox
tools:
- type: openapi
name: my-api
openapi:
name: my-api
spec:
openapi: "3.0.1"
info:
title: "My API"
version: "1.0"
servers:
- url: https://api.example.com/v1
paths:
/search:
get:
operationId: search
parameters:
- name: query
in: query
required: true
schema:
type: string
responses:
"200":
description: OK
auth:
type: connection_auth
connection_id: my-api-conn
Ersetzen Sie den auth: Block für anonyme APIs durch:
auth:
type: anonymous
security_scheme:
type: anonymous
Schritt 3: Erstellen der Toolbox
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Agent-zu-Agent (A2A)
Verwenden Sie dieses Muster, um einen anderen Agent als Tool aufzurufen. Geben Sie die Basis-URL des Remote-Agents an, und geben Sie, falls die Authentifizierung erforderlich ist, eine Projektverbindung an.
{
"description": "Delegate tasks to a specialist agent",
"tools": [
{
"type": "a2a_preview",
"name": "<AGENT_NAME>",
"description": "<What this agent does>",
"base_url": "<AGENT_BASE_URL>",
"project_connection_id": "<CONNECTION_NAME>"
}
]
}
from azure.ai.projects.models import A2APreviewTool
tools = [
A2APreviewTool(
name="<AGENT_NAME>",
description="<What this agent does>",
base_url="<AGENT_BASE_URL>",
project_connection_id="<CONNECTION_NAME>",
)
]
ProjectsAgentTool tool = new A2APreviewTool()
{
ProjectConnectionId = "<CONNECTION_NAME>",
};
ToolboxVersion toolboxVersion = await toolboxClient.CreateToolboxVersionAsync(
toolboxName: "my-toolbox",
tools: [tool],
description: "Delegate tasks to a specialist agent"
);
const tools = [
{
type: "a2a_preview",
name: "<AGENT_NAME>",
description: "<What this agent does>",
base_url: "<AGENT_BASE_URL>",
project_connection_id: "<CONNECTION_NAME>",
},
];
Erstellen Sie eine remote-a2a Verbindung für den Remote-Agent, und verweisen Sie dann aus einer minimalen Toolbox-YAML darauf.
Schritt 1. Erstellen der Verbindung
Wählen Sie die Authentifizierungsvariante aus, die Sie benötigen:
# No auth
azd ai connection create my-a2a-conn \
--kind remote-a2a \
--target https://your-remote-agent.azurecontainerapps.io \
--auth-type none
# Custom-keys header
azd ai connection create my-a2a-conn \
--kind remote-a2a \
--target https://your-remote-agent.azurecontainerapps.io \
--auth-type custom-keys \
--custom-key "Authorization=Bearer <token>"
# OAuth — bring your own app registration
azd ai connection create my-a2a-conn \
--kind remote-a2a \
--target https://your-remote-agent.azurecontainerapps.io \
--auth-type oauth2 \
--authorization-url https://auth.example.com/authorize \
--token-url https://auth.example.com/token \
--client-id <oauth-client-id> \
--client-secret <oauth-client-secret> \
--scopes "<scope1> <scope2>"
# User Entra token (managed user identity passthrough)
azd ai connection create my-a2a-conn \
--kind remote-a2a \
--target https://your-remote-agent.azurecontainerapps.io \
--auth-type user-entra-token \
--audience "<entra-audience>"
# Project managed identity
azd ai connection create my-a2a-conn \
--kind remote-a2a \
--target https://your-remote-agent.azurecontainerapps.io \
--auth-type project-managed-identity \
--audience "<entra-audience>"
# Agentic identity
azd ai connection create my-a2a-conn \
--kind remote-a2a \
--target https://your-remote-agent.azurecontainerapps.io \
--auth-type agentic-identity \
--audience "<entra-audience>"
--auth-type |
Zusätzliche Flags |
|---|---|
none |
— |
custom-keys |
--custom-key "Header=Value" (wiederholbar) |
oauth2 |
--authorization-url, --token-url, --client-id, --client-secret, , --scopes |
user-entra-token |
--audience <entra-audience> |
project-managed-identity |
--audience <entra-audience> (wahlweise) |
agentic-identity |
--audience <entra-audience> |
Schritt 2. Definieren der Toolbox
# my-toolbox.yaml
description: Agent-to-Agent toolbox
connections:
- name: my-a2a-conn
Schritt 3: Erstellen der Toolbox
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Fabric IQ
Verwenden Sie dieses Muster, um dem Agenten Zugriff auf Microsoft Fabric Daten – Ontologien, Datenagenten und Power BI semantischen Modellen – über Fabric IQ zu gewähren. Stellen Sie die Projektverbindung, die MCP-Server-URL und die Serverbezeichnung für das Ziel Fabric Element bereit.
{
"description": "Fabric IQ for enterprise Fabric data access",
"tools": [
{
"type": "fabric_iq_preview",
"project_connection_id": "<CONNECTION_NAME>",
"server_label": "<SERVER_LABEL>",
"server_url": "<SERVER_URL>"
}
]
}
tools = [
{
"type": "fabric_iq_preview",
"project_connection_id": "<CONNECTION_NAME>",
"server_label": "<SERVER_LABEL>",
"server_url": "<SERVER_URL>",
}
]
Fabric IQ wird als MCP-Endpunkt bedient. Erstellen Sie eine remote-tool Verbindung mit dem Fabric IQ-Server mit user-entra-token (empfohlen; die Identität des Anrufers wird an Fabric weitergeleitet), und verweisen Sie dann aus einer minimalen Toolbox-YAML darauf.
# Step 1. Create the Fabric IQ connection
azd ai connection create my-fabric-conn \
--kind remote-tool \
--target https://api.fabric.microsoft.com/v1/mcp/fabricaihub/integrations/m365 \
--auth-type user-entra-token \
--audience https://analysis.windows.net/powerbi/api
remote-tool Verbindungen akzeptieren auch --auth-type oauth2. Den vollständigen Flagsatz finden Sie oben im MCP-Abschnitt.
# Step 2. Define the toolbox (my-toolbox.yaml)
description: Fabric IQ (semantic model)
tools:
- type: fabric_iq_preview
project_connection_id: my-fabric-conn
# Step 3. Create the toolbox
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Muster nach Fabric-Elementtyp finden Sie unter server_url.
Annotationssegmente werden in result.structuredContent.documents[] zurückgegeben. Jedes Dokument enthält title und url Felder, mit denen Sie Zitatdetails in Ihrer Anwendung generieren können.
Toolsuche
Verwenden Sie dieses Muster, um das intentbasierte Toolrouting zu aktivieren. Wenn toolbox_search_preview sie in einer Toolbox enthalten ist, wählt die Plattform die relevantesten Tools für jede Anforderung aus, anstatt alle Tools gleichzeitig dem Modell zur Verfügung zu stellen. Es ist keine zusätzliche Konfiguration erforderlich.
{
"description": "Toolbox with intent-based tool routing",
"tools": [
{
"type": "toolbox_search_preview"
}
]
}
tools = [
{"type": "toolbox_search_preview"}
]
Tool Search ist verbindungslos. Deklarieren Sie sie direkt unter tools:.
# my-toolbox.yaml
description: Toolbox with intent-based tool routing
tools:
- type: toolbox_search_preview
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Hinweis
toolbox_search_preview ist eine Konfigurationsdirektive, die die Toolsuche aktiviert. Sie wird nicht in tools/list Antworten angezeigt und zählt nicht zum Grenzwert für nicht benannte Tools pro Typ.
Wenn die Toolsuche aktiviert ist, fügt Foundry zwei Metatools zusammen mit Ihren Toolboxtools ein: tool_search und call_tool. Das call_tool Meta-Tool fungiert als Proxy, der es Agent-Frameworks ermöglicht, jedes erkannte Tool über einen einzigen deklarierten Einstiegspunkt anhand seines Namens aufzurufen. Dadurch werden Schemaüberprüfungsfehler vermieden, die auftreten, wenn ein Framework versucht, ein Tool aufzurufen, das nicht in der ursprünglichen tools/listDatei vorhanden war. Wenn Ihr Framework direkte Toolaufrufe ohne Schemavorüberprüfung unterstützt, können Sie auch ein ermitteltes Tool direkt nach der Suche aufrufen.tool_search
Wählen Sie im Foundry Toolkit für Visual Studio Code Toolsuche auf der Registerkarte Build a Custom Toolbox aus, wenn Sie eine Toolbox erstellen oder bearbeiten. Weitere Informationen finden Sie unter Aktivieren der Toolsuche in einer Toolbox.
Work IQ
Verwenden Sie dieses Muster, um dem Agent Zugriff auf den Microsoft 365 Arbeitskontext des Benutzers – E-Mail, Besprechungen, Dateien und Chats – über Work IQ zu gewähren. Stellen Sie eine Projektverbindung mit Ihrem Work IQ-Endpunkt bereit.
{
"description": "Work IQ for Microsoft 365 data access",
"tools": [
{
"type": "work_iq_preview",
"project_connection_id": "<CONNECTION_NAME>"
}
]
}
tools = [
{
"type": "work_iq_preview",
"project_connection_id": "<CONNECTION_NAME>",
}
]
Work IQ wird als A2A-Endpunkt bedient. Erstellen Sie eine remote-a2a-Verbindung zum Work IQ-Server mit oauth2, und verweisen Sie anschließend mit einem minimalen Toolbox-YAML darauf.
# Step 1. Create the Work IQ connection
azd ai connection create my-workiq-conn \
--kind remote-a2a \
--target https://agent365.svc.cloud.microsoft/agents/agents/workiq \
--auth-type oauth2 \
--authorization-url https://login.microsoftonline.com/common/oauth2/v2.0/authorize \
--token-url https://login.microsoftonline.com/common/oauth2/v2.0/token \
--client-id <oauth-client-id> \
--client-secret <oauth-client-secret> \
--scopes "<scope1> <scope2>"
# Step 2. Define the toolbox (my-toolbox.yaml)
description: Work IQ toolbox
tools:
- type: work_iq_preview
project_connection_id: my-workiq-conn
# Step 3. Create the toolbox
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Browserautomatisierung
{
"description": "Perform actions using a real web browser",
"tools": [
{
"type": "browser_automation_preview",
"name": "<OPTIONAL_TOOL_NAME>",
"description": "<Optional description for the model>",
"browser_automation_preview": {
"connection": {
"project_connection_id": "<BROWSER_AUTOMATION_PROJECT_CONNECTION_ID>"
}
}
}
]
}
from azure.ai.projects.models import (
BrowserAutomationPreviewTool,
BrowserAutomationToolParameters,
BrowserAutomationToolConnectionParameters,
)
tools = [
BrowserAutomationPreviewTool(
browser_automation_preview=BrowserAutomationToolParameters(
connection=BrowserAutomationToolConnectionParameters(
project_connection_id="<BROWSER_AUTOMATION_PROJECT_CONNECTION_ID>",
)
)
)
]
ProjectsAgentTool tool = new BrowserAutomationPreviewTool(
new BrowserAutomationToolOptions(
new BrowserAutomationToolConnectionParameters("<BROWSER_AUTOMATION_PROJECT_CONNECTION_ID>")
)
);
const tools = [
{
type: "browser_automation_preview",
name: "<OPTIONAL_TOOL_NAME>",
description: "<Optional description for the model>",
browser_automation_preview: {
connection: {
project_connection_id: "<BROWSER_AUTOMATION_PROJECT_CONNECTION_ID>"
}
}
},
];
# Step 1. Create the Playwright Workspace connection
azd ai connection create my-browser-conn \
--kind PlaywrightWorkspace \
--target wss://your-browser-endpoint.api.playwright.microsoft.com/playwrightworkspaces/browsers \
--auth-type api-key \
--key "<playwright-workspaces-access-token>"
--kind PlaywrightWorkspace erfordert exakte PascalCase-Schreibweise.
# Step 2. Define the toolbox (my-toolbox.yaml)
description: Browser Automation toolbox
tools:
- type: browser_automation_preview
project_connection_id: my-browser-conn
# Step 3. Create the toolbox
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml
Fehlerbehebung
| Symptom | Wahrscheinliche Ursache | Behebung |
|---|---|---|
tools/list gibt Nulltools für MCP- oder A2A-Tools zurück. |
Ungültige oder fehlende Verbindungsdaten für den Remote-MCP-Server oder des A2A-Agenten. Die Toolbox kann keine Toolmanifeste vom Remoteendpunkt ohne gültige Authentifizierung abrufen. | Überprüfen Sie, ob project_connection_id in Ihrem Foundry-Projekt vorhanden ist und ob die Anmeldeinformationen korrekt sind. Versuchen Sie, eine direkte Verbindung mit dem MCP-Server herzustellen, um das Authentifizierungssetup zu testen. Überprüfen Sie bei Verwendung der verwalteten Identität (PMI, Agent-Identität oder MI) die richtigen RBAC-Rollenzuweisungen für den Aufrufer auf der Zielressource. |
tools/list gibt Nulltools für OpenAPI-Tools zurück. |
Ungültige OpenAPI-Spezifikation. Die Toolbox erstellt das Toolmanifest aus der Spezifikation, was fehlschlägt, wenn die Spezifikation fehlerhaft ist. | Überprüfen Sie den OpenAPI-Spezifikationsinhalt. Überprüfen Sie, ob sie openAPI 3.0 oder 3.1 entspricht und gültige paths, operationId Werte und Parameterschemas enthält. Überprüfen Sie bei Verwendung der verwalteten Identitätsauthentifizierung auch RBAC-Rollenzuweisungen für den Zieldienst. |
tools/list gibt weniger Tools als erwartet zurück. |
Der allowed_tools Filter enthält falsche oder falsch geschriebene Toolnamen. Bei Toolnamen wird die Groß-/Kleinschreibung beachtet, und die Namen müssen der MCP-Spezifikation für Toolnamen entsprechen (keine Leerzeichen oder Sonderzeichen). |
Entfernen Sie allowed_tools vorübergehend und rufen Sie tools/list an, um die vollständige Toolliste abzurufen. Verwenden Sie die genauen Namen aus der Antwort, um Werte für allowed_tools. |
tools/list gibt null Werkzeuge (andere Tooltypen) zurück. |
Toolbox nicht vollständig bereitgestellt oder Werkzeugtyp wird in dieser Region nicht unterstützt. Für integrierte Tools (Websuche, KI-Suche, Codedolmetscher, Dateisuche) werden Toolmanifeste serverseitig erstellt und erfordern keine Authentifizierung – wenn sie leer zurückgeben, wird die Toolboxversion möglicherweise noch nicht bereitgestellt. | Warten Sie 10 Sekunden, und wiederholen Sie den Vorgang. |
400 Multiple tools without identifiers |
Zwei unbenannte Tooltypen in einer Toolbox | Behalten Sie höchstens ein unbenanntes Element bei; fügen Sie server_label zu allen MCP-Tools hinzu. |
CONSENT_REQUIRED (Code -32006) |
OAuth-Verbindung erfordert Die Zustimmung des Benutzers | Öffnen Sie die Zustimmungs-URL in einem Browser, schließen Sie den OAuth-Ablauf ab und wiederholen Sie dann den Vorgang. |
401 bei MCP-Anrufen |
Abgelaufenes Token oder falscher Gültigkeitsbereich | Verwenden Sie den Bereich https://ai.azure.com/.default , und aktualisieren Sie das Token. |
| Toolnamen, die nicht übereinstimmen | MCP-Toolnamen werden mit dem Präfix versehen. server_label |
Format {server_label}.{tool_name} verwenden (z. B myserver.get_info. ). |
500 unter send_ping() |
Der TOOLBOX-MCP-Server implementiert die MCP-Methode ping nicht. |
Rufen Sie nicht auf send_ping(). Wenn Ihr Framework sie automatisch aufruft (z. B. Microsoft Agent Frameworks MCPStreamableHTTPTool._ensure_connected()), deaktivieren Sie die Ping-Überprüfung, oder setzen Sie die Methode mit einem no-op außer Kraft. |
500 unter prompts/list |
Der Foundry MCP-Server implementiert prompts/listnicht . |
Übergeben Sie load_prompts=False (oder ein Äquivalent) an den Konstruktor Ihres MCP-Clients. |
500 mit Nicht-Streaming-tools/call |
Der Nicht-Streamingmodus (stream=False) wird für MCP-Endpunkte der Toolbox nicht unterstützt. |
Verwenden Sie immer stream=True beim Verwenden von Toolbox MCP Tools. |
500 unter tools/list |
Vorübergehender Serverfehler | Wiederholen Sie den Vorgang nach ein paar Sekunden. |
| Umgebungsvariablen, die zur Laufzeit überschrieben werden | Die Plattform behält sich alle mit FOUNDRY_ vorangestellten Umgebungsvariablen vor und überschreibt möglicherweise stillschweigend benutzerdefinierte Werte. |
Benennen Sie benutzerdefinierte Umgebungsvariablen um, um das FOUNDRY_ Präfix zu vermeiden (z. B. anstelle TOOLBOX_MCP_ENDPOINT von FOUNDRY_TOOLBOX_ENDPOINT). |
Schutzmechanismen konfigurieren
Wenden Sie eine benannte Guardrail-Richtlinie auf eine Toolboxversion an, um die verantwortungsvolle KI-Inhaltsfilterung auf Tooleingaben und -ausgaben zu erzwingen. Die Leitlinie wird auf der Toolboxebene ausgeführt, unabhängig von einem Inhaltsfilter auf Modellebene.
Auf eine Schutzschiene wird mit dem Richtliniennamen verwiesen, den Sie im Foundry-Portal unter Guardrails konfigurieren. Legen Sie policies.rai_config.rai_policy_name beim Erstellen einer Toolboxversion auf den Namen der Richtlinie fest.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import WebSearchTool
endpoint = "https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>"
project = AIProjectClient(endpoint=endpoint, credential=DefaultAzureCredential())
toolbox_version = project.beta.toolboxes.create_version(
name="my-toolbox",
description="Toolbox with guardrail",
tools=[WebSearchTool()],
policies={
"rai_config": {
"rai_policy_name": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>"
}
},
)
print(f"Created version: {toolbox_version.version}")
POST {endpoint}/toolboxes/{toolbox_name}/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{
"description": "Toolbox with guardrail",
"tools": [{ "type": "web_search" }],
"policies": {
"rai_config": {
"rai_policy_name": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>"
}
}
}
#pragma warning disable AAIP001
using Azure.AI.Projects;
using Azure.AI.Projects.Agents;
using Azure.Identity;
var projectEndpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT");
DefaultAzureCredential credential = new();
AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: credential);
AgentToolboxes toolboxClient = projectClient.AgentAdministrationClient.GetAgentToolboxes();
var toolboxVersion = toolboxClient.CreateToolboxVersion(
toolboxName: "my-toolbox",
description: "Toolbox with guardrail",
tools: [new WebSearchTool()],
policies: new ToolboxPolicies
{
RaiConfig = new RaiConfig { RaiPolicyName = "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>" }
});
Console.WriteLine($"Created version: {toolboxVersion.Version}");
const toolboxVersion = await project.beta.toolboxes.createVersion(
"my-toolbox",
[{ type: "web_search" }],
{
description: "Toolbox with guardrail",
policies: {
rai_config: {
rai_policy_name: "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>",
},
},
},
);
console.log(`Created version: ${toolboxVersion.version}`);
name: my-toolbox
description: Toolbox with guardrail
policies:
rai_config:
rai_policy_name: /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>
tools:
- type: web_search
Die Guardrail-Konfiguration ist in der VS Code-Erweiterung noch nicht verfügbar. Verwenden Sie die REST-API, das SDK oder azd, um Leitplanken zu konfigurieren.
Kompetenzen mit einer Toolbox verknüpfen
Fügen Sie Fähigkeiten an eine Toolboxversion an, um sie über den MCP-Endpunkt der Toolbox für Agents verfügbar zu machen. Jede Qualifikationsreferenz gibt den Qualifikationsnamen und eine optionale Version an. Lassen Sie version weg, um den default_version des Skills zu verwenden; heften Sie eine version-Zeichenfolge an, um eine unveränderliche Momentaufnahme zu verwenden.
Eine Toolboxversion kann Tools, Fähigkeiten oder beides enthalten. In den folgenden Beispielen wird eine Toolboxversion erstellt, die einen einzigen Qualifikationsverweis enthält. Wenn Sie einer Toolbox, die bereits Über Tools verfügt, Fähigkeiten hinzufügen möchten, fügen Sie dasselbe tools hinzu, das Sie in Schritt 1 zusammen mit dem skills Array verwendet haben.
Wichtig
Fähigkeiten, die an eine Toolbox angefügt sind, müssen im gleichen Foundry-Projekt vorhanden sein. Projektübergreifende Verweise werden nicht unterstützt.
Wenn ein Agent oder MCP-Client eine Verbindung mit dem Toolboxendpunkt herstellt, werden Fähigkeiten als MCP-Ressourcen verfügbar gemacht. Das MCP-Client- oder Agentframework muss das MCP Resources-Protokoll unterstützen, um Fähigkeiten zum automatischen Ermitteln und Laden zu unterstützen. Um zu überprüfen, ob Fähigkeiten auffindbar sind, rufen Sie resources/list den MCP-Endpunkt der Toolbox auf, und bestätigen Sie, dass Ihre Qualifikationsnamen in der Antwort angezeigt werden.
POST {endpoint}/toolboxes/{toolbox_name}/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
Foundry-Features: Skills=V1Preview
{
"description": "Toolbox with a skill reference",
"tools": [],
"skills": [
{
"type": "skill_reference",
"name": "greeting"
}
]
}
So heften Sie eine bestimmte Version an:
{
"skills": [
{
"type": "skill_reference",
"name": "greeting",
"version": "v1"
}
]
}
from azure.ai.projects.models import ToolboxSkillReference
toolbox_version = project.beta.toolboxes.create_version(
name="my-toolbox",
description="Toolbox with a skill reference",
tools=[],
skills=[
ToolboxSkillReference(name="greeting"), # use default version
# ToolboxSkillReference(name="greeting", version="v1"), # pin to v1
],
)
print(f"Created toolbox version: {toolbox_version.id}")
#pragma warning disable AAIP001
// Reuse the AgentToolboxes client (toolboxClient) from Step 1.
ToolboxSkillReference skillRef = new("greeting");
// To pin a version: new ToolboxSkillReference("greeting") { Version = "v1" }
ToolboxVersion toolboxVersion = toolboxClient.CreateToolboxVersion(
name: "my-toolbox",
tools: [],
skills: [skillRef],
description: "Toolbox with a skill reference"
);
Console.WriteLine($"Created toolbox version: {toolboxVersion.Id}");
const toolboxVersion = await project.beta.toolboxes.createVersion(
"my-toolbox",
[],
{
description: "Toolbox with a skill reference",
skills: [
{ type: "skill_reference", name: "greeting" },
// { type: "skill_reference", name: "greeting", version: "v1" }, // pin to v1
],
},
);
console.log(`Created toolbox version: ${toolboxVersion.id}`);
Die Azure Developer CLI unterstützt Skillverweise an zwei Stellen: deklarativ als skills:-Block auf oberster Ebene in der azd ai toolbox create --from-file-YAML-Datei und imperativ mit den azd ai toolbox skill add/list/remove-Verben. Jeder Verweis erfordert ein name (erforderlich) und ein optionales version (Zeichenfolge). Lassen Sie version aus, um der default_version des Skills zu folgen. Geben Sie eine Versionszeichenfolge an, um die Toolbox auf einen unveränderlichen Snapshot festzulegen.
Deklarieren von Fähigkeiten beim Erstellen der Toolbox
# my-toolbox.yaml
description: Toolbox with skill references
connections:
- name: my-gh-conn
skills:
- name: greeting # follows the skill's default version
- name: review-checklist
version: "2" # pin to skill version 2
azd ai toolbox create my-toolbox --from-file ./my-toolbox.yaml --no-prompt
Hinzufügen, Auflisten und Entfernen von Fähigkeiten in einer vorhandenen Toolbox
# Add a skill (follows default version)
azd ai toolbox skill add my-toolbox greeting
# Add a skill pinned to a specific version
azd ai toolbox skill add my-toolbox review-checklist@2
# Add multiple skills from a file (same shape as the create YAML's skills block)
azd ai toolbox skill add my-toolbox --from-file ./skills.yaml
# List skill references on the current default version
azd ai toolbox skill list my-toolbox --output table
# Remove a skill (--force skips the confirmation prompt; multiple names allowed)
azd ai toolbox skill remove my-toolbox greeting --force
skill list zeigt nur die Standardversion an. Angeheftete Skills zeigen ihre Version, nicht angeheftete Skills hingegen zeigen (default). Um Skills in einer ausstehenden Version zu überprüfen, führen Sie azd ai toolbox show <toolbox> --version <n> --output json aus, und lesen Sie das Array skills.
Wichtig
skill add und skill remove erstellen jeweils eine neue Toolboxversion, die alle zuvor angefügten Verbindungen und Skills mit der angeforderten Änderung übernimmt.
Sie machen die neue Version nicht zur Standardversion, sodass Änderungen für MCP-Clients erst sichtbar sind, wenn Sie azd ai toolbox publish <toolbox> <version> ausführen. Um die angeheftete Version einer bereits angefügten Fähigkeit zu ändern, z. B. ein Upgrade greeting von v1 auf v2, führen Sie drei Befehle in der reihenfolge aus: skill remove, publish die neue Version, dann skill add <name>@<new-version> (skill add blockiert Duplikate, wenn sie mit der aktuellen Standardversion überprüft werden).
Qualifikationsnamen müssen übereinstimmen ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$ (Kleinbuchstaben, Ziffern und Bindestriche; max. 64 Zeichen; kein führendes oder nachfolgendes Bindestrich). Eine nachfolgende @ in <name>@<version> (eine leere Version) wird abgelehnt.
Qualifikationsverweise können derzeit nicht über die VS Code-Erweiterung konfiguriert werden. Verwenden Sie die REST-API oder das SDK, um Fähigkeiten zu konfigurieren.
Überprüfen der Fähigkeitserkennung
Überprüfen Sie nach dem Anfügen von Fähigkeiten an eine Toolboxversion, ob sie über den MCP-Endpunkt der Toolbox mithilfe des MCP Python SDK auffindbar sind:
import asyncio
from azure.identity import DefaultAzureCredential
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def list_skills():
credential = DefaultAzureCredential()
token = credential.get_token("https://ai.azure.com/.default").token
toolbox_url = "{endpoint}/toolboxes/my-toolbox/mcp?api-version=v1"
headers = {
"Authorization": f"Bearer {token}",
}
async with streamablehttp_client(toolbox_url, headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
resources = await session.list_resources()
for resource in resources.resources:
print(f"Skill: {resource.uri} - {resource.name}")
asyncio.run(list_skills())
Fähigkeiten werden als MCP-Ressourcen mit URIs im Format skill://{name}angezeigt.
Fähigkeiten aus einem Agent nutzen (Microsoft Agent Framework, .NET)
Verwenden Sie in .NET AgentSkillsProviderBuilder().UseMcpSkills(mcpClient) aus dem Microsoft Agent Framework SDK, um MCP-basierte Fähigkeiten von einem Toolboxendpunkt zu ermitteln und sie als AIContextProviders auf dem Agent einzubringen. Der Agent lädt dann zur Laufzeit die Anweisungen der einzelnen Skills, wenn das Modell entscheidet, dass sie relevant sind. Im folgenden Program.cs wird der Agent mit der Hostebene „Antworten“ (AddFoundryResponses und MapFoundryResponses) gehostet.
using System.Net.Http.Headers;
using Azure.AI.Projects;
using Azure.Core;
using Azure.Identity;
using DotNetEnv;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;
// Load .env file if present (for local development).
Env.TraversePath().Load();
string projectEndpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")
?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT environment variable is not set.");
string deployment = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME")
?? throw new InvalidOperationException("AZURE_AI_MODEL_DEPLOYMENT_NAME environment variable is not set.");
string toolboxName = Environment.GetEnvironmentVariable("TOOLBOX_NAME")
?? throw new InvalidOperationException("TOOLBOX_NAME environment variable is not set.");
// Build the Foundry Toolbox MCP URL from the project endpoint and toolbox name.
string toolboxMcpServerUrl = $"{projectEndpoint.TrimEnd('/')}/toolboxes/{toolboxName}/mcp?api-version=v1";
TokenCredential credential = new DefaultAzureCredential();
// HttpClient that attaches a fresh Foundry bearer token to every request.
// CheckCertificateRevocationList = true satisfies CA5399.
using var httpClient = new HttpClient(
new BearerTokenHandler(credential, "https://ai.azure.com/.default")
{
CheckCertificateRevocationList = true,
});
Console.WriteLine($"Connecting to Foundry Toolbox '{toolboxName}' MCP server...");
// Connect to the Foundry Toolbox MCP endpoint.
await using var mcpClient = await McpClient.CreateAsync(
new HttpClientTransport(
new HttpClientTransportOptions
{
Endpoint = new Uri(toolboxMcpServerUrl),
Name = toolboxName,
TransportMode = HttpTransportMode.StreamableHttp,
},
httpClient));
// AgentSkillsProvider implements progressive disclosure over the MCP-discovered skills:
// names and descriptions are advertised in the system prompt, and the full skill body
// (and any supplementary resources) is loaded on demand when the model decides it is
// relevant.
var skillsProvider = new AgentSkillsProviderBuilder()
.UseMcpSkills(mcpClient)
.Build();
AIAgent agent = new AIProjectClient(new Uri(projectEndpoint), credential)
.AsAIAgent(new ChatClientAgentOptions
{
Name = "foundry-toolbox-mcp-skills",
Description = "Agent that discovers MCP-based skills from a Foundry Toolbox and exposes them via AgentSkillsProvider.",
ChatOptions = new ChatOptions
{
ModelId = deployment,
Instructions = "You are a helpful assistant.",
},
AIContextProviders = [skillsProvider],
});
var builder = AgentHost.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
builder.RegisterProtocol("responses", endpoints => endpoints.MapFoundryResponses());
var app = builder.Build();
app.Run();
// HttpClientHandler that attaches a fresh Foundry bearer token to every outgoing request.
internal sealed class BearerTokenHandler(TokenCredential credential, string scope) : HttpClientHandler
{
private readonly TokenRequestContext _tokenContext = new([scope]);
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
AccessToken token = await credential.GetTokenAsync(this._tokenContext, cancellationToken).ConfigureAwait(false);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token.Token);
return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
}
}
Das vollständige Beispiel, einschließlich Projektdateien und Bereitstellungsschritte, finden Sie im Beispiel "Skills in Toolbox".
Unterstützung für virtuelle Netzwerke
Wenn Ihr Foundry-Projekt Netzwerkisolation (private Verknüpfung) verwendet, werden nicht alle Toolboxtooltypen unterstützt. Die folgende Tabelle zeigt den Supportstatus für jeden Tooltyp und die Art und Weise, wie Datenverkehr in einer netzwerkisolten Umgebung fließt.
| Tooltyp | VNet-Unterstützung | Verkehrsfluss |
|---|---|---|
| MCP | ✅ Unterstützt | Über Ihr VNet-Subnetz |
| Azure KI-Suche | ✅ Unterstützt | Über den privaten Endpunkt |
| Codedolmetscher | ✅ Unterstützt | Microsoft Backbone-Netzwerk |
| Websuche | ✅ Unterstützt | Öffentlicher Endpunkt |
| OpenAPI | ✅ Unterstützt | Hängt von der Konfiguration des Ziel-API-Netzwerks ab |
| Dateisuche | ❌ Nicht unterstützt | Noch nicht verfügbar |
| Agent-zu-Agent (A2A) | ✅ Unterstützt | Über den privaten Endpunkt |
| Fabric IQ | ❌ Nicht unterstützt | Noch nicht verfügbar |
| Work IQ | ❌ Nicht unterstützt | Noch nicht verfügbar |
| Browserautomatisierung | ❌ Nicht unterstützt | Noch nicht verfügbar |
Anweisungen zur vollständigen Netzwerkisolation, einschließlich der VNet-Einfügung für den Agentclient, die DNS-Konfiguration und die Anforderungen für private Endpunkte, finden Sie unter Configure-Netzwerkisolation für Microsoft Foundry.
Regions- und Modellkompatibilität
Die Verfügbarkeit der Toolbox hängt von zwei Faktoren ab, die über die Projektregion hinausgehen:
- Region: Einige Tooltypen sind in jeder Region, die den Agentdienst unterstützt, nicht verfügbar. Beispielsweise unterstützt eine Region, die den Toolboxendpunkt unterstützt, möglicherweise nicht alle integrierten Tooltypen.
Stellen Sie vor der Bereitstellung einer Toolbox sicher, dass Ihre Zielregion die tooltypen unterstützt, die Sie verwenden möchten. Die vollständigen Kompatibilitätstabellen finden Sie unter Toolunterstützung nach Region und Modell.
Verwandte Inhalte
- Verbinden von Agents mit Modellkontextprotokollservern
- Hinzufügen der MCP-Serverauthentifizierung
- Websuchtool
- Azure KI-Suche Tool
- Überblick über Guardrails
- Verwalten von Fähigkeiten
- Bereitstellen eines gehosteten Agents
- Hinzufügen einer Verbindung zu Ihrem Projekt
- Netzwerkisolation für Microsoft Foundry konfigurieren