GDPR cookie banners with Consent Mode v2, plus a free scan of what loads before consent.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Update a site's cookie banner: layout (pill, bar, modal, corner), colours or preset, categories, services, Google Consent Mode v2, languages and wording. Only the fields you pass change. Pro sites can also switch geo-targeting and monthly rescans.
Site id from list_sites or create_site.
Banner fields to change; nested objects merge.
Change the domain (bare domain).
Pro: only show the banner where consent law applies.
Pro: rescan the site automatically every month.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http privacypill https://privacy-pill-consent-studio.lovable.app/mcp
Update a site's cookie banner: layout (pill, bar, modal, corner), colours or preset, categories, services, Google Consent Mode v2, languages and wording. Only the fields you pass change. Pro sites can also switch geo-targeting and monthly rescans.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| design | object | Banner fields to change; nested objects merge. |
| domain | string | Change the domain (bare domain). |
| site_id* | string | Site id from list_sites or create_site. |
| geo_targeting | boolean | Pro: only show the banner where consent law applies. |
| monthly_rescan | boolean | Pro: rescan the site automatically every month. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"site_id"
],
"properties": {
"name": {
"type": "string",
"maxLength": 80
},
"design": {
"type": "object",
"properties": {
"gcm": {
"type": "object",
"properties": {
"wait": {
"type": "number",
"maximum": 5000,
"minimum": 0
},
"redact": {
"type": "boolean"
},
"enabled": {
"type": "boolean"
},
"passthrough": {
"type": "boolean"
}
},
"additionalProperties": false
},
"side": {
"enum": [
"left",
"right"
],
"type": "string"
},
"equal": {
"type": "boolean",
"description": "Give Accept and Reject equal visual weight."
},
"theme": {
"type": "object",
"properties": {
"bg": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"fg": {
"$ref": "#/properties/design/properties/theme/properties/bg"
},
"font": {
"type": "string",
"pattern": "^[\\w\\s,'\"\\-.]+$",
"maxLength": 160
},
"size": {
"type": "number",
"maximum": 18,
"minimum": 12
},
"accent": {
"$ref": "#/properties/design/properties/theme/properties/bg"
},
"border": {
"$ref": "#/properties/design/properties/theme/properties/bg"
},
"radius": {
"type": "number",
"maximum": 40,
"minimum": 0
},
"shadow": {
"type": "boolean"
},
"buttons": {
"enum": [
"outline",
"soft",
"text"
],
"type": "string"
},
"accentFg": {
"$ref": "#/properties/design/properties/theme/properties/bg"
},
"btnRadius": {
"type": "number",
"maximum": 999,
"minimum": 0
}
},
"additionalProperties": false
},
"layout": {
"enum": [
"pill",
"bar",
"modal",
"corner"
],
"type": "string"
},
"preset": {
"enum": [
"mint",
"slate",
"paper",
"lagoon",
"sand",
"contrast"
],
"type": "string",
"description": "Apply a built-in colour preset (see GET /presets)."
},
"reopen": {
"type": "boolean",
"description": "Show a small button to reopen preferences."
},
"autoLang": {
"type": "boolean"
},
"services": {
"type": "object",
"propertyNames": {
"enum": [
"necessary",
"analytics",
"marketing",
"functional"
]
},
"additionalProperties": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 40
}
},
"languages": {
"type": "array",
"items": {
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
],
"type": "string"
},
"minItems": 1
},
"overrides": {
"type": "object",
"propertyNames": {
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
]
},
"additionalProperties": {
"type": "object",
"properties": {
"body": {
"type": "string",
"maxLength": 600
},
"title": {
"type": "string",
"maxLength": 120
},
"accept": {
"type": "string",
"maxLength": 40
},
"reject": {
"type": "string",
"maxLength": 40
},
"customize": {
"type": "string",
"maxLength": 40
}
},
"additionalProperties": false
}
},
"policyUrl": {
"type": "string",
"maxLength": 500
},
"categories": {
"type": "object",
"properties": {
"analytics": {
"type": "boolean"
},
"marketing": {
"type": "boolean"
},
"functional": {
"type": "boolean"
}
},
"additionalProperties": false
},
"expiryDays": {
"type": "integer",
"maximum": 395,
"minimum": 1
},
"defaultLang": {
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
],
"type": "string"
},
"reloadOnWithdraw": {
"type": "boolean"
}
},
"description": "Banner fields to change; nested objects merge.",
"additionalProperties": false
},
"domain": {
"type": "string",
"maxLength": 253,
"minLength": 3,
"description": "Change the domain (bare domain)."
},
"site_id": {
"type": "string",
"format": "uuid",
"description": "Site id from list_sites or create_site."
},
"geo_targeting": {
"type": "boolean",
"description": "Pro: only show the banner where consent law applies."
},
"monthly_rescan": {
"type": "boolean",
"description": "Pro: rescan the site automatically every month."
}
},
"additionalProperties": false
}Add a domain to PrivacyPill and create its cookie banner. Returns the site, its banner settings and the embed snippet. The free plan includes one site.
| Argument | Type | Description |
|---|---|---|
| name | string | Friendly name shown in the dashboard. |
| design | object | Optional starting banner settings; see configure_banner for the fields. |
| domain* | string | Bare domain such as example.com (no https://). |
| license_id | string | Attach a Pro or Lifetime license from get_account. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"domain"
],
"properties": {
"name": {
"type": "string",
"maxLength": 80,
"description": "Friendly name shown in the dashboard."
},
"design": {
"type": "object",
"properties": {
"gcm": {
"type": "object",
"properties": {
"wait": {
"type": "number",
"maximum": 5000,
"minimum": 0
},
"redact": {
"type": "boolean"
},
"enabled": {
"type": "boolean"
},
"passthrough": {
"type": "boolean"
}
},
"additionalProperties": false
},
"side": {
"enum": [
"left",
"right"
],
"type": "string"
},
"equal": {
"type": "boolean",
"description": "Give Accept and Reject equal visual weight."
},
"theme": {
"type": "object",
"properties": {
"bg": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"fg": {
"$ref": "#/properties/design/properties/theme/properties/bg"
},
"font": {
"type": "string",
"pattern": "^[\\w\\s,'\"\\-.]+$",
"maxLength": 160
},
"size": {
"type": "number",
"maximum": 18,
"minimum": 12
},
"accent": {
"$ref": "#/properties/design/properties/theme/properties/bg"
},
"border": {
"$ref": "#/properties/design/properties/theme/properties/bg"
},
"radius": {
"type": "number",
"maximum": 40,
"minimum": 0
},
"shadow": {
"type": "boolean"
},
"buttons": {
"enum": [
"outline",
"soft",
"text"
],
"type": "string"
},
"accentFg": {
"$ref": "#/properties/design/properties/theme/properties/bg"
},
"btnRadius": {
"type": "number",
"maximum": 999,
"minimum": 0
}
},
"additionalProperties": false
},
"layout": {
"enum": [
"pill",
"bar",
"modal",
"corner"
],
"type": "string"
},
"preset": {
"enum": [
"mint",
"slate",
"paper",
"lagoon",
"sand",
"contrast"
],
"type": "string",
"description": "Apply a built-in colour preset (see GET /presets)."
},
"reopen": {
"type": "boolean",
"description": "Show a small button to reopen preferences."
},
"autoLang": {
"type": "boolean"
},
"services": {
"type": "object",
"propertyNames": {
"enum": [
"necessary",
"analytics",
"marketing",
"functional"
]
},
"additionalProperties": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 40
}
},
"languages": {
"type": "array",
"items": {
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
],
"type": "string"
},
"minItems": 1
},
"overrides": {
"type": "object",
"propertyNames": {
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
]
},
"additionalProperties": {
"type": "object",
"properties": {
"body": {
"type": "string",
"maxLength": 600
},
"title": {
"type": "string",
"maxLength": 120
},
"accept": {
"type": "string",
"maxLength": 40
},
"reject": {
"type": "string",
"maxLength": 40
},
"customize": {
"type": "string",
"maxLength": 40
}
},
"additionalProperties": false
}
},
"policyUrl": {
"type": "string",
"maxLength": 500
},
"categories": {
"type": "object",
"properties": {
"analytics": {
"type": "boolean"
},
"marketing": {
"type": "boolean"
},
"functional": {
"type": "boolean"
}
},
"additionalProperties": false
},
"expiryDays": {
"type": "integer",
"maximum": 395,
"minimum": 1
},
"defaultLang": {
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
],
"type": "string"
},
"reloadOnWithdraw": {
"type": "boolean"
}
},
"description": "Optional starting banner settings; see configure_banner for the fields.",
"additionalProperties": false
},
"domain": {
"type": "string",
"maxLength": 253,
"minLength": 3,
"description": "Bare domain such as example.com (no https://)."
},
"license_id": {
"type": "string",
"format": "uuid",
"description": "Attach a Pro or Lifetime license from get_account."
}
},
"additionalProperties": false
}Show the signed-in PrivacyPill account: number of sites, licenses (Free, Pro, Lifetime) and limits.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}Get the one-line PrivacyPill embed (with Consent Mode fallback) for a site, plus install steps for HTML, Google Tag Manager, WordPress, Shopify and Webflow.
| Argument | Type | Description |
|---|---|---|
| site_id* | string | Site id from list_sites or create_site. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"site_id"
],
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"description": "Site id from list_sites or create_site."
}
},
"additionalProperties": false
}Get one site with its full cookie banner settings (layout, colours, categories, Consent Mode, languages).
| Argument | Type | Description |
|---|---|---|
| site_id* | string | Site id from list_sites or create_site. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"site_id"
],
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"description": "Site id from list_sites or create_site."
}
},
"additionalProperties": false
}List the built-in banner colour presets and the allowed layouts, languages and categories.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}List the domains (sites) on the PrivacyPill account with their plan, site key and last scan score.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}Free, no sign-in: fetch a public page as a first-time visitor and report which trackers (GA4, Google Ads, Meta Pixel, TikTok, LinkedIn, Hotjar…) and cookies load before the visitor consents, which ones wait, which other sites the page contacts (e.g. Google Fonts), and how to fix it. Static check of the HTML and headers (no JavaScript runs). Limited to 10 checks per hour per visitor.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public page to check, e.g. https://example.com |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 3,
"description": "Public page to check, e.g. https://example.com"
}
},
"additionalProperties": false
}Scan a public web page for trackers (GA4, Google Ads, GTM, Meta Pixel, Hotjar, TikTok, LinkedIn…), cookies and Consent Mode setup, and get a 0–100 compliance score. Scans of your own domains are saved; apply=true adds the detected services to that site's banner.
| Argument | Type | Description |
|---|---|---|
| url* | string | Page URL, e.g. https://example.com |
| apply | boolean | Add detected services and cookie names to the site's banner. |
| site_id | string | Save the scan to this site (otherwise matched by domain). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 3,
"description": "Page URL, e.g. https://example.com"
},
"apply": {
"type": "boolean",
"description": "Add detected services and cookie names to the site's banner."
},
"site_id": {
"type": "string",
"format": "uuid",
"description": "Save the scan to this site (otherwise matched by domain)."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 30, 2026.