---
title: Herramientas
url: https://platform.claude.com/docs/es/managed-agents/tools
description: Configura las herramientas disponibles para tu agente.
featureMetadata:
  topic:
    title: Managed Agents
    url: https://platform.claude.com/docs/en/managed-agents/overview
  status: beta
  betaHeader: managed-agents-2026-04-01
---

Claude Managed Agents proporciona un conjunto de herramientas integradas que Claude puede usar de forma autónoma dentro de una [sesión](https://platform.claude.com/docs/es/managed-agents/sessions). Tú controlas qué herramientas están disponibles especificándolas en la configuración del agente.

Claude Managed Agents también admite herramientas personalizadas definidas por el usuario. Tu aplicación ejecuta estas herramientas por separado y devuelve los resultados a Claude, que los usa para continuar la tarea. Para darle al agente herramientas de un servidor MCP, usa el [conector MCP](https://platform.claude.com/docs/es/managed-agents/mcp-connector) en su lugar.

## Herramientas disponibles

El conjunto de herramientas del agente incluye las siguientes herramientas. Todas están habilitadas de forma predeterminada cuando incluyes el conjunto de herramientas en la configuración del agente.

| Herramienta | Nombre       | Descripción                                                      |
| ----------- | ------------ | ---------------------------------------------------------------- |
| Bash        | `bash`       | Ejecuta comandos bash en una sesión de shell                     |
| Read        | `read`       | Lee un archivo del sistema de archivos del sandbox               |
| Write       | `write`      | Escribe un archivo en el sistema de archivos del sandbox         |
| Edit        | `edit`       | Realiza reemplazo de cadenas en un archivo                       |
| Glob        | `glob`       | Coincidencia rápida de patrones de archivos usando patrones glob |
| Grep        | `grep`       | Búsqueda de texto usando patrones regex                          |
| Web fetch   | `web_fetch`  | Obtiene contenido de una URL                                     |
| Web search  | `web_search` | Busca información en la web                                      |

Cuando la salida de una herramienta supera los 100,000 caracteres (aproximadamente 25,000 tokens), se escribe automáticamente en un archivo en el [sandbox](https://platform.claude.com/docs/es/managed-agents/environments). El modelo recibe una vista previa truncada con la ruta del archivo y puede leer el contenido completo desde allí.

## Configuración del conjunto de herramientas

Habilita el conjunto completo de herramientas con `agent_toolset_20260401` al crear un agente. Usa el arreglo `configs` (csharp, go: `Configs`) para deshabilitar herramientas específicas o sobrescribir su configuración. Cada entrada se identifica por su `name` (csharp, go: `Name`), que toma un valor de la columna Nombre en [Herramientas disponibles](https://platform.claude.com/docs/es/managed-agents/tools#available-tools). Una entrada también acepta un campo opcional `type` (csharp, go: `Type`) con el mismo valor.

Cada entrada de configuración también puede establecer un `permission_policy` (java, php: `permissionPolicy`; csharp, go: `PermissionPolicy`). La política controla si las llamadas de la herramienta se ejecutan sin confirmación, requieren confirmación o son evaluadas individualmente por el servidor. Consulta [Políticas de permisos](https://platform.claude.com/docs/es/managed-agents/permission-policies) para ver los tipos de políticas disponibles.

El siguiente ejemplo habilita el conjunto de herramientas y deshabilita `web_fetch`:

<CodeGroup defaultLanguage="CLI">
  ```bash cURL
  agent=$(curl -fsSL https://api.anthropic.com/v1/agents \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: managed-agents-2026-04-01" \
    -H "content-type: application/json" \
    -d '{
      "name": "Coding Assistant",
      "model": "claude-opus-5-5",
      "tools": [
        {
          "type": "agent_toolset_20260401",
          "configs": [
            {"name": "web_fetch", "enabled": false}
          ]
        }
      ]
    }'
  )
  ```

  <CodeGroupItem>
    ```bash CLI
    ant apply agent.md
    ```

    <File filename="agent.md">
      ```markdown
      ---
      name: Coding Assistant
      model: claude-opus-5-5
      tools:
        - type: agent_toolset_20260401
          configs:
            - name: web_fetch
              enabled: false
      ---
      ```
    </File>
  </CodeGroupItem>

  ```python Python
  agent = client.beta.agents.create(
      name="Coding Assistant",
      model="claude-opus-5-5",
      tools=[
          {
              "type": "agent_toolset_20260401",
              "configs": [
                  {"name": "web_fetch", "enabled": False},
              ],
          },
      ],
  )
  ```

  ```typescript TypeScript
  const agent = await client.beta.agents.create({
    name: "Coding Assistant",
    model: "claude-opus-5-5",
    tools: [
      {
        type: "agent_toolset_20260401",
        configs: [{ name: "web_fetch", enabled: false }]
      }
    ]
  });
  ```

  ```csharp C#
  using Anthropic.Models.Beta.Agents;

  var agent = await client.Beta.Agents.Create(new()
  {
      Name = "Coding Assistant",
      Model = BetaManagedAgentsModel.ClaudeOpus5_5,
      Tools =
      [
          new BetaManagedAgentsAgentToolset20260401Params
          {
              Type = "agent_toolset_20260401",
              Configs =
              [
                  new BetaManagedAgentsWebFetchToolConfigParams { Enabled = false },
              ],
          },
      ],
  });
  ```

  ```go Go
  agent, err := client.Beta.Agents.New(ctx, anthropic.BetaAgentNewParams{
  	Name: "Coding Assistant",
  	Model: anthropic.BetaManagedAgentsModelConfigParams{
  		ID: anthropic.BetaManagedAgentsModelClaudeOpus5_5,
  	},
  	Tools: []anthropic.BetaAgentNewParamsToolUnion{{
  		OfAgentToolset20260401: &anthropic.BetaManagedAgentsAgentToolset20260401Params{
  			Type: anthropic.BetaManagedAgentsAgentToolset20260401ParamsTypeAgentToolset20260401,
  			Configs: []anthropic.BetaManagedAgentsAgentToolConfigParamsUnion{{
  				OfWebFetch: &anthropic.BetaManagedAgentsWebFetchToolConfigParams{
  					Enabled: anthropic.Bool(false),
  				},
  			}},
  		},
  	}},
  })
  if err != nil {
  	panic(err)
  }
  _ = agent
  ```

  ```java Java
  import com.anthropic.models.beta.agents.*;

  var agent = client.beta().agents().create(AgentCreateParams.builder()
      .name("Coding Assistant")
      .model(BetaManagedAgentsModel.CLAUDE_OPUS_5_5)
      .addTool(BetaManagedAgentsAgentToolset20260401Params.builder()
          .type(BetaManagedAgentsAgentToolset20260401Params.Type.AGENT_TOOLSET_20260401)
          .addConfig(BetaManagedAgentsWebFetchToolConfigParams.builder()
              .enabled(false)
              .build())
          .build())
      .build());
  ```

  ```php PHP
  use Anthropic\Beta\Agents\BetaManagedAgentsAgentToolset20260401Params;
  use Anthropic\Beta\Agents\BetaManagedAgentsWebFetchToolConfigParams;

  $agent = $client->beta->agents->create(
      name: 'Coding Assistant',
      model: 'claude-opus-5-5',
      tools: [
          BetaManagedAgentsAgentToolset20260401Params::with(
              type: 'agent_toolset_20260401',
              configs: [
                  BetaManagedAgentsWebFetchToolConfigParams::with(enabled: false),
              ],
          ),
      ],
  );
  ```

  ```ruby Ruby
  agent = client.beta.agents.create(
    name: "Coding Assistant",
    model: "claude-opus-5-5",
    tools: [
      {
        type: :agent_toolset_20260401,
        configs: [
          {name: :web_fetch, enabled: false}
        ]
      }
    ]
  )
  ```
</CodeGroup>

### Deshabilitar herramientas específicas

Para deshabilitar una herramienta, establece `enabled: false` en su entrada de `configs`:

```json
{
  "type": "agent_toolset_20260401",
  "configs": [
    { "name": "web_fetch", "enabled": false },
    { "name": "web_search", "enabled": false }
  ]
}
```

### Habilitar solo herramientas específicas

El objeto `default_config` establece la base para cada herramienta del conjunto, y las entradas `configs` por herramienta la sobrescriben. Para comenzar con todo desactivado y habilitar solo lo que necesitas, establece `default_config.enabled` en `false`:

```json
{
  "type": "agent_toolset_20260401",
  "default_config": { "enabled": false },
  "configs": [
    { "name": "bash", "enabled": true },
    { "name": "read", "enabled": true },
    { "name": "write", "enabled": true }
  ]
}
```

### Restringir la búsqueda web y la obtención web

Las entradas `web_search` y `web_fetch` también aceptan listas de dominios, un límite para el contenido obtenido y una ubicación de búsqueda. Consulta [Restringir los dominios de búsqueda web y obtención web](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions).

### Tipos de entradas de configuración en los SDK

Los SDK de Python, TypeScript, Go, Java, C#, Ruby y PHP tipan cada entrada de `configs` (csharp, go: `Configs`) por herramienta. El tipo es una unión con un miembro por cada herramienta integrada, discriminada por `type` (csharp, go: `Type`).

En Go, Java, C# y PHP, construyes las entradas a partir de valores tipados en lugar de diccionarios o hashes simples. En esos SDK, el tipo de elemento de `configs` (csharp, go: `Configs`) es la propia unión, así que construye cada entrada a partir de su tipo de miembro por herramienta.

Puedes omitir `type` (csharp, go: `Type`) al construir una entrada, porque el servidor lo infiere a partir de `name` (csharp, go: `Name`). Las respuestas siempre lo incluyen. Este tipado no cambia el JSON al que se serializa una entrada. Una solicitud cuyas entradas establecen solo `name`, `enabled` y `permission_policy` es válida con o sin `type`.

## Herramientas personalizadas

Las herramientas personalizadas son análogas a las [herramientas de cliente definidas por el usuario](https://platform.claude.com/docs/es/agents-and-tools/tool-use/how-tool-use-works#user-defined-tools-client-executed) en la Messages API. Tú especificas qué operaciones están disponibles y qué devuelven, y Claude determina cuándo y cómo llamarlas.

Claude no ejecuta una herramienta personalizada por sí mismo. Emite una solicitud estructurada, tu código ejecuta la operación y tú devuelves el resultado a la sesión.

El siguiente ejemplo crea un agente con el conjunto de herramientas integrado y una herramienta personalizada, `get_weather`:

<CodeGroup defaultLanguage="CLI">
  ```bash cURL
  agent=$(curl -fsSL https://api.anthropic.com/v1/agents \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: managed-agents-2026-04-01" \
    -H "content-type: application/json" \
    -d '{
      "name": "Weather Agent",
      "model": "claude-opus-5-5",
      "tools": [
        {
          "type": "agent_toolset_20260401"
        },
        {
          "type": "custom",
          "name": "get_weather",
          "description": "Get current weather for a location",
          "input_schema": {
            "type": "object",
            "properties": {
              "location": {"type": "string", "description": "City name"}
            },
            "required": ["location"]
          }
        }
      ]
    }'
  )
  ```

  <CodeGroupItem>
    ```bash CLI
    ant apply agent.md
    ```

    <File filename="agent.md">
      ```markdown
      ---
      name: Weather Agent
      model: claude-opus-5-5
      tools:
        - type: agent_toolset_20260401
        - type: custom
          name: get_weather
          description: Get current weather for a location
          input_schema:
            type: object
            properties:
              location:
                type: string
                description: City name
            required:
              - location
      ---
      ```
    </File>
  </CodeGroupItem>

  ```python Python
  agent = client.beta.agents.create(
      name="Weather Agent",
      model="claude-opus-5-5",
      tools=[
          {
              "type": "agent_toolset_20260401",
          },
          {
              "type": "custom",
              "name": "get_weather",
              "description": "Get current weather for a location",
              "input_schema": {
                  "type": "object",
                  "properties": {
                      "location": {"type": "string", "description": "City name"},
                  },
                  "required": ["location"],
              },
          },
      ],
  )
  ```

  ```typescript TypeScript
  const agent = await client.beta.agents.create({
    name: "Weather Agent",
    model: "claude-opus-5-5",
    tools: [
      { type: "agent_toolset_20260401" },
      {
        type: "custom",
        name: "get_weather",
        description: "Get current weather for a location",
        input_schema: {
          type: "object",
          properties: { location: { type: "string", description: "City name" } },
          required: ["location"]
        }
      }
    ]
  });
  ```

  ```csharp C#
  using System.Text.Json;
  using Anthropic.Models.Beta.Agents;

  var agent = await client.Beta.Agents.Create(new()
  {
      Name = "Weather Agent",
      Model = BetaManagedAgentsModel.ClaudeOpus5_5,
      Tools =
      [
          new BetaManagedAgentsAgentToolset20260401Params
          {
              Type = "agent_toolset_20260401",
          },
          new BetaManagedAgentsCustomToolParams
          {
              Type = "custom",
              Name = "get_weather",
              Description = "Get current weather for a location",
              InputSchema = new()
              {
                  Properties = new Dictionary<string, JsonElement>
                  {
                      ["location"] = JsonSerializer.SerializeToElement(
                          new { type = "string", description = "City name" }
                      ),
                  },
                  Required = ["location"],
              },
          },
      ],
  });
  ```

  ```go Go
  agent, err := client.Beta.Agents.New(ctx, anthropic.BetaAgentNewParams{
  	Name: "Weather Agent",
  	Model: anthropic.BetaManagedAgentsModelConfigParams{
  		ID: anthropic.BetaManagedAgentsModelClaudeOpus5_5,
  	},
  	Tools: []anthropic.BetaAgentNewParamsToolUnion{{
  		OfAgentToolset20260401: &anthropic.BetaManagedAgentsAgentToolset20260401Params{
  			Type: anthropic.BetaManagedAgentsAgentToolset20260401ParamsTypeAgentToolset20260401,
  		},
  	}, {
  		OfCustom: &anthropic.BetaManagedAgentsCustomToolParams{
  			Type:        anthropic.BetaManagedAgentsCustomToolParamsTypeCustom,
  			Name:        "get_weather",
  			Description: "Get current weather for a location",
  			InputSchema: anthropic.BetaManagedAgentsCustomToolInputSchemaParam{
  				Properties: map[string]any{
  					"location": map[string]any{
  						"type":        "string",
  						"description": "City name",
  					},
  				},
  				Required: []string{"location"},
  			},
  		},
  	}},
  })
  if err != nil {
  	panic(err)
  }
  _ = agent
  ```

  ```java Java
  import com.anthropic.models.beta.agents.*;
  import java.util.Map;

  var agent = client.beta().agents().create(AgentCreateParams.builder()
      .name("Weather Agent")
      .model(BetaManagedAgentsModel.CLAUDE_OPUS_5_5)
      .addTool(BetaManagedAgentsAgentToolset20260401Params.builder()
          .type(BetaManagedAgentsAgentToolset20260401Params.Type.AGENT_TOOLSET_20260401)
          .build())
      .addTool(BetaManagedAgentsCustomToolParams.builder()
          .type(BetaManagedAgentsCustomToolParams.Type.CUSTOM)
          .name("get_weather")
          .description("Get current weather for a location")
          .inputSchema(BetaManagedAgentsCustomToolInputSchema.builder()
              .properties(BetaManagedAgentsCustomToolInputSchema.Properties.builder()
                  .putAdditionalProperty("location", JsonValue.from(Map.of(
                      "type", "string",
                      "description", "City name")))
                  .build())
              .addRequired("location")
              .build())
          .build())
      .build());
  ```

  ```php PHP
  use Anthropic\Beta\Agents\BetaManagedAgentsAgentToolset20260401Params;
  use Anthropic\Beta\Agents\BetaManagedAgentsCustomToolInputSchema;
  use Anthropic\Beta\Agents\BetaManagedAgentsCustomToolParams;

  $agent = $client->beta->agents->create(
      name: 'Weather Agent',
      model: 'claude-opus-5-5',
      tools: [
          BetaManagedAgentsAgentToolset20260401Params::with(
              type: 'agent_toolset_20260401',
          ),
          BetaManagedAgentsCustomToolParams::with(
              type: 'custom',
              name: 'get_weather',
              description: 'Get current weather for a location',
              inputSchema: BetaManagedAgentsCustomToolInputSchema::with(
                  properties: ['location' => ['type' => 'string', 'description' => 'City name']],
                  required: ['location'],
              ),
          ),
      ],
  );
  ```

  ```ruby Ruby
  agent = client.beta.agents.create(
    name: "Weather Agent",
    model: "claude-opus-5-5",
    tools: [
      {type: :agent_toolset_20260401},
      {
        type: :custom,
        name: "get_weather",
        description: "Get current weather for a location",
        input_schema: {
          type: :object,
          properties: {location: {type: "string", description: "City name"}},
          required: ["location"]
        }
      }
    ]
  )
  ```
</CodeGroup>

El nombre de una herramienta personalizada no puede comenzar con `mcp__` ni con `ant__`, ni coincidir con el nombre de una herramienta integrada del agente. Una solicitud que incumpla esta regla devuelve un error 400. Un agente que ya tiene una herramienta personalizada cuyo nombre comienza con `ant__` acepta una actualización solo si la actualización envía `tools` (csharp, go: `Tools`) sin ese nombre, así que cambia el nombre de la herramienta o elimínala en tu próxima actualización. Una nueva sesión se rechaza con un error 400 si dicha herramienta está en su agente (después de cualquier [sobrescritura](https://platform.claude.com/docs/es/managed-agents/sessions#override-agent-configuration-for-a-session)), en un agente de la lista `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) de `subagents` (csharp, go: `Subagents`), o en un agente de la lista `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) de `workflows` (csharp, go: `Workflows`). Las sesiones que ya existen no se ven afectadas.

El agente llama a sus herramientas personalizadas durante una sesión. Para recibir las llamadas y devolver los resultados, consulta [Flujo de eventos de la sesión](https://platform.claude.com/docs/es/managed-agents/events-and-streaming#handling-custom-tool-calls).

Para las sesiones que se ejecutan en un sandbox autoalojado, el worker del entorno puede [servir herramientas personalizadas desde el sandbox](https://platform.claude.com/docs/es/managed-agents/self-hosted-sandboxes-custom-tools). Estas pueden incluir herramientas que envuelven un servidor MCP dentro de tu red.

### Mejores prácticas para las definiciones de herramientas personalizadas

* **Proporciona descripciones extremadamente detalladas.** Este es, con diferencia, el factor más importante en el rendimiento de las herramientas. Cuanto más contexto puedas darle a Claude sobre tus herramientas, mejor podrá determinar cuándo y cómo usarlas. Apunta a tres o cuatro oraciones por cada descripción de herramienta, más si la herramienta es compleja. Tus descripciones deben cubrir:

  * Qué hace la herramienta
  * Cuándo usarla y cuándo no
  * Qué significa cada parámetro y cómo afecta el comportamiento de la herramienta
  * Cualquier advertencia o limitación importante

* **Consolida las operaciones relacionadas en menos herramientas.** Agrupa acciones como `create_pr`, `review_pr` y `merge_pr` en una sola herramienta con un parámetro `action`. Menos herramientas, pero más capaces, reducen la ambigüedad en la selección y hacen que tu superficie de herramientas sea más fácil de navegar para Claude.

* **Usa espacios de nombres significativos en los nombres de las herramientas.** Cuando tus herramientas abarcan múltiples servicios o recursos, antepón a los nombres el recurso (por ejemplo, `db_query` o `storage_read`). Esto hace que la selección de herramientas no sea ambigua a medida que crece tu biblioteca.

* **Diseña las respuestas de las herramientas para que devuelvan solo información de alto valor.** Devuelve identificadores semánticos y estables (por ejemplo, slugs o UUID) en lugar de referencias internas opacas. Incluye solo los campos que Claude necesita para determinar su siguiente paso. Las respuestas sobrecargadas desperdician contexto y dificultan que Claude extraiga lo importante.

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Restringir los dominios de búsqueda web y obtención web" icon="shield" href="https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions">
    Controla a qué sitios pueden acceder las herramientas web, limita el contenido obtenido y localiza los resultados de búsqueda.
  </Card>

  <Card title="Conector MCP" icon="link" href="https://platform.claude.com/docs/es/managed-agents/mcp-connector">
    Conecta servidores MCP a tus agentes para acceder a herramientas y fuentes de datos externas.
  </Card>

  <Card title="Políticas de permisos" icon="lock" href="https://platform.claude.com/docs/es/managed-agents/permission-policies">
    Controla cuándo se ejecutan las herramientas del agente y de MCP.
  </Card>

  <Card title="Flujo de eventos de la sesión" icon="lightning" href="https://platform.claude.com/docs/es/managed-agents/events-and-streaming">
    Envía eventos, haz streaming de respuestas e interrumpe o redirige tu sesión a mitad de la ejecución.
  </Card>
</CardGroup>
