# Conectar un cliente

> Conecta Claude Code, Claude Desktop, claude.ai, Cursor, Codex o cualquier cliente MCP con OAuth y solo la URL, o con un token de API.

Hay dos formas de autenticarse. **OAuth 2.1** es la normal: le das la URL al cliente, inicias sesión en el panel cuando lo pide y eliges qué puede hacer el asistente. Un **token de API** es la alternativa para los clientes que no hacen OAuth, o para automatizar.

## Antes de empezar

- Una cuenta de OpenWAF Cloud con acceso a una organización. Con OAuth, inicias sesión con ella en el navegador.
- Para la variante con token, uno propio para el asistente, creado en el panel (**Tokens de API**) o con `POST /v1/orgs/{org}/tokens`, con el rol justo y caducidad. Mira [OAuth y tokens](https://developers.openwaf.dev/es/mcp/oauth-and-tokens/#api-tokens).

> **Atención: Un token es una credencial**
>
> Va en la configuración o en el entorno del cliente MCP, nunca en la conversación.


## Claude Code

**OAuth**

```sh
claude mcp add --transport http openwaf https://mcp.openwaf.dev/mcp
```

Sin cabecera, Claude Code usa OAuth: ejecuta `/mcp`, elige `openwaf` y *Authenticate* abre el navegador.
**Token de API**

```sh
claude mcp add --transport http openwaf https://mcp.openwaf.dev/mcp \
  --header "Authorization: Bearer $OPENWAF_TOKEN"
```


`claude mcp list` debe mostrarlo conectado, y `/mcp` dentro de Claude Code lista sus herramientas.

## Claude Desktop y claude.ai

**OAuth**

Ajustes → Conectores → *Añadir conector personalizado* → URL `https://mcp.openwaf.dev/mcp` → *Conectar*. Se abre el panel para que inicies sesión y des permiso. No hace falta `mcp-remote` ni Node.js.
**Token de API**

Para usar un token de API en vez de OAuth en Claude Desktop, sigue valiendo el puente [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) en `claude_desktop_config.json` (Ajustes → Desarrollador → Editar configuración):

```json
{
  "mcpServers": {
    "openwaf": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.openwaf.dev/mcp", "--header", "Authorization:${OPENWAF_AUTH}"],
      "env": { "OPENWAF_AUTH": "Bearer owf_…" }
    }
  }
}
```

La cabecera va en una variable para que no haya espacios en los argumentos. Reinicia Claude Desktop después.


## Cursor

En `~/.cursor/mcp.json` (o en el `.cursor/mcp.json` del proyecto, sin subirlo al repositorio):

**OAuth**

```json
{
  "mcpServers": {
    "openwaf": {
      "url": "https://mcp.openwaf.dev/mcp"
    }
  }
}
```

Sin `headers`, Cursor usa OAuth y solo necesita la `url`.
**Token de API**

```json
{
  "mcpServers": {
    "openwaf": {
      "url": "https://mcp.openwaf.dev/mcp",
      "headers": { "Authorization": "Bearer owf_…" }
    }
  }
}
```


## Codex y otros clientes

Vale cualquier cliente MCP con transporte Streamable HTTP: añade `https://mcp.openwaf.dev/mcp` como servidor remoto. Si el cliente admite la autorización de MCP, basta la URL; si no, pon la cabecera `Authorization: Bearer owf_…`.

A mano, para probar un token:

```sh
curl -sS https://mcp.openwaf.dev/mcp \
  -H "Authorization: Bearer $OPENWAF_TOKEN" -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```

### Reglas del transporte

Todo cliente tiene que cumplirlas:

- `Accept` debe incluir `application/json` y `text/event-stream`.
- `GET` y `DELETE` responden 405, porque no hay sesiones.
- Cada petición lleva **un** mensaje JSON-RPC: los lotes (un array) responden 400 `bad_request`.
- El cuerpo es de 1 MiB como máximo (413 `too_large`).
- Cada token tiene como mucho **4 peticiones MCP en curso**; la siguiente responde HTTP 429 `rate_limited` con `Retry-After: 1`.

## Comprobar la conexión

Pídele al asistente que liste tus zonas. Llama a `list_zones` y responde con las zonas que ve la credencial. Si falta una zona, seguramente el token está limitado a un cliente o a una zona; si faltan las herramientas de escritura, su rol es `readonly`.

Para que el asistente gaste menos contexto, conéctate con el [perfil ligero](https://developers.openwaf.dev/es/mcp/oauth-and-tokens/#lite-profile).
