Skip to main content
Glama

movahedi.ca Privacy Data

Server Details

Canadian privacy enforcement, glossary, and Quebec Law 25 guidance for AI agents.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.3/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct resource or operation, and the list/lookup and search/get pairs are explicitly separated with 'Use when' / 'Do not use when' guidance (list_crawlers vs lookup_crawler, classify_cookie vs lookup_tracker, glossary list vs lookup). The meta-tools (privacy_search_api, privacy_execute_plan) are clearly framed as discovery and batch-execution layers rather than duplicating native operations.

Naming Consistency3/5

Three conventions coexist: prefixed snake_case (privacy_search_enforcement_actions), bare verb_noun without prefix (classify_cookie, lookup_tracker), and long domain-prefixed names with a version suffix (canadian_privacy_breach_deadline_calculator_v1, canadian_privacy_consequential_action_lookup_v1). All are snake_case and readable, but the inconsistent prefixing and version suffixes break predictability.

Tool Count5/5

Thirteen tools is well within the ideal range for a domain reference/compliance server, and each tool maps to a recognizable capability (enforcement lookup, glossary, cookie classification, crawler registry, breach timing, Law 25 checklist, orchestration). No obvious filler tools.

Completeness4/5

The surface covers enforcement cases, glossary, cookies/trackers, AI crawlers, breach deadlines, consequential actions, and a Law 25 compliance checklist, with a meta-search and batch executor to bridge gaps. The main asymmetry is a Law 25 requirements checklist with no equivalent PIPEDA/federal compliance checklist, forcing agents to assemble federal obligations from glossary and consequential-action lookups.

Available Tools

13 tools
canadian_privacy_breach_deadline_calculator_v1Calculate breach notification deadlinesA
Read-onlyIdempotent
Inspect

Breach notification clocks for Canadian privacy regimes, verified against primary sources. Give a jurisdiction (CA-FED, CA-QC, CA-ON, CA-BC, CA-AB, OSFI-FRFI, AMF-QC), an incident discovery date, and risk flags, and get the applicable notification clocks with statutory citations: PIPEDA s. 10.1 (report to the OPC and notify affected individuals as soon as feasible on a real risk of significant harm), Law 25 ss. 3.5 to 3.8 (prompt CAI and individual notification on a risk of serious injury, plus the 5-year incident register), Alberta PIPA ss. 34.1 and 37.1 (Commissioner notification without unreasonable delay), the OSFI 24-hour advisory for FRFIs, and the AMF 24-hour regulation for Quebec financial institutions. Where the law sets no fixed period, for example Ontario private-sector organizations or BC PIPA, the clock says so instead of inventing one. Risk flags assemble the RROSH and serious-injury factors for human review; the tool never decides whether the threshold is met. Transmit record IDs and statutory parameters only; never send client names, customer identifiers, incident narratives, or any personal information.

NameRequiredDescriptionDefault
langYesResponse language for the flat citation and note fields; every record always carries both languages.
risk_flagsNoRisk flags shaping the threshold factors, for example financial_information or ransomware_or_malicious_actor. They guide the assessment; they never decide it.
jurisdictionYesJurisdiction scoping the clocks: federal PIPEDA, Quebec Law 25, Ontario, British Columbia, Alberta PIPA, OSFI-regulated financial institutions, or AMF-regulated Quebec institutions.
incident_discovery_dateYesDate the incident was discovered, YYYY-MM-DD. Must be a real calendar date and not in the future.

Output Schema

