Skip to content

CookiePal

io.cookiepal/cookiepalcookiepal.iostreamable-httpv1.0.0Scanned

Manage your CookiePal cookie banner: domains, the banner tag and style, and cookie scan reports.

17 tools: 2 can delete or cancel things, 11 change things and 4 only read.

Tools: 2 delete, 0 irreversible, 11 write, 4 read.
  • Reads private data · 0
  • Reads text others write · 3
  • Can send data out · 3
  • 8 findings, 7 high

Anlyon alternative

13 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

17 tools

Deletes or cancels 2Claude Code: deny
  • customise_bannerChanges 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.7 findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).

    Findings

    • High

      The input schema at properties.texts.items.properties.banner.properties.title.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

      Matched text

      inputSchema.properties.texts.items.properties.banner.properties.title.pattern: "^[^\x00-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>]*$"

      What this check looks for
    • High

      The input schema at properties.texts.items.properties.banner.properties.description.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

      Matched text

      inputSchema.properties.texts.items.properties.banner.properties.description.pattern: "^[^\x00-\x09\x0B-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>]*$"

      What this check looks for
    • High

      The input schema at properties.texts.items.properties.banner.properties.buttons.properties.accept.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

      Matched text

      inputSchema.properties.texts.items.properties.banner.properties.buttons.properties.accept.pattern: "^[^\x00-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>"]*$"

      What this check looks for
    • High

      The input schema at properties.texts.items.properties.banner.properties.buttons.properties.reject.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

      Matched text

      inputSchema.properties.texts.items.properties.banner.properties.buttons.properties.reject.pattern: "^[^\x00-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>"]*$"

      What this check looks for
    • High

      The input schema at properties.texts.items.properties.banner.properties.buttons.properties.customize.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

      Matched text

      inputSchema.properties.texts.items.properties.banner.properties.buttons.properties.customize.pattern: "^[^\x00-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>"]*$"

      What this check looks for
    • High

      The input schema at properties.texts.items.properties.modal.properties.title.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

      Matched text

      inputSchema.properties.texts.items.properties.modal.properties.title.pattern: "^[^\x00-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>]*$"

      What this check looks for
    • High

      The input schema at properties.texts.items.properties.modal.properties.description.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

      Matched text

      inputSchema.properties.texts.items.properties.modal.properties.description.pattern: "^[^\x00-\x09\x0B-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>]*$"

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • forget_installDeletes the checks CookiePal stored under one install ID.No findings

    Why it is in this group

    • The name "forget_install" says "install": a word for a change.
    • The description's first verb is "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
Changes things 11Claude Code: ask
  • add_domainAdds 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.No findings

    Why it is in this group

    • The name "add_domain" says "add": a word for a change.
    Description, as the server wrote 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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • check_gcm_statusReads 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 …Reads text others writeCan send data out1 finding

    Why it is in this group

    • The name "check_gcm_status" says "status": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    What it can reach

    • untrusted-inputThe input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
    • outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

    Findings

    • Warn

      The server marks "check_gcm_status" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "check_gcm_status" says "status": a word for reading.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • classify_cookiesSets the category for a list of cookies on one of your CookiePal domains, and reports the result for each one.No findings

    Why it is in this group

    • The description's first verb is "set": a word for a change.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • connect_accountConnects 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 org…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • plan_checkStarts a check of one web page for cookies set before consent.Can send data outNo findings

    Why it is in this group

    • The description's first verb is "start": a word for a change.

    What it can reach

    • outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • regenerate_bannerQueues a rebuild of the cookie banner script for one of your CookiePal domains, so it picks up the settings saved for it.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • set_banner_modeSets 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.No findings

    Why it is in this group

    • The name "set_banner_mode" says "set": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • start_scanStarts a crawl of one of your CookiePal domains on the user’s own computer, using the open-source crawl engine.Reads text others writeNo findings

    Why it is in this group

    • The name "start_scan" says "start": a word for a change.

    What it can reach

    • untrusted-inputThe description's first sentence says "crawl": it reads web pages, which anyone can write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • submit_checkStores the result of a local check started with plan_check and returns it with a summary by category.No findings

    Why it is in this group

    • The name "submit_check" says "submit": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • upload_scan_reportStores the result of a local crawl started with start_scan, as a report labelled a local scan.Reads text others writeNo findings

    Why it is in this group

    • The name "upload_scan_report" says "upload": a word for a change.

    What it can reach

    • untrusted-inputThe description's first sentence says "crawl": it reads web pages, which anyone can write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • verify_installationRecords 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.Can send data outNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • outboundThe input takes a URL (input.evidence.url): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Only reads 4Show 4 read-only tools
  • get_install_snippetReturns the CookiePal banner script tag to paste into a site, for one domain in the connected account.No findings

    Why it is in this group

    • The name "get_install_snippet" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_scan_reportReturns the latest cookie report for one of your CookiePal domains, with each cookie’s category, and says whether it came from a local scan.No findings

    Why it is in this group

    • The name "get_scan_report" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_domainsLists 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 whe…No findings

    Why it is in this group

    • The name "list_domains" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • whoamiReports 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 ha…No findings

    Why it is in this group

    • The name "whoami" says "whoami": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data.

