PrivacyPill
GDPR cookie banners with Consent Mode v2, plus a free scan of what loads before consent.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"privacypill": {
"url": "https://privacy-pill-consent-studio.lovable.app/mcp"
}
}
}Remote endpoints
https://privacy-pill-consent-studio.lovable.app/mcpstreamable-httpWhat it can do
Tool inventory
Tools (9)
π’pre_consent_scan(url)
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.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 3,
"maxLength": 2048,
"description": "Public page to check, e.g. https://example.com"
}
},
"required": [
"url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}π’get_account
Show the signed-in PrivacyPill account: number of sites, licenses (Free, Pro, Lifetime) and limits.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}π’list_sites
List the domains (sites) on the PrivacyPill account with their plan, site key and last scan score.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}π’get_site(site_id)
Get one site with its full cookie banner settings (layout, colours, categories, Consent Mode, languages).
Input Schema
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site id from list_sites or create_site."
}
},
"required": [
"site_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}π‘create_site(domain, name, design, license_id)
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.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"minLength": 3,
"maxLength": 253,
"description": "Bare domain such as example.com (no https://)."
},
"name": {
"description": "Friendly name shown in the dashboard.",
"type": "string",
"maxLength": 80
},
"design": {
"description": "Optional starting banner settings; see configure_banner for the fields.",
"type": "object",
"properties": {
"preset": {
"description": "Apply a built-in colour preset (see GET /presets).",
"type": "string",
"enum": [
"mint",
"slate",
"paper",
"lagoon",
"sand",
"contrast"
]
},
"layout": {
"type": "string",
"enum": [
"pill",
"bar",
"modal",
"corner"
]
},
"side": {
"type": "string",
"enum": [
"left",
"right"
]
},
"theme": {
"type": "object",
"properties": {
"bg": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"fg": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"accent": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"accentFg": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"border": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"radius": {
"type": "number",
"minimum": 0,
"maximum": 40
},
"btnRadius": {
"type": "number",
"minimum": 0,
"maximum": 999
},
"font": {
"type": "string",
"maxLength": 160,
"pattern": "^[\\w\\s,'\"\\-.]+$"
},
"size": {
"type": "number",
"minimum": 12,
"maximum": 18
},
"shadow": {
"type": "boolean"
},
"buttons": {
"type": "string",
"enum": [
"outline",
"soft",
"text"
]
}
}
},
"equal": {
"description": "Give Accept and Reject equal visual weight.",
"type": "boolean"
},
"reopen": {
"description": "Show a small button to reopen preferences.",
"type": "boolean"
},
"categories": {
"type": "object",
"properties": {
"analytics": {
"type": "boolean"
},
"marketing": {
"type": "boolean"
},
"functional": {
"type": "boolean"
}
}
},
"services": {
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"necessary",
"analytics",
"marketing",
"functional"
]
},
"additionalProperties": {
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"maxLength": 120
}
}
},
"gcm": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"wait": {
"type": "number",
"minimum": 0,
"maximum": 5000
},
"redact": {
"type": "boolean"
},
"passthrough": {
"type": "boolean"
}
}
},
"languages": {
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
]
}
},
"defaultLang": {
"type": "string",
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
]
},
"autoLang": {
"type": "boolean"
},
"overrides": {
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
]
},
"additionalProperties": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 120
},
"body": {
"type": "string",
"maxLength": 600
},
"accept": {
"type": "string",
"maxLength": 40
},
"reject": {
"type": "string",
"maxLength": 40
},
"customize": {
"type": "string",
"maxLength": 40
}
}
}
},
"policyUrl": {
"type": "string",
"maxLength": 500
},
"expiryDays": {
"type": "integer",
"minimum": 1,
"maximum": 395
},
"reloadOnWithdraw": {
"type": "boolean"
}
},
"additionalProperties": false
},
"license_id": {
"description": "Attach a Pro or Lifetime license from get_account.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"domain"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}π‘configure_banner(site_id, design, name, domain, geo_targeting, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site id from list_sites or create_site."
},
"design": {
"description": "Banner fields to change; nested objects merge.",
"type": "object",
"properties": {
"preset": {
"description": "Apply a built-in colour preset (see GET /presets).",
"type": "string",
"enum": [
"mint",
"slate",
"paper",
"lagoon",
"sand",
"contrast"
]
},
"layout": {
"type": "string",
"enum": [
"pill",
"bar",
"modal",
"corner"
]
},
"side": {
"type": "string",
"enum": [
"left",
"right"
]
},
"theme": {
"type": "object",
"properties": {
"bg": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"fg": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"accent": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"accentFg": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"border": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"radius": {
"type": "number",
"minimum": 0,
"maximum": 40
},
"btnRadius": {
"type": "number",
"minimum": 0,
"maximum": 999
},
"font": {
"type": "string",
"maxLength": 160,
"pattern": "^[\\w\\s,'\"\\-.]+$"
},
"size": {
"type": "number",
"minimum": 12,
"maximum": 18
},
"shadow": {
"type": "boolean"
},
"buttons": {
"type": "string",
"enum": [
"outline",
"soft",
"text"
]
}
}
},
"equal": {
"description": "Give Accept and Reject equal visual weight.",
"type": "boolean"
},
"reopen": {
"description": "Show a small button to reopen preferences.",
"type": "boolean"
},
"categories": {
"type": "object",
"properties": {
"analytics": {
"type": "boolean"
},
"marketing": {
"type": "boolean"
},
"functional": {
"type": "boolean"
}
}
},
"services": {
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"necessary",
"analytics",
"marketing",
"functional"
]
},
"additionalProperties": {
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"maxLength": 120
}
}
},
"gcm": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"wait": {
"type": "number",
"minimum": 0,
"maximum": 5000
},
"redact": {
"type": "boolean"
},
"passthrough": {
"type": "boolean"
}
}
},
"languages": {
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
]
}
},
"defaultLang": {
"type": "string",
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
]
},
"autoLang": {
"type": "boolean"
},
"overrides": {
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"en",
"de",
"fr",
"nl",
"es",
"it"
]
},
"additionalProperties": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 120
},
"body": {
"type": "string",
"maxLength": 600
},
"accept": {
"type": "string",
"maxLength": 40
},
"reject": {
"type": "string",
"maxLength": 40
},
"customize": {
"type": "string",
"maxLength": 40
}
}
}
},
"policyUrl": {
"type": "string",
"maxLength": 500
},
"expiryDays": {
"type": "integer",
"minimum": 1,
"maximum": 395
},
"reloadOnWithdraw": {
"type": "boolean"
}
},
"additionalProperties": false
},
"name": {
"type": "string",
"maxLength": 80
},
"domain": {
"description": "Change the domain (bare domain).",
"type": "string",
"minLength": 3,
"maxLength": 253
},
"geo_targeting": {
"description": "Pro: only show the banner where consent law applies.",
"type": "boolean"
},
"monthly_rescan": {
"description": "Pro: rescan the site automatically every month.",
"type": "boolean"
}
},
"required": [
"site_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}π’get_embed_snippet(site_id)
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.
Input Schema
{
"type": "object",
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site id from list_sites or create_site."
}
},
"required": [
"site_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}π’run_compliance_scan(url, site_id, apply)
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.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 3,
"maxLength": 2048,
"description": "Page URL, e.g. https://example.com"
},
"site_id": {
"description": "Save the scan to this site (otherwise matched by domain).",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"apply": {
"description": "Add detected services and cookie names to the site's banner.",
"type": "boolean"
}
},
"required": [
"url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}π’list_banner_presets
List the built-in banner colour presets and the allowed layouts, languages and categories.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Community
Evidence