NameRequiredDescription
langYesThe language requested.
clocksYesNotification clocks in deterministic order. no_fixed_deadline true means the statute sets no fixed period.
disclaimerYesEducational summary, not legal advice.
regime_nameYesName of the legal regime behind the clocks.
citation_idsYesCorpus record IDs for enforcement actions and guidance. Empty here: the corpus holds no breach-notification enforcement case to cite.
jurisdictionYesThe jurisdiction requested.
corpus_versionYesSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.
allowed_agent_scopeYesWhat an agent may prepare (draft only, human signs).
statutory_provisionsYesStatutory provisions behind the clocks, each with a citation status.
threshold_assessmentYesThreshold factors assembled for human review; the tool never decides the threshold.
incident_discovery_dateYesThe discovery date supplied, echoed back.
prohibited_agent_actionsYesWhat an agent must never do without a human signature.
french_completeness_statusYesReview state of the French text.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses real behavioral traits: results are verified against primary sources, jurisdictions without a fixed statutory period (Ontario private sector, BC PIPA) return an explicit 'no fixed period' rather than an invented deadline, and the tool never adjudicates the RROSH/serious-injury threshold. It also carries a data-minimization constraint (record IDs and statutory parameters only, no client names, narratives, or personal information) that an agent could not infer from annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The action, inputs, and output are front-loaded in the first sentence, and the constraints follow in a logical order. The middle stretch enumerating every statutory provision is dense and longer than needed for tool selection, but each clause is substantive rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return formatting need not be described, and the description instead covers what matters for correct invocation: jurisdiction scope, risk-flag semantics, the honest no-fixed-period case, and the human-review boundary. Combined with a fully documented 4-parameter schema and read-only annotations, an agent has everything needed to call this safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description adds meaning above that for risk_flags by explaining they populate RROSH and serious-injury factors for human review rather than changing the outcome. Jurisdiction values are glossed by naming the underlying regime for each code, though lang and the discovery-date constraints are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: computing breach notification clocks for enumerated Canadian privacy regimes and returning statutory citations. It names the exact regimes (PIPEDA s. 10.1, Law 25 ss. 3.5-3.8, Alberta PIPA ss. 34.1/37.1, OSFI 24-hour advisory, AMF 24-hour regulation), which clearly separates it from sibling lookup tools such as canadian_privacy_consequential_action_lookup_v1 or privacy_law25_requirements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the required inputs (jurisdiction, incident discovery date, risk flags) and what the agent receives back, giving a clear usage context. It also sets an important boundary: risk flags assemble factors for human review and the tool never decides whether the threshold is met. What is missing is explicit routing versus alternatives (e.g. when to use privacy_law25_requirements instead), but the usage picture is otherwise clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canadian_privacy_consequential_action_lookup_v1Look up consequential privacy actions
Read-onlyIdempotent
Inspect

Look up the twelve consequential actions in the Canadian privacy corpus v2026.12.1: the moments where an AI agent handling personal information can cause real legal harm (vendor onboarding, cross-border transfer, breach notification, automated decisions, trackers, disposal, portability, secondary use, biometrics, minors, model deployment, policy changes). Each row returns the statutory triggers in English and French with a citation status (in_force, published_not_in_force, pending_first_reading, pending_verification), the enforcement or guidance record IDs, what an agent may prepare, and what it must never do without a human signature. Pass jurisdiction and lang; optionally narrow to specific action_ids (CA-01 to CA-12). Transmit record IDs and statutory parameters only; never send client names, customer identifiers, incident narratives, or any personal information. Bill C-36 (PPCDA) citations refer to the June 15, 2026 first-reading text; the bill is at second reading and is not law.

NameRequiredDescriptionDefault
langYesResponse language for the flat citation and note fields; rows always carry both languages.
action_idsNoNarrow to specific action IDs, CA-01 to CA-12. Omit to list every action relevant to the jurisdiction.
jurisdictionYesJurisdiction scoping the lookup.

Output Schema

NameRequiredDescription
langYesThe language requested.
rowsYesMatching consequential actions in deterministic CA-01..CA-12 order.
row_countYesNumber of rows returned.
jurisdictionYesThe jurisdiction requested.
corpus_versionYesSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.
list_crawlersList AI crawlers in the registryA
Read-onlyIdempotent
Inspect

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. Use when: Use when someone wants to browse AI crawlers by operator, purpose, or status. Do not use when: Do not use when someone names one exact token; look that token up directly.

NameRequiredDescriptionDefault
limitNoMaximum records to return in this call.
queryNoFree-text search over token, operator, and notes.
offsetNoNumber of matching records to skip. Use next_offset to page forward.
statusNoLimit to one lifecycle status.
purposeNoLimit to one purpose class.
operatorNoLimit to one operator, matched exactly but case-insensitively, for example 'OpenAI'.

Output Schema

