ACF
acfstandard.io
Developer docs
EN
REASON

acf.classify-agent

Qualification préliminaire d’un agent IA avant go-live — dix champs énumérés en entrée, une évaluation structurée en sortie : niveau d’autonomie, criticité, rôle AI Act, obligations applicables, contrôles DDAO, sign-offs requis.

!Attention
Cet outil produit une qualification préliminaire, pas un avis juridique. requires_human_review vaut toujours true en sortie. Tous les champs énumérés sont stricts — l’entrée est rejetée plutôt que devinée.

Quand l’utiliser

Utilisez cet outil quand un système d’IA arrive avant son go-live et qu’il faut un premier verdict structuré sur cinq questions en parallèle : à quel niveau d’autonomie il opère, quelle criticité il porte, quel rôle régulatoire il occupe (AI Act + RGPD), quels contrôles mettre en place, et qui doit signer son passage en production. L’outil agrège les cinq verdicts en un seul appel.

Ce n’est pas un outil de production : c’est un outil de cadrage. La sortie est conçue pour entrer dans une fiche ACF-07 (Dossier Premier Agent) que le DDAO va revoir et compléter.

Paramètres d’entrée

Dix champs principaux, tous obligatoires sauf indication contraire. Les énumérations sont strictes — l’outil rejette l’entrée plutôt que de deviner.

namestring (2-200)required
Nom court de l’agent. Ce nom apparaît dans le rationale et l’audit trail.
descriptionstring (20-1000)required
Description prose de ce que l’agent fait, où il agit, sur quels actifs. Plus c’est précis, plus l’inférence est solide.
decisions_takenstring[] (1-20)required
Liste des décisions opérationnelles que l’agent prend (« attribue un score », « envoie un email », « écrit dans Salesforce »…).
human_approval_required"always" | "sometimes" | "never"required
À quelle fréquence un humain valide-t-il les décisions ? Influe directement sur le niveau d’autonomie inféré.
personal_data_level"none" | "standard" | "sensitive_special"required
Niveau de données personnelles manipulées. sensitive_special couvre santé, données biométriques, opinion politique, etc.
financial_exposure"none" | "low_operation" | "medium_contract" | "high_corporate"required
Exposition financière par décision. medium_contract = engagement contractuel ; high_corporate = trading, transfert massif.
external_actions"none" | "read_only" | "limited_write" | "full_write"required
Capacité d’écriture sur des systèmes externes (CRM, ERP, banque, API tierces).
gpai_usedbooleanrequired
Le système utilise-t-il un GPAI (LLM généraliste type GPT, Claude, Gemini, Mistral) en sous-couche ? Active les obligations AI Act Art. 51-55.
usage_audience"internal" | "third_party_b2b" | "public_consumer"required
Qui voit la sortie ? public_consumer engage davantage le RGPD et les obligations de transparence.
sectorstring (≤80)
Secteur d’activité, libre (« banque », « healthtech », « public sector »…). Aide la pondération de la criticité.
jurisdiction("eu" | "uk" | "us" | "ca" | "ch" | "br" | "jp" | "other")[]
Juridictions où l’agent opère. Active l’AI Act EU + autres référentiels.
ai_act_triggersAiActTriggerEnum[]
Déclencheurs Annex III explicites (biométrie, infrastructure critique, recrutement, scoring crédit…) ou « none ».
processing_purposesProcessingPurposeEnum[]
Finalité du traitement RGPD (RH, marketing, financier, support, santé, public, conformité…).
locale"en" | "fr"default: "en"
Langue de la sortie textuelle.

Schéma de sortie

La sortie est un objet à dix-huit champs structurés + pied-de-page signé.

acf_level{ level: "N0"|"N1"|"N2"|"N3", rationale: string }
Niveau d’autonomie ACF® recommandé et son rationale.
criticality{ score: "low"|"medium"|"high"|"critical", rationale, matrix_ref }
Score de criticité issu de la matrice ACF-02, avec référence à la cellule de la matrice.
regulatory_qualifications{ likely_ai_act_role, likely_gdpr_status }
Rôle AI Act probable (provider, deployer, importer, distributor…) et statut RGPD probable (controller, processor, joint controller).
ai_act_obligations{ pre_go_live[], continuous[], on_incident[] }
Obligations AI Act ventilées par phase du cycle de vie, avec article + exigence + date d’applicabilité.
applicable_fiches{ code: string, why: string }[]
Fiches méthodologiques ACF® à mobiliser (ACF-00 à ACF-16), avec la raison pour chaque fiche retenue.
recommended_controlsstring[]
Contrôles en langage naturel, destinés à l’équipe métier.
ddao_controlsstring[]
Mêmes contrôles, vocabulaire canonique ACF® (codes C-AUTONOMY-XX, C-LOG-XX, etc.), destinés au DDAO.
ddao_escalation{ required: boolean, trigger_thresholds: string[] }
L’escalade DDAO est-elle requise ? Si oui, sur quels seuils ?
sign_off_required{ security, privacy, compliance, legal, business_sponsor, board: boolean }
Qui doit signer le go-live ? Six rôles internes possibles.
confidence"low" | "medium" | "high"
Niveau de confiance global de la qualification.
assumptionsstring[]
Hypothèses explicites prises pour produire la qualification.
gaps_to_validatestring[]
Trous identifiés que le revue humaine doit combler.
requires_human_reviewtrue
Constant. Aucun appel ne le retourne false.

