# Ajustes y modos

> Cada ajuste de un endpoint MCP con su valor por defecto y sus límites, y cómo se combinan los modos registro y aplicar con off, log y block.

Un endpoint MCP es una entrada de los endpoints de IA del dominio (o de un nombre), `ai_agents.endpoints`, con `"kind": "mcp"` y un objeto `mcp`. Un sitio tiene hasta 20 endpoints contando los de IA y los MCP, y cada prefijo de ruta solo puede usarse una vez.

```json
{"kind": "mcp", "path_prefix": "/mcp", "methods": ["POST", "GET", "DELETE"],
 "mcp": {"methods_allowed": ["initialize", "ping", "notifications/*", "tools/list", "tools/call"],
         "tools_allowed": [], "tools_denied": ["delete_record"],
         "max_request_kb": 256, "inspect_requests": "log", "inspect_responses": "log",
         "rate_per_token": 120}}
```

## Todos los ajustes

| Ajuste | Qué hace | Por defecto |
|---|---|---|
| `kind` | `mcp` para un endpoint MCP | — |
| `path_prefix` | Ruta de tu servidor MCP, empieza por `/`, hasta 256 bytes | — |
| `methods` | Métodos HTTP que cubre el endpoint: cualquiera de `POST`, `GET` y `DELETE`, siempre con `POST` | `POST`, `GET`, `DELETE` |
| `mcp.methods_allowed` | De 1 a 64 métodos JSON-RPC: nombres exactos o un prefijo terminado en `/*` como `notifications/*` | Los doce métodos estándar de abajo |
| `mcp.tools_allowed` | Hasta 200 nombres de herramienta. Vacía = cualquier herramienta que no esté denegada | `[]` |
| `mcp.tools_denied` | Hasta 200 nombres de herramienta que siempre se rechazan | `[]` |
| `mcp.max_request_kb` | Cuerpo de `POST` más grande, de 1 a 1024 KiB | `256` |
| `mcp.inspect_requests` | `off`, `log` o `block` para los argumentos de las herramientas, los parámetros de `resources/read` y los argumentos de los prompts | `log` |
| `mcp.inspect_responses` | `off`, `log` o `block` para los resultados de las herramientas, el contenido de los recursos y todo lo demás que devuelve el servidor | `log` |
| `mcp.rate_per_token` | Peticiones por minuto por token, de 0 a 100000. `0` = sin límite | `0` |

Los doce métodos por defecto son `initialize`, `ping`, `notifications/*`, `tools/list`, `tools/call`, `resources/list`, `resources/read`, `resources/templates/list`, `prompts/list`, `prompts/get`, `completion/complete` y `logging/setLevel`. El panel puede devolver la lista a ellos.

Los nombres de herramienta admiten letras, cifras y `_ . : / -`, hasta 128 caracteres, y se comparan exactamente con el `name` de `tools/call`.

Los campos de los endpoints de IA clásicos (`max_body_bytes`, `rpm_per_ip`, `rpm_per_session`, `session_header`, `session_cookie`, `injection_action`, `limit_action`) no se usan en los endpoints MCP y tienen que quedar vacíos.

## Modos

Deciden dos interruptores. El **modo** de Bots y agentes de IA del sitio dice si el borde actúa; cada ajuste de **revisión** dice qué hacer con una detección:

| | Modo registro | Modo aplicar |
|---|---|---|
| Método o herramienta fuera de la política, ritmo, tamaño, JSON-RPC no válido | Evento, la petición pasa | El borde responde con un error |
| Revisión `off` | No se revisa | No se revisa |
| Revisión `log` | Evento, pasa | Evento, pasa |
| Revisión `block` | Evento, pasa | Petición rechazada o respuesta sustituida por un error |

Así que un sitio en modo registro nunca bloquea, digan lo que digan los ajustes de revisión. Por eso se puede poner primero la política que quieres y leer qué haría.

## Ritmo por token

El límite cuenta peticiones por minuto con la clave de un hash SHA-256 de la cabecera `Authorization`, o de la IP del cliente si no la hay. Cada nodo del borde cuenta por su cuenta: con N nodos sirviendo el sitio, un token puede llegar hasta N veces el límite. Úsalo como techo contra agentes desbocados, no como una cuota exacta.

## Ejemplos

Solo herramientas de lectura (cualquier otro `tools/call` se rechaza):

```json
{"tools_allowed": ["list_zones", "get_zone", "list_records"], "tools_denied": []}
```

Todo salvo dos herramientas destructivas:

```json
{"tools_allowed": [], "tools_denied": ["delete_zone", "delete_record"]}
```

Un servidor que solo ofrece herramientas (sin recursos ni prompts):

```json
{"methods_allowed": ["initialize", "ping", "notifications/*", "tools/list", "tools/call"]}
```

## Todo el dominio o un nombre

El endpoint puede ir en los ajustes del dominio o en la copia propia de un nombre (`--host` en la CLI, el selector de ámbito en el panel). Los ajustes de Bots y agentes de IA de un nombre sustituyen a los del dominio para ese nombre. La lista de endpoints siempre se sustituye entera al cambiarla.

## Qué nodos lo aplican

MCP Shield funciona en los nodos del borde de OpenWAF. Un nodo que todavía no lo admite sigue sirviendo el sitio, sin sus endpoints MCP, y al publicar el cambio se devuelve un aviso que nombra el nodo.