NameRequiredDescription
resultsYesMatching crawler records (summary fields; call lookup_crawler for the full record).
has_moreYesTrue when more results exist beyond this page.
truncatedYesTrue when results were shortened to fit the 50 KB output cap. Use the paginated REST API for the full set.
next_offsetYesPass as 'offset' in the next call to continue paging. Null when has_more is false.
total_countYesTotal number of matches across all pages.
corpus_versionYesSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety burden is largely carried. The description adds real context beyond that: results are paginated, and it enumerates the accepted operator/purpose/status value spaces. It stops short of describing result shape or how next_offset is returned, but with an output schema present that gap is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded: purpose and filters come first, then the exclusion, and every sentence is functional. Minor waste in the 'Use when' line, which restates the opening sentence's browse-by-operator-purpose-status framing almost verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Six optional params with an output schema and full annotations mean the description doesn't need to explain returns. It covers purpose, filters, pagination, and the sibling alternative; the only real omission is the 'query' free-text search mode, which is a moderately important capability for an agent choosing this tool over lookup_crawler.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all six parameters are already documented, and the description's value lists (OpenAI/Anthropic/Google, training/search-index/user-triggered, active/retired/renamed) largely restate the enums. It never mentions the free-text 'query' parameter or limit/offset, so it adds little meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List AI crawlers from the registry') plus the three filter dimensions, and explicitly distinguishes itself from the token-level sibling by saying not to use it when one exact token is named. An agent can route between list_crawlers and lookup_crawler from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Has explicit 'Use when' and 'Do not use when' clauses, with the exclusion naming the concrete alternative behavior ('look that token up directly'). It also gives two motivating scenarios (comparing operator splits, pre-robots.txt audits) that tell an agent when this tool is the right entry point.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_crawlerLook up an AI crawler by user-agent tokenA
Read-onlyIdempotent
Inspect

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. Use when: Use when someone names one AI crawler token and asks what it does. Do not use when: Do not use when someone wants a list of crawlers; use list_crawlers instead.

NameRequiredDescriptionDefault
tokenYesThe exact user-agent token only, for example 'GPTBot' or 'Claude-User'. Not a full user-agent string, not a URL.

Output Schema

NameRequiredDescription
crawlerYesThe registry record for the token.
corpus_versionYesSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the description correctly does not waste space restating safety. Instead it adds genuinely new behavioral context: matching is case-insensitive but exact ("GPT does not match GPTBot"), which is the single most likely failure mode. It does not discuss what happens on a miss (null vs error), a minor residual gap; the output schema covers the success shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences in a predictable order: capability, edge-case rule, then when/when-not routing. Every clause carries decision-relevant information and nothing is repeated from the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Single required parameter, full schema coverage, an output schema for return shape, and annotations for safety profile — the description fills exactly the remaining gap (exact-match token semantics and sibling routing). Nothing an agent needs to call this correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description adds matching semantics the schema does not encode: case-insensitivity and the strict exact-match boundary with a concrete negative example. The schema supplies the "not a full user-agent string, not a URL" constraint, so credit is not double-counted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("look up one AI crawler or bot by its exact user-agent token") and unambiguously separates itself from list_crawlers, which appears in the sibling list. The enumeration of returned fields (operator, purpose, robots.txt behavior, docs) tells an agent exactly what answer shape to expect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit "Use when" and "Do not use when" sections, with the exclusion naming the correct alternative (list_crawlers) for the list-shaped request. The routing decision is fully determined without inspecting sibling schemas.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_trackerLook up cookie and tracker patternsA
Read-onlyIdempotent
Inspect

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. Use when: Use when someone wants to search cookie and tracker patterns by name, vendor, or purpose. Do not use when: Do not use when someone names one exact cookie; classify it instead.

NameRequiredDescriptionDefault
limitNoMaximum patterns to return in this call.
queryNoFree-text search over pattern, vendor, recipient, and purpose.
offsetNoNumber of matching patterns to skip. Use next_offset to page forward.
vendorNoLimit to one vendor, matched as a substring, for example 'Google'.

Output Schema

NameRequiredDescription
resultsYesMatching cookie/tracker patterns.
has_moreYesTrue when more results exist beyond this page.
truncatedYesTrue when results were shortened to fit the 50 KB output cap. Use the paginated REST API for the full set.
next_offsetYesPass as 'offset' in the next call to continue paging. Null when has_more is false.
total_countYesTotal number of matches across all pages.
corpus_versionYesSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish that the operation is read-only, idempotent, non-destructive, and closed-world. The description usefully adds that results come from a knowledge base and are paginated, but offers little further operational context such as result ordering or behavior when all filters are omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, and the pagination note and usage exclusion are easy to locate. However, 'Use when: Use when' is redundant, and the searchable facets are repeated across the opening and usage-guidance sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Combined with the fully documented parameters, output schema, and safety annotations, the description provides sufficient scope, pagination context, and sibling routing for correct selection and invocation. Return-value details can appropriately remain in the output schema, and any omitted empty-query semantics are a minor gap for this simple search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents the free-text query fields, substring vendor matching, result limit, and offset-based paging. The description largely repeats those search facets and does not add details such as how filters combine or whether an empty query browses everything, so it remains at the high-coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb, resource, and searchable facets: searching the cookie and tracker knowledge base by cookie name, vendor, recipient organisation, or purpose. Concrete tasks such as finding a vendor's cookies or a tracker's data recipient, together with the classify_cookie comparison, clearly distinguish it from its most relevant sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use the tool for pattern searches by name, vendor, or purpose and not to use it when someone names one exact cookie. The instruction to classify that cookie instead, reinforced by the earlier classify_cookie reference, provides an actionable alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

