Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure previews voor meer informatie.
Eén agent kan afhankelijk zijn van meerdere hulpprogramma's: API's, MCP-servers (Model Context Protocol), connectors en stromen, elk met een eigen verificatiemodel en het team dat eigenaar is. Wanneer u in een organisatie schaalt, implementeren teams dezelfde hulpprogramma's onafhankelijk opnieuw, worden referenties gedupliceerd, wordt governance inconsistent en is er weinig inzicht in welke hulpprogramma's er bestaan of wie ze gebruikt. Ontwikkelaars staan vast, niet omdat de modellen niet geschikt zijn, maar omdat de integratie van hulpprogramma's het knelpunt wordt.
Ondernemingen hebben al de infrastructuur: gateways, referentiekluizen, beleid en waarneembaarheid. Wat er ontbreekt, is een ontwikkelaarservaring die deze infrastructuur verpakt in iets herbruikbaar, detecteerbaar en standaard wordt beheerd.
Toolbox biedt die ervaring. Definieer eenmaal een gecureerde set hulpprogramma's, beheer ze centraal in Foundry en stel ze beschikbaar via één MCP-compatibel eindpunt dat elke agent kan gebruiken. Het platform verwerkt referentiesinjectie, tokenvernieuwing en afdwinging van ondernemingsbeleid tijdens runtime.
Gereedschapskist omvat de volledige levenscyclus van het gereedschap via vier pijlers: Bouwen en Verbruiken zijn vandaag beschikbaar.
| Pijler | Status | Wat het mogelijk maakt |
|---|---|---|
| Bouwen | Vandaag beschikbaar | Selecteer hulpprogramma's, configureer verificatie centraal en publiceer een herbruikbare werkset die elk team kan gebruiken. |
| Verbruiken | Vandaag beschikbaar | Verbind elke agent met één mcP-compatibel eindpunt om alle hulpprogramma's in de werkset dynamisch te detecteren en aan te roepen. |
U maakt werksets in Foundry, maar het verbruiksoppervlak is open. Elke MCP-compatibele agentruntime of -client kan een werkset gebruiken, inclusief agents die zijn gebouwd met elk framework, IDE's met MCP-functionaliteit en aangepaste code.
Omdat een werkset een beheerde resource is, kunt u hulpprogramma's toevoegen, verwijderen of opnieuw configureren zonder code in uw agent te wijzigen. Uw agent maakt altijd verbinding met één eindpunt. Met versiebeheer van werksets hebt u expliciet controle over wanneer wijzigingen van kracht worden. Maak en test een nieuwe versie en promoveer deze vervolgens naar de standaardwaarde wanneer u klaar bent. Elke agent die naar de werkset verwijst, haalt automatisch de gepromoveerde versie op, zonder codewijzigingen en geen hertoewijzing.
In dit artikel leert u het volgende:
- Maak een werkset met een of meer hulpprogramma's.
- Haal het MCP-eindpunt van de toolkit op.
- Controleer of de hulpprogramma's correct worden geladen.
- Integreer een werkset in uw gehoste agent.
- Beheer toolboxversies en promoveer een versie tot standaard.
Zie Hulpprogramma's configureren voor de syntaxis van hulpprogramma's en verificatieopties voor elk type hulpprogramma.
Functieondersteuning
| Kenmerk | Python SDK | REST API | .NET SDK | JavaScript SDK | azd (implementeren) | Gieterijgereedschapset |
|---|---|---|---|---|---|---|
| Toolset bijwerken, lijst weergeven, ophalen en verwijderen | ✔️ | ✔️ | ✔️ | ✔️ | N/A | ✔️ |
| Werksetversie maken | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Lijst met werksetversies, ophalen en verwijderen | ✔️ | ✔️ | ✔️ | ✔️ | N/A | Nee. In de gebruikersinterface wordt alleen de nieuwste versie weergegeven. |
| MCP-hulpprogramma | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Webzoekprogramma | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Azure AI Zoeken-tool | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Code-Interpreter-hulpprogramma | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Hulpprogramma Voor zoeken naar bestanden | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| OpenAPI-hulpprogramma | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Nee |
| Agent-to-Agent (A2A) tool | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Nee |
Voorwaarden
- Een actief Microsoft Foundry-project.
-
RBAC: Ken de rol Azure AI-gebruiker toe aan iedere identiteit die van toepassing is op uw scenario in het Foundry-project.
- Ontwikkelaar (altijd vereist): de identiteit waarmee werksetversies worden gemaakt, bijgewerkt en beheerd.
- Agentidentiteit (vereist als u een gehoste agent gebruikt) - de beheerde identiteit van de agent die hulpprogramma's tijdens runtime aanroept.
- Eindgebruiker (alleen vereist voor OAuth-stromen) - elke gebruiker van wie de identiteit is geproxied via OAuth- of UserEntraToken-verbindingen (bijvoorbeeld op OAuth gebaseerde MCP- of 1P-OBO-stromen).
- Uw Foundry-project moet zich in een van de ondersteunde regio's bevinden. Afzonderlijke hulpprogrammatypen binnen een werkset worden verder beperkt door regio en model. Niet alle hulpprogrammatypen zijn beschikbaar in elke regio of bij elk model. Zie regio- en modelcompatibiliteit.
- Visual Studio Code (VS Code).
- Installeer de Microsoft Foundry Toolkit voor Visual Studio Code (voorheen AI Toolkit voor VS Code) vanuit de Visual Studio Code Marketplace. Ondersteuning voor werksets in Foundry Toolkit is momenteel beschikbaar als preview-versie.
-
Python SDK:
pip install azure-ai-projects azure-identity -
.NET SDK:
dotnet add package Azure.AI.Projects --prereleaseendotnet add package Azure.Identity -
JavaScript SDK:
npm install @azure/ai-projects @azure/identity -
azd (deploy): Installeer de Azure Developer CLI en de agentextensie:
azd extension install azure.ai.agents
Belangrijk
- Een werkset ondersteunt maximaal one tool zonder een
nameveld per hulpprogrammatype (Webzoekopdrachten, Azure AI Zoeken, Code Interpreter, File Search). Als u meer dan één exemplaar van hetzelfde hulpprogrammatype wilt opnemen, stelt u voor elk exemplaar een unieke instantienamein om deze te onderscheiden. Inbegrepen twee instanties van hetzelfde type zonder eennameresulteert in eeninvalid_payloadfout. Zie Meerdere hulpprogrammatypen voor meer informatie. - Voeg een
descriptionaan elk hulpprogramma in uw werkset toe om het model te helpen bij het selecteren van het juiste hulpprogramma voor elke aanvraag. - Raadpleeg de documentatie van elk hulpprogramma zorgvuldig voor meer informatie over het instellen, beperken en waarschuwingen van afzonderlijke hulpprogramma's.
Stap 1: Een toolbox versie maken
Maak een werksetversie op basis van de hulpprogramma's die u nodig hebt.
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"
}
]
}
Opmerking
Gebruik tokenbereik https://ai.azure.com/.default bij het ophalen van het bearer token.
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}`);
Gebruik Foundry Toolkit in Visual Studio Code om een werkset te maken en te publiceren vanuit de weergave Tools.
- Selecteer Foundry Toolkit in de activiteitenbalk.
- Vouw onder Mijn resourcesUw projectnaam>Hulpmiddelen uit.
- Selecteer het pictogram + Toolbox toevoegen.
- Voer op het tabblad Een aangepaste werkset maken de naam en beschrijving van de werkset in, voeg de gewenste hulpprogramma's toe en selecteer Publiceren.
Het publiceren van een nieuwe toolbox creëert de eerste versie. Deze versie wordt automatisch de standaardversie.
Met behulp van azddeclareert u werksetbronnen in een agent.yaml bestand in plaats van de SDK aan te roepen. Definieer uw hulpprogramma's in de resources sectie en implementeer met behulp van azd ai agent init. Zie agent.yamlHulpprogramma's configureren voor voorbeelden voor elk type hulpprogramma. Zie Implementeren met azd voor de volledige implementatiewerkstroom.
Belangrijk
De -m vlag (of --manifest) is vereist voor azd ai agent init.
Het vertelt de opdracht waar uw agentdefinitie en bronbestanden te vinden zijn.
-m kan verwijzen naar:
-
Een specifiek
agent.yamlbestand : init kopieert alle bestanden uit dezelfde map als het manifest -
Een map met
agent.yaml— init kopieert alle bestanden uit die map
Alle bestanden in de manifestdirectory (main.py, Dockerfile, requirements.txt, setup.py, enzovoort) worden gekopieerd naar het geconfigureerde project onder src/<agent-name>/.
# 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
Stap 2: het MCP-eindpunt van de gereedschapskist achterhalen
Er bestaan twee eindpuntpatronen, afhankelijk van uw rol:
| Rol | Eindpunt | Wanneer gebruikt u |
|---|---|---|
| Toolbox-ontwikkelaar | {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1 |
Test of valideer een specifieke versie voordat u deze standaard promoveert. |
| Toolbox-gebruiker | {project_endpoint}/toolboxes/{toolbox_name}/mcp?api-version=v1 |
Verbind agents met de werkset. Bedient altijd de default_version. De eerste versie die u maakt, wordt automatisch ingesteld als de standaardversie. |
Belangrijk
Elke aanvraag voor het MCP-eindpunt van de werkset moet de header Foundry-Features: Toolboxes=V1Previewbevatten. Aanroepen die deze header weglaten, mislukken. Neem deze op in alle HTTP-clients, MCP-transporten en SDK-wrappers die het werkseteindpunt aanroepen.
Opmerking
De eerste versie van een nieuwe werkset wordt automatisch gepromoveerd naar default_version (v1). Als u de standaardwaarde later wilt wijzigen, zie Een versie als standaard instellen.
Kopieer in Foundry Toolkit voor Visual Studio Code het consumenteneindpunt voor gereedschapskisten uit de weergave Toolboxes.
- Selecteer Foundry Toolkit in de activiteitenbalk.
- Vouw onder Mijn resourcesUw projectnaam>Hulpmiddelen uit.
- Zoek uw gereedschapskist op het tabblad Gereedschapskisten.
- Kopieer het eindpunt in de kolom Eindpunt-URL .
De Endpoint URL-waarde is het eindpunt voor de gebruiker van de toolbox. Als u een versiespecifiek eindpunt wilt maken, gebruikt u het ontwikkelaarspatroon dat in de vorige tabel wordt weergegeven.
Stap 3: Beschikbaarheid van hulpprogramma's controleren
Voordat u de volledige agent uitvoert, controleert u of de werkset de verwachte hulpprogramma's laadt met behulp van een MCP-client-SDK voor het eindpunt. Gebruik het versiespecifieke eindpunt om een versie te valideren voordat u deze naar de standaardwaarde promoveert.
Installeer de MCP-client-SDK:
pip install mcp
Verbind met de gereedschapskist en som de hulpprogramma's op
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())
Opmerking
Gebruik het tabblad REST API om de beschikbaarheid van hulpprogramma's te controleren vanuit .NET of gebruik de Python MCP-client-SDK.
Gebruik het versiespecifieke eindpunt (/versions/{version}/mcp) om een versie te valideren voordat u deze promoveert.
1. Initialiseer de MCP-sessie:
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. De geïnitialiseerde melding verzenden:
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. Beschikbare hulpprogramma's weergeven:
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. Een hulpprogramma aanroepen:
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":{}}}
Installeer de MCP-client-SDK:
npm install @modelcontextprotocol/sdk
Verbind met de gereedschapskist en som de hulpprogramma's op
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();
Gebruik het eindpunt uit stap 2 samen met een gestructureerd voorbeeld van een gehoste agent om het laden van de toolbox in VS Code te valideren.
- Zoek in Foundry Toolkit onder My Resources>Your project name>Tools de werkset die u wilt testen.
- Selecteer Sjabloon voor scaffold-code.
- Kies een projectmap wanneer u hierom wordt gevraagd.
- Volg de gegenereerde
README.mdom afhankelijkheden te installeren, omgevingsvariabelen te configureren en het voorbeeld lokaal uit te voeren. - Gebruik Agent Inspector of voer
python main.pyuit om te bevestigen dat de tools van het gereedschap laden en reageren.
Voor versiespecifieke validatie voordat u een nieuwe werksetversie promovt, gebruikt u het tabblad Python of REST API in deze stap.
Opmerking
Gebruik het tabblad REST API om de beschikbaarheid van hulpprogramma's te controleren of gebruik de Python MCP-client-SDK.
Controleren — initialiseren: HTTP 200. Als u de initialisatiestap overslaat, mislukken volgende aanroepen.
Controle — : tools/list
-
len(tools) > 0— leeg betekent dat de toolbox-versie niet correct is geconfigureerd. - Elk hulpmiddel heeft
name,descriptioneninputSchema. Zie de MCP-specificatie voor naamconventies voor hulpprogramma's. -
inputSchemaheeft eenpropertiesveld (sommige MCP-servers laten dit veld weg, waardoor OpenAI wordt verbroken). - Voor MCP-hulpprogramma's worden namen voorafgegaan door de
server_label- bijvoorbeeldmyserver.some_tool. Voor alle andere typen hulpprogramma's is de naam denameveldwaarde of de standaardnaam van het hulpprogramma. - MCP-hulpprogramma's bevatten een
_meta.tool_configurationblok met runtime-instellingen, zoalsrequire_approval. Zie vereisten voor goedkeuring van hulpprogramma's. - Noteer de exacte parameternamen voor de aanroepstap (bijvoorbeeld
queryvsqueries).
Controle - tools/call:
- Geen veld op het hoogste niveau
error. Indien aanwezig, inspecteert uerror.code. Zie de MCP-specificatie voor standaard MCP-foutcodes:-
-32006→ OAuth-toestemming vereist (URL extraheren uiterror.message). - Andere codes → fout aan de serverzijde.
-
-
result.content[]bevat vermeldingen met"type": "text"- dit is de uitvoer van het hulpprogramma. - Voor AI Search, controleer
result.structuredContent.documents[]voor chunk-metadata (title,url,id,score). - Voor Bestand Zoeken, controleer
result.content[].resource._metaop segmentmetagegevens (title,file_id,document_chunk_id,score). - Voor webzoekopdrachten controleer
result.content[].resource._meta.annotations[]voor URL-bronvermeldingen (type,url,title,start_index,end_index). - Let op
"ServerError"in tekstinhoud: het hulpprogramma is uitgevoerd, maar er is een interne fout opgetreden.
Voorbeelden van hulpprogrammaspecifieke tools/call argumenten:
| Type gereedschap | Argumenten |
|---|---|
| AI Zoeken | {"query": "search text"} |
| Zoeken naar bestanden | {"queries": ["search text"]} |
| Code-interpreter | {"code": "print(2 ** 100)"} |
| Zoeken op internet | {"search_query": "weather in seattle"} |
| A2A | {"message": {"parts": [{"type": "text", "text": "Hello"}]}} |
| MCP | {"query": "what is agent service"} |
Stap 4: De werkset integreren in uw agent
LangGraph
.env bestand:
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 (sleutelpatroon):
from langchain_azure_ai.tools import AzureAIProjectToolbox
toolbox = AzureAIProjectToolbox(toolbox_name=TOOLBOX_NAME)
tools = await toolbox.get_tools()
Bekijk het volledige voorbeeld voor de volledige implementatie.
Belangrijk
Voor klasse langchain_azure_ai.tools.AzureAIProjectToolbox is vereist langchain-azure-ai[tools]>1.2.3.
Microsoft Agent Framework
Gebruik MCPStreamableHTTPTool van de Agent Framework SDK om rechtstreeks verbinding te maken met het MCP-eindpunt van de toolbox.
.env bestand:
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 (sleutelpatroon):
# 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()
Bekijk het volledige voorbeeld voor de volledige implementatie.
Copilot SDK
Gebruik de GitHub Copilot SDK om een door toolbox aangedreven agent te bouwen die het aanroepen van de tools van Copilot overbrugt naar het MCP-eindpunt van de Foundry-toolbox.
Opmerking
De Copilot SDK weigert namen van hulpprogramma's die puntjes bevatten. De brug vervangt automatisch . door _ in de namen van hulpprogramma's. Bijvoorbeeld, myserver.get_info wordt myserver_get_info.
.env bestand:
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 (sleutelpatroon — MCP-brug):
# 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"],
)
Bekijk het volledige voorbeeld voor de volledige implementatie.
Microsoft Agent Framework
Gebruik ResponsesServer vanuit de Agent Framework SDK met een aangepaste ToolboxMcpClient om toolbox-tools te ontdekken en aan te roepen via het MCP-eindpunt.
Omgevingsvariabelen:
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 (sleutelpatroon):
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 verpakt directe JSON-RPC aanroepen naar het MCP-eindpunt.
ToolboxHandler verbindt LLM-hulpprogramma-aanroepen terug naar de MCP-client met behulp van een standaardlus voor het aanroepen van hulpprogramma's. Zie het volledige voorbeeld voor de volledige implementatie van beide klassen.
Opmerking
Integratievoorbeelden voor deze stap zijn alleen beschikbaar voor Python en .NET.
Opmerking
Integratievoorbeelden voor deze stap zijn alleen beschikbaar voor Python en .NET.
Gebruik de Foundry Toolkit om een voorbeeld van een gehoste agent op te zetten dat al is verbonden met uw gereedschapskist.
- Selecteer Foundry Toolkit in de activiteitenbalk.
- Vouw onder Mijn resourcesUw projectnaam>Hulpmiddelen uit.
- Zoek op het tabblad Toolboxes de toolbox die u wilt gebruiken en selecteer vervolgens sjabloon voor scaffold-code.
- Kies in het opdrachtpalet een projectmap wanneer hierom wordt gevraagd.
- Open de gegenereerde
README.mden volg de installatie-, lokale uitvoerings- en implementatiestappen voor het framework.
Het gegenereerde project bevat het gehoste agentinvoerpunt, de implementatiebestanden en een README.md met de exacte installatie-, uitvoerings- en implementatiestappen. De scaffolded agent verwerkt de Foundry-Features: Toolboxes=V1Preview header voor u.
Als u een werkset wilt integreren in een bestaand gehost agentproject in plaats van een nieuw voorbeeld te genereren, gebruikt u het gekopieerde eindpunt uit stap 2 met de Python of .NET patronen in deze sectie.
Implementeren met azd
Gebruik de Azure Developer CLI (azd) om werksetbronnen rechtstreeks in een agent.yaml-bestand te declareren en uw agent met één opdracht te implementeren. Door deze methode te gebruiken, hoeft u de werkset niet afzonderlijk te maken via SDK of REST.
azd richt de werkset, verbindingen en modelimplementatie samen in.
Belangrijk
De -m vlag (of --manifest) is vereist voor azd ai agent init. Het vertelt de opdracht waar uw agentdefinitie en bronbestanden te vinden zijn.
-m kan verwijzen naar een specifiek agent.yaml bestand of een map die een bestand bevat. Alle bestanden in de manifestmap (main.py, Dockerfile, requirements.txt, enzovoort) worden letterlijk gekopieerd naar het geconfigureerde project onder src/<agent-name>/.
Mapstructuur:
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 (webzoekopdrachten + GitHub MCP-voorbeeld):
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
Opmerking
Wanneer u met werksetbronnen implementeert, injecteert het platform FOUNDRY_AGENT_TOOLBOX_ENDPOINT (basis-URL) en TOOLBOX_{toolbox_name}_MCP_ENDPOINT (volledig eindpunt per werkset) als omgevingsvariabelen. Voor de werkset met de naam agent-tools wordt de variabele per werkset TOOLBOX_AGENT_TOOLS_MCP_ENDPOINT. U main.py leest de variabele per werkset of bouwt de URL van FOUNDRY_AGENT_TOOLBOX_ENDPOINT en TOOLBOX_NAME tijdens runtime.
main.py volgt hetzelfde LangGraph-patroon dat eerder is weergegeven. Met behulp van azd, FOUNDRY_AGENT_TOOLBOX_ENDPOINT en TOOLBOX_{toolbox_name}_MCP_ENDPOINT worden automatisch geïnjecteerd - er is geen extra eindpuntconfiguratie nodig in code.
Implementeren:
# 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
Omgaan met goedkeuringsvereisten voor tools
De gereedschapskist retourneert een _meta.tool_configuration object in elke gereedschapinschrijving die wordt geretourneerd door tools/list. Wanneer het hulpprogramma require_approval is ingesteld op "always", moet de agentruntime de hangende actie aan de gebruiker presenteren en wachten op bevestiging voordat het hulpprogramma wordt aangeroepen. Het MCP-eindpunt blokkeert niettools/call — afdwingen is volledig de verantwoordelijkheid van de agent runtime.
Lezen require_approval uit tools/list
Elke toolinvoer in een tools/list antwoord bevat een _meta blok dat door de toolbox wordt geretourneerd.
{
"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 Waarde |
Gedrag |
|---|---|
"always" |
De agent moet de gebruiker vóór elke aanroep om bevestiging vragen. |
"never" |
De agent kan het hulpprogramma vrij aanroepen. |
Goedkeuringsbeveiliging implementeren (LangGraph)
Voer bij het opstarten een query tools/list uit om een goedkeuringsoverzicht te maken en injecteer vervolgens een beperking in de systeemprompt voor elk hulpprogramma waarvoor goedkeuring is vereist:
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")
}
Nadat u hulpprogramma's van de MCP-client hebt geladen, detecteert u welke hulpprogramma's goedkeuring vereisen en past u de systeemprompt aan:
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"]
Opmerking
- Detectie vindt plaats bij het opstarten. De goedkeuringstoets wordt één keer uitgevoerd wanneer de agent wordt geïnitialiseerd. Er is geen overhead per oproep.
- Sierlijke terugval. Als er geen hulpprogramma's zijn
require_approval: "always", is de systeemprompt ongewijzigd en gedraagt de agent zich als voorheen. -
require_approvalwordt door agenten afgedwongen. De MCP-proxy van de toolset voerttools/calluit, ongeacht deze instelling. Uw agent-runtime is verantwoordelijk voor het sturen van de aanroep.
Configureer require_approval in een hulpprogramma
Wanneer u een toolsetversie maakt, stel require_approval in. In de voorbeelden van het MCP-hulpprogramma in stap 1 worden zowel "always" als "never" waarden weergegeven. U kunt deze ook instellen via de SDK:
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",
},
];
Gebruik het tabblad Python, .NET, JavaScript, REST API of azd om require_approval in uw werksetdefinitie te configureren. De Foundry Toolkit-werkstroom in dit artikel is gericht op het maken en gebruiken van de 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
Stap 5: Werksetversies beheren
Opmerking
U kunt werksetversies (lijst, ophalen, promoveren, verwijderen) beheren via de Python SDK, .NET SDK, JavaScript SDK en REST API. De azd CLI biedt alleen ondersteuning voor het maken van werksetversies tijdens de implementatie.
Toolbox-versies zijn onveranderbare momentopnamen van de configuratie van een toolbox's hulpprogramma's. Elke aanroep van het aanmaak-eindpunt produceert een nieuwe ToolboxVersionObject. Het bovenliggende ToolboxObject element heeft een default_version veld dat bepaalt welke versie door het MCP-eindpunt wordt aangeboden. Als u een nieuwe versie maakt, wordt deze niet automatisch gepromoot. U bepaalt wanneer u wilt bijwerken default_version. Met dit proces kunt u wijzigingen faseereren, een nieuwe versie onafhankelijk testen en deze volgens uw eigen planning naar productie promoveren.
| Object | Sleutelvelden | Beschrijving |
|---|---|---|
ToolboxObject |
id, name, default_version |
De gereedschapsdoos-container.
default_version verwijst naar de actieve versie. |
ToolboxVersionObject |
id, , nameversion, description, , created_at, , tools[]policies |
Een onveranderbare momentopname van de lijst met hulpprogramma's van de werkset op een bepaald moment. |
Een nieuwe versie maken
Elke aanroep om te creëren produceert een nieuwe versie. Als de werkset nog niet bestaat, maakt het proces deze automatisch aan. Wanneer u de eerste versie van een nieuwe werkset maakt, is v1 de standaardversie totdat u handmatig bijwerkt naar een andere versie.
# 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}`);
Gebruik het tabblad Python, .NET, JavaScript of REST API om een nieuwe werksetversie te maken. De Foundry Toolkit-werkstroom in dit artikel richt zich op het creëren van een gereedschapskist en het ontwikkelen van een gehoste agent die deze gebruikt.
Deze bewerking wordt niet ondersteund met azd. Als u een werksetversie wilt maken, gebruikt u het tabblad Python, .NET, REST-API of JavaScript.
Het antwoord bevat ToolboxVersionObject de nieuwe version id.
Versies weergeven
# 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}`);
}
Gebruik het tabblad Python, .NET, JavaScript of REST API om werksetversies weer te geven.
Deze bewerking wordt niet ondersteund met azd. Als u werksetversies wilt weergeven, gebruikt u het tabblad Python, .NET, REST-API of JavaScript.
Een specifieke versie ophalen
# 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}`);
Gebruik het tabblad Python, .NET, JavaScript of REST API om een specifieke werksetversie op te halen.
Deze bewerking wordt niet ondersteund met azd. Als u een specifieke werksetversie wilt ophalen, gebruikt u het tabblad Python, .NET, REST API of JavaScript.
Niveau van een versie naar standaard verhogen
Het MCP-eindpunt dient altijd het default_version. Als u wilt overschakelen welke versie actief is, werkt u de werkset bij:
# 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 mag niet leeg zijn. Vervang deze door een nieuwe versie.
const toolbox = await project.beta.toolboxes.update(
"my-toolbox",
"<version_id>",
);
console.log(`Active version: ${toolbox.defaultVersion}`);
Gebruik het tabblad Python, .NET, JavaScript of REST API om de standaardversie van een werkset te promoten.
Deze bewerking wordt niet ondersteund met azd. Als u een standaardversie wilt verhogen, gebruikt u de Python, .NET, REST-API of JavaScript tabblad.
Een versie verwijderen
# 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>",
);
Gebruik het API-tabblad Python, .NET, JavaScript of REST om een toolboxversie te verwijderen.
Deze bewerking wordt niet ondersteund met azd. Als u een werksetversie wilt verwijderen, gebruikt u de Python, .NET, REST-API of JavaScript tabblad.
Hulpprogramma's configureren
Kies het hulpprogrammatype en het verificatiepatroon dat overeenkomt met uw scenario. Selecteer het tabblad voor de gewenste SDK of implementatiemethode.
Meerdere hulpprogrammatypen
Eén werkset kan verschillende hulpprogrammatypen bundelen. In het volgende voorbeeld worden webzoekopdrachten, Azure AI Zoeken en een MCP-server in één werkset gecombineerd:
{
"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"
}
]
}
Opmerking
Elk type hulpprogramma (web_search, azure_ai_search, code_interpreter, file_search) kan maximaal één keer worden weergegeven zonder een name veld. Als u meerdere exemplaren van hetzelfde type wilt opnemen, stelt u een unieke name op elk exemplaar in. Zie het volgende voorbeeld.
Beperkingen voor meerdere hulpprogramma's
U kunt maximaal één exemplaar van elk ingebouwd hulpprogrammatype opnemen zonder een name veld in een werkset. Als u twee exemplaren van hetzelfde type zonder een nameopneemt, retourneert de API:
400 invalid_payload: Multiple tools without identifiers found...
Twee exemplaren van hetzelfde hulpprogrammatype
Gebruik het name veld om meerdere exemplaren van hetzelfde hulpprogrammatype in één werkset op te nemen. Elk benoemd exemplaar wordt behandeld als een afzonderlijke tool en moet een unieke naam hebben.
{
"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 de volgende secties ziet u de configuratie van elk hulpprogrammatype in detail.
Model Context Protocol (MCP)
Verificatie op basis van sleutels:
{
"description": "my-mcp-toolbox",
"tools": [
{
"type": "mcp",
"server_label": "myserver",
"server_url": "https://your-mcp-server.example.com",
"project_connection_id": "my-mcp-connection"
}
]
}
Geen verificatie (openbare MCP-server):
{
"description": "Public MCP server",
"tools": [
{
"type": "mcp",
"server_label": "myserver",
"server_url": "https://your-mcp-server.example.com"
}
]
}
Verificatie op basis van OAuth of identiteit:
Voor OAuth (beheerde connector, aangepaste app-registratie), agentidentiteit of verificatie van gebruikers-Entra-token, maakt u eerst de juiste verbinding in uw Foundry-project en verwijst u hierna naar 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>"
}
]
}
De verbinding authType bepaalt de verificatiestroom. Ondersteunde verbindingsauthtypen voor MCP zijn onder andere CustomKeys, OAuth2 (beheerd of aangepast) en .AgenticIdentityUserEntraToken Zie het tabblad azd voor voorbeelden van verbindingsconfiguraties voor elk verificatietype.
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",
},
];
Geen verificatie:
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
Verificatie op basis van sleutels:
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 - beheerde connector:
Gebruik dit patroon voor MCP-servers die de beheerde OAuth-stroom van Foundry ondersteunen. De connectorName waarde moet overeenkomen met een beheerde connector die beschikbaar is in de Foundry Tools-catalogus.
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 - aangepaste app-registratie:
Gebruik dit patroon wanneer u uw eigen OAuth-app-registratie voor de MCP-server gebruikt.
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
Agentidentiteit (Entra ID):
Gebruik dit patroon voor MCP-servers die ondersteuning bieden voor Microsoft Entra ID-verificatie. De Foundry-agentidentiteit wordt geverifieerd op basis van de doelresource.
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
Opmerking
U moet uw agent-id de vereiste RBAC-rol toewijzen aan de doelresource voordat de MCP-server aanvragen accepteert.
User Entra token (1P OBO):
Gebruik dit patroon voor MCP-servers waarvoor gebruikersidentiteit is vereist via de stroom On-Behalf-Of (OBO). Foundry gebruikt het Entra-token van de gebruiker als proxy naar de 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
Opmerking
Het audience veld is vereist voor UserEntraToken verbindingen. Zonder deze functie tools/list worden nul tools geretourneerd.
Belangrijk
De eerste keer dat een gebruiker een werkset aanroept met een op OAuth gebaseerde MCP in een project, retourneert het MCP-eindpunt een CONSENT_REQUIRED fout (code -32006) met een toestemmings-URL:
{
"error": {
"code": -32006,
"message": "User consent is required. Please visit: https://..."
}
}
Deze fout wordt verwacht. Open de toestemmings-URL in een browser, voltooi de OAuth-autorisatiestroom en voer de aanroep van de agent opnieuw uit. Volgende aanroepen slagen zonder opnieuw te vragen.
Zoeken op internet
Belangrijk
- Webzoekopdrachten maakt gebruik van grounding met Bing Search en Bing Custom Search, die diensten voor eerste partijsgebruik zijn volgens deze gebruiksvoorwaarden voor grounding met Bing en de Microsoft-privacyverklaring.
- De Microsoft Data Protection Addendum is niet van toepassing op gegevens die worden verzonden naar Grounding met Bing Search and Grounding met Bing Custom Search. Wanneer u Grounding gebruikt met Bing Search en Grounding met Bing Custom Search, vinden gegevensoverdrachten plaats buiten naleving en geografische grenzen.
- Voor het gebruik van grounding met Bing Search en Grounding met Bing Custom Search worden kosten in rekening gebracht. Zie prijzen voor meer informatie.
- Zie de sectie management voor informatie over hoe Azure beheerders de toegang tot het gebruik van zoeken op internet kunnen beheren.
Gebruik dit patroon om webzoekopdrachten toe te voegen. Er is geen projectverbinding vereist voor het zoeken op internet met Grounding met Bing. Als u een Grounding wilt gebruiken met een aangepast Bing Search-exemplaar, voegt u een web_search.custom_search_configuration object toe dat verwijst naar uw Grounding met de Bing Custom Search-connectie.
{
"description": "Built-in web search",
"tools": [
{
"type": "web_search",
"name": "<OPTIONAL_TOOL_NAME>",
"description": "<Optional description for the model>"
}
]
}
Met een aansluiting voor Bing Custom Search met aarding:
{
"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
Gronden met Bing Custom Search:
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
Opmerking
Wanneer een webzoekopdracht resultaten retourneert via MCP, is het antwoord een resource inhoudselement met het gesynthetiseerde antwoord en geïntegreerde Markdown-bronkoppelingen. URL-bronvermeldingen bevinden zich in content[].resource._meta.annotations[]. Bijvoorbeeld:
{
"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 AI Zoeken
{
"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
Hulpprogrammaparameters configureren
| parameter voor Azure AI Zoeken hulpprogramma | Vereist | Notities |
|---|---|---|
project_connection_id |
Ja | De resource-id van de projectverbinding met Azure AI Zoeken. |
index_name |
Ja | De naam van de index in uw Azure AI Zoeken resource. |
top_k |
Nee | De standaardwaarde is 5. |
query_type |
Nee | Standaardwaarde is vector_semantic_hybrid. Ondersteunde waarden: simple, vector, semantic, , vector_simple_hybrid. vector_semantic_hybrid |
filter |
Nee | Is van toepassing op alle query's die de agent op de index uitvoert. |
De zoekresultaten bevatten segmentmetagegevens in result.structuredContent.documents[]. Elk document bevattitle, urlen idscore velden die u kunt gebruiken om bronvermeldingsgegevens in uw toepassing te genereren.
Code-interpreter
Gebruik dit patroon om de agent Python code te laten schrijven en uit te voeren. Voor het patroon is geen projectverbinding of extra configuratie vereist.
Om een bestand te uploaden dat door Code Interpreter gebruikt moet worden, roept u POST {project_endpoint}/openai/v1/files aan met purpose=assistants. De geretourneerde bestands-id is de waarde die u opgeeft zoals <FILE_ID> in de configuratie van het hulpprogramma. Zie code-interpreter voor voorbeelden van volledige upload.
Belangrijk
Wanneer Code Interpreter wordt gebruikt via een werkset in een gehoste agent, wordt gebruikersisolatie niet ondersteund. Alle gebruikers in hetzelfde project delen dezelfde containercontext.
{
"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
Uitvoerbestanden downloaden van Code Interpreter
Wanneer Code Interpreter uitvoerbestanden produceert (bijvoorbeeld een gegenereerde CSV of grafiek), gebruikt u de volgende stappen om deze weer te geven en te downloaden.
Stap 1: Bestanden weergeven met behulp van de Container-API
Extraheer de container_id uit content[]._meta.container_id in het tools/call-antwoord en roep vervolgens de Container Files API aan om alle bestanden in de container te tonen.
GET {project_endpoint}/containers/{container_id}/files?api-version=v1
Authorization: Bearer {token}
Het antwoord retourneert een lijst met bestanden met hun namen en id's.
Stap 2: het bestand downloaden met behulp van de Bestands-API
Gebruik de bestandsnaam die is geretourneerd uit stap 1 om het bestand te downloaden via het eindpunt voor het downloaden van de bestands-API.
Zoeken naar bestanden
Gebruik dit patroon om de agent te laten zoeken naar geüploade bestanden die zijn opgeslagen in een vectorarchief. Geef vector_store_ids verwijzingen naar vectorarchieven op die al zijn gemaakt in uw Foundry-project.
Als u een bestand en vectorarchief wilt maken, gebruikt u de {project_endpoint}/openai/v1 API:
- Upload uw bestand:
POST {project_endpoint}/openai/v1/filesmetpurpose=assistants. - Maak een vectorarchief:
POST {project_endpoint}/openai/v1/vector_storesmet de geretourneerde bestands-id.
De resulterende vectoropslag-id is de waarde die u opgeeft als <VECTOR_STORE_ID>. Zie File Search voor volledige voorbeelden in elke taal.
Belangrijk
Wanneer File Search wordt gebruikt via een werkset in een gehoste agent, wordt gebruikersisolatie niet ondersteund. Alle gebruikers in hetzelfde project delen toegang tot hetzelfde vectorarchief.
{
"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}
Stel de vectoropslag-id in voordat u implementeert:
azd env set FILE_SEARCH_VECTOR_STORE_ID "vs_xxxxxxxxxxxx"
Opmerking
Wanneer File Search resultaten retourneert via MCP, worden segmentmetagegevens als markeringen ingesloten in de antwoordinhoud 【index†filename†file_id】 van het hulpprogramma. Bijvoorbeeld:
{
"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..."
}
}
]
}
}
Het _meta blok in elk resource-item bevat de title, file_id, document_chunk_id en relevantie score voor het overeenkomende segment. Gebruik deze metagegevensvelden in uw toepassing om bronvermeldingsgegevens te genereren of een dieptekoppeling naar het bronbestand te maken.
OpenAPI
Gebruik dit patroon om een REST API beschikbaar te maken die wordt beschreven door een OpenAPI-specificatie. Kies het auth.type beveiligingsmodel van uw API.
Belangrijk
Wanneer verificatie van beheerde identiteit wordt gebruikt, moet u de juiste RBAC-rol toewijzen aan de beheerde identiteit van uw Foundry-project in de doelservice. Wijs bijvoorbeeld de rol Lezer of hoger toe aan de Azure-doelresource. Zonder deze toewijzing ontvangt de agent een 401 Unauthorized antwoord bij het aanroepen van de API. Zie Verifiëren met behulp van beheerde identiteit voor volledige installatiestappen.
Anonieme authenticatie:
{
"description": "REST API via OpenAPI spec",
"tools": [
{
"type": "openapi",
"openapi": {
"name": "my-api",
"spec": { "<paste OpenAPI spec object here>" },
"auth": {
"type": "anonymous"
}
}
}
]
}
Project verbindingsverificatie:
Gebruik dit patroon wanneer voor de API een sleutel of token is vereist die is opgeslagen in een Foundry-projectverbinding.
{
"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>"
}
}
}
}
]
}
Verificatie van beheerde identiteit:
Gebruik dit patroon wanneer de doel-API wordt geverifieerd via Microsoft Entra ID. De beheerde identiteit van het Foundry-project roept de API aan namens de agent. Zorg ervoor dat de beheerde identiteit de vereiste RBAC-rol heeft voor de doelservice voordat u dit patroon gebruikt.
{
"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",
},
},
},
];
Verificatie op basis van sleutels:
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-naar-agent (A2A)
Gebruik dit patroon om een andere agent aan te roepen als een hulpmiddel. Geef de basis-URL van de externe agent op en, als hiervoor verificatie is vereist, een projectverbinding.
{
"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
Problemen oplossen
| Symptoom | Waarschijnlijke oorzaak | Fix |
|---|---|---|
tools/list retourneert nul hulpprogramma's voor MCP- en A2A-processen |
Ongeldige of ontbrekende verbindingsreferenties voor de externe MCP-server of A2A-agent. De werkset kan geen hulpprogrammamanifesten ophalen van het externe eindpunt zonder geldige verificatie. | Controleer of het project_connection_id bestaat in uw Foundry-project en of de referenties juist zijn. Probeer rechtstreeks verbinding te maken met de MCP-server om de verificatie-instelling te testen. Als u beheerde identiteit (PMI, agentidentiteit of MI) gebruikt, controleert u de juiste RBAC-roltoewijzingen voor de aanroeper op de doelresource. |
tools/list retourneert nul hulpprogramma's voor OpenAPI-hulpprogramma's |
Ongeldige OpenAPI-specificatie. De werkset maakt het hulpprogrammamanifest op basis van de specificatie, wat mislukt als de specificatie ongeldig is. | Valideer de inhoud van de OpenAPI-specificatie. Controleer of deze voldoet aan OpenAPI 3.0 of 3.1 en bevat geldige paths, operationId waarden en parameterschema's. Als u verificatie van beheerde identiteiten gebruikt, controleert u ook RBAC-roltoewijzingen op de doelservice. |
tools/list retourneert minder hulpprogramma's dan verwacht |
Het allowed_tools filter bevat onjuiste of verkeerd gespelde namen van hulpprogramma's. Namen van hulpprogramma's zijn hoofdlettergevoelig en moeten de MCP-specificatie voor hulpprogrammanamen (geen spaties of speciale tekens) volgen. |
Verwijder allowed_tools tijdelijk en roep tools/list aan om de volledige lijst met hulpprogramma's op te halen. Gebruik de exacte namen uit het antwoord om waarden in te stellen voor allowed_tools. |
tools/list retourneert geen tools (andere gereedschappen) |
De gereedschapskist is niet volledig ingericht of het hulptype wordt niet ondersteund in deze regio. Voor ingebouwde hulpprogramma's (Webzoekopdrachten, AI Search, Code Interpreter, File Search), worden hulpprogrammamanifesten gemaakt aan de serverzijde en zijn geen verificatie vereist. Als ze leeg zijn, is de versie van de werkset mogelijk nog niet ingericht. | Wacht 10 seconden en probeer het opnieuw. |
400 Multiple tools without identifiers |
Twee typen hulpprogramma's zonder naam in één werkset | Houd maximaal één naamloos type; toevoegen server_label aan alle MCP-hulpprogramma's. |
CONSENT_REQUIRED (code -32006) |
OAuth-verbinding vereist toestemming van de gebruiker | Open de toestemmings-URL in een browser en voltooi de OAuth-stroom en probeer het opnieuw. |
401 bij MCP-aanroepen |
Verlopen token of verkeerd bereik | Gebruik het bereik https://ai.azure.com/.default en vernieuw het token. |
| Namen van hulpprogramma's komen niet overeen | Namen van MCP-hulpprogramma's worden voorafgegaan door server_label |
Gebruik {server_label}.{tool_name} de notatie (bijvoorbeeld myserver.get_info). |
500 Op send_ping() |
De MCP-server van de werkset implementeert de MCP-methode ping niet. |
Bel niet send_ping(). Als uw framework dit automatisch aanroept (bijvoorbeeld Microsoft Agent Framework MCPStreamableHTTPTool._ensure_connected()), schakelt u de pingcontrole uit of overschrijft u de methode met een no-op. |
500 Op prompts/list |
De Foundry MCP-server implementeert niet prompts/list. |
Geef load_prompts=False (of gelijkwaardig) door aan uw MCP-clientconstructor. |
500 met niet-streamend tools/call |
Niet-streamingmodus (stream=False) wordt niet ondersteund voor MCP-eindpunten van de werkset. |
Gebruik altijd stream=True bij het aanroepen van MCP-toolboxhulpprogramma's. |
500 Op tools/list |
Tijdelijke serverfout | Probeer het na een paar seconden opnieuw. |
| Omgevingsvariabelen die tijdens de uitvoertijd worden overschreven | Het platform reserveert alle omgevingsvariabelen die voorafgegaan zijn door FOUNDRY_ en overschrijft mogelijk op de achtergrond door de gebruiker gedefinieerde waarden. |
Wijzig de naam van aangepaste omgevingsvariabelen om het FOUNDRY_ voorvoegsel te voorkomen (gebruik bijvoorbeeld TOOLBOX_MCP_ENDPOINT in plaats van FOUNDRY_TOOLBOX_ENDPOINT). |
Ondersteuning voor virtueel netwerk
Wanneer uw Foundry-project gebruikmaakt van netwerkisolatie (private link), worden niet alle werksethulpprogrammatypen ondersteund. In de volgende tabel ziet u de ondersteuningsstatus voor elk type hulpprogramma en hoe verkeer stroomt in een netwerkisolatieomgeving.
| Type gereedschap | VNet-ondersteuning | Verkeersstroom |
|---|---|---|
| MCP | ✅ Ondersteund | Via uw VNet-subnet |
| Azure AI Zoeken | ✅ Ondersteund | Via privé-eindpunt |
| Code-interpreter | ✅ Ondersteund | Microsoft backbone-netwerk |
| Zoeken op internet | ✅ Ondersteund | Openbaar eindpunt |
| OpenAPI | ✅ Ondersteund | Is afhankelijk van de configuratie van het doel-API-netwerk |
| Zoeken naar bestanden | ❌ Niet ondersteund | Nog niet beschikbaar |
| Agent-naar-agent (A2A) | ✅ Ondersteund | Via privé-eindpunt |
Zie Netwerkisolatie configureren voor Microsoft Foundry voor volledige installatie-instructies voor netwerkisolatie, waaronder VNet-injectie voor de agentclient, DNS-configuratie en privé-eindpuntvereisten.
Regio- en modelcompatibiliteit
Beschikbaarheid van werksets is afhankelijk van twee factoren buiten de projectregio:
- Regio: Sommige hulpprogrammatypen zijn niet beschikbaar in elke regio die ondersteuning biedt voor de agentservice. Een regio die het werkseteindpunt ondersteunt, ondersteunt bijvoorbeeld mogelijk niet alle ingebouwde hulpprogrammatypen.
Controleer voordat u een werkset implementeert of uw doelregio ondersteuning biedt voor de hulpprogrammatypen die u wilt gebruiken. Zie Hulpprogramma-ondersteuning per regio en model voor de volledige compatibiliteitstabellen.