Comment rendre Claude Desktop conforme à la Loi 25 québécoise avec MCP
Un agent qui lit des renseignements personnels au Québec doit pouvoir dire, avant d'agir, ce qu'il a le droit de faire — et le prouver après coup. MCP rend cela branchable en dix minutes.
Votre équipe utilise Claude Desktop. Quelqu'un finit par lui donner accès au CRM, au dossier client, aux courriels. À partir de cette minute, un logiciel manipule des renseignements personnels de Québécois, et la question n'est plus « est-ce que ça marche ? » mais « est-ce qu'on a le droit ? ».
Le problème n'est pas Claude Desktop, c'est le moment de la décision
Les politiques internes vivent dans des PDF. Les agents, eux, décident en millisecondes, dans une boucle d'outils, sans lire le PDF. Entre la politique écrite et l'action exécutée, il n'existe le plus souvent aucun point de contrôle : c'est le trou.
La Loi 25 ne parle pas d'agents IA. Elle parle de collecte, de communication, de décisions automatisées, de transfert hors Québec. Ce sont exactement les choses qu'un agent fait tout seul, vite, plusieurs milliers de fois par jour. Un agent n'invente pas une obligation nouvelle : il industrialise celles qui existent déjà.
Ce que la Loi 25 exige réellement d'un agent qui lit vos données
Quatre dispositions de la Loi sur la protection des renseignements personnels dans le secteur privé, modifiée par la Loi 25, se déclenchent presque toujours dès qu'un agent est branché sur des données clients.
| Disposition | Obligation | Ce que ça implique pour un agent |
|---|---|---|
| Art. 3.1 | Désigner un responsable de la protection des renseignements personnels | Quelqu'un doit pouvoir répondre de ce que l'agent a fait — donc il faut une trace lisible par un humain |
| Art. 3.3 | Tenir un registre des incidents de confidentialité et notifier la CAI en cas de risque de préjudice sérieux | Un agent qui exfiltre ou expose des données produit un incident : il faut savoir quoi, quand, quelles données |
| Art. 12.1 | Informer la personne d'une décision fondée exclusivement sur un traitement automatisé, et lui permettre de présenter ses observations à une personne | Toute décision « exclusivement automatisée » doit être identifiable comme telle — ou réservée à un humain |
| Art. 17 | Évaluer les facteurs relatifs à la vie privée (ÉFVP) avant de communiquer des renseignements hors Québec | La destination des données fait partie de la décision, pas de l'infrastructure |
Les sanctions ne sont pas symboliques : sanctions administratives pécuniaires jusqu'à 10 M$ ou 2 % du chiffre d'affaires mondial, amendes pénales jusqu'à 25 M$ ou 4 %. Le facteur aggravant classique, dans toutes les juridictions, n'est pas la faute technique — c'est l'incapacité à démontrer qu'un contrôle existait.
Pourquoi une consigne dans le prompt système n'est pas un contrôle
La réponse réflexe est d'écrire dans le prompt : « n'utilise jamais de données personnelles sans autorisation ». C'est utile, et ce n'est pas un contrôle. Trois raisons, dans l'ordre de gravité.
- Ce n'est pas déterministe. Le même prompt, deux fois, peut donner deux comportements. Une règle qui dépend d'un échantillonnage n'est pas une règle, c'est une tendance.
- Ce n'est pas prouvable. Six mois plus tard, face à la CAI ou à un client, vous ne pouvez pas démontrer qu'à 14 h 32 le 3 mars, la consigne était présente, appliquée, et appliquée de cette façon-là.
- Ce n'est pas révisable. Une politique dans un prompt ne se relit pas, ne se teste pas, ne se versionne pas indépendamment du reste de l'invite.
Un contrôle, c'est une décision prise hors du modèle, par un composant déterministe, qui renvoie toujours la même réponse pour la même question, et qui laisse une preuve qu'un tiers peut vérifier sans vous faire confiance.
StructureClerk décide, votre infrastructure applique.
L'architecture en une image
Claude Desktop
│ (1) l'agent veut agir : lire un dossier client, envoyer, payer…
▼
Outil MCP authority_decide
│ (2) action + juridiction + secteur
▼
Moteur d'autorité (déterministe, sans LLM)
│ (3) ALLOW · APPROVE · DENY · ESCALATE
│ + cadres cités + preuve signée Ed25519
▼
Votre application
(4) applique : exécute, demande une approbation humaine, ou refuseCette séparation n'est pas une limite technique, c'est le contrat. Un tiers qui applique vos règles devient un point de panne dans votre chaîne de production et un dépositaire de vos données. Un tiers qui décide ne voit qu'une description d'action, et son avis peut être ignoré, journalisé, ou contesté.
Mise en place, étape par étape
- 1
Ajouter le connecteur dans Claude Desktop
Réglages → Connecteurs → Ajouter un connecteur personnalisé. Nom : StructureClerk. URL : l'endpoint MCP ci-dessous. Le serveur est distant et public : rien à installer, rien à exposer sur votre réseau. Il n'y a pas de clé à saisir pour commencer — une franchise quotidienne s'applique par adresse IP.
https://structureclerk.ca/api/mcp-http - 2
Vérifier que les outils sont bien vus
Demandez à Claude de lister les outils du connecteur. Vous devez voir
authority_decide— c'est le seul qui compte pour la Loi 25 ; les autres (cartographie, feuille de route, évaluation) sont des outils d'analyse.curl -s https://structureclerk.ca/api/mcp-http \ -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","method":"tools/list","id":1}' - 3
Poser une vraie question, pas une question de démonstration
Prenez l'action la plus banale de votre équipe et faites-la passer par l'outil : « Décide si un agent peut lire un dossier client au Québec et l'envoyer à un service hébergé aux États-Unis. » Une question de démonstration donne une réponse de démonstration.
- 4
Câbler la décision dans le code qui agit
C'est l'étape que personne ne saute impunément. Tant que la décision n'est pas lue par le code qui exécute l'action, vous avez un avis, pas un contrôle. En pratique : appelez l'API avant l'effet de bord, et traitez
APPROVEcomme une file d'attente humaine, pas comme unALLOWverbeux.curl -s https://structureclerk.ca/api/v1/authority/decide \ -H 'Content-Type: application/json' \ -d '{ "agent": { "id": "crm-assistant", "autonomy_level": 3 }, "action": { "type": "read.customer_record", "data_categories": ["personal"], "destination_jurisdiction": "US_FED" }, "context": { "jurisdictions": ["CA_QC"], "sector": "tech" } }' - 5
Conserver la preuve, et la vérifier une fois
Chaque décision porte un identifiant de preuve. Vérifiez-en une, à la main, aujourd'hui — pas le jour où on vous la demande. La vérification est gratuite et ne demande aucun compte : c'est une promesse publiée, verrouillée par un test du dépôt.
curl -s https://structureclerk.ca/api/v1/authority/verify/<evidence_id>
Ce que renvoie une décision
Voici la réponse réelle pour la question de l'étape 3 — un agent québécois qui veut envoyer un dossier client vers les États-Unis. Elle est reproduite telle quelle, champs coupés pour la lisibilité.
{
"decision": "APPROVE",
"zone": 2,
"reason": "cross_border_transfer_mechanism_required",
"confidence": 0.95,
"matched_rules": [
{ "id": "zone2.cross_border_transfer", "specificity": "exact", "confidence": 0.95 }
],
"frameworks": [
{ "name": "Loi 25", "domain": "data_protection", "jurisdiction": "CA_QC",
"last_verified": "2025-01-31", "coverage_tier": "priority" }
],
"sources_verified_from": "2025-01-31",
"rules_version": "2026-08-14.3",
"advisory": true,
"evidence": {
"id": "ev_...",
"sha256": "9f2c...",
"signature": "MEUCIQD...",
"key_id": "sc-authority-2026"
}
}decision— l'une des quatre primitives.APPROVEveut dire : autorisé avec approbation humaine préalable, pas « autorisé avec un avertissement ».reason— un code stable, pas une phrase. Ici : le transfert exige un mécanisme, ce qui renvoie directement à l'ÉFVP de l'article 17.confidenceetmatched_rules— quelle règle a décidé, et avec quelle spécificité. En dessous de 0,90, le moteur bascule volontairement enESCALATEplutôt que de deviner.frameworks— les cadres cités, au niveau du cadre et jamais de l'article : citer « article 17 » comme s'il s'agissait d'un avis juridique serait une promesse que le moteur ne peut pas tenir.sources_verified_from— la date de vérification de la source la plus ancienne derrière cette décision. Publiée, pas cachée.evidence— empreinte SHA-256 de la décision et signature Ed25519.
Le cas qui compte vraiment : la sortie du Québec
Changez une seule chose dans la requête — la destination — et la décision change. C'est le comportement à tester en premier, parce que c'est celui que les politiques écrites ratent le plus souvent : la même action est licite vers un serveur montréalais et exige une évaluation préalable vers un serveur américain.
| Action | Destination | Décision | Motif |
|---|---|---|---|
read.contract | interne | ALLOW | low_risk_operation |
read.customer_record (personnel) | US_FED | APPROVE | cross_border_transfer_mechanism_required |
hiring.decide | — | DENY | human_only_decision |
payment.execute 12 000 $ CA | — | APPROVE | financial_threshold_exceeded |
Notez le troisième : une décision d'embauche est refusée, pas escaladée. L'article 12.1 encadre les décisions exclusivement automatisées ; le moteur choisit de les réserver à un humain plutôt que d'inventer une procédure d'information. Un refus ne coûte d'ailleurs rien — la portée et le solde sont vérifiés avant tout travail facturable.
La preuve : ce que vous montrez, six mois plus tard
Une décision qui n'existe que dans vos journaux ne prouve rien : vous êtes à la fois l'auteur et le témoin. C'est pour ça que chaque décision sort avec une preuve dont la vérification ne dépend pas de nous.
- Empreinte — SHA-256 d'une sérialisation canonique de la décision. Les clés absentes restent absentes du hachage : c'est ce qui garde les empreintes stables dans le temps.
- Signature — Ed25519, clé publique publiée sur
/.well-known/structureclerk-authority.json. - Chaînage — chaque preuve porte sa position dans un journal en ajout seul ; retirer une décision casse la chaîne.
- Ancrage tiers — la tête de chaîne est horodatée par une autorité RFC 3161 externe. Une preuve « horodatée » et une preuve « publiée » (auto-attestée) ne sont jamais présentées comme la même chose.
- Vérification gratuite, sans compte — parce qu'une preuve qu'il faut payer pour vérifier n'est pas une preuve.
Les limites, dites franchement
- C'est consultatif. Le moteur ne bloque rien. Si votre code ignore un
DENY, l'action a lieu. La preuve enregistrera qu'elle a eu lieu contre un refus — ce qui est mieux que rien, et moins bien qu'un blocage. - Les citations sont au niveau du cadre. « Loi 25 », pas « article 17, deuxième alinéa ». Une citation article par article donnerait l'illusion d'un avis juridique.
- Toutes les juridictions ne se valent pas. Celles sur lesquelles le moteur décide sont revérifiées chaque cycle ; les autres sont indicatives, et chaque citation porte sa propre date.
- Hors périmètre, définitivement : SSO, RBAC, application à l'exécution. Ce n'est pas un manque de temps, c'est la thèse.
Checklist avant de brancher un agent sur des données québécoises
- Lister les actions que l'agent peut réellement déclencher (pas celles qu'on lui souhaite).
- Pour chacune : quelles catégories de données, quelle destination, réversible ou non.
- Marquer celles qui produisent une décision au sens de l'art. 12.1 — et les réserver à un humain.
- Faire passer les actions restantes par
authority_decideavant l'effet de bord. - Traiter
APPROVEcomme une file d'attente humaine, avec un délai et un responsable nommé. - Conserver l'identifiant de preuve à côté de votre journal applicatif.
- Documenter l'ÉFVP pour toute destination hors Québec, une fois, et la référencer.
- Vérifier une preuve à la main, aujourd'hui.
Si vous ne savez pas par où commencer, l'évaluation de conformité gratuite parcourt ces questions et produit un profil de politique — que l'API applique ensuite à chaque décision de votre organisation. C'est la porte d'entrée, elle ne demande aucune carte de crédit.
+Est-ce que ce connecteur rend Claude Desktop conforme à la Loi 25 ?
Non, et aucun produit ne le peut. La conformité est une propriété de l'organisation, pas d'un logiciel. Le connecteur rend la règle exécutable au moment où l'agent agit, et vérifiable après coup ; le reste — registre des incidents, responsable désigné, ÉFVP, information des personnes — reste à votre charge.
+Est-ce que mes données passent par StructureClerk ?
Non. L'outil reçoit une description d'action — type d'action, catégories de données, juridiction, secteur, destination — jamais le contenu du dossier client. Une couche d'autorité qui exigerait vos données pour dire si vous avez le droit de les traiter serait une contradiction.
+Que se passe-t-il si l'API est indisponible ?
Votre agent continue de fonctionner : la décision est consultative, elle n'est pas sur le chemin critique de votre infrastructure. À vous de choisir la posture par défaut en cas d'indisponibilité — pour des actions sensibles, refuser par défaut est le comportement prudent.
+Pourquoi une décision d'embauche est-elle refusée plutôt qu'approuvée avec supervision ?
Parce que l'article 12.1 encadre les décisions fondées exclusivement sur un traitement automatisé, avec obligation d'information et droit de présenter des observations. Le moteur classe ces actions en zone 3 — réservées à l'humain — plutôt que de prétendre orchestrer une procédure d'information qu'il ne contrôle pas.
+Faut-il un compte pour essayer ?
Non. Une franchise quotidienne par adresse IP permet d'essayer sans inscription, et la vérification de preuve est gratuite en permanence. Au-delà, une clé API dépense des crédits prépayés ou l'allocation incluse dans un plan Autorité.
+Ça marche avec autre chose que Claude Desktop ?
Oui. Le même moteur est exposé en REST, en A2A et en MCP. Tout client MCP — Claude Desktop, Cursor, un agent maison — parle au même endpoint, et un service qui n'est pas un agent peut appeler l'API REST directement.
Pour le détail du contrat de décision, des quatre primitives et du format de preuve : la page Autorité. Pour l'entrée en matière côté organisation : l'évaluation gratuite.