Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Avertissement
Lorsque vous vous connectez à des outils non-Foundry, vous risquez d’entraîner des coûts et des données peuvent être envoyées en dehors de la limite de conformité de Foundry et traitées en fonction des conditions générales et des stratégies de gestion des données applicables. Consultez la documentation de l’outil pour savoir comment gérer l’accès à l’outil.
Cet article vous montre comment créer une boîte à outils, ajouter et configurer des outils, vérifier qu’ils chargent, intégrer la boîte à outils dans un agent hébergé et gérer les versions de boîte à outils. Pour une introduction conceptuelle aux boîtes à outils, consultez Qu’est-ce que la boîte à outils dans Foundry ?. Pour connaître la syntaxe de configuration des outils et les options d’authentification pour chaque type d’outil, consultez Configurer des outils.
Conditions préalables
Un projet Microsoft Foundry actif.
RBAC : Accordez le rôle Utilisateur Foundry sur le projet Foundry à chaque identité qui s’applique à votre scénario :
- Développeur (toujours requis) : identité qui crée, met à jour et gère les versions de boîte à outils.
- Identité de l’agent (obligatoire si vous utilisez un agent d’invite) : identité managée de l’agent qui appelle des outils au moment de l’exécution.
- Utilisateur final (obligatoire uniquement pour les flux OAuth) — tout utilisateur dont l’identité transite via des connexions OAuth ou UserEntraToken (par exemple, des flux MCP basés sur OAuth ou des flux de jeton Entra utilisateur (transfert direct de l’identité utilisateur gérée)).
Pour obtenir des instructions pas à pas pour affecter le rôle Utilisateur Foundry à une identité d’agent, consultez Affecter des autorisations à l’identité de l’agent.
Votre projet Foundry doit se trouver dans l’une des régions prises en charge. Les types d’outils individuels au sein d’une boîte à outils sont plus limités par région et par modèle . Tous les types d’outils ne sont pas disponibles dans chaque région ou avec chaque modèle. Consultez la compatibilité des régions et des modèles.
Installez l’extension Microsoft Foundry Toolkit pour Visual Studio Code à partir de la Place de marché Visual Studio Code.
sdk Python :
pip install azure-ai-projects azure-identity.NET SDK : installez l’ensemble de packages d’aperçu cohérent et Azure Identity :
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.IdentityKit de développement logiciel (SDK) JavaScript :
npm install @azure/ai-projects @azure/identityAzure Developer CLI : installez l’interface CLI de développement Azure (
azd1.27.1 ou ultérieure) et le bundle d’extension Cli Foundry unifié :# Install the unified bundle (provides azd ai agent, connection, inspector, # project, routine, skill, and toolbox). azd ext install microsoft.foundry
Important
- Une boîte à outils prend en charge au maximum un outil sans
namechamp (Recherche web, Recherche Azure AI, Interpréteur de code, Recherche de fichiers). Pour inclure plusieurs instances du même type d’outil, définissez une instance uniquenamesur chaque instance pour les différencier. Inclure deux instances du même type sansnamerenvoie une erreurinvalid_payload. Pour plus d’informations, consultez Plusieurs types d’outils. - Ajoutez un
descriptionà chaque outil de votre boîte à outils pour que le modèle puisse sélectionner l’outil approprié pour chaque requête. - Examinez attentivement la documentation de chaque outil pour en savoir plus sur la configuration, les limitations et les avertissements individuels des outils.
Si vous utilisez GitHub Copilot pour Azure pour générer une structure d'agent hébergé qui consomme la boîte à outils, les références de compétences suivantes décrivent le même contrat de point de terminaison (env var, en-têtes, protocole MCP, modèles de citation et résolution des problèmes) que l'agent doit implémenter :
- Informations de référence sur la boîte à outils pour obtenir des conseils sur le format de point de terminaison, le protocole MCP, la gestion des consentements OAuth, les modèles de citation et la résolution des problèmes.
- Utilisez la boîte à outils d’un agent hébergé pour trouver des conseils sur la résolution de point de terminaison, le contrat env-var, la forme de charge utile, les modèles d’intégration de code et le suivi.
Chemin d’accès rapide
- Créer :Créerune version de boîte à outils avec un ou plusieurs outils. Conservez chaque extrait de code axé sur une tâche et dans 30 lignes ; utilisez les exemples gérés liés pour les applications complètes.
- Publiez ou sélectionnez une version : La première version devient automatiquement la version par défaut. Pour les versions ultérieures, testez et promouvez une version lorsque vous êtes prêt à le rendre par défaut.
- Connectez et utilisez : Copiez le point de terminaison du consommateur de la boîte à outils, puis intégrez-le à votre agent.
- Vérifiez : Utilisez le point de terminaison spécifique à la version pour répertorier les outils disponibles, puis exécutez une demande d’agent qui appelle un outil attendu.
Prise en charge des fonctionnalités
Les kits SDK et les outils prennent en charge les opérations de gestion des boîtes à outils, comme indiqué dans le tableau suivant.
| Operation | SDK Python | REST API | Kit de développement logiciel (SDK) .NET | Kit de développement logiciel (SDK) JavaScript | Azure CLI pour développeurs | Boîte à outils Foundry |
|---|---|---|---|---|---|---|
| Mise à jour de la boîte à outils, liste, récupération et suppression. | ✔️ | ✔️ | ✔️ | ✔️ | N/A | ✔️ |
| Création de la version de la boîte à outils | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Liste des versions de la boîte à outils, obtenir et supprimer | ✔️ | ✔️ | ✔️ | ✔️ | N/A | Non. L’interface utilisateur affiche uniquement la dernière version. |
| Garde-fou (stratégie RAI) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Vous pouvez également gérer les boîtes à outils conversationnellement avec Foundry MCP Server. Consultez Gérer les boîtes à outils avec Foundry MCP Server.
Vous pouvez ajouter les outils suivants à une boîte à outils. Ce tableau présente la prise en charge du SDK et des outils pour chaque outil et indique si l’outil peut également être attaché directement à un agent (en dehors d’une boîte à outils). Pour savoir comment le trafic de chaque outil circule lorsque votre projet utilise l’isolation réseau, consultez l’isolation réseau pour une boîte à outils.
| Tool | Dans une boîte à outils | Intégration directe de l’outil | SDK Python | REST API | Kit de développement logiciel (SDK) .NET | Kit de développement logiciel (SDK) JavaScript | Azure CLI pour développeurs | Boîte à outils Foundry |
|---|---|---|---|---|---|---|---|---|
| Protocole de contexte de modèle (MCP) | ✅ Oui | ✅ Oui | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Recherche web | ✅ Oui | ✅ Oui | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Recherche Azure AI | ✅ Oui | ✅ Oui | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Interpréteur de code | ✅ Oui | ✅ Oui | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Recherche de fichiers | ✅ Oui | ✅ Oui | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| OpenAPI | ✅ Oui | ✅ Oui | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Non |
| Agent à agent (A2A) | ✅ Oui | ✅ Oui | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Non |
| Automatisation du navigateur | ✅ Oui | ✅ Oui | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Non |
| Fabric IQ | ✅ Oui | ✅ Oui | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| IQ de travail | ✅ Oui | ✅ Oui | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Recherche d’outils | ✅ Oui | ❌ Non | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Compétences | ✅ Oui | ❌ Non | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Non |
La disponibilité des outils dépend également de la région et du modèle de votre projet. Avant de déployer une boîte à outils, vérifiez que votre région cible prend en charge les types d’outils que vous envisagez d’utiliser. Consultez la prise en charge des outils par région et par modèle.
Créer une version de boîte à outils
Créez une version de boîte à outils en fonction des outils dont vous avez besoin.
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"
}
]
}
Note
Utilisez la portée https://ai.azure.com/.default du jeton pour obtenir le jeton porteur.
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}`);
Utilisez l’extension Microsoft Foundry Toolkit pour Visual Studio Code pour créer et publier une boîte à outils à partir de la vue Tools.
- Sélectionnez Foundry Toolkit dans la barre d’activité.
- Sous Mes ressources, développez Votre nom de projet>Outils.
- Sélectionnez l’icône + Ajouter une boîte à outils .
- Sous l’onglet Générer une boîte à outils personnalisée , entrez le nom et la description de la boîte à outils, puis ajoutez les outils souhaités.
- Pour activer le routage des outils basés sur l’intention, sélectionnez Recherche d’outils.
- Cliquez sur Publier.
La publication d’une nouvelle boîte à outils crée sa première version. Cette version devient automatiquement la version par défaut.
Avec l’offre groupée d’extensions unifiées microsoft.foundry (voir Conditions préalables), créez une boîte à outils en deux étapes :
- Utilisez
azd ai connection createpour enregistrer chaque connexion au projet à laquelle la boîte à outils fait référence (un appel par entrée d’informations d’identification). - Utilisez
azd ai toolbox create --from-file <toolbox.yaml>pour créer la boîte à outils. YaML référence les connexions par nom et n’incorpore jamais les informations d’identification.
Le modèle est le même pour chaque type de connexion et type d’authentification :
Configurez le projet actif une fois pour chaque shell :
azd ai project set $PROJECT_ENDPOINTCréez une connexion avec
azd ai connection create. Les indicateurs diffèrent par type d’authentification, mais la forme de commande est toujours :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>]Utilisez
azd ai connection listetazd ai connection show <name>pour inspecter les connexions, etazd ai connection delete <name> --forcepour les supprimer.Créez une boîte à outils YAML qui référence une ou plusieurs connexions existantes par nom. Le YAML n’incorpore jamais les informations d’identification :
# 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 projectAu moins un de
connections,skillsoutoolsdoit être non vide. Les références de compétence doivent pointer vers les compétences qui existent déjà dans le même projet Foundry ; voir Utiliser des compétences dans Foundry pour les créer avecazd ai skill create. Pour plus d’informations sur la configuration de la recherche d’outils de bout en bout, consultez Utiliser la recherche d’outils.Créez la boîte à outils à partir de ce fichier :
azd ai toolbox create <toolbox-name> --from-file ./my-toolbox.yamlLa première version devient automatiquement la version par défaut. Utilisez
azd ai toolbox list,azd ai toolbox show <name>,azd ai toolbox version list <name>etazd ai toolbox delete <name> --forcepour gérer les boîtes à outils.
Exemple : serveur MCP avec authentification basée sur des clés
# 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
Récupérer le point de terminaison MCP de la boîte à outils
Deux modèles de point de terminaison existent selon votre rôle :
| Rôle | Point de terminaison | Quand utiliser |
|---|---|---|
| Développeur de boîte à outils | {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1 |
Testez ou validez une version spécifique avant de la promouvoir par défaut. |
| Utilisateur de boîte à outils | {project_endpoint}/toolboxes/{toolbox_name}/mcp?api-version=v1 |
Connectez les agents à la boîte à outils. Sert toujours le default_version. La première version que vous créez est automatiquement définie comme valeur par défaut. |
Remplacez les espaces réservés par vos propres valeurs :
-
{project_endpoint}est votre point de terminaison de projet Foundry, sous la formehttps://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>. Copiez-la à partir de la page Vue d’ensemble de votre projet dans le portail Foundry ou à partir de la colonne URL du point de terminaison dans la vue Boîtes à outils du kit de ressources Microsoft Foundry pour Visual Studio Code. -
{toolbox_name}et{version}sont le nom et la version de la boîte à outils que vous avez créés dans Créer une version de boîte à outils.
Tip
Connectez des agents au point de terminaison consommateur de la boîte à outils. Il sert toujours le default_version, afin que vous puissiez promouvoir de nouvelles versions sans modifier le code de l’agent ou redéployer. Réservez le point de terminaison développeur de boîte à outils (propre à une version) pour tester une version avant de la promouvoir.
Note
La première version d’une nouvelle boîte à outils est automatiquement promue vers default_version (v1). Si vous devez modifier la valeur par défaut ultérieurement, consultez Promouvoir une version par défaut.
Dans l’extension Microsoft Foundry Toolkit pour Visual Studio Code, copiez le point de terminaison client de la boîte à outils depuis la vue Toolboxes.
- Sélectionnez Foundry Toolkit dans la barre d’activité.
- Sous Mes ressources, développez Votre nom de projet>Outils.
- Sous l’onglet Boîtes à outils , recherchez votre boîte à outils.
- Dans la colonne Endpoint URL, copiez l'endpoint.
La valeur de l'URL de point de terminaison est celle du point de terminaison consommateur de la boîte à outils. Pour construire un point de terminaison spécifique à la version, utilisez le modèle de développeur indiqué dans le tableau précédent.
Vérifier la disponibilité des outils
Avant d’exécuter l’agent complet, vérifiez que la boîte à outils charge les outils attendus à l’aide d’un SDK client MCP sur le point de terminaison. Utilisez le point de terminaison spécifique de version pour valider une version avant de la promouvoir en tant que version par défaut.
Installez le Kit de développement logiciel (SDK) client MCP :
pip install mcp
Se connecter à la boîte à outils et aux outils de liste
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())
Note
Utilisez l’onglet API REST pour vérifier la disponibilité de l’outil à partir de .NET, ou utilisez le sdk client MCP Python.
Utilisez le point de terminaison spécifique à la version (/versions/{version}/mcp) pour valider une version avant de la promouvoir.
1. Initialisez la session MCP :
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. Envoyez la notification initialisée :
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. Répertorier les outils disponibles :
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. Appelez un outil :
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":{}}}
Installez le Kit de développement logiciel (SDK) client MCP :
npm install @modelcontextprotocol/sdk
Se connecter à la boîte à outils et aux outils de liste
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();
Utilisez le point de terminaison MCP de la boîte à outils avec un exemple préconfiguré d’agent hébergé pour valider le chargement de Toolbox dans VS Code.
- Dans Foundry Toolkit, sous My Resources>Your project name>Tools, localisez la boîte à outils que vous souhaitez tester.
- Sélectionnez le modèle de code scaffold.
- Choisissez un dossier de projet lorsque vous y êtes invité.
- Suivez la génération
README.mdpour installer les dépendances, configurer des variables d’environnement et exécuter l’exemple localement. - Utilisez Agent Inspector ou exécutez
python main.pypour confirmer le chargement et la réponse des outils de boîte à outils.
Pour une validation spécifique à la version avant de promouvoir une nouvelle version de boîte à outils, utilisez l’onglet Python ou API REST dans cette étape.
Note
Utilisez l’onglet API REST pour vérifier la disponibilité de l’outil ou utilisez le sdk client MCP Python.
Vérifier : initialiser : HTTP 200. Si vous ignorez l’étape d’initialisation, les appels suivants échouent.
Vérifier : tools/list
len(tools) > 0: vide signifie que la version de la boîte à outils n’a pas été configurée correctement.Chaque outil a
name,descriptionetinputSchema. Pour connaître les conventions d’affectation de noms des outils, consultez la spécification MCP.inputSchemaa unpropertieschamp (certains serveurs MCP omettent ce champ, ce qui interrompt OpenAI).Les noms d’outils sont qualifiés par leur type d’outil :
Type d’outil Format du nom de l’outil Exemple MCP {server_label}.{tool_name}myserver.some_toolOpenAPI {openapi_name}.{operationId}weatherapi.getForecastA2A Le namede l’outil (nom de l’agent), ou le nom de la connexion sinameest omismyagentTous les autres types d’outils Valeur du namechamp ou nom de l’outil par défautweb_searchLes outils MCP incluent un
_meta.tool_configurationbloc contenant des paramètres d’exécution tels querequire_approval. Consultez Imposer l’approbation de l’outil.Notez les noms de paramètres exacts pour l’étape d’appel (par exemple
query, vsqueries).
Vérifier - tools/call:
- Aucun champ de niveau
errorsupérieur. S’il est présent, inspectezerror.code. Pour connaître les codes d’erreur MCP standard, consultez la spécification MCP :-
-32006→ consentement OAuth requis (extraire l’URL deerror.message). - D’autres codes → défaillance côté serveur.
-
-
result.content[]contient des entrées avec"type": "text": il s’agit de la sortie de l’outil. - Pour la recherche IA, vérifiez les métadonnées de segments de
result.structuredContent.documents[](title,url,id,score). - Pour la recherche de fichiers, vérifiez les
result.content[].resource._metamétadonnées de bloc (title,file_id,document_chunk_id,score). - Pour la recherche web, vérifiez
result.content[].resource._meta.annotations[]pour les citations d'URL (type,url,title,start_index,end_index). - Pour Fabric IQ, vérifiez
result.structuredContent.documents[]pour les blocs de citation. Chaque document inclut des champstitleeturlpointant vers l’élément Fabric (ontologie, agent de données ou modèle sémantique Power BI) utilisé pour baser la réponse. - Regardez le
"ServerError"contenu du texte : l’outil s’est exécuté mais a rencontré une erreur interne.
Exemples d’arguments spécifiques tools/call à l’outil :
| Type d’outil | Arguments |
|---|---|
| Recherche PAR IA | {"query": "search text"} |
| Recherche de fichiers |
{"queries": ["search text"]} — ou {"queries": ["search text"], "vector_store_ids": ["<VECTOR_STORE_ID>"]} lorsqu’une base vectorielle est fournie dynamiquement |
| Interpréteur de code | {"code": "print(2 ** 100)"} |
| Recherche web | {"search_query": "weather in seattle"} |
| A2A | {"message": {"parts": [{"type": "text", "text": "Hello"}]}} |
| Intelligence du Tissu | Varie selon l’outil exposé , généralement {"query": "..."} pour les outils de requête |
| IQ de travail | {"message": {"parts": [{"type": "text", "text": "Hello"}]}} |
| MCP | {"query": "what is agent service"} |
Intégrer la boîte à outils dans votre agent
LangGraph
Conditions requises pour les fragments d’intégration hébergés : Installez langchain-azure-ai[tools]>1.2.3. Le fragment utilise AzureAIProjectToolbox; utilisez l’exemple LangGraph géré pour l’agent complet, l’ensemble de packages et les fichiers de déploiement.
.env fichier :
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 (modèle clé) :
from langchain_azure_ai.tools import AzureAIProjectToolbox
toolbox = AzureAIProjectToolbox(toolbox_name=TOOLBOX_NAME)
tools = await toolbox.get_tools()
Important
La classe langchain_azure_ai.tools.AzureAIProjectToolbox nécessite langchain-azure-ai[tools]>1.2.3.
Infrastructure de l’agent Microsoft
Installez agent-framework-foundry en plus du package prérequis Azure Identity. Pour l’implémentation complète, consultez l’exemple maintenu du framework d’agents.
Utilisez FoundryToolbox du SDK Agent Framework pour vous connecter au point de terminaison de la boîte à outils. La classe gère l’authentification de la boîte à outils et transfère le contexte d’appel de l’agent hébergé.
.env fichier :
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 (modèle clé) :
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()
Kit de développement logiciel (SDK) Copilot
Conditions requises pour les fragments d’intégration hébergés : Installez le Kit de développement logiciel (SDK) GitHub Copilot pour votre runtime. Le contour dépend des fonctions utilitaires McpBridge et _get_toolbox_token propres à l’application, qui ne sont pas implémentées ici. Suivez le point de terminaison de boîte à outils et le contrat d’authentification existants et les modèles d’intégration de l’agent hébergé. Un exemple complet maintenu n’est pas encore disponible.
Utilisez le sdk GitHub Copilot pour créer un agent alimenté par la boîte à outils qui relie l'appel d'outils de Copilot au point de terminaison MCP de la boîte à outils Foundry.
Note
Le sdk Copilot rejette les noms d’outils contenant des points. Le pont remplace automatiquement . par _ dans les noms d’outils. Par exemple, myserver.get_info devient myserver_get_info.
.env fichier :
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 (modèle clé — Pont MCP) :
# 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"],
)
Infrastructure de l’agent Microsoft
Installer Microsoft.Agents.AI.Foundry.Hosting et Azure.Identity. Pour un projet complet, consultez l’exemple de boîte à outils hébergée par Agent Framework public.
Utilisez AddFoundryToolboxes pour enregistrer une ou plusieurs boîtes à outils avec l’agent hébergé. L’intégration résout le point de terminaison MCP géré, authentifie les demandes et inclut l’intégrité de la boîte à outils dans la probe readiness.
Variables d’environnement :
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 (modèle clé) :
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();
Note
Les exemples d’intégration pour cette étape sont disponibles uniquement pour Python et .NET.
Note
Les exemples d’intégration pour cette étape sont disponibles uniquement pour Python et .NET.
Utilisez l’extension Microsoft Foundry Toolkit for Visual Studio Code afin de générer un exemple d’assistant hébergé déjà configuré pour fonctionner avec votre boîte à outils.
- Sélectionnez Foundry Toolkit dans la barre d’activité.
- Sous Mes ressources, développez Votre nom de projet>Outils.
- Sous l’onglet Boîtes à outils , recherchez la boîte à outils que vous souhaitez utiliser, puis sélectionnez Modèle de code de structure Scaffold.
- Dans la palette de commandes, choisissez un dossier de projet lorsque vous y êtes invité.
- Ouvrez le fichier généré
README.mdet suivez les étapes d’installation, d’exécution locale et de déploiement pour l’échafaudage.
Le projet généré inclut le point d’entrée de l’agent hébergé, les fichiers de déploiement et un README.md contenant les étapes exactes de configuration, d’exécution et de déploiement.
Si vous souhaitez intégrer une boîte à outils dans un projet d’agent hébergé existant au lieu de générer un nouvel exemple, utilisez le point de terminaison MCP de boîte à outils avec les modèles Python ou .NET dans cette section.
Passez le point de terminaison de boîte à outils à votre agent
Après avoir créé la boîte à outils, récupérez son point de terminaison MCP en utilisant azd ai toolbox show et transmettez ce point de terminaison à votre code d’agent en tant que variable d’environnement. L’agent lit la variable au démarrage et l’utilise pour se connecter à la boîte à outils.
Obtenez le point de terminaison de la boîte à outils :
azd ai toolbox show <toolbox-name> --output jsonLe
endpointchamp de la réponse identifie la version sélectionnée. Utilisez-la pour tester cette version avant la promotion. Pour un agent qui doit utiliserdefault_version, créez le point de terminaison client sans version indiqué dans Récupérer le point de terminaison MCP de la boîte à outils.Définissez le point de terminaison en tant que variable d’environnement que votre agent lit au démarrage :
# .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=v1Dans votre code d’agent, lisez
TOOLBOX_ENDPOINTet connectez-vous à celui-ci avec un client MCP. Utilisez les modèles d’intégration Python ou .NET présentés plus haut dans cette section comme référence pour la configuration du client et la portée du jeton Entra (https://ai.azure.com/.default).
Gérer les exigences d’approbation des outils
La boîte à outils renvoie un objet _meta.tool_configuration pour chaque entrée d'outil renvoyée par tools/list. Lorsqu’un outil est défini sur require_approval set to "always", le runtime de l’agent doit présenter l’action en attente à l’utilisateur et attendre la confirmation avant d’exécuter l’outil. Le point de terminaison MCP ne bloque tools/callpas . L’application des règles relève entièrement de la responsabilité de l’environnement d’exécution de l’agent.
Une fois votre boîte à outils créée et testée, connectez-la à un agent. Le modèle d’intégration dépend du type d’agent :
- Agent hébergé (votre propre code s’exécutant dans Foundry Agent Service) : consultez Utiliser une boîte à outils avec un agent hébergé pour les modèles d’intégration d’Agent Framework, de LangGraph, de Visual Studio Code et d’Azure Developer CLI, ainsi que les exigences d’approbation à l’exécution.
Configurer require_approval sur un outil
Définissez require_approval lors de la création d'une version de boîte à outils. Les exemples d’outils MCP dans Créer une version de boîte à outils affichent à la fois les valeurs "always" et "never". Pour le définir via le Kit de développement logiciel (SDK) :
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",
},
];
Utilisez l’onglet Python, .NET, JavaScript, REST API ou Azure Developer CLI pour configurer require_approval dans la définition de votre boîte à outils. Le workflow d’extension Microsoft Foundry Toolkit pour Visual Studio Code dans cet article se concentre sur la création et l’utilisation de la boîte à outils dans 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
Gérer les versions de boîte à outils
Note
Vous ne pouvez supprimer des versions de boîte à outils que par le biais du SDK Python, du SDK .NET, du Kit de développement logiciel (SDK) JavaScript et de l’API REST. Azure Developer CLI prend en charge les opérations de listage, de récupération et de publication (promotion d’une version par défaut).
Les versions des boîtes à outils sont des instantanés immuables de leur configuration d'outils. Chaque appel à l'endpoint de création produit un nouveau ToolboxVersionObject. Le parent ToolboxObject a un default_version champ qui contrôle la version utilisée par le point de terminaison MCP. La création d’une nouvelle version ne la promeut pas automatiquement . Vous décidez quand mettre à jour default_version. Ce processus vous permet d’effectuer des modifications, de tester une nouvelle version indépendamment et de la promouvoir en production selon votre propre planification.
Note
Pour l’interface CLI Azure Développeur, chaque opération de mutation ciblant la version par défaut actuelle ( azd ai toolbox connection add/remove et azd ai toolbox skill add/remove) crée une version de boîte à outils new qui transmet toutes les connexions et compétences précédemment attachées avec la modification demandée appliquée. Aucune de ces commandes ne change default_versionautomatiquement ; exécutez azd ai toolbox publish <toolbox-name> <version> lorsque vous êtes prêt à activer la nouvelle version. Pour inspecter une version en attente (non par défaut), utilisez azd ai toolbox show <name> --version <n>.
| Objet | Champs clés | Description |
|---|---|---|
ToolboxObject |
id, name, default_version |
Conteneur de boîte à outils.
default_version pointe vers la version active. |
ToolboxVersionObject |
id, name, version, description, created_at, tools[], policies |
Capture instantanée immuable de la liste des outils de la boîte à outils à un moment donné.
policies.rai_config.rai_policy_name spécifie le garde-fou facultatif appliqué à cette version. |
Créer une nouvelle version
Chaque appel de création produit une nouvelle version. Si la boîte à outils n’existe pas encore, le processus le crée automatiquement. Lorsque vous créez la première version d’une nouvelle boîte à outils, la version par défaut est v1 jusqu’à ce que vous mettez manuellement à jour vers une autre 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}`);
Utilisez l’onglet Python, .NET, JavaScript ou API REST pour créer une nouvelle version de boîte à outils. Dans cet article, le flux de travail de l’extension Microsoft Foundry Toolkit pour Visual Studio Code se concentre sur la création d’une boîte à outils et la génération du squelette d’un agent hébergé qui l’utilise.
Cette opération n'est pas prise en charge avec l'interface CLI Azure développeur. Pour créer une version de boîte à outils, utilisez l’onglet Python, .NET, API REST ou JavaScript.
La réponse est un ToolboxVersionObject contenant le nouvel identificateur version.
Répertorier les versions
# 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}`);
}
Utilisez l’onglet Python, .NET, JavaScript ou API REST pour répertorier les versions de boîte à outils.
# The current default version is marked with *
azd ai toolbox version list <toolbox-name>
Obtenir une version spécifique
# 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}`);
Utilisez l’onglet Python, .NET, JavaScript ou API REST pour obtenir une version spécifique de la boîte à outils.
azd ai toolbox version get <toolbox-name> <version_id>
Promouvoir une version par défaut
Le point de terminaison MCP sert toujours le default_version. Pour changer la version active, mettez à jour la boîte à outils :
# 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 ne peut pas être vide. Remplacez-le par une nouvelle version.
const toolbox = await project.toolboxes.update(
"<toolbox-name>",
"<version_id>",
);
console.log(`Active version: ${toolbox.default_version}`);
Utilisez l’onglet Python, .NET, JavaScript ou API REST pour promouvoir une version de boîte à outils par défaut.
Les versions de boîte à outils sont immuables. Utilisez cette option publish pour rendre toute version existante la nouvelle version par défaut :
# Roll back or forward to a specific version
azd ai toolbox publish <toolbox-name> <version_id> --no-prompt
publish est le seul chemin d’accès qui change default_version à partir de l’interface CLI ; les verbes mutants (connection add/remove, skill add/remove) créent toujours une nouvelle version sans la promouvoir.
Supprimer une 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>",
);
Utilisez l’onglet Python, .NET, JavaScript ou API REST pour supprimer une version de boîte à outils.
Cette opération n'est pas prise en charge avec l'interface CLI Azure développeur. Pour supprimer une version de boîte à outils, utilisez l'onglet Python, .NET, REST API ou JavaScript.
Gérer les boîtes à outils avec foundry MCP Server
Foundry MCP Server (préversion) expose la gestion des boîtes à outils en tant qu’outils MCP. Vous pouvez donc récupérer, version, mettre à jour et supprimer des boîtes à outils à partir d’un client MCP tel que GitHub Copilot dans Visual Studio Code. Pour configurer le serveur, consultez Prise en main de Foundry MCP Server (préversion).
| Tool | Accès | Description |
|---|---|---|
toolbox_get |
lire | Récupérez une boîte à outils et sa version par défaut actuelle. |
toolbox_version_get |
lire | Répertorier les versions de boîte à outils ou récupérer une version spécifique. |
toolbox_version_create |
write | Créez une version de boîte à outils immuable. Si la boîte à outils n’existe pas, cet outil le crée également. |
toolbox_update |
write | Créez ou mettez à jour une boîte à outils, y compris sa version par défaut. |
toolbox_delete |
write | Supprimez une boîte à outils. |
toolbox_version_delete |
write | Supprimez une version de boîte à outils spécifique. |
Les mêmes règles de contrôle de version s’appliquent qu’avec les kits SDK. La création d’une version pour une boîte à outils existante ne modifie pas la version par défaut. Pour promouvoir une version, appelez toolbox_update avec defaultVersion défini sur la nouvelle version. Avant de supprimer la version par défaut actuelle, définissez une autre version comme version par défaut.
Exemples de prompts :
- « Montrez-moi la
customer-support-toolsboîte à outils. » - « Obtenir la version 2 de
customer-support-tools. » - « Créer une nouvelle version de
customer-support-tools». - Définissez la version 2 de
customer-support-toolspar défaut. - « Définissez la version 1 comme
customer-support-toolsvaleur par défaut, puis supprimez la version 2. » - « Supprimer la
old-support-toolsboîte à outils ».
Pour obtenir la référence complète de l’outil, consultez Outils disponibles et exemples d’invites pour Foundry MCP Server.
Configurer des outils
Choisissez le type d’outil et le modèle d’authentification qui correspondent à votre scénario. Sélectionnez l’onglet de votre kit DE développement logiciel (SDK) ou de votre méthode de déploiement préférée.
L’onglet azd de chaque outil ci-dessous présente la boîte à outils déclarative YAML. Pour créer une boîte à outils impérativement sans projet d’agent, utilisez le azd ai toolbox create --from-file flux de travail et appliquez les données par outil indiquées dans les sections suivantes. Pour déployer une boîte à outils avec un agent hébergé, modélisez-la en tant que azure.ai.toolbox service dans azure.yaml et connectez-le à l’agent avec uses: ou toolboxes:.
Types d’outils multiples
Une boîte à outils unique peut regrouper différents types d’outils. L’exemple suivant combine recherche web, Recherche Azure AI et un serveur MCP dans une boîte à outils :
{
"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"
}
]
}
Note
Chaque type d’outil (web_search, azure_ai_search, code_interpreter, file_search) peut apparaître au maximum une fois sans name champ. Pour inclure plusieurs instances du même type, définissez une instance unique name sur chaque instance . Consultez l’exemple suivant.
Restrictions multi-outils
Vous pouvez inclure au maximum une instance de chaque type d’outil intégré dans une boîte à outils, à condition qu'il n'ait pas de champ name. Si vous incluez deux instances du même type sans un name, l’API retourne :
400 invalid_payload: Multiple tools without identifiers found...
Deux instances du même type d’outil
Utilisez le name champ pour inclure plusieurs instances du même type d’outil dans une boîte à outils. Chaque instance nommée est traitée comme un outil distinct et doit avoir un nom unique.
{
"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>"
}
]
}
}
]
}
Chaque type d’outil a sa propre configuration de boîte à outils : types d’authentification de connexion, extraits de code sdk par langage et comportement spécifique à la boîte à outils. Ces détails se présentent dans l’article de référence de chaque outil. Consultez le tableau de prise en charge des fonctionnalités pour obtenir un lien vers chaque outil.
Pour le comportement spécifique à la boîte à outils, tel que le magasin vectoriel dynamique de File Search (surcharge de paramètre) ou les chargements de fichiers au niveau des ressources pour Code Interpreter et File Search, consultez l’article associé à chaque outil.
Configurer des garde-fous
Appliquez une stratégie de garde-fou nommée à une version de boîte à outils pour appliquer le filtrage de contenu IA responsable sur les entrées et sorties de l’outil. Le garde-fou s’exécute au niveau de la boîte à outils, indépendamment de tout filtre de contenu au niveau du modèle.
Référencez un garde-fou par son nom de stratégie, que vous configurez dans le portail Foundry sous Garde-fous. Définissez policies.rai_config.rai_policy_name avec le nom de la stratégie lors de la création d’une version de boîte à outils.
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
La configuration du garde-fou n’est pas encore disponible dans l’extension VS Code. Utilisez l’API REST, le Kit de développement logiciel (SDK) ou Azure Developer CLI pour configurer des garde-fous.
Attacher des compétences à une boîte à outils
Associez compétences à une version d’une boîte à outils pour les mettre à la disposition des agents via le point de terminaison MCP de la boîte à outils. Chaque référence de compétence spécifie le nom de la compétence et une version facultative. Omettez version pour utiliser la valeur default_version de la compétence ; épinglez une chaîne version pour utiliser un instantané immuable.
Une version de boîte à outils peut contenir des outils, des compétences ou les deux. Les exemples suivants créent une version de boîte à outils qui contient une référence de compétence unique. Pour ajouter des compétences à une boîte à outils contenant déjà des outils, incluez le même tools que celui utilisé dans Créer une version de la boîte à outils ainsi que le tableau skills.
Important
Les compétences attachées à une boîte à outils doivent exister dans le même projet Foundry. Les références entre projets ne sont pas prises en charge.
Lorsqu’un agent ou un client MCP se connecte au point de terminaison de boîte à outils, les compétences sont exposées en tant que ressources MCP. L’infrastructure cliente ou agent MCP doit prendre en charge le protocole Ressources MCP pour détecter et charger automatiquement les compétences. Pour vérifier que les compétences sont détectables, appelez resources/list le point de terminaison MCP de la boîte à outils et vérifiez que les noms de vos compétences apparaissent dans la réponse.
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"
}
]
}
Pour épingler une version spécifique :
{
"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 prend en charge les références à des compétences à deux endroits : de manière déclarative, sous la forme d’un bloc skills: de niveau supérieur dans le fichier YAML azd ai toolbox create --from-file, et de manière impérative avec les verbes azd ai toolbox skill add/list/remove. Chaque référence prend un name (obligatoire) et une valeur facultative version (chaîne). Omettez version pour suivre le default_version de la compétence ; indiquez une chaîne de version pour verrouiller la toolbox sur un instantané immuable.
Déclarer des compétences lorsque vous créez la boîte à outils
# 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
Ajouter, répertorier et supprimer des compétences sur une boîte à outils existante
# 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 affiche uniquement la version par défaut. Les compétences épinglées affichent leur version ; les compétences non épinglées affichent (default). Pour examiner les compétences d’une version en attente, exécutez azd ai toolbox show <toolbox> --version <n> --output json et lisez le tableau skills.
Important
skill add et skill remove créent chacune une nouvelle version de la boîte à outils qui reprend toutes les connexions et compétences précédemment associées, en y appliquant la modification demandée.
Ils ne favorisent pas la nouvelle version par défaut. Les modifications ne sont donc pas visibles par les clients MCP tant que vous n’avez pas exécuté azd ai toolbox publish <toolbox> <version>. Pour modifier la version épinglée d’une compétence déjà attachée ( par exemple, la mise à niveau greeting de v1 vers v2) exécutez trois commandes dans l’ordre : skill remove, publish la nouvelle version, puis skill add <name>@<new-version> (skill add bloque les doublons lorsqu’elles sont vérifiées par rapport à la version par défaut actuelle).
Les noms de compétence doivent correspondre ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$ (lettres minuscules, chiffres et traits d’union ; 64 caractères maximum ; aucun trait d’union de début ou de fin). Une fin @ dans <name>@<version> (une version vide) est rejetée.
Les références de compétence ne sont actuellement pas configurables via l’extension VS Code. Utilisez l’API REST ou le Kit de développement logiciel (SDK) pour configurer des compétences.
Valider la découverte des compétences
Après avoir attaché des compétences à une version de boîte à outils, vérifiez que vous pouvez les découvrir via le point de terminaison MCP de la boîte à outils à l’aide du KIT de développement logiciel (SDK) mcP Python :
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())
Les compétences apparaissent en tant que ressources MCP avec des URI au format skill://{name}.
Consommer des compétences depuis un agent (Microsoft Agent Framework, .NET)
Dans .NET, utilisez AgentSkillsProviderBuilder().UseMcpSkills(mcpClient) à partir du Kit de développement logiciel (SDK) Microsoft Agent Framework pour découvrir les compétences basées sur MCP à partir d’un point de terminaison de boîte à outils et les injecter en tant que AIContextProviders sur l’agent. L’agent charge ensuite les instructions de chaque compétence lors de l’exécution lorsque le modèle décide qu’il est pertinent. L’hôte suivant Program.cs héberge l’agent avec la couche d’hébergement Responses (AddFoundryResponses et 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);
}
}
Pour obtenir l’exemple complet, y compris les fichiers projet et les étapes de déploiement, consultez l’exemple Compétences dans la boîte à outils.
Rappel
L’outil reminder_preview permet à un agent hébergé de planifier son exécution ultérieurement. Lorsque l’agent appelle cet outil, il spécifie un délai en minutes. Après ce délai, Foundry réinvoque le même agent dans la même conversation.
Dépanner
| Symptôme | Cause probable | Correction |
|---|---|---|
tools/list ne renvoie aucun outil pour MCP ou A2A. |
Informations d’identification de connexion non valides ou manquantes pour le serveur MCP distant ou l’agent A2A. La boîte à outils ne peut pas récupérer les manifestes de l’outil à partir du point de terminaison distant sans authentification valide. | Vérifiez que les project_connection_id existent dans votre projet Foundry et que les identifiants sont corrects. Essayez de vous connecter directement au serveur MCP pour tester la configuration de l’authentification. Si vous utilisez une identité managée (PMI, identité de l’agent ou MI), vérifiez les attributions de rôle RBAC appropriées pour l’appelant sur la ressource cible. |
tools/list ne retourne aucun outil pour OpenAPI |
Spécification OpenAPI non valide. La boîte à outils construit le manifeste de l’outil à partir de la spécification, ce qui échoue si la spécification est incorrecte. | Validez votre contenu de spécification OpenAPI. Vérifiez qu’elle est conforme à OpenAPI 3.0 ou 3.1 et inclut des schémas valides paths, operationId de valeurs et de paramètres. Si vous utilisez l’authentification d’identité managée, vérifiez également les attributions de rôles RBAC sur le service cible. |
tools/list retourne moins d’outils que prévu |
Le allowed_tools filtre contient des noms d’outils incorrects ou mal orthographiés. Les noms d’outils sont sensibles à la casse et doivent suivre la spécification MCP pour les noms d’outils (pas d’espaces blancs ni de caractères spéciaux). |
Supprimez allowed_tools temporairement et appelez tools/list pour obtenir la liste complète des outils. Utilisez les noms exacts de la réponse pour définir des valeurs pour allowed_tools. |
tools/list Ne rend aucun outil (autres types d’outils) |
Boîte à outils non entièrement approvisionnée ou type d’outil non pris en charge dans la région. Pour les outils intégrés (Recherche web, RECHERCHE IA, Interpréteur de code, Recherche de fichiers), les manifestes d’outils sont construits côté serveur et ne nécessitent pas d’authentification , s’ils retournent vides, la version de la boîte à outils peut ne pas encore être provisionnée. | Patientez 10 secondes et réessayez. |
400 Multiple tools without identifiers |
Deux types d’outils sans nom dans une boîte à outils | Conservez au maximum un type sans nom ; ajoutez server_label à tous les outils MCP. |
CONSENT_REQUIRED (code -32006) |
La connexion OAuth nécessite le consentement de l’utilisateur | Ouvrez l’URL de consentement dans un navigateur et terminez le flux OAuth, puis réessayez. |
401 sur les appels MCP |
Jeton expiré ou périmètre incorrect | Utilisez l'étendue https://ai.azure.com/.default et actualisez le jeton. |
| Noms d’outils non correspondants | Les noms d’outils MCP sont préfixés par server_label |
Utilisez le format {server_label}.{tool_name} (par exemple, myserver.get_info). |
500 sur send_ping() |
Le serveur MCP de boîte à outils n’implémente pas la méthode MCP ping . |
Utilisez la classe Microsoft Agent FrameworkFoundryToolbox, qui gère la connexion de boîte à outils. N’appelez send_ping() pas directement. |
500 sur prompts/list |
Le serveur Foundry MCP n’implémente prompts/listpas . |
Passez load_prompts=False (ou l'équivalent) à votre constructeur de client MCP. |
500 sans streaming tools/call |
Le mode non streaming (stream=False) n’est pas pris en charge pour les points de terminaison MCP de boîte à outils. |
Toujours utiliser stream=True lors de l’appel des outils MCP de boîte à outils. |
500 sur tools/list |
Erreur de serveur temporaire | Réessayez après quelques secondes. |
| Variables d’environnement remplacées au moment de l’exécution | La plateforme réserve toutes les variables d’environnement préfixées FOUNDRY_ et peut remplacer silencieusement les valeurs définies par l’utilisateur. |
Renommez les variables d’environnement personnalisées pour éviter le FOUNDRY_ préfixe (par exemple, utilisez TOOLBOX_MCP_ENDPOINT plutôt que FOUNDRY_TOOLBOX_ENDPOINT). |
L’outil de rappel est disponible uniquement pour les agents hébergés. Vous ne pouvez pas utiliser l’outil de rappel avec des agents d’invite.
Pour obtenir des instructions d’installation complètes, des exemples d’utilisation et des limitations, consultez l’outil Rappel pour les agents de planification automatique.
Compatibilité des régions et des modèles
La disponibilité de la boîte à outils dépend de deux facteurs au-delà de la région du projet :
- Région : certains types d’outils ne sont pas disponibles dans chaque région qui prend en charge le service d’agent. Par exemple, une région qui prend en charge le point de terminaison de boîte à outils peut ne pas prendre en charge tous les types d’outils intégrés.
Avant de déployer une boîte à outils, vérifiez que votre région cible prend en charge les types d’outils que vous envisagez d’utiliser. Pour obtenir les tables de compatibilité complètes, consultez la prise en charge des outils par région et par modèle.
Contenu connexe
- Connecter des agents aux serveurs Model Context Protocol
- Outils disponibles et exemples de requêtes pour Foundry MCP Server
- Ajouter l’authentification du serveur MCP
- Outil de recherche web
- Outil de recherche Azure AI
- Vue d’ensemble des garde-fous
- Gérer les compétences
- Déployer un agent hébergé
- Ajouter une connexion à votre projet
- Configurer l'isolation réseau pour Microsoft Foundry