Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Warning
Ao ligar-se a ferramentas que não são da Foundry, pode incorrer em custos e os dados podem ser enviados para fora do limite de conformidade da Foundry e processados de acordo com os termos e políticas de tratamento de dados aplicáveis. Consulte a documentação da ferramenta para saber como gerir o acesso à ferramenta.
Este artigo mostra-lhe como criar uma caixa de ferramentas, adicionar e configurar ferramentas, verificar se carregam, integrar a caixa de ferramentas num agente alojado e gerir versões da caixa de ferramentas. Para uma introdução conceptual às caixas de ferramentas, veja O que é a Caixa de Ferramentas na Foundry?. Para a sintaxe de configuração da ferramenta e opções de autenticação para cada tipo de ferramenta, consulte Configurar ferramentas.
Pré-requisitos
Um projeto ativo do Microsoft Foundry.
RBAC: Conceda a função de Utilizador Foundry no projeto Foundry a cada identidade que se aplique ao seu caso:
- Desenvolvedor (sempre obrigatório) — a identidade que cria, atualiza e gere as versões da caixa de ferramentas.
- Identidade do agente (necessária se estiver a usar um agente de prompt) — a identidade gerida do agente que chama ferramentas em tempo de execução.
- Utilizador final (necessário apenas para fluxos OAuth) — qualquer utilizador cuja identidade seja encaminhada por proxy através de ligações OAuth ou UserEntraToken (por exemplo, fluxos MCP baseados em OAuth ou fluxos de token Entra do utilizador (passagem direta da identidade gerida do utilizador)).
Para instruções passo a passo para atribuir o papel de Utilizador Foundry a uma identidade de agente, consulte Atribuir permissões à identidade do agente.
O seu projeto Foundry tem de estar numa das regiões suportadas. Os tipos individuais de ferramentas dentro de uma caixa de ferramentas são ainda mais limitados por região e modelo – nem todos os tipos de ferramentas estão disponíveis em todas as regiões ou com cada modelo. Veja Região e compatibilidade do modelo.
Instale a extensão Microsoft Foundry Toolkit para o Visual Studio Code a partir do Marketplace do Visual Studio Code.
Python SDK:
pip install azure-ai-projects azure-identity.NET SDK: Instale o conjunto de pacotes de pré-visualização coerente e o 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.IdentitySDK JavaScript:
npm install @azure/ai-projects @azure/identityAzure Developer CLI: Instale a CLI Azure Developer (
azd1.27.1 ou posterior) e o pacote unificado de extensão da CLI Foundry:# Install the unified bundle (provides azd ai agent, connection, inspector, # project, routine, skill, and toolbox). azd ext install microsoft.foundry
Importante
- Uma caixa de ferramentas suporta, no máximo, uma ferramenta sem campo
name(Web Search, Pesquisa de IA do Azure, Code Interpreter, File Search). Para incluir mais do que uma instância do mesmo tipo de ferramenta, defina uma únicanamepara cada instância para as diferenciar. Incluir duas instâncias do mesmo tipo sem umnameresulta num erroinvalid_payload. Para detalhes, veja Múltiplos tipos de ferramentas. - Adicione um
descriptiona todas as ferramentas da sua caixa de ferramentas para ajudar o modelo a selecionar a ferramenta certa para cada pedido. - Reveja cuidadosamente a documentação de cada ferramenta para saber mais sobre a configuração individual, limitações e avisos.
Se estiveres a usar o GitHub Copilot para Azure para criar a estrutura de um agente alojado que consome o conjunto de ferramentas, as seguintes referências de skills descrevem o mesmo contrato do endpoint (variável de ambiente, cabeçalhos, protocolo MCP, padrões de citações e resolução de problemas) que o agente tem de implementar:
- Referência da caixa de ferramentas para orientações sobre o formato do endpoint, protocolo MCP, tratamento do consentimento OAuth, padrões de citação e resolução de problemas.
- Use a caixa de ferramentas num agente alojado para encontrar orientações sobre resolução de endpoints, contrato env-var, forma da carga, padrões de integração de código e rastreamento.
Caminho rápido
- Criar:Criar uma versão de caixa de ferramentas com uma ou mais ferramentas. Mantenha cada excerto focado numa única tarefa e dentro de 30 linhas; Use as amostras mantidas vinculadas para aplicações completas.
- Publique ou selecione uma versão: A primeira versão torna-se automaticamente o padrão. Para versões mais recentes, testa e promove uma versão quando estiveres pronto para a tornar como padrão.
- Anexe e consuma: Copie o endpoint de consumo da toolbox e, em seguida, integre-o no seu agente.
- Verificar: Use o endpoint específico da versão para listar as ferramentas disponíveis e depois execute um pedido de agente que chame uma ferramenta esperada.
Suporte a funcionalidades
SDKs e ferramentas suportam operações de gestão da caixa de ferramentas, conforme mostrado na tabela seguinte.
| Funcionamento | Python SDK | API REST | SDK para .NET | SDK de JavaScript | Azure Developer CLI | Kit de Ferramentas da Fundição |
|---|---|---|---|---|---|---|
| Ferramentas: atualizar, listar, obter e eliminar | ✔️ | ✔️ | ✔️ | ✔️ | N/A | ✔️ |
| Criar versão da Toolbox | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Lista de versões do Toolbox, obter e eliminar | ✔️ | ✔️ | ✔️ | ✔️ | N/A | Não. A interface mostra apenas a versão mais recente. |
| Barreira de proteção (política de RAI) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Também pode gerir as caixas de ferramentas de forma conversacional com o Foundry MCP Server. Consulte Gerir caixas de ferramentas com o Foundry MCP Server.
Pode adicionar as seguintes ferramentas a uma caixa de ferramentas. Esta tabela mostra o suporte ao SDK e à ferramenta para cada ferramenta e se a ferramenta também pode ser ligada diretamente a um agente (fora de uma caixa de ferramentas). Para saber como o tráfego de cada ferramenta flui quando o seu projeto utiliza isolamento de rede, veja Isolamento de rede para uma caixa de ferramentas.
| Tool | Numa caixa de ferramentas | Integração direta de ferramentas | Python SDK | API REST | SDK para .NET | SDK de JavaScript | Azure Developer CLI | Kit de Ferramentas da Fundição |
|---|---|---|---|---|---|---|---|---|
| Protocolo de Contexto do Modelo (MCP) | ✅ Sim | ✅ Sim | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Pesquisa na Web | ✅ Sim | ✅ Sim | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Pesquisa de IA do Azure | ✅ Sim | ✅ Sim | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Interpretador de código | ✅ Sim | ✅ Sim | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Pesquisa de ficheiros | ✅ Sim | ✅ Sim | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| OpenAPI | ✅ Sim | ✅ Sim | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Não |
| Agente-para-agente (A2A) | ✅ Sim | ✅ Sim | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Não |
| Automatização do browser | ✅ Sim | ✅ Sim | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Não |
| Fabric QI | ✅ Sim | ✅ Sim | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| QI de trabalho | ✅ Sim | ✅ Sim | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Pesquisa por ferramentas | ✅ Sim | ❌ Não | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Competências | ✅ Sim | ❌ Não | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Não |
A disponibilidade das ferramentas também depende da região e modelo do seu projeto. Antes de implantar uma caixa de ferramentas, verifique se a sua região-alvo suporta os tipos de ferramentas que pretende usar. Veja Suporte de ferramentas por região e modelo.
Criar uma versão de caixa de ferramentas
Cria uma versão da caixa de ferramentas com base nas ferramentas de que precisas.
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"
}
]
}
Nota
Use o escopo do token https://ai.azure.com/.default ao obter o token de portador.
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}`);
Utilize a extensão Microsoft Foundry Toolkit para Visual Studio Code para criar e publicar uma caixa de ferramentas na vista Tools.
- Selecione Foundry Toolkit na barra de atividades.
- Na secção Meus Recursos, expanda o nome> do seuprojeto Ferramentas.
- Selecione o ícone + Adicionar Caixa de Ferramentas .
- No separador Criar uma caixa de ferramentas personalizada, introduza o nome e a descrição da caixa de ferramentas e adicione as ferramentas que pretende.
- Para ativar o direcionamento de ferramentas com base na intenção, selecione Pesquisa de ferramentas.
- Selecione Publicar.
Publicar uma nova caixa de ferramentas cria a sua primeira versão. Essa versão torna-se automaticamente a versão padrão.
Com o bundle de extensões unificado microsoft.foundry (ver Pré-requisitos), crie uma caixa de ferramentas em dois passos:
- Use
azd ai connection createpara registar cada ligação ao projeto referenciada pela toolbox (uma chamada por registo de credencial). - Use
azd ai toolbox create --from-file <toolbox.yaml>para criar a caixa de ferramentas. O YAML refere ligações pelo nome e nunca incorpora credenciais.
O padrão é o mesmo para todos os tipos de ligação e tipos de autenticação:
Defina o projeto ativo uma vez por shell:
azd ai project set $PROJECT_ENDPOINTCrie uma ligação com
azd ai connection create. As bandeiras diferem consoante o tipo de autenticação, mas a forma de comando é sempre: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>]Use
azd ai connection listeazd ai connection show <name>para inspecionar ligações eazd ai connection delete <name> --forcepara as remover.Crie um YAML toolbox que faça referência a uma ou mais ligações existentes pelo nome. O YAML nunca incorpora credenciais:
# 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 projectPelo menos um dos
connections,skills, outoolsdeve estar não vazio. As referências de competências devem apontar para competências que já existem no mesmo projeto Foundry; ver Usar habilidades em Foundry para as criar comazd ai skill create. Para obter detalhes sobre a configuração de ponta a ponta da pesquisa de ferramentas, consulte Utilizar a pesquisa de ferramentas.Crie a caixa de ferramentas a partir desse ficheiro:
azd ai toolbox create <toolbox-name> --from-file ./my-toolbox.yamlA primeira versão torna-se automaticamente o padrão. Use
azd ai toolbox list,azd ai toolbox show <name>,azd ai toolbox version list <name>, eazd ai toolbox delete <name> --forcepara gerir caixas de ferramentas.
Exemplo: servidor MCP com autenticação baseada em chaves
# 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
Obtenha o endpoint MCP da caixa de ferramentas
Existem dois padrões de endpoint dependendo do seu cargo:
| Função | Ponto final | Quando usar |
|---|---|---|
| Desenvolvedor de Kit de ferramentas | {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1 |
Teste ou valide uma versão específica antes de a promover como padrão. |
| Utilizador do Toolbox | {project_endpoint}/toolboxes/{toolbox_name}/mcp?api-version=v1 |
Liga os agentes à caixa de ferramentas. Serve sempre o default_version. A primeira versão que crias é automaticamente definida como predefinida. |
Substitui os marcadores de lugar pelos teus próprios valores:
-
{project_endpoint}é o endpoint do teu projeto Foundry, na formahttps://<your-foundry-account>.services.ai.azure.com/api/projects/<your-project>. Copie-o da página Descrição geral do seu projeto no portal Foundry, ou da coluna URL do ponto final na vista Toolboxes do kit de ferramentas Microsoft Foundry para o Visual Studio Code. -
{toolbox_name}e{version}são o nome e a versão da caixa de ferramentas que criou em Criar uma versão da caixa de ferramentas.
Tip
Ligue os agentes ao endpoint do consumidor da toolbox. Serve sempre o default_version, para que possas promover novas versões sem mudar o código do agente ou reimplementar. Reserve o endpoint toolbox developer (específico para cada versão) para testar uma versão antes de promovê-la.
Nota
A primeira versão de uma nova caixa de ferramentas é automaticamente promovida para default_version (v1). Se precisares de alterar o padrão mais tarde, vê Promover uma versão para padrão.
Na extensão Microsoft Foundry Toolkit para Visual Studio Code, copie o ponto final do consumidor da caixa de ferramentas na vista Toolboxes.
- Selecione Foundry Toolkit na barra de atividades.
- Na secção Meus Recursos, expanda o nome> do seuprojeto Ferramentas.
- No separador Caixas de Ferramentas , localiza a tua caixa de ferramentas.
- Na coluna URL do Endpoint, copie o endpoint.
O valor Endpoint URL é o endpoint consumidor da toolbox. Para construir um endpoint específico de cada versão, utilize o padrão de desenvolvimento mostrado na tabela anterior.
Verificar a disponibilidade da ferramenta
Antes de executar o agente completo, confirme que a caixa de ferramentas carrega as ferramentas esperadas usando um SDK cliente MCP contra o endpoint. Use o endpoint específico da versão para validar uma versão antes de a promover como padrão.
Instalar o SDK do cliente MCP:
pip install mcp
Liga-te à caixa de ferramentas e lista ferramentas
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())
Nota
Use o separador API REST para verificar a disponibilidade da ferramenta a partir de .NET, ou use o SDK cliente Python MCP.
Use o endpoint específico da versão (/versions/{version}/mcp) para validar uma versão antes de a promover.
1. Inicializar a sessão 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. Enviar a notificação inicializada:
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. Listar as ferramentas disponíveis:
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. Chamar uma ferramenta:
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":{}}}
Instalar o SDK do cliente MCP:
npm install @modelcontextprotocol/sdk
Liga-te à caixa de ferramentas e lista ferramentas
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();
Utilize o endpoint MCP da toolbox com um exemplo base de agente alojado para validar o carregamento da toolbox no VS Code.
- No Foundry Toolkit, em Os Meus Recursos>O nome do seu projeto>Ferramentas, localize a caixa de ferramentas que pretende testar.
- Selecione o modelo de código do andaime.
- Escolha uma pasta de projeto quando solicitado.
- Siga o gerado
README.mdpara instalar dependências, configurar variáveis de ambiente e executar a amostra localmente. - Usa o Agent Inspector ou executa
python main.pypara confirmar que as ferramentas da consola carregam e respondem.
Para validação específica da versão antes de promover uma nova versão da toolbox, use o separador Python ou REST API neste passo.
Nota
Use o separador da API REST para verificar a disponibilidade da ferramenta, ou utilize o SDK do cliente Python MCP.
Verificar — inicializar: HTTP 200. Se saltar a etapa de inicialização, as chamadas subsequentes falham.
Verificar — tools/list:
len(tools) > 0— vazio significa que a versão da caixa de ferramentas não foi provisionada corretamente.Cada ferramenta tem
name,description, einputSchema. Para convenções de nomenclatura de ferramentas, consulte a especificação MCP.inputSchematem umpropertiescampo (alguns servidores MCP omitem este campo, o que quebra o OpenAI).Os nomes das ferramentas são designados por tipo de ferramenta:
Tipo de ferramenta Formato do nome da ferramenta Example MCP {server_label}.{tool_name}myserver.some_toolOpenAPI {openapi_name}.{operationId}weatherapi.getForecastA2A O nome da ferramenta name(nome do agente), ou o nome da conexão senamefor omitidomyagentTodos os outros tipos de ferramentas O namevalor do campo ou o nome padrão da ferramentaweb_searchAs ferramentas MCP incluem um
_meta.tool_configurationbloco contendo definições de tempo de execução, comorequire_approval. Veja Impor aprovação de ferramenta.Note os nomes exatos dos parâmetros para o passo de chamada (por exemplo
queryvsqueries).
Verificar - tools/call:
- Sem campo de nível superior
error. Se estiver presente, inspecioneerror.code. Para códigos de erro padrão MCP, consulte a especificação MCP:-
-32006→ requer consentimento OAuth (extrair URL deerror.message). - Outros códigos → falhas do lado do servidor.
-
-
result.content[]contém entradas com"type": "text"- esta é a saída da ferramenta. - Para o AI Search, verifique o
result.structuredContent.documents[]para metadados de blocos (title,url,id,score). - Para a Pesquisa de Ficheiros, verifique
result.content[].resource._metapara metadados de blocos (title,file_id,document_chunk_id,score). - Para a Pesquisa na Web, verifique as
result.content[].resource._meta.annotations[]citações de URL (type,url,title,start_index,end_index). - Para Fabric IQ, consulte
result.structuredContent.documents[]para os segmentos de citação. Cada documento inclui campostitleeurlque apontam para o item Fabric (Ontologia, agente de dados ou Power BI modelo semântico) usado para fundamentar a resposta. - Fique atento ao
"ServerError"texto do conteúdo – a ferramenta executou, mas encontrou um erro interno.
Exemplos de argumentos específicos para ferramentas tools/call:
| Tipo de ferramenta | Argumentos |
|---|---|
| Pesquisa por IA | {"query": "search text"} |
| Pesquisa de ficheiros |
{"queries": ["search text"]} — ou {"queries": ["search text"], "vector_store_ids": ["<VECTOR_STORE_ID>"]} quando o armazenamento vetorial é passado dinamicamente |
| Interpretador de Código | {"code": "print(2 ** 100)"} |
| Pesquisa na Web | {"search_query": "weather in seattle"} |
| A2A | {"message": {"parts": [{"type": "text", "text": "Hello"}]}} |
| Inteligência Têxtil | Varia consoante a ferramenta exposta — tipicamente {"query": "..."} para ferramentas de consulta |
| QI de trabalho | {"message": {"parts": [{"type": "text", "text": "Hello"}]}} |
| MCP | {"query": "what is agent service"} |
Integre o conjunto de ferramentas no seu agente
LangGraph
Requisitos do fragmento de integração alojado: Instalar langchain-azure-ai[tools]>1.2.3. O fragmento utiliza AzureAIProjectToolbox; utiliza a amostra mantida do LangGraph para o agente completo, conjunto de pacotes e ficheiros de implementação.
.env ficheiro:
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 (padrão-chave):
from langchain_azure_ai.tools import AzureAIProjectToolbox
toolbox = AzureAIProjectToolbox(toolbox_name=TOOLBOX_NAME)
tools = await toolbox.get_tools()
Importante
A classe langchain_azure_ai.tools.AzureAIProjectToolbox requer langchain-azure-ai[tools]>1.2.3.
Estrutura do Microsoft Agent
Instale agent-framework-foundry além do pacote pré-requisito do Azure Identity. Para a implementação completa, consulte o exemplo mantido do Agent Framework.
Utilize FoundryToolbox do SDK do Agent Framework para ligar ao endpoint da toolbox. A classe trata da autenticação da caixa de ferramentas e encaminha o contexto da chamada do agente hospedado.
.env ficheiro:
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 (padrão-chave):
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
Requisitos do fragmento de integração hospedado: Instalar o SDK do GitHub Copilot para o seu ambiente de execução. O esquema depende dos auxiliares da aplicação McpBridge e _get_toolbox_token que não estão implementados aqui. Siga os padrões existentes de endpoint da caixa de ferramentas, contrato de autenticação e integração de agente hospedado. Ainda não está disponível uma amostra completa mantida.
Use o GitHub Copilot SDK para construir um agente alimentado por toolbox que liga a invocação de ferramentas do Copilot ao endpoint MCP da Foundry toolbox.
Nota
O SDK Copilot rejeita nomes de ferramentas que contêm pontos. A ponte substitui automaticamente . por _ nos nomes das ferramentas. Por exemplo, myserver.get_info torna-se myserver_get_info.
.env ficheiro:
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 (padrão de chave — ponte 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"],
)
Estrutura do Microsoft Agent
Instalar Microsoft.Agents.AI.Foundry.Hosting e Azure.Identity. Para um projeto completo, consulte o exemplo público de caixa de ferramentas hospedada do Agent Framework.
Utilize AddFoundryToolboxes para registar uma ou mais caixas de ferramentas junto do agente alojado. A integração resolve o endpoint MCP gerido, autentica pedidos e inclui a saúde da caixa de ferramentas na sonda de prontidão.
Variáveis de ambiente:
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 (padrão-chave):
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();
Nota
Exemplos de integração para esta etapa estão disponíveis apenas para Python e .NET.
Nota
Exemplos de integração para esta etapa estão disponíveis apenas para Python e .NET.
Utilize a extensão Microsoft Foundry Toolkit para o Visual Studio Code para criar a estrutura de um exemplo de agente alojado já configurado para a sua caixa de ferramentas.
- Selecione Foundry Toolkit na barra de atividades.
- Na secção Meus Recursos, expanda o nome> do seuprojeto Ferramentas.
- No separador Caixas de Ferramentas , localize a caixa de ferramentas que pretende consumir e depois selecione modelo de código de andaime.
- Na Paleta de Comandos, escolha uma pasta de projeto quando solicitado.
- Abra o ficheiro gerado
README.mde siga os passos de configuração, execução local e implementação da estrutura inicial.
O projeto gerado inclui o ponto de entrada do agente Hosted, ficheiros de implantação e um README.md com os passos exatos de configuração, execução e implantação.
Se quiser integrar uma toolbox num projeto de agente hospedado existente em vez de gerar uma nova amostra, use o endpoint MCP da toolbox com os padrões Python ou .NET desta secção.
Passa o endpoint da caixa de ferramentas ao teu agente
Depois de criares a toolbox, recupera o endpoint MCP dele usando azd ai toolbox show e passa esse endpoint ao código do teu agente como variável de ambiente. O agente lê a variável no arranque e usa-a para se ligar à caixa de ferramentas.
Obtenha o endpoint da caixa de ferramentas:
azd ai toolbox show <toolbox-name> --output jsonO
endpointcampo na resposta identifica a versão selecionada. Usa-o para testar essa versão antes da promoção. Para um agente que deve seguirdefault_version, constrói o endpoint do consumidor não versionado mostrado em Get the toolbox MCP endpoint.Defina o endpoint como uma variável de ambiente que o seu agente lê no arranque:
# .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=v1No código do teu agente, lê
TOOLBOX_ENDPOINTe liga-te a ele com um cliente MCP. Utilize os padrões de integração do Python ou do .NET apresentados anteriormente nesta secção como referência para a configuração do cliente e para o token Entra (âmbitohttps://ai.azure.com/.default).
Gerir requisitos para a aprovação de ferramentas
A caixa de ferramentas retorna um objeto _meta.tool_configuration em cada entrada de ferramenta devolvida por tools/list. Quando uma ferramenta está require_approval definida para "always", o tempo de execução do agente deve apresentar a ação pendente ao utilizador e aguardar confirmação antes de invocar a ferramenta. O endpoint MCP não bloqueia tools/call. A aplicação é da inteira responsabilidade do tempo de execução do agente.
Depois de criar e testar a sua caixa de ferramentas, ligue-a a um agente. O padrão de integração depende do tipo de agente:
- Agente alojado (o seu próprio código em execução no Foundry Agent Service): veja Usar uma caixa de ferramentas com um agente alojado para conhecer os padrões de integração e os requisitos de aprovação em tempo de execução do Agent Framework, LangGraph, Visual Studio Code e Azure Developer CLI.
Configurar require_approval numa ferramenta
Define require_approval quando crias uma versão da caixa de ferramentas. Os exemplos de ferramentas MCP em Criar uma versão da caixa de ferramentas mostram os valores "always" e "never". Para configurar através do 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",
},
];
Use o separador Python, .NET, JavaScript, API REST ou Azure Developer CLI para configurar require_approval na definição da sua caixa de ferramentas. O fluxo de trabalho da extensão Microsoft Foundry Toolkit for Visual Studio Code neste artigo foca-se na criação e consumo da caixa de ferramentas no 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
Gerenciar versões da caixa de ferramentas
Nota
Só pode eliminar versões do toolbox através do Python SDK, .NET SDK, JavaScript e REST API. A CLI do Azure Developer suporta operações de listar, obter e publicar (promoção de versão padrão).
As versões da caixa de ferramentas são capturas imutáveis da configuração das suas ferramentas. Cada chamada ao endpoint create produz um novo ToolboxVersionObject. O pai ToolboxObject tem um default_version campo que controla a versão que o endpoint MCP serve. Criar uma nova versão não a promove automaticamente – você decide quando atualizar default_version. Este processo permite-lhe encenar as alterações, testar uma nova versão de forma independente e promovê-la para produção ao seu próprio ritmo.
Nota
Na CLI do Azure Developer, cada operação que altera a versão predefinida atual — azd ai toolbox connection add/remove e azd ai toolbox skill add/remove — cria uma nova versão da toolbox que mantém todas as ligações e competências anteriormente associadas, com a alteração solicitada já aplicada. Nenhum destes comandos muda default_versionautomaticamente; execute azd ai toolbox publish <toolbox-name> <version> quando estiver pronto para ativar a nova versão. Para inspecionar uma versão pendente (não padrão), use azd ai toolbox show <name> --version <n>.
| Objetivo | Campos-chave | Descrição |
|---|---|---|
ToolboxObject |
id, name, default_version |
O recipiente da caixa de ferramentas.
default_version aponta para a versão ativa. |
ToolboxVersionObject |
id, name, version, description, created_at, tools[], policies |
Um instantâneo imutável da lista de ferramentas da caixa de ferramentas num dado momento.
policies.rai_config.rai_policy_name especifica o corrimão de proteção opcional aplicado a esta versão. |
Criar uma nova versão
Cada chamada de criação produz uma nova versão. Se a caixa de ferramentas ainda não existir, o processo cria-a automaticamente. Quando crias a primeira versão de uma nova caixa de ferramentas, a versão padrão é v1 até atualizares manualmente para outra versão.
# 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}`);
Use o separador Python, .NET, JavaScript ou API REST para criar uma nova versão da caixa de ferramentas. O fluxo de trabalho da extensão Microsoft Foundry Toolkit for Visual Studio Code neste artigo foca-se na criação de uma caixa de ferramentas e na estruturação de um agente alojado que a consome.
Esta operação não é suportada pela CLI do Azure Developer. Para criar uma versão da caixa de ferramentas, use o separador
A resposta é o ToolboxVersionObject que contém o novo identificador version.
Listar versões
# 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}`);
}
Use o separador Python, .NET, JavaScript ou API REST para listar versões da toolbox.
# The current default version is marked with *
azd ai toolbox version list <toolbox-name>
Obtenha uma versão específica
# 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}`);
Use o separador Python, .NET, JavaScript ou API REST para obter uma versão específica da caixa de ferramentas.
azd ai toolbox version get <toolbox-name> <version_id>
Definir uma versão como padrão
O endpoint MCP serve sempre o default_version. Para mudar a versão ativa, atualize a caixa de ferramentas:
# 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 Não pode estar vazio. Substitua-o por uma nova versão.
const toolbox = await project.toolboxes.update(
"<toolbox-name>",
"<version_id>",
);
console.log(`Active version: ${toolbox.default_version}`);
Utilize o separador Python, .NET, JavaScript ou REST API para promover uma versão da caixa de ferramentas para predefinição.
As versões da caixa de ferramentas são imutáveis. Usar publish para tornar qualquer versão existente como o novo padrão:
# Roll back or forward to a specific version
azd ai toolbox publish <toolbox-name> <version_id> --no-prompt
publish é o único caminho que muda default_version da CLI; verbos mutantes (connection add/remove, skill add/remove) criam sempre uma nova versão sem a promover.
Eliminar uma versão
# 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>",
);
Use o separador Python, .NET, JavaScript ou REST API para eliminar uma versão da toolbox.
Esta operação não é suportada pela CLI do Azure Developer. Para eliminar uma versão de toolbox, use o separador Python, .NET, REST API, ou JavaScript.
Gerir caixas de ferramentas com o Foundry MCP Server
O Foundry MCP Server (preview) expõe a gestão de toolboxes sob a forma de ferramentas MCP, para que possa recuperar, criar versões, atualizar e eliminar toolboxes a partir de um cliente MCP, como o GitHub Copilot no Visual Studio Code. Para configurar o servidor, consulte Começar com o Foundry MCP Server (pré-visualização).
| Tool | Acesso | Descrição |
|---|---|---|
toolbox_get |
ler | Recupera uma caixa de ferramentas e a sua versão padrão atual. |
toolbox_version_get |
ler | Liste versões da caixa de ferramentas, ou recupere uma versão específica. |
toolbox_version_create |
escrever | Cria uma versão imutável da caixa de ferramentas. Se a caixa de ferramentas não existir, esta ferramenta também a cria. |
toolbox_update |
escrever | Crie ou atualize uma caixa de ferramentas, incluindo a versão padrão. |
toolbox_delete |
escrever | Elimine uma caixa de ferramentas. |
toolbox_version_delete |
escrever | Apaga uma versão específica da caixa de ferramentas. |
Aplicam-se as mesmas regras de versionamento que nos SDKs. Criar uma versão para uma caixa de ferramentas existente não altera a versão predefinida. Para promover uma versão, invoque toolbox_update com defaultVersion definido para a nova versão. Antes de apagares a versão padrão atual, define outra versão como padrão.
Exemplos de prompts:
- "Mostra-me a caixa de
customer-support-toolsferramentas." - "Obtenha a versão 2 de
customer-support-tools." - "Criar uma nova versão de
customer-support-tools." - "Define a versão 2 de
customer-support-toolscomo padrão." - "Defina a versão 1 de
customer-support-toolscomo padrão, depois apague a versão 2." - "Apaga a
old-support-toolscaixa de ferramentas."
Para a referência completa da ferramenta, consulte Ferramentas disponíveis e exemplos de prompts para o Foundry MCP Server.
Configurar ferramentas
Escolha o tipo de ferramenta e o padrão de autenticação que correspondam ao seu cenário. Selecione o separador do seu SDK ou método de implementação preferido.
O separador azd de cada ferramenta abaixo mostra a caixa de ferramentas declarativa YAML. Para criar uma caixa de ferramentas imperativamente sem um projeto de agente, utilize o azd ai toolbox create --from-file fluxo de trabalho e aplique os dados por ferramenta apresentados nas secções seguintes. Para implementar uma caixa de ferramentas com um agente hospedado, modele-a como um azure.ai.toolbox serviço em azure.yaml e ligue o agente para ela com uses: ou toolboxes:.
Múltiplos tipos de ferramentas
Uma única caixa de ferramentas pode agrupar diferentes tipos de ferramentas. O exemplo seguinte combina Web Search, Pesquisa de IA do Azure e um servidor MCP numa única caixa de ferramentas:
{
"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"
}
]
}
Nota
Cada tipo de ferramenta (web_search, azure_ai_search, code_interpreter, file_search) pode aparecer no máximo uma vez sem um name campo. Para incluir múltiplas instâncias do mesmo tipo, defina uma única name para cada instância – veja o exemplo seguinte.
Restrições a múltiplas ferramentas
Pode incluir, no máximo, uma instância de cada tipo de ferramenta integrada sem o campo name numa caixa de ferramentas. Se incluir duas instâncias do mesmo tipo sem um name, a API retorna:
400 invalid_payload: Multiple tools without identifiers found...
Duas instâncias do mesmo tipo de ferramenta
Use o name campo para incluir múltiplas instâncias do mesmo tipo de ferramenta numa única caixa de ferramentas. Cada instância nomeada é tratada como uma ferramenta separada e deve ter um nome único.
{
"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>"
}
]
}
}
]
}
Cada tipo de ferramenta tem a sua própria configuração da caixa de ferramentas - tipos de autenticação de ligação, excertos do SDK por linguagem e qualquer comportamento específico da caixa de ferramentas. Esses detalhes estão presentes no artigo de referência de cada ferramenta. Consulte a tabela de suporte de Funcionalidades para um link para cada ferramenta.
Para comportamentos específicos das ferramentas — como o armazenamento vetorial dinâmico da Pesquisa de Ficheiros (substituição de parâmetro) ou os carregamentos de ficheiros ao nível dos recursos para o Interpretador de Código e a Pesquisa de Ficheiros — consulte o artigo associado a cada ferramenta.
Configurar os guarda-corpos
Aplique uma política de salvaguarda com nome a uma versão de uma caixa de ferramentas para aplicar a filtragem responsável de conteúdos de IA nas entradas e saídas das ferramentas. O mecanismo de proteção funciona na camada do conjunto de ferramentas, independentemente de qualquer filtro de conteúdos do modelo.
Faça referência a um guardrail pelo nome da sua política, que configura no portal Foundry em Guardrails. Defina policies.rai_config.rai_policy_name para o nome da política ao criar uma versão da caixa de ferramentas.
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
A configuração do corrimão de proteção ainda não está disponível na extensão VS Code. Use a REST API, SDK ou Azure Developer CLI para configurar guardrails.
Associe competências a uma caixa de ferramentas
Anexe competências a uma versão toolbox para as disponibilizar aos agentes através do endpoint MCP da toolbox. Cada referência de habilidade especifica o nome da habilidade e uma versão opcional. Omitir version para usar a default_version da competência; fixar uma cadeia version para usar uma captura instantânea imutável.
Uma versão de caixa de ferramentas pode conter ferramentas, competências ou ambos. Os exemplos seguintes criam uma versão da caixa de ferramentas que contém uma única referência de competência. Para adicionar capacidades a um conjunto de ferramentas que já tem ferramentas, inclua o mesmo tools que utilizou em Criar uma versão do conjunto de ferramentas, juntamente com a matriz skills.
Importante
As competências associadas a uma caixa de ferramentas devem existir no mesmo projeto da Foundry. Referências entre projetos não são suportadas.
Quando um agente ou cliente MCP se liga ao endpoint da caixa de ferramentas, as competências são expostas como Recursos MCP. O cliente MCP ou a arquitetura de agente deve suportar o protocolo MCP Resources para detetar automaticamente e carregar capacidades. Para verificar se as capacidades são detetáveis, invoque resources/list no endpoint MCP da toolbox e confirme se os nomes das suas capacidades aparecem na resposta.
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"
}
]
}
Para fixar uma versão específica:
{
"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}`);
A CLI do Azure Developer suporta referências a competências em dois locais: declarativamente, como um bloco de nível superior skills: no YAML azd ai toolbox create --from-file, e imperativamente, com os verbos azd ai toolbox skill add/list/remove. Cada referência tem uma name (obrigatória) e uma opcional version (string). Omitir version seguir a habilidade default_version; fixar uma string de versão para bloquear a caixa de ferramentas a um instantâneo imutável.
Declara as competências quando criares a caixa de ferramentas
# 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
Adicione, liste e remova competências numa caixa de ferramentas existente
# 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 mostra apenas a versão padrão. As habilidades fixadas mostram a sua versão; As habilidades não fixadas mostram (default). Para inspecionar as competências de uma versão pendente, execute azd ai toolbox show <toolbox> --version <n> --output json e leia a matriz skills.
Importante
skill add e skill remove criam, cada um, uma nova versão da caixa de ferramentas que mantém todas as ligações e competências previamente associadas, com a alteração solicitada já aplicada.
Eles não promovem a nova versão para o padrão, por isso as alterações não são visíveis para os clientes MCP até executares azd ai toolbox publish <toolbox> <version>. Para alterar a versão fixada de uma habilidade que já está associada — por exemplo, atualizar greeting da v1 para a v2 — execute três comandos por ordem: skill remove, publish a nova versão, depois skill add <name>@<new-version> (skill add bloqueia duplicados quando verificado com a versão padrão atual).
Os nomes das habilidades devem coincidir ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$ (letras minúsculas, dígitos e hífens; máximo 64 caracteres; sem hífen inicial ou final). Um @ final em <name>@<version> (uma versão vazia) é rejeitado.
As referências de competências não são atualmente configuráveis através da extensão VS Code. Use a API REST ou SDK para configurar as competências.
Validar a descoberta de competências
Depois de associar competências a uma versão da toolbox, verifique que consegue descobri-las através do endpoint MCP da toolbox, utilizando o SDK MCP para 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())
As competências aparecem como recursos MCP com URIs no formato skill://{name}.
Consumir competências de um agente (Microsoft Agent Framework, .NET)
No .NET, utilize AgentSkillsProviderBuilder().UseMcpSkills(mcpClient) do SDK do Microsoft Agent Framework para descobrir capacidades baseadas em MCP a partir de um endpoint de toolbox e injetá-las como AIContextProviders no agente. O agente carrega então as instruções de cada competência em tempo de execução quando o modelo decide que são relevantes. O Program.cs seguinte aloja o agente com a camada de alojamento de Respostas (AddFoundryResponses e 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);
}
}
Para o exemplo completo, incluindo ficheiros de projeto e passos de implementação, consulte o exemplo Skills in Toolbox.
Lembrete
A reminder_preview ferramenta permite que um agente alojado se programe para ser executado novamente numa data futura. Quando o agente chama esta ferramenta, especifica um atraso em minutos. Após esse atraso, Foundry volta a invocar o mesmo agente na mesma conversa.
Resolução de problemas
| Sintoma | Causa provável | Corrigir |
|---|---|---|
tools/list não retorna nenhuma ferramenta para ferramentas MCP ou A2A |
Credenciais de ligação inválidas ou em falta para o servidor MCP remoto ou agente A2A. A caixa de ferramentas não consegue recuperar manifestos de ferramentas do endpoint remoto sem uma autenticação válida. | Verifica se project_connection_id existe no teu projeto Foundry e as credenciais estão corretas. Tenta ligar-te diretamente ao servidor MCP para testar a configuração da autenticação. Se usar identidade gerida (PMI, identidade do agente ou MI), verifique as atribuições corretas de papéis RBAC para o chamador no recurso alvo. |
tools/list retorna zero ferramentas para ferramentas OpenAPI |
Especificação OpenAPI inválida. A caixa de ferramentas constrói o manifesto da ferramenta a partir da especificação, que falha se a especificação estiver mal formada. | Valide o conteúdo da especificação da OpenAPI. Verifique se cumpre a OpenAPI 3.0 ou 3.1 e inclui valores válidos pathsoperationId e esquemas de parâmetros. Se usar autenticação de identidade gerida, verifique também as atribuições de funções RBAC no serviço de destino. |
tools/list retorna menos ferramentas do que o esperado |
O allowed_tools filtro contém nomes de ferramentas incorretos ou mal escritos. Os nomes das ferramentas são sensíveis a maiúsculas e minúsculas e devem seguir a especificação MCP para nomes de ferramentas (sem espaços ou caracteres especiais). |
Remova allowed_tools temporariamente e ligue tools/list para obter a lista completa de ferramentas. Use os nomes exatos da resposta para definir valores para allowed_tools. |
tools/list não retorna nenhuma ferramenta (outros tipos de ferramentas) |
Caixa de ferramentas não totalmente configurada ou tipo de ferramenta não suportado na região. Para ferramentas integradas (Web Search, AI Search, Code Interpreter, File Search), as manifestações de ferramentas são construídas no lado do servidor e não requerem autenticação — se devolverem resultados vazios, a versão da caixa de ferramentas pode ainda não estar configurada. | Espera 10 segundos e tenta novamente. |
400 Multiple tools without identifiers |
Dois tipos de ferramentas sem nome numa única caixa de ferramentas | Manter no máximo um tipo sem nome; adicionar server_label a todas as ferramentas MCP. |
CONSENT_REQUIRED (código -32006) |
A ligação OAuth requer consentimento do utilizador | Abra o URL de consentimento num navegador e complete o fluxo OAuth, depois tente novamente. |
401 nas chamadas MCP |
Token expirado ou escopo errado | Usa o escopo https://ai.azure.com/.default e atualiza o token. |
| Nomes de ferramentas que não coincidem | Os nomes das ferramentas MCP são prefixados por server_label |
Use o formato {server_label}.{tool_name} (por exemplo, myserver.get_info). |
500 em send_ping() |
O servidor MCP do Toolbox não implementa o método MCP ping . |
Use a classe Microsoft Agent FrameworkFoundryToolbox, que gere a ligação à caixa de ferramentas. Não chames send_ping() diretamente. |
500 em prompts/list |
O servidor MCP da Foundry não implementa prompts/list. |
Passe load_prompts=False (ou equivalente) ao construtor de cliente MCP. |
500 com não-transmissão contínua tools/call |
O modo não streaming (stream=False) não é suportado para os endpoints MCP da caixa de ferramentas. |
Usa stream=True sempre quando chamas ferramentas MCP da caixa de ferramentas. |
500 em tools/list |
Erro transitório do servidor | Tenta novamente após alguns segundos. |
| Variáveis de ambiente sobrescritas em tempo de execução | A plataforma reserva todas as variáveis de ambiente com o prefixo FOUNDRY_ e pode sobrescrever silenciosamente os valores definidos pelo utilizador. |
Renomear variáveis de ambiente personalizadas para evitar o prefixo FOUNDRY_ (por exemplo, usar TOOLBOX_MCP_ENDPOINT em vez de FOUNDRY_TOOLBOX_ENDPOINT). |
A ferramenta de lembrete está disponível apenas para agentes alojados. Não podes usar a ferramenta de lembrete com agentes de prompts.
Para instruções completas de configuração, exemplos de utilização e limitações, consulte a ferramenta Lembrete para agentes de auto-agendamento.
Compatibilidade de regiões e modelos
A disponibilidade da caixa de ferramentas depende de dois fatores para além da região do projeto:
- Região: Alguns tipos de ferramentas não estão disponíveis em todas as regiões que suportam o serviço agente. Por exemplo, uma região que suporta o endpoint da caixa de ferramentas pode não suportar todos os tipos de ferramentas incorporadas.
Antes de implementar uma caixa de ferramentas, verifique se a sua região de destino suporta os tipos de ferramentas que pretende usar. Para as tabelas completas de compatibilidade, consulte Suporte à Ferramenta por região e modelo.
Conteúdo relacionado
- Ligue agentes a servidores do Model Context Protocol
- Ferramentas disponíveis e exemplos de prompts para o Foundry MCP Server
- Adicionar autenticação de servidor MCP
- Ferramenta de pesquisa web
- Pesquisa de IA do Azure ferramenta
- Visão geral dos guarda-corpos
- Competências de gestão
- Implementar um agente alojado
- Adicione uma ligação ao seu projeto
- Configure isolamento de rede para Microsoft Foundry