DEVELOPERS

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.

@katla.app/sdkREST + MCPTypeScript throughout
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>
  )
}
useConsentManager re-renders on every decisionOpen in docs →
FOUR WAYS IN

Pick the surface that fits the job.

SDK

TypeScript

Consent 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 code

One 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 / CD

Add 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 assistants

Let 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
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.
Every tool and the permission model

Which of our sites dropped below 70% consent this week?

katla_get_consent_statsTwo: shop.example.com at 64% and blog.example.com at 68%. Both are down from the low eighties last week.

Rescan the shop and tell me what changed.

katla_scan_site47 cookies, three new since the last scan — all from a landing-page tool added on Tuesday. Two classified as marketing, one still unknown.
REST API

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.

OpenAPI spec →
GET/teamsTeams the account belongs to
GET/teams/:teamId/sitesSites with their latest scan
POST/sites/:id/scanStart a scan; poll for the result
GET/sites/:siteId/cookiesClassified inventory with confidence
GET/sites/:siteId/cookies/exportThe same inventory as CSV
GET/sites/:id/consentsConsent records with stats
PATCH/sites/:id/settingsUpdate categories, copy and theme
4.9 kBHeadless footprintGzipped, inlined into the document by the Next.js SDK. No runtime request at all.
±0 msLCP impactMeasured against the same page with no consent platform on it. Method on the compare page.
18MCP toolsSites, cookies, consents, policies and plan, all through your account’s own permissions.
13Policy languagesCookie and privacy policies generated from your real inventory, in every locale you serve.

Consent in your app before lunch.

Add a domain, verify it, run a scan, then one import. The free plan covers all of it.