ACF
acfstandard.io
Developer docs
FR
REASON

acf.classify-agent

Pre-go-live qualification of an AI agent, ten qualified-enum input fields, one structured output: autonomy level, criticality, AI Act role, applicable obligations, DDAO controls, required sign-offs.

!Warning
This tool produces a preliminary qualification, not legal advice. requires_human_review is always true in the output. All enum fields are strict, the call is rejected, not guessed.

When to use

Use this tool when an AI system is heading toward go-live and you need a structured first verdict on five questions at once: what autonomy level it operates at, what criticality it carries, what regulatory role it plays (AI Act + GDPR), what controls to put in place, and who must sign off on production. The tool aggregates the five verdicts into one call.

It is not a production-time tool: it is a scoping tool. The output is designed to land in an ACF-08 (First Agent Dossier) card that the DDAO will review and complete.

Input parameters

Ten core fields, all required unless noted. Enums are strict, the tool rejects the input rather than guessing.

namestring (2-200)required
Short agent name. Appears in the rationale and audit trail.
descriptionstring (20-1000)required
Free-text description of what the agent does, where it acts, on what assets. The more precise, the stronger the inference.
decisions_takenstring[] (1-20)required
List of operational decisions the agent makes (“assign a score”, “send an email”, “write to Salesforce”…).
human_approval_required"always" | "sometimes" | "never"required
How often does a human approve decisions? Directly influences the inferred autonomy level.
personal_data_level"none" | "standard" | "sensitive_special"required
Level of personal data handled. sensitive_special covers health, biometrics, political opinion, etc.
financial_exposure"none" | "low_operation" | "medium_contract" | "high_corporate"required
Financial exposure per decision. medium_contract = contractual commitment; high_corporate = trading, massive transfer.
external_actions"none" | "read_only" | "limited_write" | "full_write"required
Write capability against external systems (CRM, ERP, banks, third-party APIs).
gpai_usedbooleanrequired
Does the system use a GPAI (general-purpose LLM such as GPT, Claude, Gemini, Mistral) under the hood? Triggers AI Act Art. 51-55 obligations.
usage_audience"internal" | "third_party_b2b" | "public_consumer"required
Who sees the output? public_consumer raises the GDPR and transparency obligations bar.
sectorstring (≤80)
Free-text sector (“banking”, “healthtech”, “public sector”…). Helps weight the criticality.
jurisdiction("eu" | "uk" | "us" | "ca" | "ch" | "br" | "jp" | "other")[]
Jurisdictions where the agent operates. Activates the EU AI Act + other frameworks.
ai_act_triggersAiActTriggerEnum[]
Explicit Annex III triggers (biometrics, critical infrastructure, recruitment, credit scoring…) or “none”.
processing_purposesProcessingPurposeEnum[]
GDPR processing purpose (HR, marketing, financial, support, healthcare, public, compliance…).
locale"en" | "fr"default: "en"
Language of the textual output.

Output schema

The output is a structured object, followed by the signed doctrine footer.

autonomy_level{ level: "suggestive"|"co_decision"|"supervised_autonomous"|"autonomous", rationale: string }
Recommended delegated autonomy level for the agent’s decisions, and its rationale. Renamed from acf_level in 2.0.0: N0 to N3 now refers to agent maturity, not to the autonomy of a decision.
criticality{ score: "low"|"medium"|"high"|"critical", rationale, matrix_ref }
Criticality score from the Criticality Matrix (ACF-03), with a reference to the matrix cell.
regulatory_qualifications{ likely_ai_act_role, likely_gdpr_status }
Likely AI Act role (provider, deployer, importer, distributor…) and likely GDPR status (controller, processor, joint controller).
ai_act_obligations{ pre_go_live[], continuous[], on_incident[] }
AI Act obligations split by lifecycle phase, with article + requirement + applicable date.
applicable_fiches{ code: string, why: string }[]
ACF® toolkit cards to mobilise (among the 45: ACF-01 to ACF-20, ACF-O1 to ACF-O10, ACF-P1 to ACF-P15), with the reason for each retained card.
recommended_controlsstring[]
Plain-English controls for the business team.
ddao_controlsstring[]
Same controls in canonical ACF® vocabulary (C-AUTONOMY-XX, C-LOG-XX, etc.), for the DDAO.
ddao_escalation{ required: boolean, trigger_thresholds: string[] }
Is DDAO escalation required? If so, on which thresholds?
sign_off_required{ security, privacy, compliance, legal, business_sponsor, board: boolean }
Who must sign off on go-live? Six internal roles.
confidence"low" | "medium" | "high"
Global confidence level of the qualification.
assumptionsstring[]
Explicit assumptions the qualification rests on.
gaps_to_validatestring[]
Identified gaps that the human review must close.
requires_human_reviewtrue
Constant. No call returns false.

Example call

An agent qualifying a software vendor’s inbound B2B leads:

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));

Response

