> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trybrein.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Eventos por MCP

> Un agente se suscribe a lo que pasa en Brein y lo recibe en cuanto ocurre.

Un cliente MCP puede **suscribirse** a un evento de Brein y recibirlo en su servidor en cuanto ocurre, sin preguntar a cada rato. Brein implementa **MCP Events** en modo webhook, como lo soporta ChatGPT. MCP Events es todavía un borrador de la especificación (SEP-3415), así que sus nombres pueden cambiar.

Una suscripción es un [Destino](/es/api/destinations) que crea un agente: usa la misma entrega firmada, los mismos reintentos y la misma revisión de direcciones.

## Cómo se anuncia

Con el protocolo `2026-07-28`, la respuesta de `server/discover` trae `"events": {}` en `capabilities`. Los métodos van por el mismo endpoint y con la misma autenticación que las herramientas. Responden por el espacio principal de tu credencial.

## `events/list`

Devuelve los catorce eventos del [catálogo](/es/api/events#catálogo). Cada uno trae `name`, `description`, `delivery: ["webhook"]`, `inputSchema` (los argumentos de la suscripción) y `payloadSchema` (el esquema de `data`).

El único argumento es opcional: `subject`, para recibir solo lo de un objeto (`opportunity/<id>`).

## `events/subscribe`

```json theme={"theme":"github-light"}
{
  "name": "opportunity.moved",
  "arguments": { "subject": "opportunity/7b2c…" },
  "delivery": { "mode": "webhook", "url": "https://tu-agente.mx/brein", "secret": "whsec_…" },
  "cursor": null,
  "ttlMs": 604800000
}
```

| Campo | Regla |
| - | - |
| `delivery.url` | `https` pública. Antes de aceptar, Brein la verifica (abajo). |
| `delivery.secret` | Lo eliges tú: `whsec_` y base64 de 24 a 64 bytes. Con él firma Brein. |
| `ttlMs` | Cuánto dura. Sin él, 7 días; con `null`, 30 días; un número se ajusta entre 1 hora y 30 días. |
| `cursor` | Brein no reproduce historia: responde siempre `cursor: null`. Para recuperar lo que te perdiste, [lee el libro](/es/api/events#leer-el-libro). |

Responde `{ "id", "refreshBefore", "cursor": null, "truncated" }`. Vuelve a suscribirte antes de `refreshBefore` con los mismos datos para renovarla. El `id` sale de quién eres, la dirección, el evento y los argumentos: suscribirte otra vez con lo mismo **renueva**, no duplica, y reactiva una que se había apagado. Un secreto nuevo reemplaza al anterior; durante 24 horas Brein firma con los dos.

Suscribirse lo hace una persona, por su cliente MCP; una llave de API no puede. En un espacio de prueba no se permite: ahí nada sale de Brein.

## Verificación de la dirección

Antes de aceptar, Brein manda a tu `url`:

```json theme={"theme":"github-light"}
{ "type": "verification", "challenge": "…" }
```

firmado con tu secreto y con el encabezado `X-MCP-Subscription-Id`. Responde `2xx` con `{ "challenge": "<el mismo valor>" }` en menos de 10 segundos. Una dirección verificada no se vuelve a verificar durante 24 horas.

## `events/unsubscribe`

Los mismos `name`, `arguments` y `delivery` (sin `secret`). Responde `{}`, aunque ya no existiera. Deja de entregar y conserva la historia.

## Lo que recibes

```http theme={"theme":"github-light"}
POST /brein HTTP/1.1
content-type: application/json
webhook-id: 4d6f0c2e-6a1b-5f7e-9c3d-2b8a7e1f0a55
webhook-timestamp: 1792097051
webhook-signature: v1,…
x-mcp-subscription-id: 3f1c…

{ "eventId": "4d6f0c2e-…", "name": "opportunity.moved", "timestamp": "2026-10-15T18:04:11.000Z", "data": { … }, "cursor": null }
```

`eventId` es el `id` del evento en el libro y no cambia entre reintentos. Verifica la firma igual que en un [Destino](/es/api/destinations#verificar-la-firma). Un evento puede llegar más de una vez y fuera de orden.

| Tu respuesta | Qué hace Brein |
| - | - |
| `2xx` | Entregado. |
| `410` | Apaga la suscripción. |
| `413` | Abandona ese evento y sigue con los demás. |
| Cualquier otra, o sin respuesta en 10 s | Reintenta con el calendario de los Destinos, unas 75 horas. |

Al vencer la suscripción, Brein deja de entregar lo pendiente.

## Errores

| Código JSON-RPC | Cuándo | `data.reason` |
| - | - | - |
| `-32602` | Parámetros inválidos. | `unknown_event`, `invalid_arguments`, `secret_invalid`, `delivery_mode` |
| `-32015` | Tu dirección no pasó la verificación. | `challenge_failed`, `timeout`, `url_rejected` |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.