Reads private data0
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write3
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out3
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

7 high1 warn
  • The input schema at properties.texts.items.properties.banner.properties.title.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

    Matched text

    inputSchema.properties.texts.items.properties.banner.properties.title.pattern: "^[^\x00-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>]*$"

    What this check looks for
  • The input schema at properties.texts.items.properties.banner.properties.description.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

    Matched text

    inputSchema.properties.texts.items.properties.banner.properties.description.pattern: "^[^\x00-\x09\x0B-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>]*$"

    What this check looks for
  • The input schema at properties.texts.items.properties.banner.properties.buttons.properties.accept.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

    Matched text

    inputSchema.properties.texts.items.properties.banner.properties.buttons.properties.accept.pattern: "^[^\x00-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>"]*$"

    What this check looks for
  • The input schema at properties.texts.items.properties.banner.properties.buttons.properties.reject.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

    Matched text

    inputSchema.properties.texts.items.properties.banner.properties.buttons.properties.reject.pattern: "^[^\x00-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>"]*$"

    What this check looks for
  • The input schema at properties.texts.items.properties.banner.properties.buttons.properties.customize.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

    Matched text

    inputSchema.properties.texts.items.properties.banner.properties.buttons.properties.customize.pattern: "^[^\x00-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>"]*$"

    What this check looks for
  • The input schema at properties.texts.items.properties.modal.properties.title.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

    Matched text

    inputSchema.properties.texts.items.properties.modal.properties.title.pattern: "^[^\x00-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>]*$"

    What this check looks for
Show 2 more findings
  • The input schema at properties.texts.items.properties.modal.properties.description.pattern contains 9 hidden characters: zero-width (U+200B, U+2060, U+2064, U+FEFF) and bidirectional control (U+200F, U+202A, U+202E, U+2066, U+2069).

    Matched text

    inputSchema.properties.texts.items.properties.modal.properties.description.pattern: "^[^\x00-\x09\x0B-\x1F\x7F-\x9F<U+200B>-<U+200F><U+202A>-<U+202E><U+2060>-<U+2064><U+2066>-<U+2069><U+FEFF><>]*$"

    What this check looks for
  • The server marks "check_gcm_status" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "check_gcm_status" says "status": a word for reading.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http cookiepal https://mcp.cookiepal.io/mcp
claude mcp add --transport http cookiepal https://mcp.cookiepal.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__cookiepal__whoami",
      "mcp__cookiepal__list_domains",
      "mcp__cookiepal__get_install_snippet",
      "mcp__cookiepal__get_scan_report"
    ],
    "ask": [
      "mcp__cookiepal__plan_check",
      "mcp__cookiepal__submit_check",
      "mcp__cookiepal__connect_account",
      "mcp__cookiepal__add_domain",
      "mcp__cookiepal__verify_installation",
      "mcp__cookiepal__start_scan",
      "mcp__cookiepal__upload_scan_report",
      "mcp__cookiepal__classify_cookies",
      "mcp__cookiepal__check_gcm_status",
      "mcp__cookiepal__set_banner_mode",
      "mcp__cookiepal__regenerate_banner"
    ],
    "deny": [
      "mcp__cookiepal__forget_install",
      "mcp__cookiepal__customise_banner"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as cookiepal. Review it before you use it.

Capability tags behind 5 rules
  • mcp__cookiepal__plan_check outbound
  • mcp__cookiepal__verify_installation outbound
  • mcp__cookiepal__start_scan untrusted-input
  • mcp__cookiepal__upload_scan_report untrusted-input
  • mcp__cookiepal__check_gcm_status untrusted-input, outbound

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/io.cookiepal/cookiepal/verify?hash=6b92943ceda4d6ac9be89ad373ff13bb44b9830162cf4d8f19f6dc247d1c4c8d" | jq -e '.changed == false'

Pinned hash 6b92943ceda4, from Nov 4, 2026, 17:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.cookiepal/cookiepal/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.cookiepal/cookiepal
[![anlyon.dev](https://anlyon.dev/badge/io.cookiepal/cookiepal.svg)](https://anlyon.dev/servers/io.cookiepal/cookiepal)

Source: MCP Registry. Synced Nov 4, 2026, 17:17 UTC.