Exemple d’appel

Un agent SaaS qui qualifie des leads B2B entrants :

classify-agent.tstypescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";

const transport = new StdioClientTransport({
  command: "npx",
  args: ["-y", "acf-mcp"],
});
const client = new Client({ name: "demo", version: "1.0" }, {});
await client.connect(transport);

const result = await client.callTool({
  name: "acf.classify-agent",
  arguments: {
    name: "B2B lead-qualification agent",
    description:
      "Receives raw inbound leads from the website form, enriches them with public LinkedIn data, scores them on fit, and writes a category to Salesforce.",
    decisions_taken: [
      "assign a fit score 0-100",
      "tag as MQL or disqualified",
      "write the result to the Salesforce lead record",
    ],
    human_approval_required: "sometimes",
    personal_data_level: "standard",
    financial_exposure: "low_operation",
    external_actions: "limited_write",
    gpai_used: true,
    usage_audience: "internal",
    sector: "saas",
    jurisdiction: ["eu", "uk"],
    ai_act_triggers: ["none"],
    processing_purposes: ["marketing"],
    locale: "en",
  },
});

console.log(JSON.stringify(result.content, null, 2));

Réponse

response.jsonjson
{
  "acf_level": {
    "level": "N1",
    "rationale": "Decision is automated but a human sign-off remains in the loop for MQL routing. Tagged as N1 (assisted) — graduate to N2 only after a 30-day drift review."
  },
  "criticality": {
    "score": "medium",
    "rationale": "Limited financial exposure + standard personal data + internal audience. The risk is reputational and pipeline-quality, not life-safety or financial.",
    "matrix_ref": "ACF-02 §3.2"
  },
  "regulatory_qualifications": {
    "likely_ai_act_role": "deployer",
    "likely_gdpr_status": "controller"
  },
  "regulatory_qualifications_confidence": {
    "likely_ai_act_role": "high",
    "likely_gdpr_status": "high"
  },
  "ai_act_obligations": {
    "pre_go_live": [
      { "article": "Art. 50", "requirement": "Inform leads that an AI is involved in the scoring", "applicable_date": "2026-08-02" }
    ],
    "continuous": [
      { "article": "Art. 13", "requirement": "Maintain end-user transparency about the scoring logic", "applicable_date": "—" }
    ],
    "on_incident": []
  },
  "applicable_fiches": [
    { "code": "ACF-04", "why": "Defines the agent identity card — required for any production agent" },
    { "code": "ACF-12", "why": "Mandate of the agent under a named DDAO" },
    { "code": "ACF-06", "why": "Kill switch testing every quarter" },
    { "code": "ACF-08", "why": "Signed decision register — six-month retention by deployer" }
  ],
  "recommended_controls": [
    "Disclose AI involvement in the contact form",
    "Log every score assignment with input and rationale",
    "Quarterly drift review of MQL precision/recall"
  ],
  "ddao_controls": [
    "C-AUTONOMY-01 — N1 gating: every MQL → human review before SDR outreach",
    "C-LOG-03 — Signed decision register branched to ACF-08",
    "C-DRIFT-02 — Monthly drift dashboard for fit-score distribution"
  ],
  "ddao_escalation": {
    "required": true,
    "trigger_thresholds": [
      "fit-score distribution shifts by > 2σ vs baseline",
      "MQL → SQL conversion drops by > 30% week over week",
      "any complaint from a tagged lead"
    ]
  },
  "sign_off_required": {
    "security": false,
    "privacy": true,
    "compliance": true,
    "legal": false,
    "business_sponsor": true,
    "board": false
  },
  "confidence": "high",
  "assumptions": [
    "Lead enrichment uses only public LinkedIn data via official API",
    "No special-category personal data is processed"
  ],
  "gaps_to_validate": [
    "Confirm Salesforce write scope — the agent should NOT update opportunity stages",
    "Confirm retention period of the signed register (six months minimum per Art. 26(6))"
  ],
  "requires_human_review": true,
  "doctrine_version": "ACF framework v1.0 / rules 2026-06",
  "doctrine_hash": "sha256:bf0b6d8e4731ebdc58f6d6338702c5b74af47874cf0ad3dc958cde5c5b30b9dc",
  "doctrine_signature": "ed25519:…",
  "doctrine_archive_url": "https://acfstandard.io/doctrine/v1.0/archive.json",
  "regulatory_snapshot": "EU AI Act 2024/1689 · GDPR 2016/679 · ISO 42001:2023 · NIST AI RMF 1.0 · COBIT 2019 — frozen 2026-06",
  "generated_at": "2026-06-14T11:47:22.318Z",
  "conversion_cta": "Generate the full auditable PDF report on https://acfstandard.com/compliance?ref=mcp",
  "disclaimer": "Preliminary qualification only — not legal advice. Human review required."
}

Erreurs courantes

  • InvalidEnumValue un champ énuméré reçoit une valeur hors liste (ex. financial_exposure: "medium"). Corrigez vers une des valeurs canoniques.
  • InputTooShort description < 20 caractères ou decisions_taken vide. L’outil ne devine pas — corrigez l’entrée.
  • DoctrineSnapshotMismatch le doctrine_hash demandé n’est pas chargé. Mettez acf-mcp à jour ou pointez vers la version archivée.