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.
Wichtig
In diesem Artikel markierte Elemente (Vorschau) befinden sich derzeit in der öffentlichen Vorschau. Diese Vorschau wird ohne Vereinbarung auf Serviceebene bereitgestellt und wird für Produktionsworkloads nicht empfohlen. Bestimmte Features werden möglicherweise nicht unterstützt oder weisen eingeschränkte Funktionen auf. Weitere Informationen finden Sie unter Supplementale Nutzungsbedingungen für Microsoft Azure Previews.
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 behandelt die Anmeldeinformationen-Integration, die Token-Aktualisierung und die Durchsetzung von Unternehmensrichtlinien zur Laufzeit.
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.
- Verwalten von Toolboxversionen und eine Version auf Standard setzen.
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 (deploy) | Foundry Toolkit |
|---|---|---|---|---|---|---|
| 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 |
Voraussetzungen
- Ein aktives Microsoft Foundry-Projekt.
-
RBAC: Gewähren Sie die Rolle Azure KI-Benutzer für das Foundry-Projekt an 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-basierte MCP- oder 1P-OBO-Flüsse) proxiziert 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.
- Visual Studio Code (VS Code).
- Installieren Sie das Microsoft Foundry Toolkit für Visual Studio Code (ehemals AI Toolkit für VS Code) aus dem Visual Studio Code Marketplace. Die Toolbox-Unterstützung im Foundry Toolkit befindet sich derzeit in der Vorschau.
-
Python SDK:
pip install azure-ai-projects azure-identity -
.NET SDK:
dotnet add package Azure.AI.Projects --prereleaseunddotnet add package Azure.Identity -
JavaScript SDK:
npm install @azure/ai-projects @azure/identity -
azd (deploy): Installieren Sie die Azure Developer CLI und die Agent-Erweiterung:
azd extension install azure.ai.agents
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.
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, 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.beta.toolboxes.create_toolbox_version(
toolbox_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",
),
],
)
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
)
));
ToolboxVersion toolboxVersion = await toolboxClient.CreateToolboxVersionAsync(
toolboxName: "my-toolbox",
tools: [webTool, mcpTool],
description: "Toolbox with web search and an MCP server"
);
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 and an MCP server",
"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"
}
]
}
Hinweis
Verwenden Sie den Tokenbereich https://ai.azure.com/.default beim Abrufen des Bearertokens.
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.beta.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",
},
],
{
description: "Toolbox with web search and an MCP server",
},
);
console.log(`Created toolbox: ${toolboxVersion.name}, version: ${toolboxVersion.version}`);
Verwenden Sie foundry Toolkit in Visual Studio Code, 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, fügen Sie die gewünschten Tools hinzu, und wählen Sie dann "Veröffentlichen" aus.
Beim Veröffentlichen einer neuen Toolbox wird die erste Version erstellt. Diese Version wird automatisch zur Standardversion.
Mithilfe von azd" deklarieren Sie Toolboxressourcen in einer agent.yaml Datei, anstatt das SDK aufzurufen. Definieren Sie die Tools im resources Abschnitt und stellen Sie sie mithilfe von azd ai agent init bereit.
agent.yaml Beispiele für jeden Tooltyp finden Sie unter "Konfigurieren von Tools". Den vollständigen Bereitstellungsworkflow finden Sie unter "Bereitstellen mit azd".
Wichtig
Das -m Flag (oder --manifest) ist erforderlich für azd ai agent init.
Es teilt dem Befehl mit, wo die Agentdefinition und die Quelldateien zu finden sind.
-m kann auf eine der folgenden Punkte verweisen:
-
Eine bestimmte
agent.yamlDatei – init kopiert alle Dateien aus demselben Verzeichnis wie das Manifest. -
Ein Ordner, der
agent.yamlenthält — danach kopiert init alle Dateien aus diesem Ordner.
Alle Dateien im Manifestverzeichnis (main.py, Dockerfile, requirements.txt, setup.py usw.) werden in die Projektstruktur unter src/<agent-name>/ kopiert.
# 1. Create a manifest directory with your agent.yaml + source files
mkdir my-agent/manifest
# Copy agent.yaml, main.py, Dockerfile, requirements.txt into my-agent/manifest/
# 2. Initialize the azd project (note: -m is REQUIRED)
cd my-agent
$PROJECT_ID = "/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.CognitiveServices/accounts/<account>/projects/<project>"
azd ai agent init -m https://github.com/microsoft/hosted-agents-vnext-private-preview/main/samples/python/toolbox/azd/agent.yaml --project-id $PROJECT_ID -e my-env
# Or equivalently: azd ai agent init -m manifest/ --project-id $PROJECT_ID -e my-env
# ↑ If your agent.yaml declares {{ param }} secrets (e.g., github_pat), you will be prompted to enter
# them interactively HERE — before init completes. This is the only safe time to supply credentials.
# NOTE: Do NOT use --no-prompt here — it skips the prompt and leaves {{ param }} credentials empty (see Troubleshooting: Credentials Empty with --no-prompt)
# 3. CRITICAL post-init fixes (see "Post-Init Checklist" below)
azd env set enableHostedAgentVNext "true" -e my-env
azd env set AZURE_AI_MODEL_DEPLOYMENT_NAME "gpt-4o" -e my-env # must match the deployment name in azure.yaml
# 4. Provision infrastructure (creates connections via Bicep)
azd provision -e my-env
# 5. Deploy agent (creates toolboxes, container image, agent version)
azd deploy -e my-env
# 6. Invoke the agent (MUST run from the scaffolded project directory)
azd ai agent invoke --new-session "tell me about the latest news in Microsoft Foundry" --timeout 120
Agent.yaml:
kind: hosted
name: toolbox-azd-test
description: LangGraph agent wired for toolbox MCP.
metadata:
tags:
- AI Agent Hosting
- LangGraph
# template: contains the ContainerAgent definition (kind: hosted).
# These fields are used to generate src/<agent>/agent.yaml during init.
template:
kind: hosted
protocols:
- protocol: responses
version: 1.0.0
environment_variables:
# FOUNDRY_PROJECT_ENDPOINT and FOUNDRY_AGENT_TOOLBOX_* are injected
# automatically by the platform at runtime — do NOT declare them here.
- name: AZURE_OPENAI_ENDPOINT
value: ${AZURE_OPENAI_ENDPOINT}
- name: AZURE_AI_MODEL_DEPLOYMENT_NAME
value: ${AZURE_AI_MODEL_DEPLOYMENT_NAME=gpt-4o}
- name: TOOLBOX_NAME
value: ${TOOLBOX_NAME=agent-tools}
# parameters: secret values prompted at init time (or set via azd env).
# azd uppercases the param name to find the env var: github_pat → GITHUB_PAT.
parameters:
github_pat:
secret: true
description: GitHub Personal Access Token (classic ghp_... or fine-grained github_pat_...)
# resources: connections and toolboxes scaffolded into azure.yaml by azd ai agent init.
resources:
- kind: connection
name: github-mcp-conn
target: https://api.githubcopilot.com/mcp
category: remoteTool
credentials:
type: CustomKeys
keys:
Authorization: "Bearer {{ github_pat }}"
- kind: toolbox
name: agent-tools
tools:
- type: web_search
- type: mcp
server_label: github
server_url: https://api.githubcopilot.com/mcp
project_connection_id: github-mcp-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. |
Wichtig
Jede Anforderung an den Toolbox-MCP-Endpunkt muss den Header Foundry-Features: Toolboxes=V1Previewenthalten. Aufrufe, die diesen Header weglassen, schlagen fehl. Fügen Sie sie in alle HTTP-Clients, MCP-Transporte und SDK-Wrapper ein, die den Toolboxendpunkt aufrufen.
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 im Foundry Toolkit für Visual Studio Code den Consumerendpunkt 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}",
"Foundry-Features": "Toolboxes=V1Preview",
}
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
Foundry-Features: Toolboxes=V1Preview
{"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
Foundry-Features: Toolboxes=V1Preview
{"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
Foundry-Features: Toolboxes=V1Preview
{"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
Foundry-Features: Toolboxes=V1Preview
{"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}`,
"Foundry-Features": "Toolboxes=V1Preview",
},
},
},
);
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, bevor Sie eine neue Toolboxversion veröffentlichen, in diesem Schritt die Python- oder REST-API-Tab.
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). - Bei MCP-Tools werden Namen mit dem Präfix
server_label, z. B.myserver.some_tool, vorangestellt. Bei allen anderen Tooltypen ist der Name dernameFeldwert oder der Standardtoolname. - MCP-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. - Für die KI-Suche durchsuchen Sie
result.structuredContent.documents[]Abschnittsmetadaten (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). -
"ServerError"Achten Sie bei Textinhalten darauf, dass das Tool ausgeführt wurde, aber auf einen internen Fehler gestoßen ist.
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"}]}} |
| MCP | {"query": "what is agent service"} |
Schritt 4: Integrieren der Toolbox in Ihren Agent
LangGraph
.env Datei:
FOUNDRY_PROJECT_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>
FOUNDRY_AGENT_TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1
TOOLBOX_NAME=agent-tools
FOUNDRY_AGENT_TOOLBOX_FEATURES=Toolboxes=V1Preview
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()
Sehen Sie sich das vollständige Beispiel für die vollständige Implementierung an.
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>
FOUNDRY_AGENT_TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1
FOUNDRY_AGENT_TOOLBOX_FEATURES=Toolboxes=V1Preview
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),
headers={"Foundry-Features": "Toolboxes=V1Preview"},
timeout=120.0,
)
# Toolbox MCP endpoint (platform-injected at runtime via FOUNDRY_AGENT_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>
FOUNDRY_AGENT_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"],
)
Sehen Sie sich das vollständige Beispiel für die vollständige Implementierung an.
Microsoft Agent Framework
Verwenden Sie ResponsesServer das Agent Framework SDK mit einer benutzerdefinierten ToolboxMcpClient Api zum Ermitteln und Aufrufen von Toolboxtools über den MCP-Endpunkt.
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 Toolanrufschleife 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 das Foundry Toolkit, um ein Gerüst für ein gehostetes Agent-Beispiel zu erstellen, das bereits mit Ihrer Toolbox verkabelt 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üst-Codevorlage 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 umfasst den Einstiegspunkt des gehosteten Agents, Bereitstellungsdateien und eine README.md mit den genauen Setup-, Ausführungs- und Bereitstellungsschritten. Der Gerüst-Agent verarbeitet die Foundry-Features: Toolboxes=V1Preview Kopfzeile für Sie.
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 mustern Python oder .NET in diesem Abschnitt.
Bereitstellen mit azd
Verwenden Sie die Azure Developer CLI (azd), um Toolboxressourcen direkt in einer datei agent.yaml zu deklarieren und Ihren Agent mit einem einzigen Befehl bereitzustellen. Mit diesem Ansatz müssen Sie die Toolbox nicht separat über DAS SDK oder REST erstellen.
azd stellt die Toolbox, Verbindungen und Modellbereitstellung zusammen.
Wichtig
Das -m Flag (oder --manifest) ist erforderlich für azd ai agent init. Es teilt dem Befehl mit, wo die Agentdefinition und die Quelldateien zu finden sind.
-m kann entweder auf eine bestimmte agent.yaml Datei oder auf einen Ordner verweisen, der einen enthält. Alle Dateien im Manifestverzeichnis (main.py, Dockerfile, requirements.txt, usw.) werden unverändert in das Gerüstprojekt unter src/<agent-name>/ kopiert.
Ordnerstruktur:
my-agent/
├── agent.yaml # Agent, toolbox, and connection declarations
├── main.py # LangGraph agent
├── requirements.txt # All dependencies (Azure SDK + PyPI packages)
├── Dockerfile # Container build
agent.yaml (Beispiel für Websuche + GitHub MCP):
name: my-toolbox-agent
description: LangGraph agent with Azure AI Foundry toolbox MCP.
metadata:
tags:
- AI Agent Hosting
- LangGraph
template:
name: my-toolbox-agent
kind: hosted
protocols:
- protocol: responses
version: 1.0.0
environment_variables:
# FOUNDRY_PROJECT_ENDPOINT and FOUNDRY_AGENT_TOOLBOX_* are injected
# automatically by the platform at runtime — do NOT declare them here.
- name: AZURE_AI_MODEL_DEPLOYMENT_NAME
value: ${AZURE_AI_MODEL_DEPLOYMENT_NAME=gpt-4o}
- name: TOOLBOX_NAME
value: ${TOOLBOX_NAME=agent-tools}
parameters:
github_pat:
secret: true
description: GitHub Personal Access Token for MCP connection
resources:
- kind: connection
name: github-mcp-conn
target: https://api.githubcopilot.com/mcp
category: RemoteTool
authType: CustomKeys
credentials:
keys:
Authorization: "Bearer {{ github_pat }}"
- kind: toolbox
name: agent-tools
description: Web search and GitHub MCP tools
tools:
- type: web_search
- type: mcp
server_label: github
server_url: https://api.githubcopilot.com/mcp
project_connection_id: github-mcp-conn
Hinweis
Wenn Sie mit Toolbox-Ressourcen in agent.yaml bereitstellen, injiziert die Plattform FOUNDRY_AGENT_TOOLBOX_ENDPOINT (Basis-URL) und TOOLBOX_{toolbox_name}_MCP_ENDPOINT (vollständiger Endpunkt pro Toolbox) als Umgebungsvariablen. Für die Toolbox mit dem Namen agent-toolswird die Variable pro Toolbox zu TOOLBOX_AGENT_TOOLS_MCP_ENDPOINT. Die main.py Variable pro Toolbox liest oder erstellt die URL aus FOUNDRY_AGENT_TOOLBOX_ENDPOINT und TOOLBOX_NAME zur Laufzeit.
main.py folgt dem zuvor gezeigten LangGraph-Muster. Durch die Verwendung von azd werden FOUNDRY_AGENT_TOOLBOX_ENDPOINT und TOOLBOX_{toolbox_name}_MCP_ENDPOINT automatisch injiziert – es ist keine zusätzliche Konfiguration von Endpunkten im Code erforderlich.
Bereitstellen:
# 1. Place agent.yaml and source files in a manifest directory
mkdir my-agent/manifest
# Copy agent.yaml, main.py, Dockerfile, requirements.txt into my-agent/manifest/
# 2. Initialize the azd project (-m is required)
cd my-agent
PROJECT_ID="/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.CognitiveServices/accounts/<account>/projects/<project>"
azd ai agent init -m manifest/ --project-id $PROJECT_ID -e my-env
# If agent.yaml declares {{ param }} secrets (for example, github_pat), you are prompted
# to enter them interactively here. Do NOT use --no-prompt — it leaves credentials empty.
# 3. Set required environment variables
azd env set enableHostedAgentVNext "true" -e my-env
azd env set AZURE_AI_MODEL_DEPLOYMENT_NAME "gpt-4o" -e my-env
# 4. Provision infrastructure (creates connections via Bicep)
azd provision -e my-env
# 5. Deploy agent (creates toolboxes, container image, agent version)
azd deploy -e my-env
# 6. Invoke the agent
azd ai agent invoke --new-session "Hello, what tools do you have?" --timeout 120
Anforderungen an die Werkzeugfreigabe behandeln
Die Toolbox gibt ein _meta.tool_configuration Objekt für jeden Tooleintrag zurück, der von tools/list. Wenn ein Tool auf require_approval gesetzt ist, muss die Agentenausführungszeit dem Benutzer die ausstehende Aktion vorlegen und vor dem Aufrufen des Tools auf eine Bestätigung warten. Der MCP-Endpunkt blockiert nicht – die Erzwingung liegt vollständig in der Verantwortung der Laufzeitumgebung des Agenten.
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 von Genehmigungssteuerung (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 Agentenlaufzeit ist für das Gating des Anrufs verantwortlich.
Konfigurieren require_approval auf einem 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.beta.toolboxes.create_toolbox_version(
toolbox_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 des Foundry Toolkits 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 (Liste, Abrufen, Heraufstufen, Löschen) über das Python SDK, .NET SDK, JavaScript SDK und REST-API verwalten. Die azd CLI unterstützt nur das Erstellen von Toolboxversionen während der Bereitstellung.
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 führt nicht automatisch zu einer Freigabe – Sie entscheiden, wann default_version aktualisiert werden soll. Mit diesem Prozess können Sie Änderungen stufen, eine neue Version unabhängig testen und für die Produktion in Ihrem eigenen Zeitplan bewerben.
| 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. |
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.beta.toolboxes.create_toolbox_version(
toolbox_name="my-toolbox",
description="Updated tools v2",
tools=[...],
)
print(f"Created version: {toolbox_version.version}")
ToolboxVersion toolboxVersion = await toolboxClient.CreateToolboxVersionAsync(
toolboxName: "my-toolbox",
tools: [tool],
description: "Updated tools v2"
);
Console.WriteLine($"Created version: {toolboxVersion.Version}");
POST {project_endpoint}/toolboxes/my-toolbox/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{
"description": "Updated tools v2",
"tools": [...]
}
const toolboxVersion = await project.beta.toolboxes.createVersion(
"my-toolbox",
[/* 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 des Foundry Toolkits in diesem Artikel konzentriert sich auf das Erstellen einer Toolbox und das Erstellen eines Gerüsts für einen gehosteten Agent, der ihn nutzt.
Dieser Vorgang wird mit azd 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.beta.toolboxes.list_toolbox_versions(toolbox_name="my-toolbox"))
for v in versions:
print(f"{v.version} — created {v.created_at}")
List<ToolboxVersion> versions = await toolboxClient
.GetToolboxVersionsAsync("my-toolbox")
.ToListAsync();
Console.WriteLine($"Found {versions.Count} toolbox version(s).");
foreach (ToolboxVersion v in versions)
{
Console.WriteLine($" - {v.Name} ({v.Version})");
}
GET {project_endpoint}/toolboxes/my-toolbox/versions?api-version=v1
Authorization: Bearer {token}
const versions = project.beta.toolboxes.listVersions("my-toolbox");
for await (const v of versions) {
console.log(`${v.version} — created ${v.createdAt}`);
}
Verwenden Sie die Registerkarte Python, .NET, JavaScript oder REST-API, um Toolboxversionen aufzulisten.
Dieser Vorgang wird mit azd nicht unterstützt. Verwenden Sie zum Auflisten von Toolboxversionen die Registerkarte Python, .NET, REST-API oder JavaScript.
Eine bestimmte Version abrufen
# Get a specific toolbox version
version_obj = project.beta.toolboxes.get_toolbox_version(
toolbox_name="my-toolbox",
version="<version_id>",
)
ToolboxVersion versionObj = await toolboxClient.GetToolboxVersionAsync(
"my-toolbox",
"<version_id>"
);
Console.WriteLine($"Retrieved toolbox: {versionObj.Name} ({versionObj.Id})");
GET {project_endpoint}/toolboxes/my-toolbox/versions/{version}?api-version=v1
Authorization: Bearer {token}
const versionObj = await project.beta.toolboxes.getVersion(
"my-toolbox",
"<version_id>",
);
console.log(`Retrieved version: ${versionObj.version}`);
Verwenden Sie die Registerkarte Python, .NET, JavaScript oder REST-API, um eine bestimmte Toolboxversion abzurufen.
Dieser Vorgang wird mit azd nicht unterstützt. Um eine bestimmte Toolboxversion abzurufen, verwenden Sie die Registerkarte Python, .NET, REST-API oder JavaScript.
Höherstufen einer Version als 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.beta.toolboxes.update(
toolbox_name="my-toolbox",
default_version="<version_id>",
)
print(f"Active version: {toolbox.default_version}")
ToolboxRecord record = await toolboxClient.UpdateToolboxAsync(
"my-toolbox",
"<version_id>"
);
Console.WriteLine($"Active version: {record.DefaultVersion}");
PATCH {project_endpoint}/toolboxes/my-toolbox?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.beta.toolboxes.update(
"my-toolbox",
"<version_id>",
);
console.log(`Active version: ${toolbox.defaultVersion}`);
Verwenden Sie die Registerkarte Python, .NET, JavaScript oder REST-API, um eine Toolboxversion als Standard festzulegen.
Dieser Vorgang wird mit azd nicht unterstützt. Um eine Version standardmäßig höher zu stufen, verwenden Sie die Registerkarte Python, .NET, REST-API oder JavaScript.
Löschen einer Version
# Delete a toolbox version
project.beta.toolboxes.delete_toolbox_version(
toolbox_name="my-toolbox",
version="<version_id>",
)
await toolboxClient.DeleteToolboxVersionAsync(
"my-toolbox",
"<version_id>"
);
DELETE {project_endpoint}/toolboxes/my-toolbox/versions/{version}?api-version=v1
Authorization: Bearer {token}
await project.beta.toolboxes.deleteVersion(
"my-toolbox",
"<version_id>",
);
Verwenden Sie die Registerkarte Python, .NET, JavaScript oder REST-API, um eine Toolboxversion zu löschen.
Dieser Vorgang wird mit azd 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.
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.
Model Context Protocol (MCP)
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), AgenticIdentityund UserEntraToken. Sehen Sie sich die Azd-Registerkarte für Verbindungskonfigurationsbeispiele für jeden Authentifizierungstyp 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",
},
];
Keine Authentifizierung:
resources:
- kind: toolbox
name: mcp-tools
description: Public MCP server tools
tools:
- type: mcp
server_label: myserver
server_url: https://your-mcp-server.example.com
Schlüsselbasierte Authentifizierung:
parameters:
mcp_api_key:
secret: true
description: API key for the MCP server
resources:
- kind: connection
name: mcp-conn
target: https://your-mcp-server.example.com
category: RemoteTool
authType: CustomKeys
credentials:
keys:
Authorization: "Bearer {{ mcp_api_key }}"
- kind: toolbox
name: mcp-tools
description: MCP server tools with key auth
tools:
- type: mcp
server_label: myserver
server_url: https://your-mcp-server.example.com
project_connection_id: mcp-conn
OAuth – verwalteter Connector:
Verwenden Sie dieses Muster für MCP-Server, die den verwalteten OAuth-Fluss von Foundry unterstützen. Der connectorName Wert muss mit einem verwalteten Connector übereinstimmen, der im Foundry Tools-Katalog verfügbar ist.
resources:
- kind: connection
name: github-oauth-conn
category: RemoteTool
authType: OAuth2
target: https://api.githubcopilot.com/mcp
connectorName: foundrygithubmcp
- kind: toolbox
name: oauth-tools
description: GitHub OAuth MCP toolbox
tools:
- type: mcp
server_label: github
project_connection_id: github-oauth-conn
OAuth – benutzerdefinierte App-Registrierung:
Verwenden Sie dieses Muster, wenn Sie Ihre eigene OAuth-App-Registrierung für den MCP-Server mitbringen.
parameters:
oauth_client_id:
secret: true
description: OAuth client ID
oauth_client_secret:
secret: true
description: OAuth client secret
resources:
- kind: connection
name: mcp-oauth-custom-conn
category: RemoteTool
authType: OAuth2
target: https://your-mcp-server.example.com
authorizationUrl: https://auth.example.com/authorize
tokenUrl: https://auth.example.com/token
refreshUrl: https://auth.example.com/token
scopes: []
credentials:
clientID: "{{ oauth_client_id }}"
clientSecret: "{{ oauth_client_secret }}"
- kind: toolbox
name: oauth-custom-tools
description: MCP toolbox with custom OAuth
tools:
- type: mcp
server_label: myserver
project_connection_id: mcp-oauth-custom-conn
Agent-Identität (Entra ID):
Verwenden Sie dieses Muster für MCP-Server, die Microsoft Entra ID Authentifizierung unterstützen. Die Foundry-Agent-Identität authentifiziert sich gegenüber der Zielressource.
resources:
- kind: connection
name: language-mcp
category: RemoteTool
authType: AgenticIdentity
audience: <entra-audience>
target: https://<resource>.cognitiveservices.azure.com/language/mcp?api-version=2025-11-15-preview
- kind: toolbox
name: agent-identity-tools
description: MCP toolbox with agent identity auth
tools:
- type: mcp
server_label: language
project_connection_id: language-mcp
Hinweis
Sie müssen der Agentidentität die erforderliche RBAC-Rolle für die Zielressource zuweisen, bevor der MCP-Server Anforderungen akzeptiert.
Benutzer-Entra-Token (1P OBO):
Verwenden Sie diese Vorlage für MCP-Server, die eine Benutzeridentität über den On-Behalf-Of-Flow (OBO) erfordern. Foundry prokiziert das Entra-Token des Benutzers an den MCP-Server.
resources:
- kind: connection
name: workiq-mail-conn
category: RemoteTool
authType: UserEntraToken
audience: <entra-app-id>
target: https://agent365.svc.cloud.microsoft/agents/servers/mcp_MailTools
- kind: toolbox
name: workiq-tools
description: MCP toolbox with user Entra token auth
tools:
- type: mcp
server_label: workiq
project_connection_id: workiq-mail-conn
Hinweis
Das audience Feld ist für UserEntraToken Verbindungen erforderlich. Ohne sie tools/list gibt null Tools zurück.
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 verwendet Grounding mit Bing-Suche und Grounding mit der benutzerdefinierten Bing-Suche, die First Party Consumption Services sind und durch diese Grounding mit Bing-Nutzungsbedingungen 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 Basisverbindung zur benutzerdefinierten 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>",
},
];
resources:
- kind: toolbox
name: websearch-tools
description: Web search toolbox
tools:
- type: web_search
Mit der Erdung durch die benutzerdefinierte Bing-Suche:
parameters:
bing_api_key:
secret: true
description: Bing API key
resources:
- kind: connection
name: bing-custom-conn
category: GroundingWithCustomSearch
authType: ApiKey
target: ""
credentials:
key: "{{ bing_api_key }}"
metadata:
ResourceId: /subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Bing/accounts/<bing-account>
type: bing_custom_search
- kind: toolbox
name: bing-custom-tools
description: Bing Custom Search toolbox
tools:
- type: bing_custom_search
custom_search_configuration:
instance_name: your-bing-custom-instance
project_connection_id: bing-custom-conn
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>",
},
],
},
},
];
parameters:
ai_search_key:
secret: true
description: Azure AI Search admin key
resources:
- kind: connection
name: aisearch-conn
category: CognitiveSearch
authType: ApiKey
target: https://your-search-service.search.windows.net/
credentials:
key: "{{ ai_search_key }}"
- kind: toolbox
name: search-tools
description: Azure AI Search toolbox
tools:
- type: azure_ai_search
index_name: your-index-name
project_connection_id: aisearch-conn
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.
Rufen Sie POST {project_endpoint}/openai/v1/files mit purpose=assistants auf, um eine Datei für den Code-Interpreter hochzuladen. Die zurückgegebene Datei-ID ist der Wert, den Sie wie <FILE_ID> in der Toolkonfiguration angeben. Vollständige Uploadbeispiele 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>"],
},
},
];
resources:
- kind: toolbox
name: codeinterp-tools
description: Code interpreter toolbox
tools:
- type: code_interpreter
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 vector_store_ids referenzierende Vektorspeicher bereit, die bereits in Ihrem Foundry-Projekt erstellt wurden.
Verwenden Sie die {project_endpoint}/openai/v1 API, um eine Datei und einen Vektorspeicher zu erstellen:
- Laden Sie Ihre Datei hoch:
POST {project_endpoint}/openai/v1/filesmitpurpose=assistants. - Erstellen Sie einen Vektorspeicher:
POST {project_endpoint}/openai/v1/vector_storesmit der zurückgegebenen Datei-ID.
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>"],
},
},
];
resources:
- kind: toolbox
name: filesearch-tools
description: File search toolbox
tools:
- type: file_search
vector_store_ids:
- ${FILE_SEARCH_VECTOR_STORE_ID}
Legen Sie die Vektorspeicher-ID vor der Bereitstellung fest:
azd env set FILE_SEARCH_VECTOR_STORE_ID "vs_xxxxxxxxxxxx"
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 innerhalb jedes Ressourcenelements enthält die title, file_id, document_chunk_id und die Relevanz score für den abgeglichenen 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",
},
},
},
];
Schlüsselbasierte Authentifizierung:
parameters:
api_key:
secret: true
description: API key for the target service
resources:
- kind: connection
name: api-conn
category: CustomKeys
authType: CustomKeys
target: https://api.example.com
credentials:
keys:
key: "{{ api_key }}"
- kind: toolbox
name: openapi-tools
description: OpenAPI key-auth toolbox
tools:
- type: openapi
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: api-conn
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>",
},
];
resources:
- kind: connection
name: a2a-conn
category: RemoteA2A
authType: None
target: https://your-remote-agent.azurecontainerapps.io
- kind: toolbox
name: a2a-tools
description: Agent-to-Agent toolbox
tools:
- type: a2a_preview
project_connection_id: a2a-conn
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 sie müssen der MCP-Spezifikation für Toolnamen folgen (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 auf 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 auf 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 auf 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). |
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 |
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.