Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,534Letters: 13Defects: 1,322counted 4 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:6d0bc06cadf8ad0631ad794d7178c8938d4d68bee545c21d7d63a03337deca81 | sha256sum