Consent as a primitive, not a plugin.
A typed client for consent state, a REST API behind it, a CLI for your pipeline, and an MCP server so an assistant can do the tedious parts. Build the interface yourself, or drop in the widget and skip it.
import { useConsentManager } from '@katla.app/sdk/react'
function Banner() {
const {
hasDecision, availableCategories, selected,
toggleCategory, acceptAll, rejectAll, saveSelection,
} = useConsentManager()
if (hasDecision) return null
return (
<aside>
{availableCategories.map((category) => (
<Toggle
key={category}
label={category}
checked={selected.includes(category)}
onChange={() => toggleCategory(category)}
/>
))}
<button onClick={acceptAll}>Accept all</button>
<button onClick={rejectAll}>Necessary only</button>
<button onClick={saveSelection}>Save choices</button>
</aside>
)
}Pick the surface that fits the job.
SDK
TypeScriptConsent state, categories and decisions as a small typed client. React hooks and Next.js components on top of it.
- Loads async, never render-blocking
- Google Consent Mode v2 signals sent automatically
- Server components and build-time cookie data on Next.js
pnpm add @katla.app/sdkGet started with the SDK →Widget
No codeOne script tag when you would rather not build the UI. Themed from the dashboard or with CSS variables; the same engine underneath.
- Configured in the dashboard, live in seconds
- Every token is a --katla-* CSS variable
- Move to headless later without losing consent records
<script async src="https://dist.katla.app/<site-id>.js">Set up the widget →CLI
CI / CDAdd domains, verify them, and trigger scans from a terminal or a pipeline step. Export the classified inventory for the audit trail.
- Scans poll until they finish, so a CI step can wait on one
- Cookie and consent records export as CSV
- Manage categories and per-locale descriptions from scripts
katla domains scan example.comGet started with the CLI →MCP server
AI assistantsLet Claude, ChatGPT or your editor run scans, read consent stats and change configuration in plain language.
- Remote server, nothing to install locally
- OAuth 2.1 with your own account and its permissions
- 18 tools across sites, cookies, consents and policies
https://api.katla.app/mcpConnect the MCP server →Ask, instead of clicking.
Connect Claude, ChatGPT or your editor to the account you already have. Tools run as you, with your permissions — an assistant cannot reach a site you cannot.
- katla_scan_site
- Run a scan and return the classified cookie inventory.
- katla_list_sites
- Sites in the account, with verification and last scan time.
- katla_list_cookies
- Classified inventory with categories and confidence scores.
- katla_get_consent_stats
- Accept, reject and partial rates for a site.
- katla_update_cookie_category
- Reclassify a cookie; your override sticks.
- katla_generate_privacy_policy
- Generate the policy from what the scan found.
Which of our sites dropped below 70% consent this week?
Rescan the shop and tell me what changed.
Everything the dashboard does, over HTTP.
The dashboard, the CLI and the MCP server all talk to this. Nothing is held back for the UI.
Consent in your app before lunch.
Add a domain, verify it, run a scan, then one import. The free plan covers all of it.