Op intentie gebaseerde werkset cureren in Foundry (preview)

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.

Diagram met meerdere agents die elk hun eigen hulpprogramma's verbinden met verschillende verificatiemodellen en gedupliceerde authenticatiemiddelen.

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.

Diagram met gereedschapskisten in de Foundry-architectuur: De pijlers 'Bouwen' en 'Gebruiken' worden benut door LangGraph, Microsoft Agent Framework, GitHub Copilot, Claude Code en Microsoft Copilot Studio, die standaard onder beheer zijn.

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 --prerelease en dotnet 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 name veld 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 instantie name in om deze te onderscheiden. Inbegrepen twee instanties van hetzelfde type zonder een name resulteert in een invalid_payload fout. Zie Meerdere hulpprogrammatypen voor meer informatie.
  • Voeg een description aan 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.

  1. Selecteer Foundry Toolkit in de activiteitenbalk.
  2. Vouw onder Mijn resourcesUw projectnaam>Hulpmiddelen uit.
  3. Selecteer het pictogram + Toolbox toevoegen.
  4. 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.

Schermafbeelding van Foundry Toolkit in Visual Studio Code met de weergave Een aangepaste werkset maken met velden voor de naam, beschrijving en hulpmiddelen van de werkset, plus de actie Publiceren.

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.yaml bestand : 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.

  1. Selecteer Foundry Toolkit in de activiteitenbalk.
  2. Vouw onder Mijn resourcesUw projectnaam>Hulpmiddelen uit.
  3. Zoek uw gereedschapskist op het tabblad Gereedschapskisten.
  4. 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.

Schermafbeelding van Foundry Toolkit in Visual Studio Code met de Toolboxes-weergave, de eindpunt-URL van de toolbox, en de Scaffold-code sjabloonactie.

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.

  1. Zoek in Foundry Toolkit onder My Resources>Your project name>Tools de werkset die u wilt testen.
  2. Selecteer Sjabloon voor scaffold-code.
  3. Kies een projectmap wanneer u hierom wordt gevraagd.
  4. Volg de gegenereerde README.md om afhankelijkheden te installeren, omgevingsvariabelen te configureren en het voorbeeld lokaal uit te voeren.
  5. Gebruik Agent Inspector of voer python main.py uit 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, descriptionen inputSchema. Zie de MCP-specificatie voor naamconventies voor hulpprogramma's.
  • inputSchema heeft een properties veld (sommige MCP-servers laten dit veld weg, waardoor OpenAI wordt verbroken).
  • Voor MCP-hulpprogramma's worden namen voorafgegaan door de server_label - bijvoorbeeld myserver.some_tool. Voor alle andere typen hulpprogramma's is de naam de name veldwaarde of de standaardnaam van het hulpprogramma.
  • MCP-hulpprogramma's bevatten een _meta.tool_configuration blok met runtime-instellingen, zoals require_approval. Zie vereisten voor goedkeuring van hulpprogramma's.
  • Noteer de exacte parameternamen voor de aanroepstap (bijvoorbeeld query vs queries).

Controle - tools/call:

  • Geen veld op het hoogste niveau error . Indien aanwezig, inspecteert u error.code. Zie de MCP-specificatie voor standaard MCP-foutcodes:
    • -32006 → OAuth-toestemming vereist (URL extraheren uit error.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._meta op 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.

  1. Selecteer Foundry Toolkit in de activiteitenbalk.
  2. Vouw onder Mijn resourcesUw projectnaam>Hulpmiddelen uit.
  3. Zoek op het tabblad Toolboxes de toolbox die u wilt gebruiken en selecteer vervolgens sjabloon voor scaffold-code.
  4. Kies in het opdrachtpalet een projectmap wanneer hierom wordt gevraagd.
  5. Open de gegenereerde README.md en 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_approval wordt door agenten afgedwongen. De MCP-proxy van de toolset voert tools/call uit, 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.

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
  }
}
{
  "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.

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:

  1. Upload uw bestand: POST {project_endpoint}/openai/v1/files met purpose=assistants.
  2. Maak een vectorarchief: POST {project_endpoint}/openai/v1/vector_stores met 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.