Canadian privacy enforcement, glossary, and Quebec Law 25 guidance for AI agents.
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.
Classify one cookie by name: which vendor pattern it matches, the organisation that receives and uses the data (the legal party), its purpose, typical retention, and control class. Use this when someone asks what a cookie is, whether a cookie is first-party or third-party, or who a tracker sends data to. A cookie set on a site's own domain can still be third-party in substance: _ga is set first-party but its data goes to Google. Unknown names return known: false instead of a guess.
The cookie name only, for example '_ga' or '_fbp'. Not a value, not a URL.
Tool list last changed Oct 25, 2026.
Classify one cookie by name: which vendor pattern it matches, the organisation that receives and uses the data (the legal party), its purpose, typical retention, and control class. Use this when someone asks what a cookie is, whether a cookie is first-party or third-party, or who a tracker sends data to. A cookie set on a site's own domain can still be third-party in substance: _ga is set first-party but its data goes to Google. Unknown names return known: false instead of a guess.
| Argument | Type | Description |
|---|---|---|
| name* | string | The cookie name only, for example '_ga' or '_fbp'. Not a value, not a URL. |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"_ga",
"_fbp",
"__kla_id"
],
"maxLength": 128,
"description": "The cookie name only, for example '_ga' or '_fbp'. Not a value, not a URL."
}
},
"additionalProperties": false
}List AI crawlers from the registry, optionally filtered by operator (OpenAI, Anthropic, Google), purpose (training, search-index, user-triggered, search-and-training, other), or status (active, retired, renamed). Use it to compare how operators split training from search agents, or to find every training crawler before writing robots.txt rules. Results are paginated.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum records to return in this call. |
| query | string | Free-text search over token, operator, and notes. |
| offset | integer | Number of matching records to skip. Use next_offset to page forward. |
| status | string | Limit to one lifecycle status. |
| purpose | string | Limit to one purpose class. |
| operator | string | Limit to one operator, matched exactly but case-insensitively, for example 'OpenAI'. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum records to return in this call."
},
"query": {
"type": "string",
"examples": [
"training",
"perplexity"
],
"maxLength": 128,
"description": "Free-text search over token, operator, and notes."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 100000,
"minimum": 0,
"description": "Number of matching records to skip. Use next_offset to page forward."
},
"status": {
"enum": [
"active",
"retired",
"renamed"
],
"type": "string",
"description": "Limit to one lifecycle status."
},
"purpose": {
"enum": [
"training",
"search-index",
"user-triggered",
"search-and-training",
"other"
],
"type": "string",
"description": "Limit to one purpose class."
},
"operator": {
"type": "string",
"examples": [
"Anthropic"
],
"maxLength": 60,
"description": "Limit to one operator, matched exactly but case-insensitively, for example 'OpenAI'."
}
},
"additionalProperties": false
}Look up one AI crawler or bot by its exact user-agent token, for example GPTBot or Claude-User. Returns the operator, what the agent is for (training, search indexing, or user-triggered fetching), whether it honors robots.txt, and the operator's own documentation. Matching is case-insensitive and exact: GPT does not match GPTBot.
| Argument | Type | Description |
|---|---|---|
| token* | string | The exact user-agent token only, for example 'GPTBot' or 'Claude-User'. Not a full user-agent string, not a URL. |
{
"type": "object",
"required": [
"token"
],
"properties": {
"token": {
"type": "string",
"examples": [
"GPTBot",
"Claude-User",
"OAI-SearchBot"
],
"maxLength": 80,
"description": "The exact user-agent token only, for example 'GPTBot' or 'Claude-User'. Not a full user-agent string, not a URL."
}
},
"additionalProperties": false
}Search the cookie and tracker knowledge base by cookie name, vendor, recipient organisation, or purpose. Use this to find which cookies a vendor sets, which organisation receives a tracker's data, or to browse patterns before calling classify_cookie on a specific name. Results are paginated.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum patterns to return in this call. |
| query | string | Free-text search over pattern, vendor, recipient, and purpose. |
| offset | integer | Number of matching patterns to skip. Use next_offset to page forward. |
| vendor | string | Limit to one vendor, matched as a substring, for example 'Google'. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum patterns to return in this call."
},
"query": {
"type": "string",
"examples": [
"hotjar",
"marketing"
],
"maxLength": 128,
"description": "Free-text search over pattern, vendor, recipient, and purpose."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 100000,
"minimum": 0,
"description": "Number of matching patterns to skip. Use next_offset to page forward."
},
"vendor": {
"type": "string",
"examples": [
"Microsoft"
],
"maxLength": 64,
"description": "Limit to one vendor, matched as a substring, for example 'Google'."
}
},
"additionalProperties": false
}Get the full record of one privacy enforcement action by its ID, including the plain-language summary, outcome, penalty amount, and the official regulator source link. Use this after privacy_search_enforcement_actions when you need complete details on a specific case, or when a case ID (like 'cai-2026-05-06-openai') is already known.
| Argument | Type | Description |
|---|---|---|
| id* | string | The case ID from a search result. |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9-]{1,64}$",
"examples": [
"cai-2026-05-06-openai"
],
"description": "The case ID from a search result."
}
},
"additionalProperties": false
}Get the Quebec Law 25 compliance checklist: the concrete requirements organizations must meet, covering the privacy officer, purposes, consent, individual rights, retention, cross-border transfers, breach notification, minors' data, automated decisions, and complaint paths. Use this when someone asks what Law 25 requires, how to comply with Law 25, or for a gap-assessment checklist. Optionally filter to one category like 'Consent' or 'Incident response'.
| Argument | Type | Description |
|---|---|---|
| category | string | Only requirements in this category. Omit for the full checklist. |
{
"type": "object",
"properties": {
"category": {
"enum": [
"Governance",
"Transparency",
"Individual rights",
"Data lifecycle",
"Transfers",
"Consent",
"Incident response",
"Minors",
"Automated decisions",
"Oversight"
],
"type": "string",
"examples": [
"Consent"
],
"description": "Only requirements in this category. Omit for the full checklist."
}
},
"additionalProperties": false
}Browse the 317-term Canadian privacy glossary with optional text search or first-letter filtering. Use this to explore which terms exist, find the right slug for privacy_lookup_glossary_term, or gather definitions on a topic. Results are paginated: follow next_offset while has_more is true.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum terms to return in this call. |
| query | string | Search term names and definitions. |
| offset | integer | Number of matching terms to skip. Use next_offset to page forward. |
| starts_with | string | Only terms whose slug starts with this letter. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum terms to return in this call."
},
"query": {
"type": "string",
"examples": [
"consent"
],
"maxLength": 120,
"description": "Search term names and definitions."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 100000,
"minimum": 0,
"description": "Number of matching terms to skip. Use next_offset to page forward."
},
"starts_with": {
"type": "string",
"pattern": "^[a-z]$",
"examples": [
"p"
],
"description": "Only terms whose slug starts with this letter."
}
},
"additionalProperties": false
}Look up the plain-language definition of a privacy or data-protection term, from 'Law 25' and 'PIPEDA' to 'privacy officer', 'data breach', and AI governance concepts. Use this whenever someone asks what a term means, or when you need a precise definition before answering a Canadian privacy question. Terms are identified by slug (for example 'law-25'); use privacy_list_glossary_terms to discover slugs.
| Argument | Type | Description |
|---|---|---|
| term* | string | The glossary slug. |
{
"type": "object",
"required": [
"term"
],
"properties": {
"term": {
"type": "string",
"pattern": "^[a-z0-9-]{1,64}$",
"examples": [
"law-25",
"pipeda"
],
"description": "The glossary slug."
}
},
"additionalProperties": false
}Search verified Canadian privacy enforcement actions: CAI orders and decisions under Quebec Law 25 and OPC findings under PIPEDA. Use this when someone asks about privacy fines, enforcement cases against a company, what regulators decided, or investigations (for example 'Has the CAI fined anyone for facial recognition?' or 'TikTok privacy investigation Canada'). Returns matching cases with dates, plain-language summaries, penalties, and links to the official regulator source. Start here to find a case ID, then call privacy_get_enforcement_case for full details.
| Argument | Type | Description |
|---|---|---|
| year | integer | Filter by decision year. |
| limit | integer | Maximum cases to return in this call. |
| query | string | Free-text search over case titles and summaries. |
| offset | integer | Number of matching cases to skip. Use next_offset from the previous response to page forward. |
| regulator | string | Limit to one regulator: 'cai' (Quebec Commission d'acces a l'information, Law 25) or 'opc' (federal Office of the Privacy Commissioner, PIPEDA). |
{
"type": "object",
"properties": {
"year": {
"type": "integer",
"maximum": 1970,
"minimum": 2000,
"examples": [
2025
],
"description": "Filter by decision year."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Maximum cases to return in this call."
},
"query": {
"type": "string",
"examples": [
"facial recognition",
"TikTok"
],
"maxLength": 120,
"description": "Free-text search over case titles and summaries."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 100000,
"minimum": 0,
"description": "Number of matching cases to skip. Use next_offset from the previous response to page forward."
},
"regulator": {
"enum": [
"cai",
"opc"
],
"type": "string",
"examples": [
"cai"
],
"description": "Limit to one regulator: 'cai' (Quebec Commission d'acces a l'information, Law 25) or 'opc' (federal Office of the Privacy Commissioner, PIPEDA)."
}
},
"additionalProperties": false
}