---
title: Restringir los dominios de búsqueda web y obtención web
url: https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions
description: Controla qué sitios pueden alcanzar las herramientas de búsqueda web y obtención web de un agente, limita el contenido obtenido y localiza los resultados de búsqueda.
featureMetadata:
  topic:
    title: Managed Agents
    url: https://platform.claude.com/docs/en/managed-agents/overview
  status: beta
  betaHeader: managed-agents-2026-04-01
---

Para controlar qué sitios pueden alcanzar las herramientas web del agente, establece una lista de dominios en las entradas `web_search` y `web_fetch` del [conjunto de herramientas del agente](https://platform.claude.com/docs/es/managed-agents/tools#configuring-the-toolset). Cada una de estas entradas de `configs` (csharp, go: `Configs`) acepta una de dos listas:

* **`allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`):** La herramienta solo puede alcanzar estos hosts.
* **`blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`):** La herramienta nunca puede alcanzar estos hosts.

Cada herramienta tiene su propia lista, por lo que `web_search` y `web_fetch` pueden tener restricciones diferentes.

<Note>
  `web_search` y `web_fetch` se ejecutan en los servidores de Anthropic, no en el sandbox. Un entorno en la nube con [redes](https://platform.claude.com/docs/es/managed-agents/environments#networking) `limited` también les aplica su `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`); consulta [Establecer listas de dominios en un agente](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions#set-domain-lists-on-an-agent). Las redes `unrestricted` y los entornos autoalojados no las limitan. Las listas por herramienta restringen aún más estas herramientas. La configuración de búsqueda web y obtención web a nivel de organización en la Claude Console se aplica a la Messages API. No se aplica a las sesiones de Managed Agents.
</Note>

## Establecer listas de dominios en un agente

El siguiente ejemplo crea un agente que limita `web_search` a dos sitios y bloquea un host para `web_fetch`. También establece `user_location` (java, php: `userLocation`; csharp, go: `UserLocation`) y `max_content_tokens` (java, php: `maxContentTokens`; csharp, go: `MaxContentTokens`), que se describen en [Configuración](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions#settings). Luego, el ejemplo imprime el arreglo `configs` (csharp, go: `Configs`) de la respuesta.

<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": "Research Agent",
      "model": "claude-opus-5-5",
      "tools": [
        {
          "type": "agent_toolset_20260401",
          "configs": [
            {
              "type": "web_search",
              "name": "web_search",
              "allowed_domains": ["docs.example.com", "arxiv.org"],
              "user_location": {
                "type": "approximate",
                "country": "US",
                "timezone": "America/Los_Angeles"
              }
            },
            {
              "type": "web_fetch",
              "name": "web_fetch",
              "blocked_domains": ["ads.example.com"],
              "max_content_tokens": 50000
            }
          ]
        }
      ]
    }'
  )
  jq '.tools[0].configs' <<< "$agent"
  ```

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

    <File filename="agent.md">
      ```markdown
      ---
      name: Research Agent
      model: claude-opus-5-5
      tools:
        - type: agent_toolset_20260401
          configs:
            - type: web_search
              name: web_search
              allowed_domains: [docs.example.com, arxiv.org]
              user_location:
                type: approximate
                country: US
                timezone: America/Los_Angeles
            - type: web_fetch
              name: web_fetch
              blocked_domains: [ads.example.com]
              max_content_tokens: 50000
      ---
      ```
    </File>

    [`ant apply`](https://platform.claude.com/docs/es/cli-sdks-libraries/cli/apply) crea el agente e imprime su ID, no el arreglo `configs`.
  </CodeGroupItem>

  ```python Python
  client = Anthropic()

  agent = client.beta.agents.create(
      name="Research Agent",
      model="claude-opus-5-5",
      tools=[
          {
              "type": "agent_toolset_20260401",
              "configs": [
                  {
                      "name": "web_search",
                      "allowed_domains": ["docs.example.com", "arxiv.org"],
                      "user_location": {
                          "type": "approximate",
                          "country": "US",
                          "timezone": "America/Los_Angeles",
                      },
                  },
                  {
                      "name": "web_fetch",
                      "blocked_domains": ["ads.example.com"],
                      "max_content_tokens": 50_000,
                  },
              ],
          }
      ],
  )

  for tool in agent.tools:
      if tool.type == "agent_toolset_20260401":
          print(json.dumps([config.to_dict() for config in tool.configs], indent=2))
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const agent = await client.beta.agents.create({
    name: "Research Agent",
    model: "claude-opus-5-5",
    tools: [
      {
        type: "agent_toolset_20260401",
        configs: [
          {
            name: "web_search",
            allowed_domains: ["docs.example.com", "arxiv.org"],
            user_location: {
              type: "approximate",
              country: "US",
              timezone: "America/Los_Angeles"
            }
          },
          {
            name: "web_fetch",
            blocked_domains: ["ads.example.com"],
            max_content_tokens: 50_000
          }
        ]
      }
    ]
  });

  for (const tool of agent.tools) {
    if (tool.type === "agent_toolset_20260401") {
      console.log(JSON.stringify(tool.configs, null, 2));
    }
  }
  ```

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

  AnthropicClient client = new();

  var agent = await client.Beta.Agents.Create(new()
  {
      Name = "Research Agent",
      Model = BetaManagedAgentsModel.ClaudeOpus5_5,
      Tools =
      [
          new BetaManagedAgentsAgentToolset20260401Params
          {
              Type = BetaManagedAgentsAgentToolset20260401ParamsType.AgentToolset20260401,
              Configs =
              [
                  new BetaManagedAgentsWebSearchToolConfigParams
                  {
                      AllowedDomains = ["docs.example.com", "arxiv.org"],
                      UserLocation = new()
                      {
                          Country = "US",
                          Timezone = "America/Los_Angeles",
                      },
                  },
                  new BetaManagedAgentsWebFetchToolConfigParams
                  {
                      BlockedDomains = ["ads.example.com"],
                      MaxContentTokens = 50_000,
                  },
              ],
          },
      ],
  });

  JsonSerializerOptions jsonOptions = new() { WriteIndented = true };
  foreach (var tool in agent.Tools)
  {
      if (tool.TryPickBetaManagedAgentsAgentToolset20260401(out var toolset))
      {
          Console.WriteLine(JsonSerializer.Serialize(toolset.Configs, jsonOptions));
      }
  }
  ```

  ```go Go
  client := anthropic.NewClient()
  ctx := context.Background()

  agent, err := client.Beta.Agents.New(ctx, anthropic.BetaAgentNewParams{
  	Name: "Research Agent",
  	Model: anthropic.BetaManagedAgentsModelConfigParams{
  		ID: anthropic.BetaManagedAgentsModelClaudeOpus5_5,
  	},
  	Tools: []anthropic.BetaAgentNewParamsToolUnion{{
  		OfAgentToolset20260401: &anthropic.BetaManagedAgentsAgentToolset20260401Params{
  			Type: anthropic.BetaManagedAgentsAgentToolset20260401ParamsTypeAgentToolset20260401,
  			Configs: []anthropic.BetaManagedAgentsAgentToolConfigParamsUnion{
  				{OfWebSearch: &anthropic.BetaManagedAgentsWebSearchToolConfigParams{
  					AllowedDomains: []string{"docs.example.com", "arxiv.org"},
  					UserLocation: anthropic.BetaManagedAgentsUserLocationParam{
  						Country:  anthropic.String("US"),
  						Timezone: anthropic.String("America/Los_Angeles"),
  					},
  				}},
  				{OfWebFetch: &anthropic.BetaManagedAgentsWebFetchToolConfigParams{
  					BlockedDomains:   []string{"ads.example.com"},
  					MaxContentTokens: anthropic.Int(50000),
  				}},
  			},
  		},
  	}},
  })
  if err != nil {
  	panic(err)
  }

  for _, tool := range agent.Tools {
  	switch toolset := tool.AsAny().(type) {
  	case anthropic.BetaManagedAgentsAgentToolset20260401:
  		configs := make([]json.RawMessage, len(toolset.Configs))
  		for i, config := range toolset.Configs {
  			configs[i] = json.RawMessage(config.RawJSON())
  		}
  		output, err := json.MarshalIndent(configs, "", "  ")
  		if err != nil {
  			panic(err)
  		}
  		fmt.Println(string(output))
  	}
  }
  ```

  ```java Java
  import com.anthropic.models.beta.agents.AgentCreateParams;
  import com.anthropic.models.beta.agents.BetaManagedAgentsAgentToolset20260401Params;
  import com.anthropic.models.beta.agents.BetaManagedAgentsModel;
  import com.anthropic.models.beta.agents.BetaManagedAgentsUserLocation;
  import com.anthropic.models.beta.agents.BetaManagedAgentsWebFetchToolConfigParams;
  import com.anthropic.models.beta.agents.BetaManagedAgentsWebSearchToolConfigParams;

  void main() {
      var client = AnthropicOkHttpClient.fromEnv();

      var agent = client.beta().agents().create(AgentCreateParams.builder()
          .name("Research Agent")
          .model(BetaManagedAgentsModel.CLAUDE_OPUS_5_5)
          .addTool(BetaManagedAgentsAgentToolset20260401Params.builder()
              .type(BetaManagedAgentsAgentToolset20260401Params.Type.AGENT_TOOLSET_20260401)
              .addConfig(BetaManagedAgentsWebSearchToolConfigParams.builder()
                  .allowedDomains(List.of("docs.example.com", "arxiv.org"))
                  .userLocation(BetaManagedAgentsUserLocation.builder()
                      .country("US")
                      .timezone("America/Los_Angeles")
                      .build())
                  .build())
              .addConfig(BetaManagedAgentsWebFetchToolConfigParams.builder()
                  .blockedDomains(List.of("ads.example.com"))
                  .maxContentTokens(50_000)
                  .build())
              .build())
          .build());

      for (var tool : agent.tools()) {
          if (tool.isAgentToolset20260401()) {
              var configs = tool.asAgentToolset20260401().configs();
              IO.println(ObjectMappers.jsonMapper().valueToTree(configs));
          }
      }
  }
  ```

  ```php PHP
  use Anthropic\Beta\Agents\BetaManagedAgentsAgentToolset20260401;
  use Anthropic\Beta\Agents\BetaManagedAgentsAgentToolset20260401Params;
  use Anthropic\Beta\Agents\BetaManagedAgentsUserLocation;
  use Anthropic\Beta\Agents\BetaManagedAgentsWebFetchToolConfigParams;
  use Anthropic\Beta\Agents\BetaManagedAgentsWebSearchToolConfigParams;
  // ...

  $client = new Client();

  $agent = $client->beta->agents->create(
      name: 'Research Agent',
      model: 'claude-opus-5-5',
      tools: [
          BetaManagedAgentsAgentToolset20260401Params::with(
              type: 'agent_toolset_20260401',
              configs: [
                  BetaManagedAgentsWebSearchToolConfigParams::with(
                      allowedDomains: ['docs.example.com', 'arxiv.org'],
                      userLocation: BetaManagedAgentsUserLocation::with(
                          country: 'US',
                          timezone: 'America/Los_Angeles',
                      ),
                  ),
                  BetaManagedAgentsWebFetchToolConfigParams::with(
                      blockedDomains: ['ads.example.com'],
                      maxContentTokens: 50_000,
                  ),
              ],
          ),
      ],
  );

  foreach ($agent->tools as $tool) {
      if ($tool instanceof BetaManagedAgentsAgentToolset20260401) {
          echo json_encode($tool->configs, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES), PHP_EOL;
      }
  }
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  agent = client.beta.agents.create(
    name: "Research Agent",
    model: "claude-opus-5-5",
    tools: [
      {
        type: :agent_toolset_20260401,
        configs: [
          {
            name: :web_search,
            allowed_domains: ["docs.example.com", "arxiv.org"],
            user_location: {type: :approximate, country: "US", timezone: "America/Los_Angeles"}
          },
          {
            name: :web_fetch,
            blocked_domains: ["ads.example.com"],
            max_content_tokens: 50_000
          }
        ]
      }
    ]
  )

  case agent.tools.first
  in Anthropic::Models::Beta::BetaManagedAgentsAgentToolset20260401 => toolset
    puts JSON.pretty_generate(toolset.configs.map(&:to_h))
  end
  ```
