Korzen
Bot Protection

Je AI-assistent (MCP)

Vraag Claude, Codex of Cursor waarom een request werd geblokkeerd of wat je site aanviel: een alleen-lezen MCP-server leest met een MCP-sleutel de weergaven van je eigen dashboard.

Bot Protection heeft een MCP-server: je AI-assistent kan de weergaven van je dashboard lezen en antwoorden op "waarom werd dit request geblokkeerd?", "wat viel gisteren /login aan?" of "welke AI's lazen deze week mijn site?". Hij leest dezelfde gegevens die het dashboard je toont, alleen van je eigen account. Hij is alleen-lezen: hij wijzigt geen instelling, roept geen /v1/decide aan en stuurt nergens iets heen.

Maak een MCP-sleutel

Kies op de pagina Set-up van het dashboard, onder MCP-sleutels, voor MCP-sleutel aanmaken. Hij begint met kz_mk_ en wordt één keer getoond: kopieer hem naar de configuratie van je assistent. Wie een API-sleutel mag maken, mag er een maken. Een MCP-sleutel is geen API-sleutel: hij werkt alleen op de MCP-server, en een API-sleutel wordt daar geweigerd. Houd hem buiten elke repository, zoals elk geheim.

De server staat op https://korzen.dev/bot-protection/mcp, via Streamable HTTP. Elke client stuurt de sleutel in de header Authorization: Bearer.

Koppel je assistent

Claude Code

claude mcp add --transport http korzen https://korzen.dev/bot-protection/mcp \
  --header "Authorization: Bearer $KORZEN_MCP_KEY"

Claude Desktop

In claude_desktop_config.json (Settings, Developer, Edit config), via mcp-remote, dat de header doorgeeft:

{
  "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

In ~/.codex/config.toml, met de sleutel in de omgevingsvariabele KORZEN_MCP_KEY:

[mcp_servers.korzen]
url = "https://korzen.dev/bot-protection/mcp"
bearer_token_env_var = "KORZEN_MCP_KEY"

Cursor

In ~/.cursor/mcp.json, of in .cursor/mcp.json van een project:

{
  "mcpServers": {
    "korzen": {
      "url": "https://korzen.dev/bot-protection/mcp",
      "headers": { "Authorization": "Bearer ${env:KORZEN_MCP_KEY}" }
    }
  }
}

De webconnectors van Claude en ChatGPT vragen om inloggen met OAuth, wat de server nog niet biedt: gebruik een client die een header aanneemt, zoals hierboven.

De tools

ToolWat hij leest
get_decisionéén beslissing, via de request_id die /v1/decide antwoordde: klasse, bot score, soorten bewijs, land, netwerk en crawler, zoals de pagina Beslissingen die toont, met je drempels
list_decisionsde rijen van de pagina Beslissingen, met de filters: find (een request-ID, een IP of een User-Agent), path, class, country, asn, crawler, evidence, ua, since, older, en tot 50 rijen via limit
attacksde aanvallen van het overzicht, met de beslissingen en bots van de periode; since is 24h, 7d of 30d
ai_trafficde pagina AI-verkeer: welke AI-crawlers en -assistenten je site lezen, hoe vaak en welke pagina's; since zoals hierboven

Elk antwoord is JSON. Wat je bezoekers schreven, een pad of de familie van een User-Agent, staat onder visitor_supplied, met controle-, bidirectionele en nulbreedtetekens geschreven als \u{...}-escapes: een bezoeker kan in een User-Agent woorden voor je assistent zetten, en de server geeft ze door als gegevens, nooit als instructie. Laat in je client de goedkeuring van tool-aanroepen aan staan.

Wat de server nooit doet

  • Hij wijzigt nooit iets: geen instelling, regel, sleutel of abonnement.
  • Hij leest nooit gegevens van een ander account: een sleutel leest alleen zijn eigen account.
  • Hij roept nooit /v1/decide aan, stuurt geen event en telt niet als beslissing: hij is gratis.
  • Hij stuurt je gegevens nooit naar derden, en logt nooit je sleutel of wat een tool antwoordde: de logregel van elke aanroep bewaart de tool, de namen van de argumenten en de grootte van het antwoord.
  • Hij toont nooit meer dan het dashboard, en ook niet hoe de detectie beslist.

Limieten

Elke MCP-sleutel doet tot 60 aanroepen per minuut en 2.000 per dag; daarboven antwoordt de server 429 met de headers RateLimit en Retry-After. Een aanroep antwoordt binnen 5 seconden, of zegt dat het te lang duurde. Een account heeft tot 25 MCP-sleutels.

Een sleutel intrekken

Op de pagina Set-up toont elke MCP-sleutel wanneer hij is gemaakt en wanneer hij voor het laatst is gebruikt, tot op de minuut. Intrekken stopt hem meteen: de volgende aanroep van de assistent wordt geweigerd met 401. Je API-sleutels en de aanroepen van je server veranderen niet.