response.jsonjson
{
  "autonomy_level": {
    "level": "supervised_autonomous",
    "rationale": "Conditional human approval, write actions allowed within a bounded perimeter → conditional execution (mandate required)."
  },
  "criticality": {
    "score": "medium",
    "rationale": "Standard personal data + low operational exposure → medium criticality (GDPR + operational impact).",
    "matrix_ref": "cell(standard, low_operation)"
  },
  "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": "Transparency obligations on AI systems intended to interact with natural persons (clear notice that the user is interacting with an AI system, unless obvious from context).",
        "applicable_date": "2026-08-02"
      }
    ],
    "continuous": [
      {
        "article": "art-51",
        "requirement": "Classification of GPAI models and identification of systemic-risk models.",
        "applicable_date": "2026-08-02"
      },
      {
        "article": "art-53",
        "requirement": "Technical documentation, training data summary, copyright policy, instructions for downstream providers.",
        "applicable_date": "2026-08-02"
      },
      {
        "article": "art-54",
        "requirement": "Authorised representative requirement for non-EU GPAI providers placing models on the EU market.",
        "applicable_date": "2026-08-02"
      }
    ],
    "on_incident": []
  },
  "applicable_fiches": [
    {
      "code": "ACF-13",
      "why": "Formal mandate required once the agent decides on its own (supervised autonomous or autonomous)."
    },
    {
      "code": "ACF-07",
      "why": "Kill switch required once the agent decides on its own (supervised autonomous or autonomous)."
    },
    {
      "code": "ACF-09",
      "why": "Decision register required once the agent decides on its own (supervised autonomous or autonomous)."
    }
  ],
  "recommended_controls": [
    "Formal agent mandate",
    "Kill switch quarterly drill",
    "Decision register",
    "Quarterly risk review"
  ],
  "ddao_controls": [
    "ACF-CTRL-101 (preventive, ACF-13): Mandate templates calibrated by sector; review frequency tied to criticality.",
    "ACF-CTRL-102 (corrective, ACF-07): Kill switch with 3 levels: freeze (instant), redirect (≤5min), revoke (≤1h).",
    "ACF-CTRL-103 (detective, ACF-09): Decision register format aligned with Article 49 register for high-risk systems."
  ],
  "ddao_escalation": {
    "required": false,
    "trigger_thresholds": [
      "Action above bounded perimeter escalates to DDAO before execution.",
      "Drift > 10% on key metric vs baseline escalates within 24h."
    ]
  },
  "sign_off_required": {
    "security": true,
    "privacy": true,
    "compliance": false,
    "legal": false,
    "business_sponsor": true,
    "board": false
  },
  "confidence": "medium",
  "assumptions": [],
  "gaps_to_validate": [],
  "requires_human_review": true,
  "rationale_per_rule": [
    {
      "rule_id": "ai-act-annex-iii.annex-iii-1a-biometric-identity",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-2-critical-infrastructure",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-3-educational",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-4-employment",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-5b-credit-scoring",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-5c-insurance-pricing",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-6-law-enforcement",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-7-migration-asylum",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-iii.annex-iii-8-justice-democracy",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-i.annex-i-medical-device",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-i.annex-i-vehicle-safety",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "ai-act-annex-i.annex-i-machinery",
      "rule_version": "2026-06",
      "fired": false,
      "evidence": ""
    },
    {
      "rule_id": "gpai-triggers",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "enum:gpai_used=true"
    },
    {
      "rule_id": "ai-act-roles.ai-act-role-deployer-internal-use",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "enum:usage_audience=internal"
    },
    {
      "rule_id": "gdpr-qualification.gdpr-controller-internal-use",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "enum:usage_audience=internal; enum:personal_data_level=standard"
    },
    {
      "rule_id": "sign-off-matrix.medium-standard-low_operation",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "criticality=medium, pii=standard, fin=low_operation"
    },
    {
      "rule_id": "ddao-controls-mapping.supervised_autonomous-high",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "level=supervised_autonomous, risk=medium"
    },
    {
      "rule_id": "autonomy-inference.supervised_autonomous",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "human_approval=sometimes, ext=limited_write"
    },
    {
      "rule_id": "criticality-matrix.standard-low_operation",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "pii=standard, fin=low_operation"
    }
  ],
  "doctrine_version": "ACF framework v1.0 / rules 2026-06",
  "doctrine_hash": "sha256:119819463363cde0649504ab8ed5a96982fdb8506441f2c5e76e7e3c3feb77f1",
  "doctrine_signature": "ed25519:3R0oIiqL3Kgd…",
  "doctrine_archive_url": "https://acfstandard.io/archive/doctrine/v1.0/doctrine-v1.0.json",
  "regulatory_snapshot": "EU AI Act (Reg. 2024/1689, incl. Digital Omnibus deferral) + GDPR (Reg. 2016/679) + DORA (Reg. 2022/2554) + NIS2 (Dir. 2022/2555) + ISO 42001:2023: as of 2026-06-07",
  "generated_at": "2026-11-01T12:06:31.055Z",
  "disclaimer": "Preliminary qualification produced by the ACF® deterministic engine. Not legal advice. Human review required. Do not use for autonomous regulatory decision-making. See doctrine_archive_url for the version of the doctrine used.",
  "conversion_cta": "Generate the full auditable PDF report on https://acfstandard.com/compliance?ref=mcp"
}

Common errors

  • Invalid parameters: one of the enumerated fields (human_approval_required, personal_data_level, financial_exposure, external_actions, usage_audience) outside its values, or empty decisions_taken. The call fails with a JSON-RPC error whose message lists the offending fields.
  • Low confidence: when few context fields are provided, confidence is low and assumptions states what was assumed. Complete the input before relying on the result.