Was this page helpful?
La herramienta de búsqueda de herramientas permite a Claude trabajar con cientos o miles de herramientas descubriendo y cargando dinámicamente solo las que necesita. En lugar de cargar todas las definiciones de herramientas en la ventana de contexto de antemano, Claude busca en tu catálogo de herramientas—incluyendo nombres de herramientas, descripciones, nombres de argumentos y descripciones de argumentos—y carga solo las herramientas que necesita.
Este enfoque resuelve dos desafíos críticos a medida que las bibliotecas de herramientas se escalan:
Aunque esto se proporciona como una herramienta del lado del servidor, también puedes implementar tu propia funcionalidad de búsqueda de herramientas del lado del cliente. Consulta Implementación personalizada de búsqueda de herramientas para obtener detalles.
Por favor, comunícate a través de nuestro formulario de comentarios para compartir tus comentarios sobre esta función.
La búsqueda de herramientas del lado del servidor no está cubierta por los acuerdos de Retención Cero de Datos (ZDR). Los datos se retienen de acuerdo con la política de retención estándar de la función. Las implementaciones personalizadas de búsqueda de herramientas del lado del cliente utilizan la API de Mensajes estándar y son elegibles para ZDR.
En Amazon Bedrock, la búsqueda de herramientas del lado del servidor está disponible solo a través de la API de invocación, no la API inversa.
También puedes implementar búsqueda de herramientas del lado del cliente devolviendo bloques tool_reference desde tu propia implementación de búsqueda.
Hay dos variantes de búsqueda de herramientas:
tool_search_tool_regex_20251119): Claude construye patrones regex para buscar herramientastool_search_tool_bm25_20251119): Claude utiliza consultas en lenguaje natural para buscar herramientasCuando habilitas la herramienta de búsqueda de herramientas:
tool_search_tool_regex_20251119 o tool_search_tool_bm25_20251119) en tu lista de herramientasdefer_loading: true para herramientas que no deben cargarse inmediatamentetool_reference más relevantesEsto mantiene tu ventana de contexto eficiente mientras se mantiene una alta precisión en la selección de herramientas.
Aquí hay un ejemplo simple con herramientas diferidas:
La herramienta de búsqueda de herramientas tiene dos variantes:
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
}{
"type": "tool_search_tool_bm25_20251119",
"name": "tool_search_tool_bm25"
}Formato de consulta de variante Regex: Expresión regular de Python, NO lenguaje natural
Cuando uses tool_search_tool_regex_20251119, Claude construye patrones regex usando la sintaxis re.search() de Python, no consultas en lenguaje natural. Patrones comunes:
"weather" - coincide con nombres/descripciones de herramientas que contienen "weather""get_.*_data" - coincide con herramientas como get_user_data, get_weather_data"database.*query|query.*database" - patrones OR para flexibilidad"(?i)slack" - búsqueda insensible a mayúsculasLongitud máxima de consulta: 200 caracteres
Formato de consulta de variante BM25: Lenguaje natural
Cuando uses tool_search_tool_bm25_20251119, Claude utiliza consultas en lenguaje natural para buscar herramientas.
Marca herramientas para carga bajo demanda agregando defer_loading: true:
{
"name": "get_weather",
"description": "Get current weather for a location",
"input_schema": {
"type": "object",
"properties": {
"location": { "type": "string" },
"unit": { "type": "string", "enum": ["celsius", "fahrenheit"] }
},
"required": ["location"]
},
"defer_loading": true
}Puntos clave:
defer_loading se cargan en contexto inmediatamentedefer_loading: true se cargan solo cuando Claude las descubre a través de la búsquedadefer_loading: trueAmbas variantes de búsqueda de herramientas (regex y bm25) buscan nombres de herramientas, descripciones, nombres de argumentos y descripciones de argumentos.
Cuando Claude usa la herramienta de búsqueda de herramientas, la respuesta incluye nuevos tipos de bloques:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll search for tools to help with the weather information."
},
{
"type": "server_tool_use",
"id": "srvtoolu_01ABC123",
"name": "tool_search_tool_regex",
"input": {
"query": "weather"
}
},
{
"type": "tool_search_tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_search_result",
"tool_references": [{ "type": "tool_reference", "tool_name": "get_weather" }]
}
},
{
"type": "text",
"text": "I found a weather tool. Let me get the weather for San Francisco."
},
{
"type": "tool_use",
"id": "toolu_01XYZ789",
"name": "get_weather",
"input": { "location": "San Francisco", "unit": "fahrenheit" }
}
],
"stop_reason": "tool_use"
}server_tool_use: Indica que Claude está invocando la herramienta de búsqueda de herramientastool_search_tool_result: Contiene los resultados de búsqueda con un objeto tool_search_tool_search_result anidadotool_references: Array de objetos tool_reference que apuntan a herramientas descubiertastool_use: Claude invocando la herramienta descubiertaLos bloques tool_reference se expanden automáticamente en definiciones de herramientas completas antes de ser mostrados a Claude. No necesitas manejar esta expansión tú mismo. Sucede automáticamente en la API siempre que proporciones todas las definiciones de herramientas coincidentes en el parámetro tools.
La herramienta de búsqueda de herramientas funciona con servidores MCP. Agrega el encabezado beta "mcp-client-2025-11-20" a tu solicitud de API, y luego usa mcp_toolset con default_config para diferir la carga de herramientas MCP:
Opciones de configuración MCP:
default_config.defer_loading: Establece el valor predeterminado para todas las herramientas del servidor MCPconfigs: Anula los valores predeterminados para herramientas específicas por nombrePuedes implementar tu propia lógica de búsqueda de herramientas (por ejemplo, usando incrustaciones o búsqueda semántica) devolviendo bloques tool_reference desde una herramienta personalizada. Cuando Claude llama a tu herramienta de búsqueda personalizada, devuelve un tool_result estándar con bloques tool_reference en el array de contenido:
{
"type": "tool_result",
"tool_use_id": "toolu_your_tool_id",
"content": [
{ "type": "tool_reference", "tool_name": "discovered_tool_name" }
]
}Cada herramienta referenciada debe tener una definición de herramienta correspondiente en el parámetro tools de nivel superior con defer_loading: true. Este enfoque te permite usar algoritmos de búsqueda más sofisticados mientras se mantiene la compatibilidad con el sistema de búsqueda de herramientas.
El formato tool_search_tool_result mostrado en la sección Formato de respuesta es el formato del lado del servidor utilizado internamente por la búsqueda de herramientas integrada de Anthropic. Para implementaciones personalizadas del lado del cliente, siempre usa el formato tool_result estándar con bloques de contenido tool_reference como se muestra arriba.
Para un ejemplo completo usando incrustaciones, consulta nuestro libro de recetas de búsqueda de herramientas con incrustaciones.
La herramienta de búsqueda de herramientas no es compatible con ejemplos de uso de herramientas. Si necesitas proporcionar ejemplos de uso de herramientas, usa llamadas de herramientas estándar sin búsqueda de herramientas.
Estos errores previenen que la solicitud sea procesada:
Todas las herramientas diferidas:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "All tools have defer_loading set. At least one tool must be non-deferred."
}
}Definición de herramienta faltante:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Tool reference 'unknown_tool' has no corresponding tool definition"
}
}Los errores durante la ejecución de herramientas devuelven una respuesta 200 con información de error en el cuerpo:
{
"type": "tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_result_error",
"error_code": "invalid_pattern"
}
}Códigos de error:
too_many_requests: Límite de velocidad excedido para operaciones de búsqueda de herramientasinvalid_pattern: Patrón regex malformadopattern_too_long: El patrón excede el límite de 200 caracteresunavailable: Servicio de búsqueda de herramientas temporalmente no disponibleLa búsqueda de herramientas funciona con almacenamiento en caché de indicaciones. Agrega puntos de interrupción cache_control para optimizar conversaciones de múltiples turnos:
import anthropic
client = anthropic.Anthropic()
# Primera solicitud con búsqueda de herramientas
messages = [{"role": "user", "content": "What's the weather in Seattle?"}]
response1 = client.messages.create(
model="claude-opus-4-6",
max_tokens=2048,
messages=messages,
tools=[
{"type": "tool_search_tool_regex_20251119", "name": "tool_search_tool_regex"},
{
"name": "get_weather",
"description": "Get weather for a location",
"input_schema": {
"type": "object",
"properties": {"location": {"type": "string"}},
"required": ["location"],
},
"defer_loading": True,
},
],
)
# Agrega la respuesta de Claude a la conversación
messages.append({"role": "assistant", "content": response1.content})
# Segunda solicitud con punto de interrupción de caché
messages.append(
{
"role": "user",
"content": "What about New York?",
"cache_control": {"type": "ephemeral"},
}
)
response2 = client.messages.create(
model="claude-opus-4-6",
max_tokens=2048,
messages=messages,
tools=[
{"type": "tool_search_tool_regex_20251119", "name": "tool_search_tool_regex"},
{
"name": "get_weather",
"description": "Get weather for a location",
"input_schema": {
"type": "object",
"properties": {"location": {"type": "string"}},
"required": ["location"],
},
"defer_loading": True,
},
],
)
print(f"Cache read tokens: {response2.usage.get('cache_read_input_tokens', 0)}")El sistema expande automáticamente los bloques tool_reference en todo el historial de conversación, por lo que Claude puede reutilizar herramientas descubiertas en turnos posteriores sin volver a buscar.
Con la transmisión habilitada, recibirás eventos de búsqueda de herramientas como parte de la transmisión:
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "tool_search_tool_regex"}}
// Consulta de búsqueda transmitida
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"query\":\"weather\"}"}}
// Pausa mientras se ejecuta la búsqueda
// Resultados de búsqueda transmitidos
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "tool_search_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": {"type": "tool_search_tool_search_result", "tool_references": [{"type": "tool_reference", "tool_name": "get_weather"}]}}}
// Claude continúa con herramientas descubiertasPuedes incluir la herramienta de búsqueda de herramientas en la API de Lotes de Mensajes. Las operaciones de búsqueda de herramientas a través de la API de Lotes de Mensajes se cotizan igual que las solicitudes de la API de Mensajes regular.
Casos de uso buenos:
Cuándo la llamada de herramientas tradicional podría ser mejor:
El uso de la herramienta de búsqueda de herramientas se rastrea en el objeto de uso de respuesta:
{
"usage": {
"input_tokens": 1024,
"output_tokens": 256,
"server_tool_use": {
"tool_search_requests": 2
}
}
}curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": "What is the weather in San Francisco?"
}
],
"tools": [
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
},
{
"name": "get_weather",
"description": "Get the weather at a specific location",
"input_schema": {
"type": "object",
"properties": {
"location": {"type": "string"},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
},
"defer_loading": true
},
{
"name": "search_files",
"description": "Search through files in the workspace",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string"},
"file_types": {
"type": "array",
"items": {"type": "string"}
}
},
"required": ["query"]
},
"defer_loading": true
}
]
}'curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "anthropic-beta: mcp-client-2025-11-20" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 2048,
"mcp_servers": [
{
"type": "url",
"name": "database-server",
"url": "https://mcp-db.example.com"
}
],
"tools": [
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
},
{
"type": "mcp_toolset",
"mcp_server_name": "database-server",
"default_config": {
"defer_loading": true
},
"configs": {
"search_events": {
"defer_loading": false
}
}
}
],
"messages": [
{
"role": "user",
"content": "What events are in my database?"
}
]
}'