Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Varning
När du ansluter till icke-Foundry-verktyg kan det medföra kostnader och data kan skickas utanför Foundrys efterlevnadsgräns och bearbetas enligt tillämpliga villkor och principer för datahantering. Se verktygets dokumentation för att lära dig hur du hanterar åtkomsten till verktyget.
Den här artikeln visar hur du skapar en verktygslåda, lägger till och konfigurerar verktyg, kontrollerar att de läses in, integrerar verktygslådan i en värdbaserad agent och hanterar verktygslådeversioner. En konceptuell introduktion till verktygslådor finns i Vad är verktygslådan i Foundry?. Information om verktygskonfigurationssyntax och autentiseringsalternativ för varje verktygstyp finns i Konfigurera verktyg.
Förutsättningar
Ett aktivt Microsoft Foundry-projekt.
RBAC: Bevilja foundry-användarrollen i Foundry-projektet till varje identitet som gäller för ditt scenario:
- Utvecklare (krävs alltid) – den identitet som skapar, uppdaterar och hanterar verktygslådeversioner.
- Agentens identitet (krävs om du använder en promptbaserad agent) – agentens hanterade identitet för att anropa verktyg vid körning.
- Slutanvändare (krävs endast för OAuth-flöden) – alla användare vars identitet överförs via OAuth- eller UserEntraToken-anslutningar (till exempel OAuth-baserad MCP- eller användarentratoken (genomströmning av hanterad användaridentitet).
Stegvisa instruktioner för att tilldela rollen Foundry-användare till en agentidentitet finns i Tilldela behörigheter till agentidentiteten.
Ditt Foundry-projekt måste finnas i en av de regioner som stöds. Enskilda verktygstyper i en verktygslåda begränsas ytterligare av region och modell – alla verktygstyper är inte tillgängliga i varje region eller med varje modell. Se Region- och modellkompatibilitet.
Installera Microsoft Foundry Toolkit för Visual Studio Code-tillägget från Visual Studio Code Marketplace.
Python SDK:
pip install azure-ai-projects azure-identity.NET SDK: Installera den sammanhängande paketuppsättningen för förhandsversionen och Azure identitet:
dotnet add package Azure.AI.Projects --version 2.1.0-beta.4 dotnet add package Azure.AI.Projects.Agents --version 2.1.0-beta.4 dotnet add package Azure.AI.Extensions.OpenAI --version 2.1.0-beta.4 dotnet add package Azure.IdentityJavaScript SDK:
npm install @azure/ai-projects @azure/identityAzure Developer CLI: Installera Azure Developer CLI (
azd1.27.1 eller senare) och det enhetliga Foundry CLI-tilläggspaketet:# Install the unified bundle (provides azd ai agent, connection, inspector, # project, routine, skill, and toolbox). azd ext install microsoft.foundry
Viktigt
- En verktygslåda stöder högst ett verktyg utan fält
name(webbsökning, Azure AI-sökning, kodtolk, filsökning). Om du vill inkludera fler än en instans av samma verktygstyp anger du en uniknameför varje instans för att särskilja dem. Att inkludera två instanser av samma typ utan ettnamereturnerar ettinvalid_payloadfel. Mer information finns i Flera verktygstyper. - Lägg till ett
descriptioni varje verktyg i verktygslådan för att hjälpa modellen att välja rätt verktyg för varje begäran. - Granska noggrant varje verktygs dokumentation för att lära dig mer om konfiguration, begränsningar och varningar för enskilda verktyg.
Om du använder GitHub Copilot för Azure för att skapa en värdbaserad agent som använder verktygslådan, beskriver följande kunskapsreferenser samma slutpunktskontrakt (env var, rubriker, MCP-protokoll, källhänvisningsmönster och felsökning) som agenten måste implementera:
- Verktygslådereferens för vägledning om slutpunktsformat, MCP-protokoll, OAuth-medgivandehantering, källhänvisningsmönster och felsökning.
- Använd verktygslådan i en värdbaserad agent för att hitta vägledning om slutpunktsmatchning, env-var-kontrakt, nyttolastform, kodintegreringsmönster och spårning.
Snabbsökväg
- Skapa:Skapa en verktygslådeversion med ett eller flera verktyg. Håll varje kodfragment fokuserat på en uppgift och inom 30 rader. använd de länkade underhållna exemplen för fullständiga program.
- Publicera eller välj en version: Den första versionen blir standard automatiskt. För senare versioner, testa och lansera en version när du är redo att göra den till standardversion.
- Anslut och använd: Kopiera verktygslådans konsumentslutpunkt och integrera den i din agent.
- Verifiera: Använd den versionsspecifika slutpunkten för att visa en lista över tillgängliga verktyg och kör sedan en agentbegäran som anropar ett förväntat verktyg.
Funktionsstöd
SDK:er och verktyg stöder verktygslådans hanteringsåtgärder, enligt följande tabell.
| Verksamhet | Python SDK | REST API | .NET SDK | SDK för JavaScript | Azure Developer CLI (kommandoradsgränssnitt) | Gjuteri Verktygslåda |
|---|---|---|---|---|---|---|
| Uppdatera, lista, hämta och ta bort verktygslådan | ✔️ | ✔️ | ✔️ | ✔️ | Ej tillämpligt | ✔️ |
| Skapa verktygslådeversion | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Lista över verktygslådasversioner, hämta och ta bort | ✔️ | ✔️ | ✔️ | ✔️ | Ej tillämpligt | Nej. Användargränssnittet visar endast den senaste versionen. |
| Skyddsmekanism (RAI-policy) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Du kan också hantera verktygslådor konversationsvis med Foundry MCP Server. Se Hantera verktygslådor med Foundry MCP Server.
Du kan lägga till följande verktyg i en verktygslåda. Den här tabellen visar stöd för SDK och verktyg för varje verktyg och om verktyget också kan kopplas direkt till en agent (utanför en verktygslåda). Information om hur varje verktygs trafik flödar när ditt projekt använder nätverksisolering finns i Nätverksisolering för en verktygslåda.
| Tool | I en verktygslåda | Integrering av direktverktyg | Python SDK | REST API | .NET SDK | SDK för JavaScript | Azure Developer CLI (kommandoradsgränssnitt) | Gjuteri Verktygslåda |
|---|---|---|---|---|---|---|---|---|
| McP (Model Context Protocol) | ✅ Ja | ✅ Ja | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Webbsökning | ✅ Ja | ✅ Ja | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Azure AI-sökning | ✅ Ja | ✅ Ja | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Kodtolkare | ✅ Ja | ✅ Ja | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Filsökning | ✅ Ja | ✅ Ja | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| OpenAPI | ✅ Ja | ✅ Ja | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Nej |
| Agent-till-agent (A2A) | ✅ Ja | ✅ Ja | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Nej |
| Webbläsarautomatisering | ✅ Ja | ✅ Ja | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Nej |
| Nätverksinfrastruktur IQ | ✅ Ja | ✅ Ja | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Arbets-IQ | ✅ Ja | ✅ Ja | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Sök efter verktyg | ✅ Ja | ❌ Nej | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Kompetenser | ✅ Ja | ❌ Nej | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Nej |
Verktygstillgänglighet beror också på projektets region och modell. Innan du distribuerar en verktygslåda kontrollerar du att målregionen stöder de verktygstyper som du planerar att använda. Se Verktygsstöd efter region och modell.
Skapa en verktygslådeversion
Skapa en verktygslåda baserat på de verktyg du behöver.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import MCPToolboxTool, ToolSearchToolboxTool, WebSearchToolboxTool
# Create Foundry project client
endpoint = "https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>"
project = AIProjectClient(
endpoint=endpoint,
credential=DefaultAzureCredential(),
)
# Create toolbox version with web search and MCP tools
toolbox_version = project.toolboxes.create_version(
name="my-toolbox",
description="Toolbox with web search and an MCP server",
tools=[
WebSearchToolboxTool(),
MCPToolboxTool(
server_label="myserver",
server_url="https://your-mcp-server.example.com",
require_approval="never",
project_connection_id="my-key-auth-connection",
),
ToolSearchToolboxTool(),
],
)
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();
WebSearchToolboxTool webTool = new();
MCPToolboxTool mcpTool = new(serverLabel: "myserver")
{
ServerUri = new Uri("https://your-mcp-server.example.com"),
ToolCallApprovalPolicy = new McpToolCallApprovalPolicy(
GlobalMcpToolCallApprovalPolicy.NeverRequireApproval),
};
ToolSearchToolboxTool searchTool = new() { Name = "ToolBoxSearch" };
ToolboxVersion toolboxVersion = await toolboxClient.CreateVersionAsync(
name: "my-toolbox",
tools: [webTool, mcpTool, searchTool],
description: "Toolbox with web search, MCP, and tool search"
);
Console.WriteLine($"Created toolbox: {toolboxVersion.Name}, version: {toolboxVersion.Version}");
POST {project_endpoint}/toolboxes/my-toolbox/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{
"description": "Toolbox with web search, MCP, and tool search",
"tools": [
{
"type": "web_search",
"description": "Search the web for current information"
},
{
"type": "mcp",
"server_label": "myserver",
"server_url": "https://your-mcp-server.example.com",
"require_approval": "never",
"project_connection_id": "my-key-auth-connection"
},
{
"type": "toolbox_search"
}
]
}
Observera
Använd tokenomfång https://ai.azure.com/.default när du hämtar bärartoken.
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
// Create Foundry project client
const projectEndpoint = "https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>";
const project = new AIProjectClient(projectEndpoint, new DefaultAzureCredential());
const toolboxVersion = await project.toolboxes.createVersion(
"my-toolbox",
[
{
type: "web_search",
description: "Search the web for current information",
},
{
type: "mcp",
server_label: "myserver",
server_url: "https://your-mcp-server.example.com",
require_approval: "never",
project_connection_id: "my-key-auth-connection",
},
{ type: "toolbox_search" },
],
{
description: "Toolbox with web search, MCP, and tool search",
},
);
console.log(`Created toolbox: ${toolboxVersion.name}, version: ${toolboxVersion.version}`);
Använd Microsoft Foundry Toolkit för Visual Studio Code-tillägget för att skapa och publicera en verktygslåda från vyn Tools.
- Välj Foundry Toolkit i aktivitetsfältet.
- Under Mina resurser expanderar du Din projektnamn>Verktyg.
- Välj ikonen + Lägg till verktygslåda .
- På fliken Skapa ett anpassat verktyg anger du verktygslådans namn och beskrivning och lägger till de verktyg du vill använda.
- Om du vill aktivera avsiktsbaserad verktygsroutning väljer du Verktygssökning.
- Välj Publicera.
När du publicerar en ny verktygslåda skapas den första versionen. Den versionen blir standardversionen automatiskt.
Med det enhetliga microsoft.foundry tilläggspaketet (se Krav) skapar du en verktygslåda i två steg:
- Använd
azd ai connection createför att registrera varje projektanslutning som verktygslådan refererar till (ett anrop per autentiseringspost). - Använd
azd ai toolbox create --from-file <toolbox.yaml>för att skapa verktygslådan. YAML refererar till anslutningar efter namn och bäddar aldrig in autentiseringsuppgifter.
Mönstret är detsamma för varje anslutningstyp och autentiseringstyp:
Ange det aktiva projektet en gång per skal:
azd ai project set $PROJECT_ENDPOINTSkapa en anslutning med
azd ai connection create. Flaggorna skiljer sig åt per autentiseringstyp, men kommandoformen är alltid:azd ai connection create <name> \ --kind <remote-tool|remote-a2a|cognitive-search|GroundingWithCustomSearch> \ --target <endpoint-url> \ --auth-type <none|custom-keys|api-key|oauth2|user-entra-token|project-managed-identity|agentic-identity> \ [--custom-key "Header=Value" | --key <key> | --client-id ... --client-secret ... --authorization-url ... --token-url ... | --audience <aad-resource-uri>]Använd
azd ai connection listochazd ai connection show <name>för att inspektera anslutningar ochazd ai connection delete <name> --forceför att ta bort dem.Skapa en YAML-verktygslåda som refererar till en eller flera befintliga anslutningar efter namn. YAML bäddar aldrig in autentiseringsuppgifter:
# my-toolbox.yaml description: <human-readable description> connections: - name: <project-connection-name> # must already exist in the project # Optional: add connectionless built-in tools and policies. tools: - type: web_search name: web - type: code_interpreter container: { type: auto } name: code # Tool search is connectionless. - type: toolbox_search # For Azure AI Search, set the index in the tool entry: # - type: azure_ai_search # name: search # azure_ai_search: # indexes: # - project_connection_id: <azure-ai-search-connection-name> # index_name: <search-index-name> # For Bing Custom Search, set the instance in the tool entry: # - type: web_search # name: bing # custom_search_configuration: # project_connection_id: <bing-connection-name> # instance_name: <bing-instance-name> # Optional: attach existing project skills as MCP resources. skills: - name: <skill-name> # uses the skill's default version - name: <other-skill> version: "2" # pin to a specific skill version (string) policies: rai_config: rai_policy_name: <policy-name> # must already exist on the projectMinst en av
connections,skillsellertoolsmåste vara icke-tom. Kunskapsreferenser måste peka på färdigheter som redan finns i samma Foundry-projekt. se Använda kunskaper i Foundry för att skapa dem medazd ai skill create. Information om installation av verktygssökning från slutpunkt till slutpunkt finns i Använda verktygssökning.Skapa verktygslådan från filen:
azd ai toolbox create <toolbox-name> --from-file ./my-toolbox.yamlDen första versionen blir standard automatiskt. Använd
azd ai toolbox list,azd ai toolbox show <name>,azd ai toolbox version list <name>ochazd ai toolbox delete <name> --forceför att hantera verktygslådor.
Exempel: MCP-server med nyckelbaserad autentisering
# 1. Create the connection
azd ai connection create my-gh-conn \
--kind remote-tool \
--target https://api.githubcopilot.com/mcp/ \
--auth-type custom-keys \
--custom-key "Authorization=Bearer $GITHUB_PAT"
# 2. Create the toolbox
azd ai toolbox create my-toolbox \
--from-file ./my-toolbox.yaml \
--no-prompt
# my-toolbox.yaml
description: GitHub MCP toolbox
connections:
- name: my-gh-conn
Hämta verktygslådans MCP-slutpunkt
Det finns två slutpunktsmönster beroende på din roll:
| Roll | Slutpunkt | När du ska använda |
|---|---|---|
| Verktygslådeutvecklare | {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1 |
Testa eller verifiera en viss version innan du befordrar den till standardversion. |
| Konsument av verktygssvit | {project_endpoint}/toolboxes/{toolbox_name}/mcp?api-version=v1 |
Anslut agenter till verktygslådan. Serverar alltid default_version. Den första versionen som du skapar anges automatiskt som standard. |
Ersätt platshållarna med dina egna värden:
-
{project_endpoint}är slutpunkten för Foundry-projektet i formulärethttps://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>. Kopiera det från översiktssidan för projektet i Foundry-portalen eller från kolumnen Slutpunkts-URL i vyn Verktygslådor i Microsoft Foundry Toolkit för Visual Studio Code. -
{toolbox_name}och{version}är verktygslådans namn och version som du skapade i Skapa en verktygslåda version.
Tip
Anslut agenter till toolbox consumer-slutpunkten. Den levererar alltid default_version, så att du kan lansera nya versioner utan att ändra agentkoden eller driftsätta på nytt. Reservera den versionsspecifika toolbox developer-slutpunkten för att testa en version innan du flyttar den till produktion.
Observera
Den första versionen av en ny verktygslåda höjs automatiskt upp till default_version (v1). Om du behöver ändra standardvärdet senare kan du läsa Höja upp en version till standard.
I Microsoft Foundry Toolkit for Visual Studio Code-tillägget kopierar du konsumentslutpunkten för verktygslådan från vyn Toolboxes.
- Välj Foundry Toolkit i aktivitetsfältet.
- Under Mina resurser expanderar du Din projektnamn>Verktyg.
- Leta upp verktygslådan på fliken Verktygslådor .
- Kopiera slutpunkten i kolumnen Slutpunkts-URL .
Slutpunkts-URL-värdet är verktygslådekonsumentens slutpunkt. Om du vill skapa en versionsspecifik slutpunkt använder du utvecklarmönstret som visas i föregående tabell.
Verifiera verktygets tillgänglighet
Innan du kör den fullständiga agenten kontrollerar du att verktygslådan läser in de förväntade verktygen med hjälp av en MCP-klient-SDK mot slutpunkten. Använd den versionsspecifika slutpunkten för att verifiera en version innan du befordrar den till standard.
Installera MCP-klient-SDK:
pip install mcp
Ansluta till verktygslådan och listverktygen
import asyncio
from azure.identity import DefaultAzureCredential
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession
url = "https://<account>.services.ai.azure.com/api/projects/<proj>/toolboxes/<name>/versions/<version>/mcp?api-version=v1"
token = DefaultAzureCredential().get_token("https://ai.azure.com/.default").token
headers = {
"Authorization": f"Bearer {token}",
}
async def verify_toolbox():
async with streamablehttp_client(url, headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
# List available tools
tools_result = await session.list_tools()
print(f"Tools found: {len(tools_result.tools)}")
for tool in tools_result.tools:
print(f" - {tool.name}: {(tool.description or '')[:80]}")
# Call a tool (replace with actual tool name and arguments)
result = await session.call_tool("<tool_name>", arguments={})
print(result)
asyncio.run(verify_toolbox())
Observera
Använd fliken REST API för att verifiera verktygets tillgänglighet från .NET eller använd Python MCP-klient-SDK.
Använd den versionsspecifika slutpunkten (/versions/{version}/mcp) för att verifiera en version innan du marknadsför den.
1. Initiera MCP-sessionen:
POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}
2. Skicka det initierade meddelandet:
POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{"jsonrpc":"2.0","method":"notifications/initialized"}
3. Lista tillgängliga verktyg:
POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
4. Anropa ett verktyg:
POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"<TOOL_NAME>","arguments":{}}}
Installera MCP-klient-SDK:
npm install @modelcontextprotocol/sdk
Ansluta till verktygslådan och listverktygen
import { DefaultAzureCredential } from "@azure/identity";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
const url = "https://<account>.services.ai.azure.com/api/projects/<proj>/toolboxes/<name>/versions/<version>/mcp?api-version=v1";
const credential = new DefaultAzureCredential();
const token = await credential.getToken("https://ai.azure.com/.default");
const transport = new StreamableHTTPClientTransport(
new URL(url),
{
requestInit: {
headers: {
Authorization: `Bearer ${token.token}`,
},
},
},
);
const client = new Client({ name: "test", version: "1.0" });
await client.connect(transport);
// List available tools
const toolsResult = await client.listTools();
console.log(`Tools found: ${toolsResult.tools.length}`);
for (const tool of toolsResult.tools) {
console.log(` - ${tool.name}: ${(tool.description || "").slice(0, 80)}`);
}
// Call a tool (replace with actual tool name and arguments)
const result = await client.callTool({ name: "<tool_name>", arguments: {} });
console.log(result);
await client.close();
Använd mcp-slutpunkten för verktygslådan med ett kodat värdbaserat agentexempel för att verifiera inläsningen av verktygslådan i VS Code.
- I Foundry Toolkit, under Mina resurser>Ditt projektnamn>Verktyg, letar du upp den verktygslåda som du vill testa.
- Välj Scaffold-kodmall.
- Välj en projektmapp när du uppmanas att göra det.
- Följ de genererade
README.mdför att installera beroenden, konfigurera miljövariabler och kör exemplet lokalt. - Använd Agent Inspector eller kör
python main.pyför att bekräfta att verktygslådan läser in och svarar.
Använd fliken Python eller REST API i det här steget för versionsspecifik validering innan du höjer upp en ny verktygslåda.
Observera
Använd fliken REST API för att verifiera verktygets tillgänglighet eller använd Python MCP-klient-SDK.
Kontrollera – initiera: HTTP 200. Om du hoppar över initieringssteget misslyckas efterföljande anrop.
Kontrollera – tools/list:
len(tools) > 0– tom innebär att toolbox-versionen inte har konfigurerats korrekt.Varje verktyg har
name,descriptionochinputSchema. Information om namngivningskonventioner för verktyg finns i MCP-specifikationen.inputSchemahar ettpropertiesfält (vissa MCP-servrar utelämnar det här fältet, vilket bryter OpenAI).Verktygsnamn namnges efter verktygstyp:
Verktygstyp Format för verktygsnamn Example MCP {server_label}.{tool_name}myserver.some_toolOpenAPI {openapi_name}.{operationId}weatherapi.getForecastA2A Verktygets name(agentnamn), eller anslutningsnamnet omnameutelämnasmyagentAlla andra verktygstyper Fältvärdet nameeller standardverktygets namnweb_searchMCP-verktyg innehåller ett
_meta.tool_configurationblock som innehåller körningsinställningar somrequire_approval. Se Framtvinga godkännande av verktyg.Observera de exakta parameternamnen för anropssteget (till exempel
queryvsqueries).
Kontrollera - tools/call:
- Inget fält på den översta nivån
error. Om närvarande, inspekteraerror.code. Vanliga MCP-felkoder finns i MCP-specifikationen:-
-32006→ OAuth-medgivande krävs (extrahera URL frånerror.message). - Andra koder → fel på serversidan.
-
-
result.content[]innehåller poster med"type": "text"– detta är verktygets utdata. - För AI Search, kontrollera
result.structuredContent.documents[]för chunkmetadata (title,url,id,score). - För filsökning, kontrollera
result.content[].resource._metasegmentmetadata (title,file_id,document_chunk_id,score). - För Webbsökning, kontrollera
result.content[].resource._meta.annotations[]för URL-referenser (type,url,title,start_index,end_index). - För Fabric IQ kontrollerar du
result.structuredContent.documents[]för källhänvisningssegment. Varje dokument innehåller fältentitleochurlsom pekar tillbaka på det Fabric objektet (ontologi, dataagent eller Power BI semantisk modell) som används för att jorda svaret. - Leta efter
"ServerError"i textinnehåll – verktyget kördes men stötte på ett internt fel.
Exempel på verktygsspecifika tools/call argument:
| Verktygstyp | Argumenten |
|---|---|
| AI-sökning | {"query": "search text"} |
| Filsökning |
{"queries": ["search text"]} — eller {"queries": ["search text"], "vector_store_ids": ["<VECTOR_STORE_ID>"]} när vektorarkiv skickas dynamiskt |
| Kodtolkare | {"code": "print(2 ** 100)"} |
| Webbsökning | {"search_query": "weather in seattle"} |
| A2A | {"message": {"parts": [{"type": "text", "text": "Hello"}]}} |
| Fabric IQ | Varierar beroende på exponerat verktyg – vanligtvis {"query": "..."} för frågeverktyg |
| Arbets-IQ | {"message": {"parts": [{"type": "text", "text": "Hello"}]}} |
| MCP | {"query": "what is agent service"} |
Integrera verktygslådan i din agent
LangGraph
Krav för värdbaserat integrationsfragment: Installera langchain-azure-ai[tools]>1.2.3. Fragmentet använder AzureAIProjectToolbox; använd det underhållna LangGraph-exemplet för hela agenten, paketuppsättningen och distributionsfilerna.
.env fil:
FOUNDRY_PROJECT_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>
TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1
TOOLBOX_NAME=agent-tools
AZURE_AI_MODEL_DEPLOYMENT_NAME=gpt-4o
main.py (nyckelmönster):
from langchain_azure_ai.tools import AzureAIProjectToolbox
toolbox = AzureAIProjectToolbox(toolbox_name=TOOLBOX_NAME)
tools = await toolbox.get_tools()
Viktigt
Klassen langchain_azure_ai.tools.AzureAIProjectToolbox kräver langchain-azure-ai[tools]>1.2.3.
Microsoft Agent Framework
Installera agent-framework-foundry utöver det nödvändiga Azure identitetspaketet. Fullständig implementering finns i det underhållna Agent Framework-exemplet.
Använd FoundryToolbox från Agent Framework SDK för att ansluta till verktygslådans slutpunkt. Klassen hanterar autentisering av verktygslådan och vidarebefordrar anropskontexten hosted-agent.
.env fil:
FOUNDRY_PROJECT_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>
TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1
AZURE_AI_MODEL_DEPLOYMENT_NAME=gpt-4o
main.py (nyckelmönster):
from agent_framework.foundry import FoundryToolbox
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
# Toolbox MCP endpoint (platform-injected at runtime via TOOLBOX_ENDPOINT)
TOOLBOX_ENDPOINT = "https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1"
toolbox = FoundryToolbox(
credential,
url=TOOLBOX_ENDPOINT,
)
agent = chat_client.as_agent(
name="my-toolbox-agent",
instructions="You are a helpful assistant with access to Foundry toolbox tools.",
tools=[toolbox],
)
ResponsesAgentServerHost().run()
Copilot SDK
Krav för värdbaserat integrationsfragment: Installera GitHub Copilot SDK:t för din körtidsmiljö. Översikten beror på applikationsägda McpBridge och _get_toolbox_token hjälpfunktioner som inte implementeras här. Följ den befintliga toolbox-slutpunkten och autentiseringskontraktet samt integrationsmönstren för värdbaserade agenter. Ett underhållet fullständigt exempel är ännu inte tillgängligt.
Använd GitHub Copilot SDK för att skapa en agent driven av verktygslåda som kopplar ihop Copilots verktygsanrop med MCP-slutpunkten för Foundry-verktygslådan.
Observera
Copilot SDK avvisar verktygsnamn som innehåller punkter. Bryggan ersätter automatiskt . med _ i verktygsnamn. Blir till exempel myserver.get_infomyserver_get_info.
.env fil:
GITHUB_TOKEN=<your-github-token>
TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/versions/<version>/mcp?api-version=v1
agent.py (nyckelmönster – MCP-brygga):
# 1. Open an MCP session to the toolbox endpoint
bridge = McpBridge(endpoint=TOOLBOX_ENDPOINT, token=_get_toolbox_token())
await bridge.initialize()
mcp_tools = await bridge.list_tools()
# 2. Map MCP tool list to Copilot SDK tool definitions
# Dots in tool names are replaced with underscores (Copilot SDK requirement)
copilot_tools = [
{
"name": t["name"].replace(".", "_"),
"description": t.get("description", ""),
"parameters": t.get("inputSchema", {}),
}
for t in mcp_tools
]
# 3. Wire tool calls back to the MCP session
async def tool_handler(name: str, arguments: dict) -> str:
return await bridge.call_tool(name.replace("_", ".", 1), arguments)
# 4. Run the Copilot SDK agent
agent = Agent(
tools=copilot_tools,
tool_handler=tool_handler,
token=os.environ["GITHUB_TOKEN"],
)
Microsoft Agent Framework
Installera Microsoft.Agents.AI.Foundry.Hosting och Azure.Identity. För ett fullständigt projekt, se det offentliga Agent Framework hosted-toolbox-exemplet.
Använd AddFoundryToolboxes för att registrera en eller flera verktygslådor med den värdbaserade agenten. Integreringen identifierar den hanterade MCP-slutpunkten, autentiserar förfrågningar och inkluderar verktygslådans hälsostatus i readiness-proben.
Miljövariabler:
AZURE_AI_PROJECT_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>
AZURE_AI_MODEL_DEPLOYMENT_NAME=gpt-4o
TOOLBOX_NAME=<toolbox-name>
Program.cs (nyckelmönster):
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
string projectEndpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT")
?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable(
"AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-4o";
string toolboxName = Environment.GetEnvironmentVariable("TOOLBOX_NAME")
?? throw new InvalidOperationException("TOOLBOX_NAME is not set.");
var credential = new DefaultAzureCredential();
AIAgent agent = new AIProjectClient(new Uri(projectEndpoint), credential)
.AsAIAgent(
model: deploymentName,
instructions: "You are a helpful assistant with access to toolbox tools.",
name: "hosted-toolbox-agent");
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
builder.Services.AddFoundryToolboxes(credential, toolboxName);
var app = builder.Build();
app.MapFoundryResponses();
app.Run();
Observera
Integreringsexempel för det här steget är endast tillgängliga för Python och .NET.
Observera
Integreringsexempel för det här steget är endast tillgängliga för Python och .NET.
Använd tillägget Microsoft Foundry Toolkit för Visual Studio Code för att generera ett exempel på en värdbaserad agent som redan är kopplat till din verktygslåda.
- Välj Foundry Toolkit i aktivitetsfältet.
- Under Mina resurser expanderar du Din projektnamn>Verktyg.
- På fliken Verktygslådor letar du upp den verktygslåda som du vill använda och väljer sedan Kodmall för ställning.
- I kommandopaletten väljer du en projektmapp när du uppmanas att göra det.
- Öppna den genererade
README.mdoch följ anvisningarna för konfiguration, lokal körning och distribution för grundstrukturen.
Det genererade projektet innehåller startpunkten för den värdbaserade agenten, driftsättningsfiler och en README.md som innehåller de exakta stegen för installation, körning och driftsättning.
Om du vill integrera en verktygslåda i ett befintligt värdbaserat agentprojekt i stället för att generera ett nytt exempel använder du MCP-slutpunkten för verktygslådan med Python eller .NET mönster i det här avsnittet.
Skicka toolbox-ändpunkten till din agent
När du har skapat verktygslådan hämtar du dess MCP-slutpunkt med hjälp azd ai toolbox show av och skickar slutpunkten till agentkoden som en miljövariabel. Agenten läser variabeln vid start och använder den för att ansluta till verktygslådan.
Hämta verktygslådans ändpunkt:
azd ai toolbox show <toolbox-name> --output jsonFältet
endpointi svaret identifierar den valda versionen. Använd den för att testa den versionen före befordran. För en agent som ska följadefault_versionskapar du den icke-versionerade klientslutpunkten som visas i Hämta verktygslådans MCP-slutpunkt.Ange slutpunkten som en miljövariabel som din agent läser vid start:
# .env (or however your runtime loads environment variables) TOOLBOX_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>/toolboxes/<toolbox-name>/mcp?api-version=v1I agentkoden läser du
TOOLBOX_ENDPOINToch ansluter du till den med en MCP-klient. Använd Python- eller .NET-integrationsmönstren tidigare i det här avsnittet som referens för hur klienten konfigureras och för Entra-tokenenshttps://ai.azure.com/.defaultscope.
Hantera krav för godkännande av verktyg
Verktygslådan returnerar ett _meta.tool_configuration objekt till varje verktygspost som returneras av tools/list. När ett verktyg har require_approval angetts till "always"måste agentkörningen presentera den väntande åtgärden för användaren och vänta på bekräftelse innan verktyget anropas. MCP-slutpunkten blockerar inte tools/call. Efterlevnaden är helt och hållet agentens körtidsmiljös ansvar.
När verktygslådan har skapats och testats ansluter du den till en agent. Integrationsmönstret beror på agenttypen:
- Värdbaserad agent (din egen kod som körs i Foundry Agent Service): se Använda en verktygslåda med en värdbaserad agent för Agent Framework, LangGraph, Visual Studio Code och Azure Cli-integreringsmönster för utvecklare och krav på körningsgodkännande.
Konfigurera require_approval på ett verktyg
Ange require_approval när du skapar en verktygslådeversion. MCP-verktygsexemplen i Skapa en verktygslåda visar både "always" och "never" värden. Så här ställer du in den via SDK:et:
from azure.ai.projects.models import MCPToolboxTool
# Set require_approval on an MCP tool
toolbox_version = project.toolboxes.create_version(
name="my-toolbox",
tools=[
MCPToolboxTool(
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"
}
]
}
MCPToolboxTool mcpTool = new(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",
},
];
Använd fliken Python, .NET, JavaScript, REST API eller Azure Developer CLI för att konfigurera require_approval i verktygslådans definition. Arbetsflödet Microsoft Foundry Toolkit for Visual Studio Code extension i den här artikeln fokuserar på att skapa och använda verktygslådan i 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
Hantera verktygslådeversioner
Observera
Du kan bara ta bort verktygslådeversioner via Python SDK, .NET SDK, JavaScript SDK och REST API. Azure Developer CLI:t stöder åtgärderna lista, hämta och publicera (befordran av standardversion).
Verktygslådans versioner är oföränderliga ögonblicksbilder av verktygslådans verktygskonfiguration. Varje anrop till skapa-slutpunkten genererar en ny ToolboxVersionObject. Den överordnade ToolboxObject har ett default_version fält som styr vilken version MCP-slutpunkten ska ha. När du skapar en ny version marknadsförs den inte automatiskt – du bestämmer när du ska uppdatera default_version. Med den här processen kan du mellanlagra ändringar, testa en ny version oberoende av varandra och flytta upp den till produktion enligt ditt eget schema.
Observera
För Azure Developer CLI skapar varje muterande åtgärd som riktar sig mot den aktuella standardversionen – azd ai toolbox connection add/remove och azd ai toolbox skill add/remove – en ny verktygslåda som vidarebefordrar alla tidigare anslutna anslutningar och färdigheter med den begärda ändringen. Inget av dessa kommandon ändras default_versionautomatiskt . Kör azd ai toolbox publish <toolbox-name> <version> när du är redo att göra den nya versionen aktiv. Om du vill granska en väntande (icke-standardversion) använder du azd ai toolbox show <name> --version <n>.
| Objekt | Viktiga fält | Beskrivning |
|---|---|---|
ToolboxObject |
id, name, default_version |
Verktygslådans container.
default_version pekar på den aktiva versionen. |
ToolboxVersionObject |
id, name, version, description, created_at, tools[], policies |
En oföränderlig ögonblicksbild av verktygslådans verktygslista vid en tidpunkt.
policies.rai_config.rai_policy_name anger det valfria skyddsräcke som tillämpas på den här versionen. |
Skapa en ny version
Varje anrop skapar en ny version. Om verktygslådan inte finns ännu skapar processen den automatiskt. När du skapar den första versionen av en ny verktygslåda är v1 standardversionen tills du manuellt uppdaterar till en annan version.
# Create a new toolbox version
toolbox_version = project.toolboxes.create_version(
name="my-toolbox",
description="Updated tools v2",
tools=[...],
)
print(f"Created version: {toolbox_version.version}")
ToolboxVersion toolboxVersion = await toolboxClient.CreateVersionAsync(
name: "<toolbox-name>",
tools: [tool],
description: "Updated tools v2"
);
Console.WriteLine($"Created version: {toolboxVersion.Version}");
POST {project_endpoint}/toolboxes/<toolbox-name>/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{
"description": "Updated tools v2",
"tools": [...]
}
const toolboxVersion = await project.toolboxes.createVersion(
"<toolbox-name>",
[/* tools array */],
{ description: "Updated tools v2" },
);
console.log(`Created version: ${toolboxVersion.version}`);
Använd fliken Python, .NET, JavaScript eller REST API för att skapa en ny verktygslåda. Arbetsflödet för tillägget Microsoft Foundry Toolkit for Visual Studio Code i den här artikeln fokuserar på att skapa en verktygslåda och generera grundstrukturen för en värdbaserad agent som använder den.
Den här åtgärden stöds inte med Azure Developer CLI. Om du vill skapa en verktygslåda använder du fliken Python, .NET, REST API eller JavaScript.
Svaret är en ToolboxVersionObject som innehåller den nya version identifieraren.
Lista versioner
# List all toolbox versions
versions = list(project.toolboxes.list_toolbox_versions(name="<toolbox-name>"))
for v in versions:
print(f"{v.version} — created {v.created_at}")
List<ToolboxVersion> versions = await toolboxClient
.GetToolboxVersionsAsync("<toolbox-name>")
.ToListAsync();
Console.WriteLine($"Found {versions.Count} toolbox version(s).");
foreach (ToolboxVersion v in versions)
{
Console.WriteLine($" - {v.Name} ({v.Version})");
}
GET {project_endpoint}/toolboxes/<toolbox-name>/versions?api-version=v1
Authorization: Bearer {token}
const versions = project.toolboxes.listVersions("<toolbox-name>");
for await (const v of versions) {
console.log(`${v.version} — created ${v.created_at}`);
}
Använd fliken Python, .NET, JavaScript eller REST API för att visa verktygslådans versioner.
# The current default version is marked with *
azd ai toolbox version list <toolbox-name>
Hämta en specifik version
# Get a specific toolbox version
version_obj = project.toolboxes.get_toolbox_version(
toolbox_name="<toolbox-name>",
version="<version_id>",
)
ToolboxVersion versionObj = await toolboxClient.GetToolboxVersionAsync(
"<toolbox-name>",
"<version_id>"
);
Console.WriteLine($"Retrieved toolbox: {versionObj.Name} ({versionObj.Id})");
GET {project_endpoint}/toolboxes/<toolbox-name>/versions/{version}?api-version=v1
Authorization: Bearer {token}
const versionObj = await project.toolboxes.getVersion(
"<toolbox-name>",
"<version_id>",
);
console.log(`Retrieved version: ${versionObj.version}`);
Använd fliken Python, .NET, JavaScript eller REST API för att hämta en specifik version av verktygslådan.
azd ai toolbox version get <toolbox-name> <version_id>
Höja upp en version till standard
MCP-slutpunkten hanterar alltid default_version. Om du vill växla vilken version som är aktiv uppdaterar du verktygslådan:
# Promote a version to default
toolbox = project.toolboxes.update(
toolbox_name="<toolbox-name>",
default_version="<version_id>",
)
print(f"Active version: {toolbox.default_version}")
ToolboxRecord record = await toolboxClient.UpdateToolboxAsync(
"<toolbox-name>",
"<version_id>"
);
Console.WriteLine($"Active version: {record.DefaultVersion}");
PATCH {project_endpoint}/toolboxes/<toolbox-name>?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{
"default_version": "<version_id>"
}
default_version kan inte vara tom. Ersätt den med en ny version.
const toolbox = await project.toolboxes.update(
"<toolbox-name>",
"<version_id>",
);
console.log(`Active version: ${toolbox.default_version}`);
Använd fliken Python, .NET, JavaScript eller REST API för att höja upp en verktygslådeversion till standard.
Versioner av verktygslådan kan inte ändras. Använd publish för att göra en befintlig version till den nya standardinställningen:
# Roll back or forward to a specific version
azd ai toolbox publish <toolbox-name> <version_id> --no-prompt
publish är det enda sättet att ändra default_version från kommandoraden; muterande verb (connection add/remove, skill add/remove) skapar alltid en ny version utan att promovera den.
Ta bort en version
# Delete a toolbox version
project.toolboxes.delete_toolbox_version(
toolbox_name="<toolbox-name>",
version="<version_id>",
)
await toolboxClient.DeleteToolboxVersionAsync(
"<toolbox-name>",
"<version_id>"
);
DELETE {project_endpoint}/toolboxes/<toolbox-name>/versions/{version}?api-version=v1
Authorization: Bearer {token}
await project.toolboxes.deleteVersion(
"<toolbox-name>",
"<version_id>",
);
Använd fliken Python, .NET, JavaScript eller REST API för att ta bort en verktygslådeversion.
Den här åtgärden stöds inte med Azure Developer CLI. Om du vill ta bort en verktygslåda använder du fliken Python, .NET, REST API eller JavaScript.
Hantera verktygslådor med Foundry MCP Server
Foundry MCP Server (förhandsversion) exponerar verktygslådehantering som MCP-verktyg, så att du kan hämta, version, uppdatera och ta bort verktygslådor från en MCP-klient, till exempel GitHub Copilot i Visual Studio Code. Information om hur du konfigurerar servern finns i Kom igång med Foundry MCP Server (förhandsversion).
| Tool | Åtkomst | Beskrivning |
|---|---|---|
toolbox_get |
read | Hämta en verktygslåda och dess aktuella standardversion. |
toolbox_version_get |
read | Visa en lista över verktygslådeversioner eller hämta en specifik version. |
toolbox_version_create |
write | Skapa en oföränderlig version av verktygslådan. Om verktygslådan inte finns skapar det här verktyget det också. |
toolbox_update |
write | Skapa eller uppdatera en verktygslåda, inklusive dess standardversion. |
toolbox_delete |
write | Ta bort en verktygslåda. |
toolbox_version_delete |
write | Ta bort en specifik version av verktygslådan. |
Samma versionsregler gäller som med SDK:erna. När du skapar en version för en befintlig verktygslåda ändras inte standardversionen. Om du vill höja upp en version anropar du toolbox_update med defaultVersion inställd på den nya versionen. Innan du tar bort den aktuella standardversionen anger du en annan version som standard.
Exempeluppmaningar:
- "Visa mig verktygslådan
customer-support-tools." - "Hämta version 2 av
customer-support-tools." - "Skapa en ny version av
customer-support-tools." - "Ange version 2 av
customer-support-toolssom standard." - "Ange version 1 av
customer-support-toolssom standard och ta sedan bort version 2." - "Ta bort verktygslådan
old-support-tools."
Den fullständiga verktygsreferensen finns i Tillgängliga verktyg och exempelfrågor för Foundry MCP Server.
Konfigurera verktyg
Välj det verktygstyp och autentiseringsmönster som matchar ditt scenario. Välj fliken för önskad SDK eller distributionsmetod.
Varje verktygs azd-flik nedan visar den deklarativa verktygslådan YAML. Om du vill skapa en verktygslåda utan ett agentprojekt använder du azd ai toolbox create --from-file arbetsflödet och tillämpar data per verktyg som visas i följande avsnitt. Om du vill distribuera en verktygslåda med en värdbaserad agent modellerar du den som en azure.ai.toolbox tjänst i azure.yaml och kopplar agenten till den med uses: eller toolboxes:.
Flera verktygstyper
En enda verktygslåda kan samla olika verktygstyper. I följande exempel kombineras webbsökning, Azure AI-sökning och en MCP-server i en verktygslåda:
{
"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"
}
]
}
Observera
Varje verktygstyp (web_search, azure_ai_search, code_interpreter, file_search) kan visas högst en gång utan fält name . Om du vill inkludera flera instanser av samma typ anger du ett unikt name för varje instans – se nästa exempel.
Begränsningar för flera verktyg
Du kan ta med högst en instans av varje inbyggd verktygstyp utan ett name fält i en verktygslåda. Om du inkluderar två instanser av samma typ utan en namereturnerar API:et:
400 invalid_payload: Multiple tools without identifiers found...
Två instanser av samma verktygstyp
Använd name fältet för att inkludera flera instanser av samma verktygstyp i en och samma verktygslåda. Varje namngiven instans behandlas som ett separat verktyg och måste ha ett unikt namn.
{
"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>"
}
]
}
}
]
}
Varje verktygstyp har en egen konfiguration av verktygslådan – anslutningsautentiseringstyper, SDK-kodfragment per språk och alla verktygslådespecifika beteenden. Informationen finns i referensartikeln för varje verktyg. Se tabellen Funktionsstöd för en länk till varje verktyg.
För verktygslådespecifikt beteende – till exempel dynamiskt vektorarkiv för filsökning (parameter åsidosättning) eller filuppladdningar på resursnivå för kodtolkare och filsökning – kan du läsa den länkade artikeln för varje verktyg.
Konfigurera skyddsräcken
Tillämpa en namngiven skyddsräckesprincip på en verktygslådeversion för att framtvinga ansvarsfull AI-innehållsfiltrering på verktygsindata och utdata. Skyddsmekanismen fungerar på verktygslagret, oberoende av eventuella innehållsfilter på modellnivå.
Referera till ett skyddsräcke med dess principnamn, som du konfigurerar i Foundry-portalen under Skyddsräcken. Ange policies.rai_config.rai_policy_name namnet på principen när du skapar en verktygslådeversion.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import WebSearchToolboxTool
endpoint = "https://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>"
project = AIProjectClient(endpoint=endpoint, credential=DefaultAzureCredential())
toolbox_version = project.toolboxes.create_version(
name="my-toolbox",
description="Toolbox with guardrail",
tools=[WebSearchToolboxTool()],
policies={
"rai_config": {
"rai_policy_name": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>"
}
},
)
print(f"Created version: {toolbox_version.version}")
POST {endpoint}/toolboxes/{toolbox_name}/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{
"description": "Toolbox with guardrail",
"tools": [{ "type": "web_search" }],
"policies": {
"rai_config": {
"rai_policy_name": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>"
}
}
}
#pragma warning disable AAIP001
using Azure.AI.Projects;
using Azure.AI.Projects.Agents;
using Azure.Identity;
var projectEndpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT");
DefaultAzureCredential credential = new();
AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: credential);
AgentToolboxes toolboxClient = projectClient.AgentAdministrationClient.GetAgentToolboxes();
var toolboxVersion = toolboxClient.CreateVersion(
name: "my-toolbox",
description: "Toolbox with guardrail",
tools: [new WebSearchToolboxTool()],
policies: new ToolboxPolicies
{
RaiConfig = new RaiConfig { RaiPolicyName = "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>" }
});
Console.WriteLine($"Created version: {toolboxVersion.Version}");
const toolboxVersion = await project.toolboxes.createVersion(
"my-toolbox",
[{ type: "web_search" }],
{
description: "Toolbox with guardrail",
policies: {
rai_config: {
rai_policy_name: "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>",
},
},
},
);
console.log(`Created version: ${toolboxVersion.version}`);
name: my-toolbox
description: Toolbox with guardrail
policies:
rai_config:
rai_policy_name: /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<account-name>/raiPolicies/<policy-name>
tools:
- type: web_search
Guardrail-konfigurationen är ännu inte tillgänglig i VS Code-tillägget. Använd REST API, SDK eller Azure Developer CLI för att konfigurera skyddsräcken.
Koppla kunskaper till en verktygslåda
Lägg till färdigheter i en version av verktygslådan för att göra dem tillgängliga för agenter via verktygslådans MCP-slutpunkt. Varje kunskapsreferens anger kunskapsnamnet och en valfri version. Utelämna version för att använda kompetensens default_version; fäst en version-sträng för att använda en oföränderlig ögonblicksbild.
En verktygslådeversion kan innehålla verktyg, färdigheter eller både och. I följande exempel skapas en verktygslådeversion som innehåller en enda kunskapsreferens. Om du vill lägga till kunskaper i en verktygslåda som redan har verktyg inkluderar du samma tools som du använde i Skapa en verktygslåda tillsammans med matrisen skills .
Viktigt
Kunskaper som är kopplade till en verktygslåda måste finnas i samma Foundry-projekt. Referenser mellan projekt stöds inte.
När en agent eller MCP-klient ansluter till verktygslådans slutpunkt exponeras kunskaper som MCP-resurser. MCP-klienten eller agentramverket måste ha stöd för MCP-resursprotokollet för att automatiskt identifiera och läsa in färdigheter. För att verifiera att färdigheter kan upptäckas anropar du resources/list på Toolbox-MCP-slutpunkten och bekräftar att dina färdighetsnamn visas i svaret.
POST {endpoint}/toolboxes/{toolbox_name}/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
Foundry-Features: Skills=V1Preview
{
"description": "Toolbox with a skill reference",
"tools": [],
"skills": [
{
"type": "skill_reference",
"name": "greeting"
}
]
}
Så här fäster du en specifik version:
{
"skills": [
{
"type": "skill_reference",
"name": "greeting",
"version": "v1"
}
]
}
from azure.ai.projects.models import ToolboxSkillReference
toolbox_version = project.toolboxes.create_version(
name="my-toolbox",
description="Toolbox with a skill reference",
tools=[],
skills=[
ToolboxSkillReference(name="greeting"), # use default version
# ToolboxSkillReference(name="greeting", version="1"), # pin to version 1
],
)
print(f"Created toolbox version: {toolbox_version.id}")
#pragma warning disable AAIP001
// Reuse the AgentToolboxes client (toolboxClient) from Step 1.
ToolboxSkillReference skillRef = new("greeting");
// To pin a version: new ToolboxSkillReference("greeting") { Version = "1" }
ToolboxVersion toolboxVersion = toolboxClient.CreateVersion(
name: "my-toolbox",
tools: [],
skills: [skillRef],
description: "Toolbox with a skill reference"
);
Console.WriteLine($"Created toolbox version: {toolboxVersion.Id}");
const toolboxVersion = await project.toolboxes.createVersion(
"my-toolbox",
[],
{
description: "Toolbox with a skill reference",
skills: [
{ type: "skill_reference", name: "greeting" },
// { type: "skill_reference", name: "greeting", version: "v1" }, // pin to v1
],
},
);
console.log(`Created toolbox version: ${toolboxVersion.id}`);
Azure Developer CLI stöder kunskapsreferenser på två sätt: deklarativt som ett toppnivåblock skills: i YAML-filen azd ai toolbox create --from-file, och imperativt med verben azd ai toolbox skill add/list/remove. Varje referens tar en name (obligatorisk) och en valfri version (sträng). Utelämna version för att följa skillens default_version; ange en versionssträng för att låsa verktygspaketet till en oföränderlig ögonblicksbild.
Deklarera färdigheter när du skapar verktygslådan
# my-toolbox.yaml
description: Toolbox with skill references
connections:
- name: my-gh-conn
skills:
- name: greeting # follows the skill's default version
- name: review-checklist
version: "2" # pin to skill version 2
azd ai toolbox create my-toolbox --from-file ./my-toolbox.yaml --no-prompt
Lägga till, lista och ta bort kunskaper i en befintlig verktygslåda
# Add a skill (follows default version)
azd ai toolbox skill add my-toolbox greeting
# Add a skill pinned to a specific version
azd ai toolbox skill add my-toolbox review-checklist@2
# Add multiple skills from a file (same shape as the create YAML's skills block)
azd ai toolbox skill add my-toolbox --from-file ./skills.yaml
# List skill references on the current default version
azd ai toolbox skill list my-toolbox --output table
# Remove a skill (--force skips the confirmation prompt; multiple names allowed)
azd ai toolbox skill remove my-toolbox greeting --force
skill list visar endast standardversionen. Fästa färdigheter visar sin version; ofästa färdigheter visar (default). Om du vill granska färdigheter i en väntande version kör du azd ai toolbox show <toolbox> --version <n> --output json och läser arrayen skills.
Viktigt
skill add och skill remove skapar var och en en ny version av verktygslådan som behåller alla tidigare kopplade anslutningar och färdigheter, med den begärda ändringen tillämpad.
De höjer inte upp den nya versionen som standard, så ändringar visas inte för MCP-klienter förrän du kör azd ai toolbox publish <toolbox> <version>. Om du vill ändra den låsta versionen av en kompetens som redan är kopplad – till exempel uppgradera greeting från v1 till v2 – kör du tre kommandon i ordning: skill remove, publish till den nya versionen och sedan skill add <name>@<new-version> (skill add blockerar dubbletter när de kontrolleras mot den nuvarande standardversionen).
Kunskapsnamn måste överensstämma med ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$ (små bokstäver, siffror och bindestreck; högst 64 tecken; inga inledande eller avslutande bindestreck). Ett avslutande @ i <name>@<version> (en tom version) avvisas.
Kunskapsreferenser kan för närvarande inte konfigureras via VS Code-tillägget. Använd REST API eller SDK för att konfigurera kunskaper.
Validera identifiering av färdigheter
När du har bifogat kunskaper till en verktygslådeversion kontrollerar du att du kan identifiera dem via MCP-slutpunkten för verktygslådan med hjälp av MCP-Python SDK:
import asyncio
from azure.identity import DefaultAzureCredential
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def list_skills():
credential = DefaultAzureCredential()
token = credential.get_token("https://ai.azure.com/.default").token
toolbox_url = "{endpoint}/toolboxes/my-toolbox/mcp?api-version=v1"
headers = {
"Authorization": f"Bearer {token}",
}
async with streamablehttp_client(toolbox_url, headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
resources = await session.list_resources()
for resource in resources.resources:
print(f"Skill: {resource.uri} - {resource.name}")
asyncio.run(list_skills())
Färdigheter visas som MCP-resurser med URI:er i formatet skill://{name}.
Använd färdigheter från en agent (Microsoft Agent Framework, .NET)
I .NET använder du AgentSkillsProviderBuilder().UseMcpSkills(mcpClient) från Microsoft Agent Framework SDK för att identifiera MCP-baserade kunskaper från en slutpunkt för verktygslådan och mata in dem som AIContextProviders på agenten. Agenten läser sedan in varje funktions instruktioner under körning när modellen avgör att den är relevant. Följande Program.cs hostar agenten med värdlagret för Responses (AddFoundryResponses och MapFoundryResponses).
using System.Net.Http.Headers;
using Azure.AI.Projects;
using Azure.Core;
using Azure.Identity;
using DotNetEnv;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;
// Load .env file if present (for local development).
Env.TraversePath().Load();
string projectEndpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT")
?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT environment variable is not set.");
string deployment = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME")
?? throw new InvalidOperationException("AZURE_AI_MODEL_DEPLOYMENT_NAME environment variable is not set.");
string toolboxName = Environment.GetEnvironmentVariable("TOOLBOX_NAME")
?? throw new InvalidOperationException("TOOLBOX_NAME environment variable is not set.");
// Build the Foundry Toolbox MCP URL from the project endpoint and toolbox name.
string toolboxMcpServerUrl = $"{projectEndpoint.TrimEnd('/')}/toolboxes/{toolboxName}/mcp?api-version=v1";
TokenCredential credential = new DefaultAzureCredential();
// HttpClient that attaches a fresh Foundry bearer token to every request.
// CheckCertificateRevocationList = true satisfies CA5399.
using var httpClient = new HttpClient(
new BearerTokenHandler(credential, "https://ai.azure.com/.default")
{
CheckCertificateRevocationList = true,
});
Console.WriteLine($"Connecting to Foundry Toolbox '{toolboxName}' MCP server...");
// Connect to the Foundry Toolbox MCP endpoint.
await using var mcpClient = await McpClient.CreateAsync(
new HttpClientTransport(
new HttpClientTransportOptions
{
Endpoint = new Uri(toolboxMcpServerUrl),
Name = toolboxName,
TransportMode = HttpTransportMode.StreamableHttp,
},
httpClient));
// AgentSkillsProvider implements progressive disclosure over the MCP-discovered skills:
// names and descriptions are advertised in the system prompt, and the full skill body
// (and any supplementary resources) is loaded on demand when the model decides it is
// relevant.
var skillsProvider = new AgentSkillsProviderBuilder()
.UseMcpSkills(mcpClient)
.Build();
AIAgent agent = new AIProjectClient(new Uri(projectEndpoint), credential)
.AsAIAgent(new ChatClientAgentOptions
{
Name = "foundry-toolbox-mcp-skills",
Description = "Agent that discovers MCP-based skills from a Foundry Toolbox and exposes them via AgentSkillsProvider.",
ChatOptions = new ChatOptions
{
ModelId = deployment,
Instructions = "You are a helpful assistant.",
},
AIContextProviders = [skillsProvider],
});
var builder = AgentHost.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
builder.RegisterProtocol("responses", endpoints => endpoints.MapFoundryResponses());
var app = builder.Build();
app.Run();
// HttpClientHandler that attaches a fresh Foundry bearer token to every outgoing request.
internal sealed class BearerTokenHandler(TokenCredential credential, string scope) : HttpClientHandler
{
private readonly TokenRequestContext _tokenContext = new([scope]);
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
AccessToken token = await credential.GetTokenAsync(this._tokenContext, cancellationToken).ConfigureAwait(false);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token.Token);
return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
}
}
Det fullständiga exemplet, inklusive projektfiler och distributionssteg, finns i exemplet Kompetenser i verktygslådan.
Påminnelse
Verktyget reminder_preview gör det möjligt för en värdbaserad agent att schemalägga sig själv att köras igen vid en framtida tidpunkt. När agenten anropar det här verktyget anger den en fördröjning i minuter. Efter den fördröjningen anropar Foundry samma agent igen i samma konversation.
Felsöka
| Symptom | Sannolik orsak | Åtgärda |
|---|---|---|
tools/list returnerar nollverktyg för MCP- eller A2A-verktyg |
Ogiltiga eller saknade autentiseringsuppgifter för anslutning för den fjärranslutna MCP-servern eller A2A-agenten. Verktygslådan kan inte hämta verktygsmanifest från fjärrslutpunkten utan giltig autentisering. | Kontrollera att det project_connection_id finns i foundry-projektet och att autentiseringsuppgifterna är korrekta. Prova att ansluta till MCP-servern direkt för att testa autentiseringskonfigurationen. Om du använder hanterad identitet (PMI, agentidentitet eller MI) kontrollerar du rätt RBAC-rolltilldelningar för anroparen på målresursen. |
tools/list returnerar nollverktyg för OpenAPI-verktyg |
Ogiltig OpenAPI-specifikation. Verktygslådan konstruerar verktygsmanifestet från specifikationen, vilket misslyckas om specifikationen är felaktigt utformad. | Verifiera ditt OpenAPI-specifikationsinnehåll. Kontrollera att den överensstämmer med OpenAPI 3.0 eller 3.1 och innehåller giltiga paths, operationId värden och parameterscheman. Om du använder hanterad identitetsautentisering kontrollerar du även RBAC-rolltilldelningar för måltjänsten. |
tools/list returnerar färre verktyg än förväntat |
allowed_tools Filtret innehåller felaktiga eller felstavade verktygsnamn. Verktygsnamn är skiftlägeskänsliga och måste följa MCP-specifikationen för verktygsnamn (inga blanksteg eller specialtecken). |
Ta bort allowed_tools tillfälligt och anropa tools/list för att hämta den fullständiga verktygslistan. Använd de exakta namnen från svaret för att ange värden för allowed_tools. |
tools/list returnerar noll verktyg (andra verktygstyper) |
Verktygslådan är inte helt etablerad eller så stöds inte verktygstypen i regionen. För inbyggda verktyg (webbsökning, AI-sökning, kodtolkare, filsökning) är verktygsmanifesten konstruerade på serversidan och kräver inte autentisering – om de returnerar tom kanske verktygslådans version inte har etablerats ännu. | Vänta 10 sekunder och försök igen. |
400 Multiple tools without identifiers |
Två icke namngivna verktygstyper i en verktygslåda | Behåll högst en namnlös typ; lägg till server_label i alla MCP-verktyg. |
CONSENT_REQUIRED (kod -32006) |
OAuth-anslutning kräver användarmedgivande | Öppna medgivande-URL:en i en webbläsare och slutför OAuth-flödet och försök sedan igen. |
401 på MCP-anrop |
Förfallen token eller fel behörighetsområde | Använd omfång https://ai.azure.com/.default och uppdatera token. |
| Verktygsnamn matchar inte | MCP-verktygsnamn prefixas med server_label |
Använd {server_label}.{tool_name} format (till exempel myserver.get_info). |
500 på send_ping() |
Verktygslåda MCP-servern implementerar inte MCP-metoden ping . |
Använd klassen Microsoft Agent FrameworkFoundryToolbox, som hanterar verktygslådeanslutningen. Anropa inte send_ping() direkt. |
500 på prompts/list |
Den Foundry MCP-servern implementerar inte prompts/list. |
Skicka load_prompts=False (eller motsvarande) till mcp-klientkonstruktorn. |
500 med icke-direktuppspelning tools/call |
Icke-direktuppspelningsläge (stream=False) stöds inte för MCP-slutpunkter för verktygslådan. |
Använd alltid stream=True när du anropar verktygslådans MCP-verktyg. |
500 på tools/list |
Tillfälligt serverfel | Försök igen efter några sekunder. |
| Miljövariabler som skrivs över vid körning | Plattformen reserverar alla miljövariabler som är prefix med FOUNDRY_ och kan tyst skriva över användardefinierade värden. |
Byt namn på anpassade miljövariabler för att undvika prefixet FOUNDRY_ (till exempel använd TOOLBOX_MCP_ENDPOINT i stället FOUNDRY_TOOLBOX_ENDPOINTför ). |
Påminnelseverktyget är endast tillgängligt för värdbaserade agenter. Du kan inte använda påminnelseverktyget med promptagenter.
Fullständiga installationsinstruktioner, användningsexempel och begränsningar finns i Påminnelseverktyget för agenter med självschemaläggning.
Region- och modellkompatibilitet
Tillgängligheten för verktygslådan beror på två faktorer utanför projektregionen:
- Region: Vissa verktygstyper är inte tillgängliga i varje region som stöder agenttjänsten. En region som har stöd för verktygslådans slutpunkt kanske till exempel inte stöder alla inbyggda verktygstyper.
Innan du distribuerar en verktygslåda kontrollerar du att målregionen stöder de verktygstyper som du planerar att använda. Fullständiga kompatibilitetstabeller finns i Verktygsstöd per region och modell.
Relaterat innehåll
- Ansluta agenter till Model Context Protocol-servrar
- Tillgängliga verktyg och exempelfrågor för Foundry MCP Server
- Lägga till MCP-serverautentisering
- Webbsökningsverktyg
- Azure AI-sökning-verktyg
- Översikt över skyddsräcken
- Hantera färdigheter
- Distribuera en värdbaserad agent
- Lägga till en anslutning till projektet
- Konfigurera nätverksisolering för Microsoft Foundry