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
| Tool | Wat 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_decisions | de 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 |
attacks | de aanvallen van het overzicht, met de beslissingen en bots van de periode; since is 24h, 7d of 30d |
ai_traffic | de 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/decideaan, 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.