Bot Protection tiene un servidor MCP: tu asistente de IA puede leer las vistas de tu panel y responder "¿por qué se bloqueó esta petición?", "¿qué atacó /login ayer?" o "¿qué IA leyeron mi sitio esta semana?". Lee los mismos datos que te muestra el panel, solo de tu cuenta. Es de solo lectura: no cambia ningún ajuste, no llama a /v1/decide y no envía nada a ninguna parte.
Crea una clave MCP
En la página Configuración del panel, en Claves MCP, elige Crear una clave MCP. Empieza por kz_mk_ y se muestra una sola vez: cópiala en la configuración de tu asistente. Quien puede crear una clave de API puede crear una. Una clave MCP no es una clave de API: solo funciona en el servidor MCP, y allí se rechaza una clave de API. Mantenla fuera de cualquier repositorio, como cualquier secreto.
El servidor está en https://korzen.dev/bot-protection/mcp, por Streamable HTTP. Cada cliente envía la clave en el header Authorization: Bearer.
Conecta tu asistente
Claude Code
claude mcp add --transport http korzen https://korzen.dev/bot-protection/mcp \ --header "Authorization: Bearer $KORZEN_MCP_KEY"
Claude Desktop
En claude_desktop_config.json (Settings, Developer, Edit config), a través de mcp-remote, que pasa el header:
{
"mcpServers": {
"korzen": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://korzen.dev/bot-protection/mcp", "--header", "Authorization:${KORZEN_MCP_HEADER}"],
"env": { "KORZEN_MCP_HEADER": "Bearer kz_mk_..." }
}
}
}
Codex
En ~/.codex/config.toml, con la clave en la variable de entorno KORZEN_MCP_KEY:
[mcp_servers.korzen] url = "https://korzen.dev/bot-protection/mcp" bearer_token_env_var = "KORZEN_MCP_KEY"
Cursor
En ~/.cursor/mcp.json, o en .cursor/mcp.json de un proyecto:
{
"mcpServers": {
"korzen": {
"url": "https://korzen.dev/bot-protection/mcp",
"headers": { "Authorization": "Bearer ${env:KORZEN_MCP_KEY}" }
}
}
}
Los conectores web de Claude y de ChatGPT piden iniciar sesión con OAuth, que el servidor aún no ofrece: usa un cliente que acepte un header, como arriba.
Las herramientas
| Herramienta | Qué lee |
|---|---|
get_decision | una decisión, por el request_id que respondió /v1/decide: su clase, bot score, tipos de evidencia, país, red y crawler, como la muestra la página Decisiones, con tus umbrales |
list_decisions | las filas de la página Decisiones, con sus filtros: find (un request ID, una IP o un User-Agent), path, class, country, asn, crawler, evidence, ua, since, older, y hasta 50 filas con limit |
attacks | los ataques del resumen, con las decisiones y los bots de la ventana; since es 24h, 7d o 30d |
ai_traffic | la página de tráfico de IA: qué crawlers y asistentes de IA leen tu sitio, con qué frecuencia y qué páginas; since como arriba |
Cada respuesta es JSON. Lo que escribieron tus visitantes, una ruta o la familia de un User-Agent, va en visitor_supplied, con los caracteres de control, bidireccionales y de ancho cero escritos como escapes \u{...}: un visitante puede poner en un User-Agent palabras dirigidas a tu asistente, y el servidor las entrega como datos, nunca como instrucción. Mantén activada en tu cliente la aprobación de las llamadas a herramientas.
Lo que el servidor nunca hace
- Nunca cambia nada: ningún ajuste, regla, clave ni plan.
- Nunca lee datos de otra cuenta: una clave lee solo su propia cuenta.
- Nunca llama a
/v1/decide, envía un evento ni cuenta como decisión: es gratis. - Nunca envía tus datos a terceros, y nunca registra tu clave ni lo que respondió una herramienta: la línea de log de cada llamada guarda la herramienta, los nombres de sus argumentos y el tamaño de la respuesta.
- Nunca muestra más que el panel, ni cómo decide la detección.
Límites
Cada clave MCP hace hasta 60 llamadas por minuto y 2.000 al día; pasado eso el servidor responde 429 con los headers RateLimit y Retry-After. Una llamada responde en 5 segundos como mucho, o dice que tardó demasiado. Una cuenta guarda hasta 25 claves MCP.
Revoca una clave
En la página Configuración, cada clave MCP muestra cuándo se creó y cuándo se usó por última vez, al minuto. Revocar la detiene al instante: la siguiente llamada del asistente se rechaza con 401. Tus claves de API y las llamadas de tu servidor no se ven afectadas.