Server definition
- Hash
- sha256:6d0bc06cadf8ad0631ad794d7178c8938d4d68bee545c21d7d63a03337deca81
- What it is
- What a remote MCP server returned when asked what it offers: 5 tools
The blob, as servednamed by its sha256
{
"instructions": "movahedi.ca Privacy Data gives you verified Canadian privacy information: enforcement actions from the Quebec CAI and the federal OPC, a plain-language glossary of 260+ privacy terms, and the Quebec Law 25 compliance checklist. Use these tools whenever a user asks about Canadian privacy law, enforcement cases or fines, the meaning of a privacy term, or Law 25 compliance requirements. All tools are read-only; they never change anything.",
"tools": [
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "The case ID from a search result.",
"examples": [
"cai-2026-05-06-openai"
],
"pattern": "^[a-z0-9-]{1,64}$",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "privacy_get_enforcement_case",
"outputSchema": {
"additionalProperties": false,
"properties": {
"case": {
"properties": {
"date": {
"type": "string"
},
"id": {
"type": "string"
},
"penalty": {
"type": [
"number",
"null"
]
},
"regulator": {
"type": "string"
},
"source_url": {
"type": "string"
},
"summary": {
"type": "string"
},
"title": {
"type": "string"
},
"type": {
"type": "string"
}
},
"required": [
"id",
"title",
"regulator",
"date",
"summary",
"source_url"
],
"type": "object"
}
},
"required": [
"case"
],
"type": "object"
}
},
{
"description": "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'.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"category": {
"description": "Only requirements in this category. Omit for the full checklist.",
"enum": [
"Governance",
"Transparency",
"Individual rights",
"Data lifecycle",
"Transfers",
"Consent",
"Incident response",
"Minors",
"Automated decisions",
"Oversight"
],
"examples": [
"Consent"
],
"type": "string"
}
},
"type": "object"
},
"name": "privacy_law25_requirements",
"outputSchema": {
"additionalProperties": false,
"properties": {
"categories": {
"description": "All available categories for the 'category' filter.",
"items": {
"type": "string"
},
"type": "array"
},
"requirements": {
"description": "Law 25 requirements.",
"items": {
"properties": {
"category": {
"type": "string"
},
"guidance": {
"type": "string"
},
"id": {
"type": "string"
},
"requirement": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"id",
"category",
"title",
"requirement",
"guidance"
],
"type": "object"
},
"type": "array"
},
"total_count": {
"description": "Number of requirements returned.",
"type": "integer"
}
},
"required": [
"requirements",
"categories",
"total_count"
],
"type": "object"
}
},
{
"description": "Browse the 260+ 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 20,
"description": "Maximum terms to return in this call.",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Number of matching terms to skip. Use next_offset to page forward.",
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
"query": {
"description": "Search term names and definitions.",
"examples": [
"consent"
],
"maxLength": 120,
"type": "string"
},
"starts_with": {
"description": "Only terms whose slug starts with this letter.",
"examples": [
"p"
],
"pattern": "^[a-z]$",
"type": "string"
}
},
"type": "object"
},
"name": "privacy_list_glossary_terms",
"outputSchema": {
"additionalProperties": false,
"properties": {
"has_more": {
"description": "True when more results exist beyond this page.",
"type": "boolean"
},
"next_offset": {
"description": "Pass as 'offset' in the next call to continue paging. Null when has_more is false.",
"type": [
"integer",
"null"
]
},
"terms": {
"description": "Matching glossary terms.",
"items": {
"properties": {
"definition": {
"type": "string"
},
"related": {
"items": {
"type": "string"
},
"type": "array"
},
"slug": {
"type": "string"
},
"term": {
"type": "string"
},
"updated": {
"type": "string"
}
},
"required": [
"term",
"slug",
"definition"
],
"type": "object"
},
"type": "array"
},
"total_count": {
"description": "Total number of matches across all pages.",
"type": "integer"
},
"truncated": {
"description": "True when results were shortened to fit the 50 KB output cap. Use the paginated REST API for the full set.",
"type": "boolean"
}
},
"required": [
"terms",
"total_count",
"has_more",
"next_offset",
"truncated"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"term": {
"description": "The glossary slug.",
"examples": [
"law-25",
"pipeda"
],
"pattern": "^[a-z0-9-]{1,64}$",
"type": "string"
}
},
"required": [
"term"
],
"type": "object"
},
"name": "privacy_lookup_glossary_term",
"outputSchema": {
"additionalProperties": false,
"properties": {
"term": {
"properties": {
"definition": {
"type": "string"
},
"related": {
"items": {
"type": "string"
},
"type": "array"
},
"slug": {
"type": "string"
},
"term": {
"type": "string"
},
"updated": {
"type": "string"
}
},
"required": [
"term",
"slug",
"definition"
],
"type": "object"
}
},
"required": [
"term"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 10,
"description": "Maximum cases to return in this call.",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Number of matching cases to skip. Use next_offset from the previous response to page forward.",
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
"query": {
"description": "Free-text search over case titles and summaries.",
"examples": [
"facial recognition",
"TikTok"
],
"maxLength": 120,
"type": "string"
},
"regulator": {
"description": "Limit to one regulator: 'cai' (Quebec Commission d'acces a l'information, Law 25) or 'opc' (federal Office of the Privacy Commissioner, PIPEDA).",
"enum": [
"cai",
"opc"
],
"examples": [
"cai"
],
"type": "string"
},
"year": {
"description": "Filter by decision year.",
"examples": [
2025
],
"maximum": 1970,
"minimum": 2000,
"type": "integer"
}
},
"type": "object"
},
"name": "privacy_search_enforcement_actions",
"outputSchema": {
"additionalProperties": false,
"properties": {
"has_more": {
"description": "True when more results exist beyond this page.",
"type": "boolean"
},
"next_offset": {
"description": "Pass as 'offset' in the next call to continue paging. Null when has_more is false.",
"type": [
"integer",
"null"
]
},
"results": {
"description": "Matching enforcement actions.",
"items": {
"properties": {
"date": {
"type": "string"
},
"id": {
"type": "string"
},
"penalty": {
"type": [
"number",
"null"
]
},
"regulator": {
"type": "string"
},
"source_url": {
"type": "string"
},
"summary": {
"type": "string"
},
"title": {
"type": "string"
},
"type": {
"type": "string"
}
},
"required": [
"id",
"title",
"regulator",
"date",
"summary",
"source_url"
],
"type": "object"
},
"type": "array"
},
"total_count": {
"description": "Total number of matches across all pages.",
"type": "integer"
},
"truncated": {
"description": "True when results were shortened to fit the 50 KB output cap. Use the paginated REST API for the full set.",
"type": "boolean"
}
},
"required": [
"results",
"total_count",
"has_more",
"next_offset",
"truncated"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:6d0bc06cadf8ad0631ad794d7178c8938d4d68bee545c21d7d63a03337deca81 | sha256sum