Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
Los elementos marcados (versión preliminar) de este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin acuerdo de nivel de servicio y no se recomienda para las cargas de trabajo de producción. Es posible que algunas características no se admitan o que tengan funcionalidades restringidas. Para más información, consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure.
Cuando un cuadro de herramientas contiene muchas herramientas, pasar todas las definiciones de herramientas al modelo en cada turno crea tres problemas compuestos: los costos de token crecen con cada herramienta agregada al contexto, la ventana de contexto rellena con definiciones que la tarea actual no necesita y el modelo elige las herramientas incorrectas de una lista superpoblada. La búsqueda de herramientas lo resuelve reemplazando la lista completa de herramientas por dos meta-herramientas centradas, manteniendo el costo plano independientemente del tamaño del cuadro de herramientas.
Cuando se habilita la búsqueda de herramientas, el modelo recibe dos meta-herramientas integradas: tool_search, a la que llama con una descripción en lenguaje natural de la funcionalidad que necesita, y call_tool, que utiliza para invocar cualquier herramienta descubierta por su nombre. Foundry evalúa las consultas tool_search frente al conjunto completo de herramientas de la caja de herramientas y devuelve solo las que coinciden, manteniendo el contexto activo centrado y relevante.
Use la búsqueda de herramientas cuando:
- Tu conjunto de herramientas tiene más de 10–15 herramientas y quieres evitar la sobrecarga de contexto.
- Las diferentes tareas del agente necesitan diferentes subconjuntos de herramientas y desea que el modelo elija el subconjunto correcto dinámicamente.
Prerequisites
- Un proyecto activo de Microsoft Foundry.
- Un cuadro de herramientas existente o nuevo con al menos una herramienta. Consulte Mantener la caja de herramientas basada en intenciones en Foundry.
- RBAC: asigne el rol Usuario de Foundry en el proyecto de Foundry a cada identidad pertinente (desarrollador, la identidad administrada del agente y usuarios finales en flujos de OAuth).
- Foundry Toolkit: Instale Visual Studio Code y Foundry Toolkit para Visual Studio Code.
Funcionamiento de la búsqueda de herramientas
Cuando se incluye {"type": "toolbox_search_preview"} en un cuadro de herramientas, todas las herramientas del cuadro de herramientas se ocultan de la respuesta inicial tools/list . En su lugar, Foundry inserta dos meta-herramientas:
-
tool_search: el modelo lo llama con una descripción del lenguaje natural de la funcionalidad que necesita. Foundry evalúa la consulta y devuelve las definiciones de herramientas coincidentes. -
call_tool: el modelo lo usa para invocar cualquier herramienta detectada por su nombre.
El modelo no examina una lista completa de herramientas: describe la intención, detecta las herramientas adecuadas y las llama.
La tool_search función acepta los parámetros siguientes:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
query |
string | Sí | Descripción en lenguaje natural de la funcionalidad o tarea para la que necesita una herramienta. |
limit |
entero | No | Número máximo de herramientas que se van a devolver. Si se omite, se usa el valor de la plataforma. |
El modelo puede llamar a tool_search tantas veces como sea necesario durante un solo turno. Cada llamada devuelve solo las herramientas que coinciden con la consulta, por lo que el contexto activo permanece centrado en lo que es relevante para el paso actual. Las herramientas devueltas por tool_search permanecen invocables para el resto del turno sin realizar búsquedas repetidas.
Note
La toolbox_search_preview entrada es una directiva de configuración que activa la búsqueda de herramientas. No aparece en el propio tools/list y no cuenta para el límite de herramientas sin nombre por tipo.
Habilitación de la búsqueda de herramientas
Añada {"type": "toolbox_search_preview"} a la lista de herramientas de su versión de la caja de herramientas. Todas las demás herramientas del cuadro de herramientas están disponibles a través de la búsqueda de herramientas; no se exponen en la lista de herramientas inicial que ve el modelo.
Use Foundry Toolkit para Visual Studio Code para habilitar la búsqueda de herramientas al crear o editar un cuadro de herramientas. La casilla Búsqueda de herramientas agrega la entrada de configuración toolbox_search_preview a la versión de la caja de herramientas.
- Seleccione Foundry Toolkit en la barra de actividades.
- En Mis recursos, expanda El nombre> del proyectoHerramientas.
- Seleccione el icono + Agregar cuadro de herramientas .
- En la pestaña Crear un cuadro de herramientas personalizado , escriba el nombre y la descripción del cuadro de herramientas y agregue las herramientas que desee.
- Seleccione Búsqueda de herramientas.
- Seleccione Publicar.
Al publicar un nuevo cuadro de herramientas, se genera automáticamente su primera versión. Esa versión se convierte automáticamente en la versión predeterminada. Para consultar el flujo de trabajo completo de creación de la caja de herramientas, consulte Organizar una caja de herramientas basada en intenciones en Foundry.
import os
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import MCPTool, ToolboxSearchPreviewTool
client = AIProjectClient(
endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
credential=DefaultAzureCredential(),
)
# ToolboxSearchPreviewTool() enables tool search — other tools in the toolbox are discovered on
# demand through tool_search instead of being listed up front. Add as many MCP servers as you need;
# tool search keeps the agent's initial tool surface small regardless of toolbox size.
inner_mcp_tool = MCPTool(
server_label="github",
server_url="https://api.githubcopilot.com/mcp",
require_approval="never",
project_connection_id="github-mcp-conn",
)
toolbox_version = client.beta.toolboxes.create_version(
name="my-toolbox",
description="Large toolbox with tool search enabled",
tools=[inner_mcp_tool, ToolboxSearchPreviewTool()],
)
print(f"Created toolbox `{toolbox_version.name}` (version {toolbox_version.version})")
Para anclar herramientas críticas o agregar palabras clave de búsqueda para herramientas específicas, use tool_configs en la entrada de herramienta individual. Consulte Detección de herramientas de ajuste fino.
POST {project_endpoint}/toolboxes/my-toolbox/versions?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
{
"description": "Large toolbox with tool search enabled",
"tools": [
{
"type": "toolbox_search_preview"
},
{
"type": "work_iq_preview",
"project_connection_id": "{workiq-connection-id}",
"tool_configs": {
"calendar_events": {
"pin": true,
"additional_search_text": "meetings appointments schedule calendar invites"
}
}
},
{
"type": "mcp",
"server_label": "github",
"server_url": "https://api.githubcopilot.com/mcp",
"require_approval": "never",
"project_connection_id": "github-mcp-conn"
}
]
}
Note
Use el ámbito del token https://ai.azure.com/.default al obtener el token de portador.
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();
// ToolboxSearchPreviewTool enables tool search — other tools are discovered on demand via tool_search
ProjectsAgentTool mcpTool = ProjectsAgentTool.AsProjectTool(ResponseTool.CreateMcpTool(
serverLabel: "github",
serverUri: new Uri("https://api.githubcopilot.com/mcp"),
toolCallApprovalPolicy: new McpToolCallApprovalPolicy(GlobalMcpToolCallApprovalPolicy.NeverRequireApproval)));
ToolboxSearchPreviewTool searchTool = new()
{
Name = "ToolBoxSearch",
Description = "Search for tools by capability"
};
ToolboxVersion toolboxVersion = toolboxClient.CreateToolboxVersion(
name: "my-toolbox",
tools: [mcpTool, searchTool],
description: "Large toolbox with tool search enabled");
Console.WriteLine($"Created toolbox `{toolboxVersion.Name}` (version {toolboxVersion.Version})");
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
const projectEndpoint = process.env["FOUNDRY_PROJECT_ENDPOINT"];
const project = new AIProjectClient(projectEndpoint, new DefaultAzureCredential());
// { type: "toolbox_search_preview" } enables tool search — other tools in the toolbox are
// discovered on demand through tool_search instead of being listed up front. Add as many MCP
// servers as you need; tool search keeps the agent's initial tool surface small regardless of size.
const toolboxVersion = await project.beta.toolboxes.createVersion(
"my-toolbox",
[
{
type: "mcp",
server_label: "github",
server_url: "https://api.githubcopilot.com/mcp",
require_approval: "never",
project_connection_id: "github-mcp-conn",
},
{ type: "toolbox_search_preview" },
],
{ description: "Large toolbox with tool search enabled" },
);
console.log(`Created toolbox \`${toolboxVersion.name}\` (version ${toolboxVersion.version})`);
Comprobación de que la búsqueda de herramientas está activa
Utilice el punto de conexión específico de la versión para confirmar que tool_search aparece en tools/list y que no se muestran otras herramientas de la caja de herramientas en el listado inicial.
Foundry Toolkit crea y publica el cuadro de herramientas. Para comprobar la respuesta del punto de conexión de MCP para una versión específica del cuadro de herramientas, seleccione la pestaña Python, .NET, JavaScript o API REST de esta sección.
Instale el SDK de cliente MCP si aún no lo ha hecho:
pip install mcp
import asyncio
from azure.identity import DefaultAzureCredential
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession
url = "https://<account>.services.ai.azure.com/api/projects/<proj>/toolboxes/<name>/versions/<version>/mcp?api-version=v1"
token = DefaultAzureCredential().get_token("https://ai.azure.com/.default").token
headers = {
"Authorization": f"Bearer {token}",
"Foundry-Features": "Toolboxes=V1Preview",
}
async def verify_toolbox():
async with streamablehttp_client(url, headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
# List available tools -- only tool_search should appear initially
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]}")
# Confirm tool_search is present
names = [t.name for t in tools_result.tools]
assert "tool_search" in names, "tool_search not found -- check toolbox_search_preview config"
asyncio.run(verify_toolbox())
Utilice el punto de conexión específico de la versión (/versions/{version}/mcp) para validar antes de promoverla.
1. Inicialice la sesión de MCP:
POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
Foundry-Features: Toolboxes=V1Preview
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}
2. Enviar la notificación inicializada:
POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
Foundry-Features: Toolboxes=V1Preview
{"jsonrpc":"2.0","method":"notifications/initialized"}
3. Enumerar las herramientas disponibles:
POST {project_endpoint}/toolboxes/{toolbox_name}/versions/{version}/mcp?api-version=v1
Authorization: Bearer {token}
Content-Type: application/json
Foundry-Features: Toolboxes=V1Preview
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
En result.tools, tool_search debe estar presente y todas las demás herramientas del cuadro de herramientas deben estar ausentes en la lista inicial.
Use cualquier cliente de .NET compatible con MCP. Adquiera un token con ámbito https://ai.azure.com/.default, incluya el encabezado Foundry-Features: Toolboxes=V1Preview y llame a tools/list en el punto de conexión de MCP específico de la versión. Vea la pestaña REST API para consultar el formato de la solicitud.
Use cualquier cliente de JavaScript compatible con MCP (por ejemplo, el @modelcontextprotocol/sdk paquete). Adquiera un token con ámbito https://ai.azure.com/.default, incluya el encabezado Foundry-Features: Toolboxes=V1Preview y llame a tools/list en el punto de conexión de MCP específico de la versión. Consulte la pestaña API REST para ver la estructura de la solicitud.
Ajustar con precisión la detección de herramientas
La búsqueda de herramientas funciona sin configuración adicional. Para patrones de uso predecibles, puede ajustar cómo se exponen e indexan las herramientas específicas.
Foundry Toolkit admite la habilitación de la búsqueda de herramientas. Para configurar herramientas ancladas o palabras clave de búsqueda adicionales, seleccione la pestaña Python, .NET, JavaScript o API REST de esta sección.
Anclar herramientas críticas
Use pin para hacer que una herramienta específica siempre aparezca junto tools/list con tool_search y call_tool. Las herramientas ancladas se pueden invocar de inmediato sin necesidad de realizar una búsqueda de ida y vuelta. Para anclar todas las herramientas de un servidor MCP o una entrada de herramienta integrada, use "*" como clave.
tools=[
{"type": "toolbox_search_preview"},
{
"type": "mcp",
"server_label": "analytics",
"server_url": "https://db-mcp.internal/sse",
"tool_configs": {
"execute_query": {"pin": True}, # always visible — no search needed
},
},
]
{
"tools": [
{ "type": "toolbox_search_preview" },
{
"type": "mcp",
"server_label": "analytics",
"server_url": "https://db-mcp.internal/sse",
"tool_configs": {
"execute_query": { "pin": true }
}
}
]
}
En el SDK de .NET, adjunte tool_configs a la entrada de la herramienta MCP al crear la versión del cuadro de herramientas. La forma de configuración es idéntica al JSON que se muestra en la pestaña API REST .
En JavaScript, incluya tool_configs en el objeto de herramienta MCP pasado a project.beta.toolboxes.createVersion. La forma de configuración es idéntica al JSON que se muestra en la pestaña API REST .
Para anclar todas las herramientas de una entrada, use "*" como clave:
{
"type": "mcp",
"server_label": "analytics",
"server_url": "https://db-mcp.internal/sse",
"tool_configs": {
"*": {"pin": True}, # every tool in this server is always visible
},
}
{
"type": "mcp",
"server_label": "analytics",
"server_url": "https://db-mcp.internal/sse",
"tool_configs": {
"*": { "pin": true }
}
}
Use la misma clave comodín "*" dentro de tool_configs en la entrada de la herramienta MCP de .NET para anclar todas las herramientas de un servidor MCP. Consulte la pestaña API de REST para la forma JSON.
Use la misma clave comodín "*" dentro de tool_configs en el objeto de la herramienta MCP de JavaScript para anclar todas las herramientas de un servidor MCP. Consulte la pestaña API de REST para la forma JSON.
Agregar palabras clave de búsqueda
Si la descripción de MCP de una herramienta no coincide con el vocabulario que usan los usuarios de forma natural, agregue palabras clave con additional_search_text. El texto adicional solo se usa para la clasificación de búsqueda; nunca se expone al modelo en el esquema de la herramienta.
{
"type": "mcp",
"server_label": "analytics",
"server_url": "https://db-mcp.internal/sse",
"tool_configs": {
"execute_query": {
"pin": True,
"additional_search_text": "SQL database analytics reporting dashboard queries",
},
"list_tables": {
"additional_search_text": "schema columns metadata table structure discover",
},
},
}
{
"type": "mcp",
"server_label": "analytics",
"server_url": "https://db-mcp.internal/sse",
"tool_configs": {
"execute_query": {
"pin": true,
"additional_search_text": "SQL database analytics reporting dashboard queries"
},
"list_tables": {
"additional_search_text": "schema columns metadata table structure discover"
}
}
}
En el SDK de .NET, establezca additional_search_text (y, opcionalmente, pin) dentro de tool_configs en la entrada de la herramienta MCP. La forma coincide con el JSON que se muestra en la pestaña API rest .
En JavaScript, establezca additional_search_text (y opcionalmente pin) dentro tool_configs del objeto de herramienta MCP pasado a project.beta.toolboxes.createVersion. La forma coincide con el JSON que se muestra en la pestaña API rest .
Anclaje automático
Foundry realiza un seguimiento automático de las herramientas que cada usuario llama con más frecuencia y las expone directamente en tools/list, sin ninguna configuración necesaria. Después de un breve periodo de calentamiento, las herramientas de uso frecuente aparecen sin necesidad de una ida y vuelta de búsqueda. El conjunto activo es por usuario y se actualiza a medida que cambian los patrones de uso; Las entradas obsoletas se agotan automáticamente.
El anclaje automático es compatible con la configuración explícita pin y additional_search_text. Ancle las herramientas críticas que conozca por adelantado, agregue palabras clave para herramientas con nombres ambiguos y deje que el anclaje automático controle la cola larga a medida que surjan patrones de uso.
Referencia de configuración
toolbox_search_preview
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
type |
"toolbox_search_preview" |
Sí | Activa la búsqueda de herramientas en el cuadro de herramientas. |
Incluya {"type": "toolbox_search_preview"} en la lista de herramientas del cuadro de herramientas para habilitar la búsqueda de herramientas. Todos los demás campos de configuración son opcionales.
tool_configs (por herramienta)
Establezca tool_configs en una entrada de herramienta MCP individual para controlar cómo se comportan las herramientas específicas dentro del contexto de búsqueda. Use un nombre de herramienta exacto como clave para configurar una herramienta específica o "*" para aplicar la configuración a todas las herramientas de esa entrada.
| Campo | Tipo | Descripción |
|---|---|---|
pin |
boolean | Cuando true, la herramienta aparece directamente en tools/list, junto a tool_search y call_tool. El modelo puede llamarlo sin buscar primero. |
additional_search_text |
string | Palabras clave adicionales agregadas a la entrada de índice de búsqueda de la herramienta. Se usa solo para la clasificación en búsquedas; nunca es visible para el modelo en el esquema de la herramienta. |
Consideraciones
- Todas las herramientas del cuadro de herramientas están ocultas de la lista inicial. Cuando
toolbox_search_previewestá en un cuadro de herramientas, ninguna otra herramienta del cuadro de herramientas aparece entools/list. El modelo solo los detecta a través detool_search. Las herramientas añadidas directamente a un agente fuera de la caja de herramientas no se ven afectadas y permanecen visibles. - Las descripciones de las herramientas determinan la calidad de las coincidencias. Foundry usa nombres y descripciones de herramientas para evaluar las consultas de búsqueda. Es poco probable que se muestre una herramienta sin descripción o con una descripción vaga, incluso en búsquedas relevantes. Escriba descripciones que describan lo que hace la herramienta y los tipos de tareas que controla.
-
tool_searchno cuenta para los límites de herramientas. La plataforma lo inyecta y no ocupa la ranura unnamed-tool-per-type. - Se admiten varias búsquedas por turno. El modelo puede llamar a
tool_searchmás de una vez en un solo turno si los distintos pasos necesitan funcionalidades diferentes. - Las herramientas devueltas se conservan para el turno. Una vez que
tool_searchdevuelve una herramienta, el modelo puede invocarla varias veces sin tener que volver a buscarla. - Las herramientas ancladas siempre aparecen en
tools/list. Las herramientas con"pin": Trueentool_configsaparecen junto atool_searchycall_toolen cada turno, independientemente de las consultas de búsqueda. - El anclaje automático muestra automáticamente las herramientas de uso frecuente. Foundry realiza un seguimiento de la frecuencia de llamadas a herramientas por usuario y promueve las herramientas más utilizadas a
tools/listtras un breve periodo de calentamiento. El conjunto frecuente es por usuario y se actualiza a medida que cambian los patrones de uso. - Es posible que se requiera el consentimiento de OAuth. Si alguna herramienta del cuadro de herramientas se conecta a un servidor MCP basado en OAuth, la primera llamada devuelve un
CONSENT_REQUIREDerror (código-32007) con una dirección URL de consentimiento en la respuesta. Abra esa dirección URL en un explorador, complete el flujo de OAuth y vuelva a intentarlo. Las llamadas posteriores se realizan correctamente sin volver a solicitarlas. Consulte Solución de errores del cuadro de herramientas para controlar este error.
procedimientos recomendados
- Agregue una descripción a cada herramienta. La búsqueda de herramientas usa descripciones para hacer coincidir las herramientas con las consultas. Una descripción vaga o faltante provoca un descubrimiento deficiente.
- Use la búsqueda de herramientas para cuadros de herramientas grandes. Esta es la configuración más eficaz cuando tiene 10 o más herramientas.
- Usa la búsqueda de herramientas junto con el control de versiones de la caja de herramientas. Pruebe la configuración en un punto de conexión específico de la versión antes de promoverla al valor predeterminado.
- Menciona la búsqueda de herramientas en el prompt del sistema. Guíe el modelo para llamar
tool_searchantes de concluir que una funcionalidad no está disponible. Por ejemplo: "Si necesita una herramienta que no esté en la lista actual, llame atool_searchcon una descripción de lo que necesita antes de responder que no puede ayudar". - Ancle las herramientas que siempre necesita. Utilice
"pin": Trueentool_configspara herramientas invocadas en casi todos los turnos, con el fin de evitar la ida y vuelta de la búsqueda. - Use
additional_search_textcuando las descripciones sean ambiguas. Si el equipo usa un vocabulario diferente a las descripciones de herramientas del servidor MCP, agregue palabras clave para mejorar la precisión de búsqueda sin modificar el servidor.
Troubleshoot
| Síntoma | Causa probable | Corregir |
|---|---|---|
tool_search falta en tools/list |
toolbox_search_preview no estaba incluido en la versión de la caja de herramientas, o bien está conectado a una versión anterior al cambio. |
Agregue {"type": "toolbox_search_preview"} a la lista de herramientas y cree una nueva versión. Confirme que usa el punto de conexión de la versión actualizada. |
tool_search no devuelve ningún resultado para una consulta |
Las herramientas del cuadro de herramientas no tienen ninguna descripción o descripciones no se relacionan con la consulta. | Agregue o mejore las descripciones de las herramientas del cuadro de herramientas. Las descripciones deben explicar lo que hace la herramienta y los tipos de tareas que controla. |
Aparece una herramienta de la caja de herramientas en la vista inicial de tools/list |
La herramienta se agregó directamente al agente en lugar de, o además, a la definición del cuadro de herramientas. | Quite la herramienta de la lista de herramientas directas del agente y confíe en el cuadro de herramientas. Las herramientas agregadas directamente a un agente siempre están visibles, independientemente de la búsqueda de herramientas. |
El modelo nunca llama a tool_search |
El modelo desconoce si tool_search puede obtener herramientas adicionales. |
Añada una instrucción en el prompt del sistema indicándole al modelo que llame a tool_search cuando una capacidad necesaria no esté en su lista actual de herramientas. |
tool_search se invoca, pero la herramienta devuelta no se ejecuta |
La conexión o configuración de la herramienta subyacente no es válida. | Compruebe el project_connection_id y los demás campos de la herramienta devuelta. Pruebe la herramienta directamente a través del endpoint MCP de la toolbox sin tener habilitada la búsqueda de herramientas. |