ACF
acfstandard.io
Developer docs
EN
REASON

acf.evaluate-agent-mandate

Audit préliminaire d’un mandat d’agent existant — huit checks canoniques (DDAO nommé, périmètre, actions interdites, seuils d’escalade, kill switch, registre, version doctrine, sign-off) → verdict approve / approve_with_changes / reject + additions requises.

!Attention
Cet outil produit un verdict préliminaire sur un mandat existant, pas un avis juridique. La présence de TBD, « à compléter » ou ??? dans le texte abaisse automatiquement le score de 20 points et classe le mandat « non signable » — c’est par design. requires_human_review reste constant.

Quand l’utiliser

Utilisez cet outil quand un mandat d’agent a déjà été rédigé — par une équipe métier, un cabinet, un DDAO — et qu’il faut le passer au filtre ACF® avant signature ou inspection. L’outil applique huit checks regex canoniques sur le texte et calcule un score de conformité 0-100 pondéré, puis tranche en approve / approve_with_changes / reject.

La question board que la sortie tranche : « Ce mandat est-il signable en l’état ? » Si non, les required_additions donnent les rédactions à ajouter, fiche ACF® de référence par fiche. Le pénalty automatique sur les placeholders TBD/??? rend les mandats à trous immédiatement rejetables.

Paramètres d’entrée

Quatre champs, dont deux obligatoires. Le mandate_text est passé brut à l’évaluateur — pas de pré-nettoyage côté outil.

mandate_textstring (50-10000)required
Texte intégral du mandat à auditer. Les huit checks regex matchent sur ce texte ; la présence de TBD / à compléter / ??? est pénalisée automatiquement.
agent_purposestring (10-500)required
Finalité courte de l’agent. Sert au rationale et au gaps_to_validate, ne pilote pas les checks (qui restent canoniques).
deployment_contextstring (≤500)
Contexte de déploiement (« banque UE, trésorerie interne », « santé publique, accès patients »…). Optionnel mais renforce le niveau de confiance.
locale"en" | "fr"default: "en"
Langue de la sortie textuelle (rationale, descriptions de gaps).

Schéma de sortie

La sortie est un objet structuré contenant un verdict, le score de conformité, les forces, les gaps, les additions à intégrer et le pied-de-page signé.

verdict"approve" | "approve_with_changes" | "reject"
Verdict global. ≥ 80 = approve ; 50-79 = approve_with_changes ; < 50 = reject. La présence de placeholders TBD bascule presque toujours en reject.
rationalestring
Justification textuelle du verdict, prête à coller dans une revue DDAO.
strengthsstring[]
Liste des sections canoniques effectivement présentes dans le mandat.
identified_gaps{ area: string, severity: "low" | "medium" | "high" | "critical", description: string }[]
Sections manquantes ou insuffisantes. Severity dérive du poids du check (15 = high, 10 = medium, 5 = low) ; les placeholders TBD donnent severity = critical.
required_additions{ section: string, suggested_text: string, fiche_reference: string }[]
Rédactions concrètes à ajouter au mandat, fiche ACF® de référence par section.
reference_fichesstring[]
Fiches ACF® systématiquement mobilisées par cette évaluation (ACF-03, ACF-07, ACF-09, ACF-12).
acf_compliance_scorenumber (0-100)
Score pondéré sur 100. Total des poids des checks satisfaits, moins 20 si présence de placeholders TBD.
confidence"low" | "medium" | "high"
Niveau de confiance global. medium par défaut, monte avec un deployment_context fourni.
assumptionsstring[]
Hypothèse principale : la V1.0 applique huit checks canoniques sans surcharge sectorielle.
gaps_to_validatestring[]
Trous à valider avec le DDAO — SLA réels d’escalade, exécution effective du drill kill switch.
requires_human_reviewtrue
Constant. Aucun appel ne retourne false — même un verdict approve impose la signature humaine.

Exemple d’appel

Un mandat d’agent de réconciliation de trésorerie, complet, à valider avant sign-off :

