Manage your CookiePal cookie banner: domains, the banner tag and style, and cookie scan reports.
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.
Adds a website domain to the connected CookiePal account on the free plan, with the same checks as the CookiePal dashboard, and queues its banner build. Nothing is scanned on CookiePal’s side: the result says how to run the first scan on the user’s computer. An organisation can add at most 10 domains a day this way. Other tools keep using the default domain unless given the new one.
The domain to add, such as example.com. A URL is accepted: its scheme, a leading www. and any path are dropped. A port is refused, as in the dashboard, so send example.com, not example.com:8080.
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.
Run in a terminal
claude mcp add --transport http cookiepal https://mcp.cookiepal.io/mcp
Adds a website domain to the connected CookiePal account on the free plan, with the same checks as the CookiePal dashboard, and queues its banner build. Nothing is scanned on CookiePal’s side: the result says how to run the first scan on the user’s computer. An organisation can add at most 10 domains a day this way. Other tools keep using the default domain unless given the new one.
| Argument | Type | Description |
|---|---|---|
| domain* | string | The domain to add, such as example.com. A URL is accepted: its scheme, a leading www. and any path are dropped. A port is refused, as in the dashboard, so send example.com, not example.com:8080. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "The domain to add, such as example.com. A URL is accepted: its scheme, a leading www. and any path are dropped. A port is refused, as in the dashboard, so send example.com, not example.com:8080."
}
},
"additionalProperties": false
}Reads Google Consent Mode on one of your CookiePal domains, from a page load on the user’s own computer, names the problem if there is one, and records the result on the domain as a local reading. Run this again any time to re-check. The local run this needs is made only by the CookiePal plugin in Claude Code on the user’s own computer: the terminal, the desktop app or an IDE extension. claude.ai and Claude Code on the web run in the cloud, so they cannot make it, and a crawler or browser run anywhere else does not stand in for it. The result reports what was found. It does not assess whether a site, page or banner complies with any law, so it is never a verdict of compliant or non-compliant.
| Argument | Type | Description |
|---|---|---|
| url* | string | The page that was read on the user’s computer. |
| seenAt* | string | When the reading was taken, ISO 8601. |
| reading* | object | Exactly what the gcm check command returned; never hand-built. |
| domainId | string | Which domain was checked. Omit it for the account’s default domain. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"seenAt",
"reading"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"description": "The page that was read on the user’s computer."
},
"seenAt": {
"type": "string",
"pattern": "^[0-9T:.Z+\\x2D]+$",
"maxLength": 40,
"minLength": 1,
"description": "When the reading was taken, ISO 8601."
},
"reading": {
"type": "object",
"required": [
"consentModeFound",
"entries",
"entriesMissingDefault",
"wasSetLate"
],
"properties": {
"entries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+$",
"maxLength": 64,
"minLength": 1
},
"maxItems": 16
},
"wasSetLate": {
"type": "boolean"
},
"consentModeFound": {
"type": "boolean"
},
"entriesMissingDefault": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+$",
"maxLength": 64,
"minLength": 1
},
"maxItems": 16
}
},
"description": "Exactly what the gcm check command returned; never hand-built.",
"additionalProperties": false
},
"domainId": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Which domain was checked. Omit it for the account’s default domain."
}
},
"additionalProperties": false
}Sets the category for a list of cookies on one of your CookiePal domains, and reports the result for each one. Send the category from @cookiepal-oss/cookie-db (necessary, functional, analytics, performance, advertisement or other).
| Argument | Type | Description |
|---|---|---|
| cookies* | array | |
| domainId | string | Which domain these cookies belong to. Omit it for the account’s default domain. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"cookies"
],
"properties": {
"cookies": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"domain",
"category"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[\\x21-\\x3A\\x3C\\x3E-\\x7E]*$",
"maxLength": 128
},
"domain": {
"type": "string",
"pattern": "^\\.?[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1
},
"category": {
"enum": [
"necessary",
"functional",
"analytics",
"performance",
"advertisement",
"other"
],
"type": "string"
},
"description": {
"type": "string",
"pattern": "^[^\\x00-\\x1F\\x7F-\\x9F\\u200B-\\u200F\\u2028-\\u202E\\u2060-\\u2064\\u2066-\\u2069\\uFEFF\\uDB40]*$",
"maxLength": 512
}
},
"additionalProperties": false
},
"maxItems": 50,
"minItems": 1
},
"domainId": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Which domain these cookies belong to. Omit it for the account’s default domain."
}
},
"additionalProperties": false
}Connects this client to a CookiePal account, opening sign-in (or sign-up, for someone without an account) in the browser if needed, then reports who is connected: the user, the organisation and the domain other tools act on by default. Pass the plugin’s install ID only with linkInstall: true if the user agreed to link it to this account, or linkInstall: false if they said no.
| Argument | Type | Description |
|---|---|---|
| installId | string | The plugin’s install ID, sent with `linkInstall` to carry out the user’s answer to linking it to this account. Leave it out when the user shared no install ID. |
| linkInstall | boolean | Required with `installId`: true only if the user agreed to link the install ID to this account (a separate question from sharing it), false if they said no, which also removes any link made before. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"installId": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
"description": "The plugin’s install ID, sent with `linkInstall` to carry out the user’s answer to linking it to this account. Leave it out when the user shared no install ID."
},
"linkInstall": {
"type": "boolean",
"description": "Required with `installId`: true only if the user agreed to link the install ID to this account (a separate question from sharing it), false if they said no, which also removes any link made before."
}
},
"additionalProperties": false
}Changes how one of your CookiePal domains’ banner looks and reads: its colours, logo type and colour, positions, and the title, description and button texts per language. Give only what you want to change; everything else keeps its saved value. It does not upload a custom logo or change category texts; use the CookiePal dashboard for those. Colour, logo and position changes queue a rebuild (skipped, and said so, if the domain has reached its page-view limit); texts go live without one.
| Argument | Type | Description |
|---|---|---|
| logo | object | The banner’s logo, default or cookie. A custom logo is kept as it is unless you set a type. |
| texts | array | Banner and preference-centre copy per language the banner already has, as plain text; paragraphs are separated by a blank line. |
| colors | object | Only the colours you give change; the rest keep their saved value. |
| domainId | string | Which domain to customise. Omit it for the account’s default domain. |
| positions | object | Only the positions you give change; the rest keep their saved value. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"logo": {
"type": "object",
"properties": {
"type": {
"enum": [
"default",
"cookie"
],
"type": "string"
},
"color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Logo colour."
}
},
"description": "The banner’s logo, default or cookie. A custom logo is kept as it is unless you set a type.",
"additionalProperties": false
},
"texts": {
"type": "array",
"items": {
"type": "object",
"required": [
"locale"
],
"properties": {
"modal": {
"type": "object",
"properties": {
"title": {
"type": "string",
"pattern": "^[^\\x00-\\x1F\\x7F-\\x9F----<>]*$",
"maxLength": 50,
"minLength": 1
},
"description": {
"type": "string",
"pattern": "^[^\\x00-\\x09\\x0B-\\x1F\\x7F-\\x9F----<>]*$",
"maxLength": 1500,
"minLength": 1
}
},
"additionalProperties": false
},
"banner": {
"type": "object",
"properties": {
"title": {
"type": "string",
"pattern": "^[^\\x00-\\x1F\\x7F-\\x9F----<>]*$",
"maxLength": 90,
"minLength": 1
},
"buttons": {
"type": "object",
"properties": {
"accept": {
"type": "string",
"pattern": "^[^\\x00-\\x1F\\x7F-\\x9F----<>\"]*$",
"maxLength": 25,
"minLength": 1
},
"reject": {
"type": "string",
"pattern": "^[^\\x00-\\x1F\\x7F-\\x9F----<>\"]*$",
"maxLength": 25,
"minLength": 1
},
"customize": {
"type": "string",
"pattern": "^[^\\x00-\\x1F\\x7F-\\x9F----<>\"]*$",
"maxLength": 25,
"minLength": 1
}
},
"additionalProperties": false
},
"description": {
"type": "string",
"pattern": "^[^\\x00-\\x09\\x0B-\\x1F\\x7F-\\x9F----<>]*$",
"maxLength": 1500,
"minLength": 1
}
},
"additionalProperties": false
},
"locale": {
"type": "string",
"pattern": "^[A-Za-z]{2,3}(\\x2D[A-Za-z0-9]{2,8})*$",
"maxLength": 16,
"description": "A language the banner already has, such as en-GB."
}
},
"additionalProperties": false
},
"maxItems": 10,
"minItems": 1,
"description": "Banner and preference-centre copy per language the banner already has, as plain text; paragraphs are separated by a blank line."
},
"colors": {
"type": "object",
"properties": {
"main": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Title colour."
},
"accent": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Button colour."
},
"secondary": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Description colour."
},
"background": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Banner background colour."
}
},
"description": "Only the colours you give change; the rest keep their saved value.",
"additionalProperties": false
},
"domainId": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Which domain to customise. Omit it for the account’s default domain."
},
"positions": {
"type": "object",
"properties": {
"bannerFabPosition": {
"enum": [
"left",
"right",
"hidden"
],
"type": "string"
},
"bannerTypePosition": {
"enum": [
"top",
"bottom",
"topLeft",
"bottomLeft",
"topRight",
"bottomRight",
"center"
],
"type": "string"
},
"bannerPreferencesPosition": {
"enum": [
"center",
"left",
"right"
],
"type": "string"
}
},
"description": "Only the positions you give change; the rest keep their saved value.",
"additionalProperties": false
}
},
"additionalProperties": false
}Deletes the checks CookiePal stored under one install ID. Run it from the plugin before the ID is removed from the machine, because once the ID is gone there is nothing left to look the checks up by. It answers with how many were deleted and how many remain: only a run reporting no remainder has finished, and running it again deletes just what is left. An ID that stored nothing reports zero of both. It also unlinks the ID from any CookiePal account it was connected to. No account needed.
| Argument | Type | Description |
|---|---|---|
| installId* | string | The install ID to erase. Every check stored under it is deleted. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"installId"
],
"properties": {
"installId": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
"description": "The install ID to erase. Every check stored under it is deleted."
}
},
"additionalProperties": false
}Returns the CookiePal banner script tag to paste into a site, for one domain in the connected account. It is byte-for-byte the tag the CookiePal dashboard copies for that domain, including `defer` for a Shopify store. Paste it as given: the URL it loads is specific to the domain, and a tag built by hand or copied from another site will not verify. Use verify_installation afterwards to confirm it is live.
| Argument | Type | Description |
|---|---|---|
| domainId | string | Which domain’s tag to return, such as example.com. Omit it for the account’s default domain, the one the dashboard opens on. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domainId": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Which domain’s tag to return, such as example.com. Omit it for the account’s default domain, the one the dashboard opens on."
}
},
"additionalProperties": false
}Returns the latest cookie report for one of your CookiePal domains, with each cookie’s category, and says whether it came from a local scan. When a start_scan crawl is still running, reports that instead of an old report. The result reports what was found. It does not assess whether a site, page or banner complies with any law, so it is never a verdict of compliant or non-compliant.
| Argument | Type | Description |
|---|---|---|
| domainId | string | Which domain to report on. Omit it for the account’s default domain. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domainId": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Which domain to report on. Omit it for the account’s default domain."
}
},
"additionalProperties": false
}Lists the domains in the connected CookiePal account that this user can see, with each domain’s plan, this month’s page views, whether its page-view limit has been reached, and whether its banner has been found installed. Plans are per domain.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}Starts a check of one web page for cookies set before consent. Returns a check ID and the plan the local check follows: the page is loaded in a browser on the user’s own computer, never by CookiePal, and the plan carries the banner matchers for pressing accept and reject there. Send the result to submit_check within 30 minutes. No account needed. The local run this needs is made only by the CookiePal plugin in Claude Code on the user’s own computer: the terminal, the desktop app or an IDE extension. claude.ai and Claude Code on the web run in the cloud, so they cannot make it, and a crawler or browser run anywhere else does not stand in for it.
| Argument | Type | Description |
|---|---|---|
| url* | string | The page to check, http or https. CookiePal never requests it. |
| installId | string | A random install ID, sent only when the user agreed to share it in the plugin. Omit it otherwise. |
| pluginVersion | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"description": "The page to check, http or https. CookiePal never requests it."
},
"installId": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
"description": "A random install ID, sent only when the user agreed to share it in the plugin. Omit it otherwise."
},
"pluginVersion": {
"type": "string",
"pattern": "^\\d+\\.\\d+\\.\\d+(?:[+\\x2D][0-9A-Za-z.\\x2D]+)?$",
"maxLength": 32
}
},
"additionalProperties": false
}Queues a rebuild of the cookie banner script for one of your CookiePal domains, so it picks up the settings saved for it. It changes no setting and works on one domain only. If the domain has reached its page-view limit nothing is rebuilt, and the result says so.
| Argument | Type | Description |
|---|---|---|
| domainId | string | Which domain to rebuild. Omit it for the account’s default domain. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domainId": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Which domain to rebuild. Omit it for the account’s default domain."
}
},
"additionalProperties": false
}Sets which privacy regulation one of your CookiePal domains’ banner follows: gdpr, ccpa or both, where both applies GDPR everywhere and CCPA to US visitors at the edge. It changes nothing else about the banner, and then queues a rebuild so the change goes live; if the domain has reached its page-view limit the rebuild is skipped, and the result says so.
| Argument | Type | Description |
|---|---|---|
| domainId | string | Which domain to change. Omit it for the account’s default domain. |
| bannerMode* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"bannerMode"
],
"properties": {
"domainId": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Which domain to change. Omit it for the account’s default domain."
},
"bannerMode": {
"enum": [
"gdpr",
"ccpa",
"both"
],
"type": "string"
}
},
"additionalProperties": false
}Starts a crawl of one of your CookiePal domains on the user’s own computer, using the open-source crawl engine. CookiePal crawls nothing: run upload_scan_report with the result when the crawl finishes, and until then get_scan_report reports it as running. Needs the domain’s banner to be verified and active first, unless this is the very first scan of a domain just added with add_domain. The local run this needs is made only by the CookiePal plugin in Claude Code on the user’s own computer: the terminal, the desktop app or an IDE extension. claude.ai and Claude Code on the web run in the cloud, so they cannot make it, and a crawler or browser run anywhere else does not stand in for it.
| Argument | Type | Description |
|---|---|---|
| domainId | string | Which domain to scan, such as example.com. Omit it for the account’s default domain. |
| maxPages | integer | How many pages to crawl, up to 50. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domainId": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Which domain to scan, such as example.com. Omit it for the account’s default domain."
},
"maxPages": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "How many pages to crawl, up to 50."
}
},
"additionalProperties": false
}Stores the result of a local check started with plan_check and returns it with a summary by category. Send each cookie with its category from @cookiepal-oss/cookie-db (necessary, functional, analytics, performance, advertisement or other) and its attributes, never its value. Include `consent` when the check pressed accept and reject, so the result says what survived an explicit reject. When no banner was found the result carries `noBannerSeenFrom`, the country the page was loaded from: a site that shows its banner only in other regions is indistinguishable from one with no banner, so that reading is inconclusive, not evidence that the site has no banner. Each check ID can be submitted once. The local run this needs is made only by the CookiePal plugin in Claude Code on the user’s own computer: the terminal, the desktop app or an IDE extension. claude.ai and Claude Code on the web run in the cloud, so they cannot make it, and a crawler or browser run anywhere else does not stand in for it. The result reports what was found. It does not assess whether a site, page or banner complies with any law, so it is never a verdict of compliant or non-compliant.
| Argument | Type | Description |
|---|---|---|
| checkId* | string | The check ID plan_check returned. |
| consent | object | What changed after accept and after reject. Omit it when the plugin did not run the consent action; the check is then an arrival-only reading. |
| cookies* | array | |
| truncated | boolean | True when the skill dropped cookies or hosts to fit the limits. |
| resultVersion* |
Stores the result of a local crawl started with start_scan, as a report labelled a local scan. Send the cookies with their category from @cookiepal-oss/cookie-db. When robots.txt blocked the crawl, send blockedByRobots and no report is stored. Each scan ID can be uploaded once. The local run this needs is made only by the CookiePal plugin in Claude Code on the user’s own computer: the terminal, the desktop app or an IDE extension. claude.ai and Claude Code on the web run in the cloud, so they cannot make it, and a crawler or browser run anywhere else does not stand in for it. The result reports what was found. It does not assess whether a site, page or banner complies with any law, so it is never a verdict of compliant or non-compliant.
| Argument | Type | Description |
|---|---|---|
| scanId* | string | |
| cookies | array | |
| truncated | boolean | |
| pagesScanned | integer | |
| blockedByRobots | boolean | |
| thirdPartyHosts | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"scanId"
],
"properties": {
"scanId": {
"type": "string",
"format": "uuid"
},
"cookies": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"domain",
"category"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[\\x21-\\x3A\\x3C\\x3E-\\x7E]*$",
"maxLength": 128
},
"path": {
"type": "string",
"pattern": "^\\/[\\x21-\\x3A\\x3C-\\x7E]*$",
"maxLength": 128,
"minLength": 1
},
"domain": {
"type": "string",
"pattern": "^\\.?[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1
},
"category": {
"enum": [
"necessary",
"functional",
"analytics",
"performance",
"advertisement",
"other"
],
"type": "string",
"description": "Assigned on the user's machine from @cookiepal-oss/cookie-db."
},
"duration": {
"type": "string",
"pattern": "^[^\\x00-\\x1F\\x7F-\\x9F\\u200B-\\u200F\\u2028-\\u202E\\u2060-\\u2064\\u2066-\\u2069\\uFEFF\\uDB40]*$",
"maxLength": 64
},
"description": {
"type": "string",
"pattern": "^[^\\x00-\\x1F\\x7F-\\x9F\\u200B-\\u200F\\u2028-\\u202E\\u2060-\\u2064\\u2066-\\u2069\\uFEFF\\uDB40]*$",
"maxLength": 512
}
},
"additionalProperties": false
},
"maxItems": 500
},
"truncated": {
"type": "boolean",
"default": false
},
"pagesScanned": {
"type": "integer",
"maximum": 50,
"minimum": 0
},
"blockedByRobots": {
"type": "boolean",
"default": false
},
"thirdPartyHosts": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1
},
"default": [],
"maxItems": 200
}
},
"additionalProperties": false
}Records a check of one domain’s live page, loaded on the user’s own computer, and sets that domain’s banner verification status to verified or failed. Load the page locally first and send what it found: CookiePal never requests the page. The server compares the banner script the page loads with the one this domain’s tag must load, so a tag from another site, or a hand-built one, ends as failed with the reason. Nothing is crawled on CookiePal’s side. The local run this needs is made only by the CookiePal plugin in Claude Code on the user’s own computer: the terminal, the desktop app or an IDE extension. claude.ai and Claude Code on the web run in the cloud, so they cannot make it, and a crawler or browser run anywhere else does not stand in for it. The result reports what was found. It does not assess whether a site, page or banner complies with any law, so it is never a verdict of compliant or non-compliant.
| Argument | Type | Description |
|---|---|---|
| domainId | string | Which domain was checked, such as example.com. Omit it for the account’s default domain. |
| evidence* | object | What the page load on the user’s computer found. Send it exactly as the local verify step returned it; never assemble or edit it. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"evidence"
],
"properties": {
"domainId": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Which domain was checked, such as example.com. Omit it for the account’s default domain."
},
"evidence": {
"type": "object",
"required": [
"url",
"seenAt",
"scriptSrc",
"tag",
"loadError"
],
"properties": {
"tag": {
"anyOf": [
{
"type": "string",
"pattern": "^[\\x20-\\x7E]*$",
"maxLength": 1024
},
{
"type": "null"
}
],
"description": "The banner script tag as it appears in the page, or null when none was found."
},
"url": {
"type": "string",
"maxLength": 2048,
"description": "The page that was loaded on the user’s computer, as it was loaded. It must be a page of the domain being verified; CookiePal never requests it."
},
"seenAt": {
"type": "string",
"format": "date-time",
"description": "When the page was read on the user’s computer, ISO 8601 with a timezone: either UTC ending in Z, or an offset such as +01:00."
},
"loadError": {
"anyOf": [
{
"enum": [
"load-failed"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Set only when the page itself could not be loaded, so nothing is known about its banner either way. Null when the page loaded, whatever was on it."
},
"scriptSrc": {
"anyOf": [
{
"type": "string",
"pattern": "^[\\x20-\\x7E]*$",
"maxLength": 2048
},
{
"type": "null"
}
],
"description": "The `src` of the CookiePal banner script found on the page, or null when none was found. The server decides whether it is this domain’s own; do not pre-judge it."
}
},
"description": "What the page load on the user’s computer found. Send it exactly as the local verify step returned it; never assemble or edit it.",
"additionalProperties": false
}
},
"additionalProperties": false
}Reports the CookiePal account this client is signed in as: the user, the organisation, the domain tools act on by default, and each domain’s plan and whether its page-view limit has been reached. Use it to confirm a connection, or to find out which domain other tools will use when none is given.
| Argument | Type | Description |
|---|---|---|
| domain | string | The domain to report on. Defaults to the organisation’s current one. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1,
"description": "The domain to report on. Defaults to the organisation’s current one."
}
},
"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 Nov 4, 2026.
| number |
| thirdPartyHosts* | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"checkId",
"resultVersion",
"cookies",
"thirdPartyHosts"
],
"properties": {
"checkId": {
"type": "string",
"format": "uuid",
"description": "The check ID plan_check returned."
},
"consent": {
"type": "object",
"required": [
"tested",
"bannerFound",
"accept",
"reject"
],
"properties": {
"accept": {
"type": "object",
"required": [
"pressed"
],
"properties": {
"reason": {
"enum": [
"no-banner",
"no-button",
"ambiguous-button",
"load-failed",
"click-failed"
],
"type": "string",
"description": "Why the button was not pressed."
},
"pressed": {
"type": "boolean"
},
"matchedBy": {
"enum": [
"tag",
"id",
"class",
"text"
],
"type": "string"
},
"newAfterClick": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"domain",
"path",
"expires",
"httpOnly",
"secure",
"category"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[\\x21-\\x3A\\x3C\\x3E-\\x7E]*$",
"maxLength": 128
},
"path": {
"type": "string",
"pattern": "^\\/[\\x21-\\x3A\\x3C-\\x7E]*$",
"maxLength": 128,
"minLength": 1
},
"domain": {
"type": "string",
"pattern": "^\\.?[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1
},
"secure": {
"type": "boolean"
},
"expires": {
"anyOf": [
{
"type": "number",
"maximum": 253402300799
},
{
"type": "null"
}
]
},
"category": {
"enum": [
"necessary",
"functional",
"analytics",
"performance",
"advertisement",
"other"
],
"type": "string",
"description": "Assigned on the user's machine from @cookiepal-oss/cookie-db."
},
"httpOnly": {
"type": "boolean"
},
"sameSite": {
"enum": [
"Strict",
"Lax",
"None"
],
"type": "string"
}
},
"additionalProperties": false
},
"default": [],
"maxItems": 200
},
"hostsAfterClick": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1
},
"default": [],
"maxItems": 200
},
"cookiesAfterClick": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"domain",
"path",
"expires",
"httpOnly",
"secure",
"category"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[\\x21-\\x3A\\x3C\\x3E-\\x7E]*$",
"maxLength": 128
},
"path": {
"type": "string",
"pattern": "^\\/[\\x21-\\x3A\\x3C-\\x7E]*$",
"maxLength": 128,
"minLength": 1
},
"domain": {
"type": "string",
"pattern": "^\\.?[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1
},
"secure": {
"type": "boolean"
},
"expires": {
"anyOf": [
{
"type": "number",
"maximum": 253402300799
},
{
"type": "null"
}
]
},
"category": {
"enum": [
"necessary",
"functional",
"analytics",
"performance",
"advertisement",
"other"
],
"type": "string",
"description": "Assigned on the user's machine from @cookiepal-oss/cookie-db."
},
"httpOnly": {
"type": "boolean"
},
"sameSite": {
"enum": [
"Strict",
"Lax",
"None"
],
"type": "string"
}
},
"additionalProperties": false
},
"default": [],
"maxItems": 200
}
},
"additionalProperties": false
},
"reject": {
"type": "object",
"required": [
"pressed"
],
"properties": {
"reason": {
"enum": [
"no-banner",
"no-button",
"ambiguous-button",
"load-failed",
"click-failed"
],
"type": "string",
"description": "Why the button was not pressed."
},
"pressed": {
"type": "boolean"
},
"matchedBy": {
"enum": [
"tag",
"id",
"class",
"text"
],
"type": "string"
},
"newAfterClick": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"domain",
"path",
"expires",
"httpOnly",
"secure",
"category"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[\\x21-\\x3A\\x3C\\x3E-\\x7E]*$",
"maxLength": 128
},
"path": {
"type": "string",
"pattern": "^\\/[\\x21-\\x3A\\x3C-\\x7E]*$",
"maxLength": 128,
"minLength": 1
},
"domain": {
"type": "string",
"pattern": "^\\.?[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1
},
"secure": {
"type": "boolean"
},
"expires": {
"anyOf": [
{
"type": "number",
"maximum": 253402300799
},
{
"type": "null"
}
]
},
"category": {
"enum": [
"necessary",
"functional",
"analytics",
"performance",
"advertisement",
"other"
],
"type": "string",
"description": "Assigned on the user's machine from @cookiepal-oss/cookie-db."
},
"httpOnly": {
"type": "boolean"
},
"sameSite": {
"enum": [
"Strict",
"Lax",
"None"
],
"type": "string"
}
},
"additionalProperties": false
},
"default": [],
"maxItems": 200
},
"hostsAfterClick": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1
},
"default": [],
"maxItems": 200
},
"cookiesAfterClick": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"domain",
"path",
"expires",
"httpOnly",
"secure",
"category"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[\\x21-\\x3A\\x3C\\x3E-\\x7E]*$",
"maxLength": 128
},
"path": {
"type": "string",
"pattern": "^\\/[\\x21-\\x3A\\x3C-\\x7E]*$",
"maxLength": 128,
"minLength": 1
},
"domain": {
"type": "string",
"pattern": "^\\.?[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1
},
"secure": {
"type": "boolean"
},
"expires": {
"anyOf": [
{
"type": "number",
"maximum": 253402300799
},
{
"type": "null"
}
]
},
"category": {
"enum": [
"necessary",
"functional",
"analytics",
"performance",
"advertisement",
"other"
],
"type": "string",
"description": "Assigned on the user's machine from @cookiepal-oss/cookie-db."
},
"httpOnly": {
"type": "boolean"
},
"sameSite": {
"enum": [
"Strict",
"Lax",
"None"
],
"type": "string"
}
},
"additionalProperties": false
},
"default": [],
"maxItems": 200
}
},
"additionalProperties": false
},
"tested": {
"type": "boolean",
"description": "True when at least one of accept or reject was pressed."
},
"bannerFound": {
"type": "boolean"
},
"rejectByDefault": {
"type": "boolean"
}
},
"description": "What changed after accept and after reject. Omit it when the plugin did not run the consent action; the check is then an arrival-only reading.",
"additionalProperties": false
},
"cookies": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"domain",
"path",
"expires",
"httpOnly",
"secure",
"category"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[\\x21-\\x3A\\x3C\\x3E-\\x7E]*$",
"maxLength": 128
},
"path": {
"type": "string",
"pattern": "^\\/[\\x21-\\x3A\\x3C-\\x7E]*$",
"maxLength": 128,
"minLength": 1
},
"domain": {
"type": "string",
"pattern": "^\\.?[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1
},
"secure": {
"type": "boolean"
},
"expires": {
"anyOf": [
{
"type": "number",
"maximum": 253402300799
},
{
"type": "null"
}
]
},
"category": {
"enum": [
"necessary",
"functional",
"analytics",
"performance",
"advertisement",
"other"
],
"type": "string",
"description": "Assigned on the user's machine from @cookiepal-oss/cookie-db."
},
"httpOnly": {
"type": "boolean"
},
"sameSite": {
"enum": [
"Strict",
"Lax",
"None"
],
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 200
},
"truncated": {
"type": "boolean",
"description": "True when the skill dropped cookies or hosts to fit the limits."
},
"resultVersion": {
"type": "number",
"const": 2
},
"thirdPartyHosts": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:\\x5B\\x5D\\x2D]+$",
"maxLength": 253,
"minLength": 1
},
"maxItems": 200
}
},
"additionalProperties": false
}