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.
- 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).
What this check looks forMatched 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><>]*$"
- 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).
What this check looks forMatched 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><>]*$"
- 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).
What this check looks forMatched 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><>"]*$"
- 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).
What this check looks forMatched 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><>"]*$"
- 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).
What this check looks forMatched 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><>"]*$"
- 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).
What this check looks forMatched 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><>]*$"
- 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).
What this check looks forMatched 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><>]*$"
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.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "check_gcm_status" says "status": a word for reading.
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.
- Highcustomise_banner
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).
What this check looks forMatched 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><>]*$"
- Highcustomise_banner
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).
What this check looks forMatched 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><>]*$"
- Highcustomise_banner
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).
What this check looks forMatched 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><>"]*$"
- Highcustomise_banner
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).
What this check looks forMatched 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><>"]*$"
- Highcustomise_banner
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).
What this check looks forMatched 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><>"]*$"
- Highcustomise_banner
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).
What this check looks forMatched 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><>]*$"
Show 2 more findingsShow fewer
- Highcustomise_banner
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).
What this check looks forMatched 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><>]*$"
- Warncheck_gcm_status
The server marks "check_gcm_status" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "check_gcm_status" says "status": a word for reading.
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/mcpclaude mcp add --transport http cookiepal https://mcp.cookiepal.io/mcpRun 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.
{
"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.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/io.cookiepal/cookiepal)Source: MCP Registry. Synced Nov 4, 2026, 17:17 UTC.