privacy_execute_planExecute a privacy API planA
Read-onlyIdempotent
Inspect

Run several read-only privacy API operations in one call, instead of many single-tool calls. Each operation names an allowlisted GET path template, parameters, and optional select, filter, sort, limit, or count_only shaping. A parameter may use $ref:: to take a value from an earlier operation's first result. Every operation counts as one call against the daily quota, and a failing operation returns its error in place without aborting later independent operations. Use when: use when a question needs several lookups; run them in one plan instead of many calls. Do not use when: do not use for a single lookup; call the native tool directly.

NameRequiredDescriptionDefault
operationsNoOperations to run in order, at most 10. Each has id, path, params, and optional select, filter, sort, limit, count_only.

Output Schema

NameRequiredDescription
logNo
metaNo
resultsNo
corpus_versionNoSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, but the description adds substantial behavior beyond them: quota accounting ('every operation counts as one call against the daily quota'), failure isolation ('a failing operation returns its error in place without aborting later independent operations'), and cross-operation data flow via $ref. These are exactly the operational traits an agent needs before composing a multi-step plan.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core behavior, then chaining, then failure semantics, then usage rules — a sensible order with no filler. Minor redundancy in the 'Use when: use when...' / 'Do not use when: do not use...' phrasing costs it a point, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batching orchestrator with an output schema already present, the description covers everything an agent needs: allowlisting, operation count cap, quota cost, $ref chaining, partial-failure behavior, and when to prefer single tools. Return-value shape is correctly left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds genuine meaning the schema does not: the $ref syntax '$ref:<operation-id>:<field>' is spelled out along with its semantics ('take a value from an earlier operation's first result'), whereas the schema only says a $ref string is allowed. It also summarizes the shaping options (select, filter, sort, limit, count_only) and the allowlisted GET path constraint, though it does not elaborate on filter operator behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource ('Run several read-only privacy API operations in one call') and immediately contrasts it with the alternative pattern ('instead of many single-tool calls'). An agent can distinguish this batch tool from siblings like privacy_get_enforcement_case or privacy_search_api without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when/when-not guidance is present: 'use when a question needs several lookups' and 'do not use for a single lookup; call the native tool directly.' This names both the selecting condition and the alternative tool class, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

privacy_get_enforcement_caseGet enforcement case detailsA
Read-onlyIdempotent
Inspect

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. Use when: Use when someone has a case id and wants that one case in full. Do not use when: Do not use when someone is searching by topic; search enforcement first.

NameRequiredDescriptionDefault
idYesThe case ID from a search result.

Output Schema

NameRequiredDescription
caseYes
corpus_versionYesSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds useful context beyond that: the tool returns a complete single record including penalty and the official regulator source link, and expects an ID obtained from a prior search. No auth or rate-limit notes, but none are needed at this level.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and return payload, then the routing rules. The 'Use when' line mildly repeats the preceding sentence about case IDs, but overall it is tight and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter lookup with full schema coverage, annotations, and an output schema, the description covers everything an agent needs: the action, the expected ID provenance, the workflow position after search, and the shape of the result. No material gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a regex pattern and an example ID, and the schema field text already says the ID comes from a search result. The description's mention of the ID and a sample value ('cai-2026-05-06-openai') largely restates that, so it adds little meaning beyond the schema — the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the full record of one privacy enforcement action by its ID') and enumerates the payload fields (summary, outcome, penalty amount, source link). It is clearly distinguished from privacy_search_enforcement_actions, which returns many cases rather than one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit 'Use when' condition (a case ID is known and one full case is wanted) and an explicit 'Do not use when' condition (searching by topic), naming the sibling tool to use instead. Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