evaluate-mandate.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 mandateText = `
Agent: Treasury Settlement Agent
DDAO: Marie Dupont, Head of Treasury Ops
ACF® doctrine version: v1.0

Decision perimeter (allowed): reconcile intra-day settlement breaks under 10k EUR, post matching entries to the GL.
Forbidden actions: any FX trade, any payment instruction outside the pre-approved counterparty list, any change to the ledger structure.
Escalation thresholds: any break > 10k EUR, any pattern of 3+ breaks from the same counterparty within 24h.
Kill switch: Ops can suspend the agent within 2 minutes via the ACF-07 panel. Drilled quarterly.
Audit log: every action logged with input, decision, signature; 6-month retention in the ACF-08 register.
Sign-off: DDAO + CISO + Head of Compliance.
`;

const result = await client.callTool({
  name: "acf.evaluate-agent-mandate",
  arguments: {
    mandate_text: mandateText,
    agent_purpose:
      "Reconcile intra-day settlement breaks and post matching journal entries up to 10k EUR.",
    deployment_context: "EU bank, internal treasury, 24/7 ops.",
    locale: "en",
  },
});

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

Réponse

response.jsonjson
{
  "verdict": "approve",
  "rationale": "All canonical mandate sections are present; no critical placeholders detected.",
  "strengths": [
    "Identification du DDAO: present.",
    "Périmètre de décision: present.",
    "Actions interdites: present.",
    "Seuils d'escalade: present.",
    "Kill switch: present.",
    "Audit log / decision register: present.",
    "Doctrine version: present.",
    "Sign-off: present."
  ],
  "identified_gaps": [],
  "required_additions": [],
  "reference_fiches": ["ACF-03", "ACF-07", "ACF-09", "ACF-12"],
  "acf_compliance_score": 100,
  "confidence": "high",
  "assumptions": [
    "Mandate evaluation uses an 8-check canonical baseline — sector-specific extras not yet implemented."
  ],
  "gaps_to_validate": [
    "Confirm with the DDAO that the named escalation thresholds reflect real organisational SLAs.",
    "Confirm that the kill switch drill has been run in the last quarter."
  ],
  "requires_human_review": true,
  "rationale_per_rule": [
    {
      "rule_id": "evaluate-mandate.ddao_appointed",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "Identification du DDAO check"
    },
    {
      "rule_id": "evaluate-mandate.decision_perimeter",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "Périmètre de décision check"
    },
    {
      "rule_id": "evaluate-mandate.forbidden_actions",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "Actions interdites check"
    },
    {
      "rule_id": "evaluate-mandate.escalation_thresholds",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "Seuils d'escalade check"
    },
    {
      "rule_id": "evaluate-mandate.kill_switch",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "Kill switch check"
    },
    {
      "rule_id": "evaluate-mandate.audit_log",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "Audit log / decision register check"
    },
    {
      "rule_id": "evaluate-mandate.doctrine_version",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "Doctrine version check"
    },
    {
      "rule_id": "evaluate-mandate.sign_off",
      "rule_version": "2026-06",
      "fired": true,
      "evidence": "Sign-off check"
    }
  ],
  "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-14T12:14:52.778Z",
  "disclaimer": "Preliminary qualification only — not legal advice. Human review required."
}

Erreurs courantes

  • InputTooShort mandate_text &lt; 50 caractères ou agent_purpose &lt; 10 caractères. Un mandat aussi court ne contient pas les huit sections canoniques — rédigez ou rejetez.
  • InputTooLong mandate_text &gt; 10000 caractères. Découpez le mandat en sections évaluées séparément, ou retirez les annexes non auditables (ex. politiques internes citées en référence).
  • DoctrineSnapshotMismatch le moteur de checks ne correspond pas au doctrine_hash demandé. Mettez acf-mcp à jour ou pointez vers la version archivée.
  • acf.assign-ddao-controls obtenir le jeu de contrôles à coller dans le mandat avant l’audit.
  • acf.classify-agent qualifier l’agent en amont si le mandat ne précise pas encore son niveau d’autonomie ou son rôle régulatoire.
  • acf.fiche.lookup récupérer le détail des fiches référencées (ACF-03, ACF-07, ACF-09, ACF-12) pour rédiger les required_additions.