</CodeGroup>

En un entorno en la nube con [redes](https://platform.claude.com/docs/es/managed-agents/environments#networking) `limited`, el `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`) del entorno también se aplica a `web_search` y `web_fetch`. La creación de una sesión falla con un error 400 cuando el `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) de una herramienta web habilitada tiene una entrada que no está dentro de `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`). Lo mismo ocurre con una actualización de sesión que agrega una entrada así. Para corregirlo, agrega el host a `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`) o elimina la entrada de `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`). En tiempo de ejecución, una llamada a `web_fetch` para una URL en un host con el que `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`) no coincide devuelve un resultado de error `url_not_allowed`. `web_search` omite los resultados de esos hosts. Las dos listas coinciden de forma diferente: la entrada de una herramienta cubre sus subdominios, pero una entrada de `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`) coincide con un único host exacto a menos que comience con `*.`. Por ejemplo, la entrada de herramienta `docs.example.com` no está dentro de un `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`) de `["example.com"]`, pero sí está dentro de `["docs.example.com"]` o `["*.example.com"]`.

En la Claude Console, establece los dominios permitidos o bloqueados desde las filas `web_search` y `web_fetch` de la tarjeta **Built-in tools** en el formulario del agente. Establece `max_content_tokens` y `user_location` en la vista **Raw** de la configuración del agente.

## Configuración

Además de `enabled` (csharp, go: `Enabled`) y `permission_policy` (java, php: `permissionPolicy`; csharp, go: `PermissionPolicy`), las entradas de herramientas web aceptan la siguiente configuración:

| Configuración                                                                        | Se aplica a               | Descripción                                                                                                                                                                                                                                  |
| ------------------------------------------------------------------------------------ | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`)        | `web_search`, `web_fetch` | Los únicos hosts que la herramienta puede alcanzar. Consulta [Reglas de las listas de dominios](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions#domain-list-rules).                                                |
| `blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`)        | `web_search`, `web_fetch` | Hosts que la herramienta no puede alcanzar. Consulta [Reglas de las listas de dominios](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions#domain-list-rules).                                                        |
| `max_content_tokens` (java, php: `maxContentTokens`; csharp, go: `MaxContentTokens`) | `web_fetch`               | Limita la cantidad de contenido de página obtenido que se incluye en el contexto. Debe ser un entero positivo. Consulta [límites de contenido](https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-fetch-tool#content-limits). |
| `user_location` (java, php: `userLocation`; csharp, go: `UserLocation`)              | `web_search`              | Localiza los resultados de búsqueda. Un objeto con los mismos campos que el parámetro [`user_location`](https://platform.claude.com/docs/es/agents-and-tools/tool-use/web-search-tool#localization) de la Messages API.                      |

Para saber cómo los SDK tipan estas entradas, consulta [Tipos de entradas de configuración en los SDK](https://platform.claude.com/docs/es/managed-agents/tools#config-entry-types-in-the-sdks).

## Cuando un dominio no está permitido

`web_search` omite los resultados que su lista de dominios no permite. Una llamada a `web_fetch` para una URL que su lista de dominios no permite devuelve un resultado de error al agente. El evento `agent.tool_result` tiene `is_error: true`, y su contenido indica el código de error `url_not_allowed`.

## Reglas de las listas de dominios

Estas reglas se aplican por igual a `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) y `blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`). Una solicitud que incumple alguna se rechaza, como se describe en [Errores de validación](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions#validation-errors).

* **Una lista por entrada:** Establece `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) o `blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`) en una entrada, no ambas.
* **Tamaño de la lista:** Cada lista contiene de 1 a 64 dominios, cada uno de 1 a 255 caracteres.
* **Sin listas vacías:** Para no aplicar ninguna restricción, omite el campo o envía `null`.
* **Sin duplicados:** Un dominio solo puede aparecer una vez en una lista. `www.example.com` y `example.com` cuentan como dominios diferentes.

### Con qué coincide un dominio listado

Un dominio listado coincide con ese host y con todos sus subdominios. `example.com` cubre `docs.example.com`, pero `docs.example.com` no cubre `example.com` ni `api.example.com`.

Un `www.` inicial es un subdominio como cualquier otro, por lo que `www.example.com` no cubre `example.com`. Lista el dominio sin prefijo para cubrir ambos.

Los nombres de host se comparan sin distinguir entre mayúsculas y minúsculas.

### Formato de dominio

Cada dominio es un nombre de dominio registrable, o un subdominio de uno, escrito como un nombre de host simple. Puede contener letras ASCII, dígitos, guiones, guiones bajos y puntos. Se ignora una única `/` final.

| No aceptado                                                                                    | Ejemplo                  | Usa en su lugar                          |
| ---------------------------------------------------------------------------------------------- | ------------------------ | ---------------------------------------- |
| Un esquema                                                                                     | `https://example.com`    | `example.com`                            |
| Un puerto                                                                                      | `example.com:443`        | `example.com`                            |
| Un comodín                                                                                     | `*.example.com`          | `example.com`                            |
| Una ruta en un dominio de `web_fetch`                                                          | `example.com/*`          | `example.com`                            |
| Una dirección IP en cualquier forma, ya sea IPv4, IPv6, entre corchetes o abreviatura numérica | `127.1`                  | El nombre de dominio del sitio           |
| Un dominio de nivel superior por sí solo o un sufijo de registro                               | `com`, `co.uk`, `gov.uk` | Un dominio completo como `example.co.uk` |
| Un nombre de una sola etiqueta                                                                 | `intranet`               | Un dominio completo como `example.co.uk` |
| Caracteres no ASCII, como en un nombre de dominio internacionalizado                           |                          | La forma `xn--` (Punycode)               |

Un dominio también se rechaza si contiene credenciales o espacios en blanco, o si una de sus etiquetas comienza o termina con un guion. `localhost` y los hosts que terminan en `.localhost`, `.local`, `.internal`, `.localdomain` o `.invalid` también se rechazan.

### Sufijos de ruta en dominios de búsqueda web

Un dominio de `web_search` puede llevar un sufijo de ruta, como `example.com/blog`. La ruta no puede contener espacios, `?`, `#` ni ninguno de los caracteres `$ , | ^ !`.

Prefiere nombres de host simples también para `web_search`. El proveedor de búsqueda compara los sufijos de ruta como patrones de URL en lugar de como reglas estrictas de host.

## Errores de validación

La API valida esta configuración cuando [creas un agente](https://platform.claude.com/docs/es/managed-agents/agent-setup#create-an-agent) o [actualizas un agente](https://platform.claude.com/docs/es/managed-agents/agent-setup#update-an-agent). También la valida cuando creas o actualizas una sesión que proporciona `tools` (csharp, go: `Tools`).

Las infracciones de formato y de límites se rechazan con un error 400 `invalid_request_error`:

| Infracción                                | Mensaje de error                                                                                                                                                        |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Una entrada establece ambas listas.       | Incluye `Only one of allowed_domains or blocked_domains may be set.`                                                                                                    |
| Una lista está vacía.                     | Incluye `allowed_domains: Empty list of domains is ambiguous. Provide at least one domain or null.`                                                                     |
| Un dominio incumple una regla de formato. | Indica la lista del dominio y su posición basada en cero. Por ejemplo, `allowed_domains.0: IP addresses are not supported; provide a plain hostname like "example.com"` |

En las mismas solicitudes, la API también rechaza tres configuraciones que dependen de los proveedores de búsqueda y obtención:

* Un dominio en `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) al que el rastreador de Anthropic no tiene permitido acceder.
* Un `user_location.country` que el proveedor de búsqueda no admite. El mensaje termina en `user_location.country: not a country the search provider supports`.
* Un `user_location.timezone` que no es un nombre IANA válido.

En un entorno en la nube con [redes](https://platform.claude.com/docs/es/managed-agents/environments#networking) `limited`, la creación y actualización de sesiones también comprueban `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) frente al `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`) del entorno. Consulta la regla en [Establecer listas de dominios en un agente](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions#set-domain-lists-on-an-agent).

### Cuando una configuración aceptada deja de ser válida

La sesión vuelve a comprobar la configuración cuando inicializa la herramienta por primera vez. Si una configuración que se aceptó antes ya no es válida en ese momento, la sesión emite un evento [`session.error`](https://platform.claude.com/docs/es/managed-agents/events-and-streaming). Luego vuelve a `idle` sin reintentar.

Para continuar la sesión:

1. Corrige la configuración [actualizando las herramientas de la sesión](https://platform.claude.com/docs/es/managed-agents/session-operations#updating-the-agent-configuration).
2. Actualiza también el agente, para que las nuevas sesiones comiencen con la configuración corregida.
3. Envía un nuevo `user.message`.

## Sesiones multiagente y orientadas a resultados

En una [sesión multiagente](https://platform.claude.com/docs/es/managed-agents/multiagent-orchestration), todas las listas de dominios que se aplican a un hilo se hacen cumplir al mismo tiempo. Un agente enumerado en la lista `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) de `subagents` (csharp, go: `Subagents`) está sujeto a tres conjuntos de listas:

* Sus propios `allowed_domains` y `blocked_domains`
* Los de cualquier agente que lo haya llamado
* Las listas actuales del agente que ejecuta la sesión

La configuración se combina de la siguiente manera:

| Configuración                         | Cómo se combina                                                                                                                                                                                                       |
| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `allowed_domains`                     | La herramienta puede alcanzar un host solo si todas las listas lo cubren.                                                                                                                                             |
| `blocked_domains`                     | Las listas se suman.                                                                                                                                                                                                  |
| `max_content_tokens`, `user_location` | No se combinan. Un hilo usa el valor de su propia configuración de herramientas si está establecido. De lo contrario, usa el valor del agente que lo llamó y, si no, la configuración actual del agente de la sesión. |

Por lo tanto, un agente enumerado puede restringir lo que alcanza una herramienta, pero nunca ampliarlo:

* Un agente enumerado que establece `blocked_domains` conserva los `allowed_domains` del agente de la sesión y bloquea esos hosts dentro de ellos.
* Un agente enumerado que establece sus propios `allowed_domains` solo puede alcanzar los hosts que cubren tanto su lista como la lista del agente de la sesión.

Una entrada `{"type": "self"}` en la lista `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) de `subagents` (csharp, go: `Subagents`) no tiene configuración web propia y sigue la configuración actual del agente de la sesión.

Si las listas `allowed_domains` combinadas no tienen ningún dominio en común, la herramienta sigue disponible para ese agente, pero todas las llamadas fallan. Cada llamada devuelve un error `url_not_allowed` que indica que no se permite ningún dominio. La descripción de la herramienta le indica lo mismo al modelo. Para evitarlo, mantén los `allowed_domains` de cada agente enumerado dentro de los `allowed_domains` del agente de la sesión.

El evaluador en las [sesiones orientadas a resultados](https://platform.claude.com/docs/es/managed-agents/define-outcomes) se ejecuta sin `web_search` ni `web_fetch`, independientemente de esta configuración.

## Cambiar las listas a mitad de sesión

Puedes cambiar las listas en una sesión inactiva [actualizando sus herramientas](https://platform.claude.com/docs/es/managed-agents/session-operations#updating-the-agent-configuration). Las nuevas listas se aplican al resto de la sesión.

En una sesión multiagente, cada hilo aplica las nuevas listas a partir de su siguiente turno. Para un agente enumerado en la lista `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) de `subagents` (csharp, go: `Subagents`), la actualización no cambia las listas propias del agente. Estas se mantienen tal como las estableció la definición del agente cuando se creó la sesión.

## Diferencias con las herramientas de la Messages API

Esta configuración usa los mismos campos `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) y `blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`) que el [filtrado de dominios](https://platform.claude.com/docs/es/agents-and-tools/tool-use/server-tools#domain-filtering) en las herramientas de servidor de la Messages API. Managed Agents difiere en cuatro aspectos:

* Cada lista está [limitada a 64 dominios](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions#domain-list-rules).
* Los dominios listados para `web_fetch` [no pueden incluir una ruta](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions#domain-format).
* Los dominios [deben ser ASCII](https://platform.claude.com/docs/es/managed-agents/tools-web-restrictions#domain-format). La Messages API acepta entradas Unicode, aunque recomienda no usarlas.
* `max_uses` (java, php: `maxUses`; csharp, go: `MaxUses`), `citations` (csharp, go: `Citations`) y `cache_control` (java, php: `cacheControl`; csharp, go: `CacheControl`) no están disponibles en el conjunto de herramientas.

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Herramientas" icon="tool" href="https://platform.claude.com/docs/es/managed-agents/tools">
    Consulta las herramientas integradas, habilítalas o deshabilítalas y define herramientas personalizadas.
  </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="Configuración del entorno en la nube" icon="settings" href="https://platform.claude.com/docs/es/managed-agents/environments">
    Controla el acceso de red saliente propio del sandbox.
  </Card>

  <Card title="Orquestación multiagente" icon="sitemap" href="https://platform.claude.com/docs/es/managed-agents/multiagent-orchestration">
    Coordina varios agentes dentro de una sola sesión.
  </Card>
</CardGroup>