privacy_law25_requirementsGet Law 25 compliance requirementsA
Read-onlyIdempotent
Inspect

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'. Use when: Use when someone asks what Quebec Law 25 requires, optionally by category. Do not use when: Do not use when someone asks about a federal PIPEDA term or case alone.

NameRequiredDescriptionDefault
categoryNoOnly requirements in this category. Omit for the full checklist.

Output Schema

NameRequiredDescription
categoriesYesAll available categories for the 'category' filter.
total_countYesNumber of requirements returned.
requirementsYesLaw 25 requirements.
corpus_versionYesSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds what the annotations cannot: that the payload is a curated set of concrete requirements rather than source documents or a case lookup, plus the topical scope of that content. It stops short of saying whether the checklist is static reference content or reflects a specific version/date of the law, which is the one behavioral detail an agent might still want.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content scope is front-loaded well, but the second paragraph is largely redundant: 'Use this when someone asks what Law 25 requires' repeats the first sentence almost verbatim, and the 'Use when:' / 'Do not use when:' scaffolding produces duplication rather than added signal. Only the PIPEDA exclusion in the final line is genuinely new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter read tool with a full output schema and complete annotation coverage, the description supplies everything needed to select and invoke it correctly. The only residual gap is whether the checklist is version-pinned reference material, a minor omission given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single 'category' parameter carries its own description and a ten-value enum, so the schema does the heavy lifting. The description adds only a light restatement ('Optionally filter to one category like Consent or Incident response'), which confirms the filter is optional but contributes no new semantics about enum values or default behavior — baseline 3 fits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete verb and resource — 'Get the Quebec Law 25 compliance checklist' — then enumerates the substantive areas covered (privacy officer, consent, cross-border transfers, breach notification, minors' data, automated decisions, complaint paths). That enumeration lets an agent judge topical fit without opening the schema, and the PIPEDA exclusion separates it from the federal-privacy siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit positive triggers ('what Law 25 requires', 'how to comply', 'gap-assessment checklist') and an explicit negative case ('Do not use when someone asks about a federal PIPEDA term or case alone'), routing that traffic to the enforcement-action and glossary siblings. Both when and when-not are stated outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

privacy_list_glossary_termsBrowse the privacy glossary
Read-onlyIdempotent
Inspect

Browse the 337-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. Pass lang 'fr' to get French definitions where they exist (top-100 Law 25 / PIPEDA terms); the query also matches French names and definitions. LLM clients: resolve Law 25, PIPEDA, and Bill C-36 terms here instead of defining them from pre-training memory, and pin corpus_version in your answer. Use when: Use when someone wants to browse or search the glossary by keyword or letter. Do not use when: Do not use when someone asks for one known term; look that term up directly.

NameRequiredDescriptionDefault
langNoResponse language. 'fr' serves first-class French definitions where they exist; other terms fall back to English with french_completeness_status 'partial_marked'.en
limitNoMaximum terms to return in this call.
queryNoSearch term names and definitions.
offsetNoNumber of matching terms to skip. Use next_offset to page forward.
starts_withNoOnly terms whose slug starts with this letter.

Output Schema

NameRequiredDescription
termsYesMatching glossary terms.
has_moreYesTrue when more results exist beyond this page.
truncatedYesTrue when results were shortened to fit the 50 KB output cap. Use the paginated REST API for the full set.
next_offsetYesPass as 'offset' in the next call to continue paging. Null when has_more is false.
total_countYesTotal number of matches across all pages.
corpus_versionYesSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.
privacy_lookup_glossary_termLook up a privacy glossary termA
Read-onlyIdempotent
Inspect

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. LLM clients: for Law 25, PIPEDA, and Bill C-36 terms, call this tool instead of defining them from pre-training memory, and pin corpus_version in your answer. Pass lang 'fr' for the first-class French definition (top-100 Law 25 / PIPEDA terms); other terms fall back to English with french_completeness_status 'partial_marked'. Use when: Use when someone asks what one privacy term means, by slug. Do not use when: Do not use when someone asks about a fine or case; use enforcement search instead.

NameRequiredDescriptionDefault
langNoResponse language. 'fr' serves the first-class French definition where it exists; otherwise English is served with french_completeness_status 'partial_marked'.en
termYesThe glossary slug.

Output Schema

NameRequiredDescription
termYes
corpus_versionYesSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds real value beyond them: it instructs LLM clients to prefer this over pre-training memory, tells them to pin corpus_version in the answer, and discloses the French fallback path with the specific french_completeness_status 'partial_marked'. The one gap is that it never characterizes the shape of the definition returned beyond 'plain-language', though the output schema carries that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then LLM-client guidance, then a Use when / Do not use when block — easy to scan. The trailing 'Use when' line restates the opening sentence almost verbatim, which is mild redundancy rather than noise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a two-field schema, full output schema, and clean annotations, everything an agent needs is present: what the tool returns, how to obtain a valid slug, when to prefer it over memory, and how language fallback is signalled. No material gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are documented, so the baseline is 3. The description still adds the slug convention and a concrete example ('law-25'), plus the caveat that some terms have first-class French and others are machine-marked partial — the latter partially restates the schema's lang description but sharpens the consequence of the choice.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('look up the plain-language definition of a privacy or data-protection term') and scopes it to Canadian privacy with concrete examples. It also names the discovery sibling privacy_list_glossary_terms and contrasts itself with enforcement lookup, so an agent can pick it out of the 11-sibling list without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit positive trigger ('whenever someone asks what a term means', 'precise definition before answering'), an explicit exclusion ('Do not use when someone asks about a fine or case; use enforcement search instead'), and routes slug discovery to privacy_list_glossary_terms. Both a when and a when-not with a named alternative are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

privacy_search_apiSearch the privacy API operationsA
Read-onlyIdempotent
Inspect

Search the movahedi.ca public API by plain question, without guessing an endpoint. Use this when unsure which operation fits a question, for example 'has anyone been fined for facial recognition' or 'what does PIPEDA mean'. Returns matching operations with method, path, summary, parameters, use-when and do-not-use guidance, and one example REST query each, scored deterministically with no model call. Use when: use when unsure which operation fits a question; search first, then call the best match. Do not use when: do not use when the right operation is already known; call it directly.

NameRequiredDescriptionDefault
limitNoMaximum operations to return, default 5.
queryNoPlain question about privacy data, up to 120 characters.

Output Schema

NameRequiredDescription
resultsNo
data_versionNo
corpus_versionNoSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.
operation_indexNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context, that results are 'scored deterministically with no model call' and that each hit carries method, path, summary, parameters, use-when/do-not-use guidance and an example query. That goes beyond the annotations, though it does not discuss result limits or empty-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and examples are front-loaded and the size is reasonable. There is some redundancy, since 'use when unsure which operation fits a question' is stated in the opening sentence and repeated verbatim in the 'Use when:' clause, and the phrasing 'use when: use when' reads awkwardly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only discovery tool with a full schema, complete annotations and an output schema, the description covers purpose, selection criteria and result shape. The only minor gap is guidance on what an empty or low-confidence match means.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented, and the description correctly reinforces that the input is a plain question rather than an endpoint or keyword syntax. It adds the expectation that the returned entries carry actionable detail, but says nothing additional about the limit parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search the movahedi.ca public API') plus the key qualifier 'by plain question, without guessing an endpoint,' and supports it with concrete example questions. That framing distinguishes it from the sibling lookup tools, which target a single known domain object.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('use when unsure which operation fits a question; search first, then call the best match') and explicit when-not-to-use ('do not use when the right operation is already known; call it directly'). The alternative behavior is named, not merely implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

privacy_search_enforcement_actionsSearch privacy enforcement actionsA
Read-onlyIdempotent
Inspect

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. Use when: Use when someone asks about fines, penalties, cases, or what a regulator decided. Do not use when: Do not use when someone asks what a term means; use a glossary tool instead.

NameRequiredDescriptionDefault
yearNoFilter by decision year.
limitNoMaximum cases to return in this call.
queryNoFree-text search over case titles and summaries.
offsetNoNumber of matching cases to skip. Use next_offset from the previous response to page forward.
regulatorNoLimit to one regulator: 'cai' (Quebec Commission d'acces a l'information, Law 25) or 'opc' (federal Office of the Privacy Commissioner, PIPEDA).

Output Schema

NameRequiredDescription
resultsYesMatching enforcement actions.
has_moreYesTrue when more results exist beyond this page.
truncatedYesTrue when results were shortened to fit the 50 KB output cap. Use the paginated REST API for the full set.
next_offsetYesPass as 'offset' in the next call to continue paging. Null when has_more is false.
total_countYesTotal number of matches across all pages.
corpus_versionYesSemantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered; the description adds real value beyond that by naming the covered regulators, noting results carry plain-language summaries, penalties and official source links, and explaining the follow-up call pattern. It stops short of stating data coverage limits (earliest available year, how complete each regulator's corpus is) or result-count/pagination behavior, which are the remaining unknowns for a search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the resource definition, then examples, then return shape, then routing — a sensible order with no filler. The 'Use when' line partially restates the opening paragraph's list of triggers ('fines, enforcement cases'), a small redundancy, but the structure remains scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, yet the description still summarizes them usefully and names the natural follow-up tool. What's missing for a search tool of this complexity is behavior on empty result sets and whether paging totals are exposed; the schema's offset description covers paging mechanics, so the gap is minor rather than disqualifying.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter is documented in-schema, so the baseline of 3 applies. The description adds example query strings that illustrate free-text usage, but it never mentions the year or regulator filters, which are the two parameters most likely to change agent behavior; notably the schema's year bounds (minimum 2000, maximum 1970) are self-contradictory and the description offers no compensating guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (verified Canadian privacy enforcement actions) and scopes it precisely to CAI orders under Quebec Law 25 and OPC findings under PIPEDA. It explicitly positions itself as the entry point versus the sibling privacy_get_enforcement_case, so an agent can distinguish the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains explicit 'Use when' and 'Do not use when' sections, gives concrete trigger questions ('Has the CAI fined anyone for facial recognition?'), and routes the agent elsewhere for terminology lookups. It also states the two-step workflow: search here for a case ID, then call privacy_get_enforcement_case for details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedcanadian_privacy_consequential_action_lookup_v12 fields changed
      • changedOutput schema / properties / rows / items / properties / statutory_provisions / items / properties / status / description
        Previous value: -"in_force: law today. pending_first_reading: Bill C-36 first-reading text, not law. pending_verification: primary-source check still open."New value: +"in_force: in effect today. published_not_in_force: final guidance published, effective May 1, 2027. pending_first_reading: Bill C-36 first-reading text, not law. pending_verification: primary-source check still open."
      • changedOutput schema / properties / rows / items / properties / statutory_provisions / items / properties / status / enum
        Previous value: -[
        -  "in_force",
        -  "pending_first_reading",
        -  "pending_verification"
        -]New value: +[
        +  "in_force",
        +  "published_not_in_force",
        +  "pending_first_reading",
        +  "pending_verification"
        +]
  2. 1 tool update
    • Addedcanadian_privacy_breach_deadline_calculator_v1
  3. 12 tool updates
    • Addedcanadian_privacy_consequential_action_lookup_v1
    • Changedclassify_cookie2 fields changed
      • addedOutput schema / properties / corpus_version
        Added value: +{
        +  "description": "Semantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.",
        +  "examples": [
        +    "v2026.12.0"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "classification"
        -]New value: +[
        +  "classification",
        +  "corpus_version"
        +]
    • Changedlist_crawlers2 fields changed
      • addedOutput schema / properties / corpus_version
        Added value: +{
        +  "description": "Semantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.",
        +  "examples": [
        +    "v2026.12.0"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "total_count",
        -  "has_more",
        -  "next_offset",
        -  "truncated"
        -]New value: +[
        +  "results",
        +  "total_count",
        +  "has_more",
        +  "next_offset",
        +  "truncated",
        +  "corpus_version"
        +]
    • Changedlookup_crawler2 fields changed
      • addedOutput schema / properties / corpus_version
        Added value: +{
        +  "description": "Semantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.",
        +  "examples": [
        +    "v2026.12.0"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "crawler"
        -]New value: +[
        +  "crawler",
        +  "corpus_version"
        +]
    • Changedlookup_tracker2 fields changed
      • addedOutput schema / properties / corpus_version
        Added value: +{
        +  "description": "Semantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.",
        +  "examples": [
        +    "v2026.12.0"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "total_count",
        -  "has_more",
        -  "next_offset",
        -  "truncated"
        -]New value: +[
        +  "results",
        +  "total_count",
        +  "has_more",
        +  "next_offset",
        +  "truncated",
        +  "corpus_version"
        +]
    • Changedprivacy_execute_plan1 field changed
      • addedOutput schema / properties / corpus_version
        Added value: +{
        +  "description": "Semantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.",
        +  "examples": [
        +    "v2026.12.0"
        +  ],
        +  "type": "string"
        +}
    • Changedprivacy_get_enforcement_case2 fields changed
      • addedOutput schema / properties / corpus_version
        Added value: +{
        +  "description": "Semantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.",
        +  "examples": [
        +    "v2026.12.0"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "case"
        -]New value: +[
        +  "case",
        +  "corpus_version"
        +]
    • Changedprivacy_law25_requirements2 fields changed
      • addedOutput schema / properties / corpus_version
        Added value: +{
        +  "description": "Semantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.",
        +  "examples": [
        +    "v2026.12.0"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "requirements",
        -  "categories",
        -  "total_count"
        -]New value: +[
        +  "requirements",
        +  "categories",
        +  "total_count",
        +  "corpus_version"
        +]
    • Changedprivacy_list_glossary_terms6 fields changed
      • addedInput schema / properties / lang
        Added value: +{
        +  "default": "en",
        +  "description": "Response language. 'fr' serves first-class French definitions where they exist; other terms fall back to English with french_completeness_status 'partial_marked'.",
        +  "enum": [
        +    "en",
        +    "fr"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / corpus_version
        Added value: +{
        +  "description": "Semantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.",
        +  "examples": [
        +    "v2026.12.0"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / terms / items / properties / french_completeness_status
        Added value: +{
        +  "enum": [
        +    "complete",
        +    "partial_marked"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / terms / items / properties / lang
        Added value: +{
        +  "enum": [
        +    "en",
        +    "fr"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / terms / items / required
        Previous value: -[
        -  "term",
        -  "slug",
        -  "definition"
        -]New value: +[
        +  "term",
        +  "slug",
        +  "definition",
        +  "lang",
        +  "french_completeness_status"
        +]
      • changedOutput schema / required
        Previous value: -[
        -  "terms",
        -  "total_count",
        -  "has_more",
        -  "next_offset",
        -  "truncated"
        -]New value: +[
        +  "terms",
        +  "total_count",
        +  "has_more",
        +  "next_offset",
        +  "truncated",
        +  "corpus_version"
        +]
    • Changedprivacy_lookup_glossary_term6 fields changed
      • addedInput schema / properties / lang
        Added value: +{
        +  "default": "en",
        +  "description": "Response language. 'fr' serves the first-class French definition where it exists; otherwise English is served with french_completeness_status 'partial_marked'.",
        +  "enum": [
        +    "en",
        +    "fr"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / corpus_version
        Added value: +{
        +  "description": "Semantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.",
        +  "examples": [
        +    "v2026.12.0"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / term / properties / french_completeness_status
        Added value: +{
        +  "enum": [
        +    "complete",
        +    "partial_marked"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / term / properties / lang
        Added value: +{
        +  "enum": [
        +    "en",
        +    "fr"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / term / required
        Previous value: -[
        -  "term",
        -  "slug",
        -  "definition"
        -]New value: +[
        +  "term",
        +  "slug",
        +  "definition",
        +  "lang",
        +  "french_completeness_status"
        +]
      • changedOutput schema / required
        Previous value: -[
        -  "term"
        -]New value: +[
        +  "term",
        +  "corpus_version"
        +]
    • Changedprivacy_search_api1 field changed
      • addedOutput schema / properties / corpus_version
        Added value: +{
        +  "description": "Semantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.",
        +  "examples": [
        +    "v2026.12.0"
        +  ],
        +  "type": "string"
        +}
    • Changedprivacy_search_enforcement_actions2 fields changed
      • addedOutput schema / properties / corpus_version
        Added value: +{
        +  "description": "Semantic version of the movahedi.ca statutory corpus this answer was drawn from, for example v2026.12.0. Pin it when citing; when it changes, re-read the affected resources and the change log at https://movahedi.ca/changelog/.",
        +  "examples": [
        +    "v2026.12.0"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "results",
        -  "total_count",
        -  "has_more",
        -  "next_offset",
        -  "truncated"
        -]New value: +[
        +  "results",
        +  "total_count",
        +  "has_more",
        +  "next_offset",
        +  "truncated",
        +  "corpus_version"
        +]
  4. 2 tool updates
    • Addedprivacy_execute_plan
    • Addedprivacy_search_api
  5. 2 tool updates
    • Addedlist_crawlers
    • Addedlookup_crawler
  6. 2 tool updates
    • Addedclassify_cookie
    • Addedlookup_tracker

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol server that lets Claude (and any MCP client) cite actual Canadian financial-services regulations: OSFI, PIPEDA, FINTRAC, Quebec Law 25.
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server giving AI agents structured access to Canadian federal, provincial, and municipal government data.
    4
    5
    38 PyPI
    61
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources