acf.evaluate-agent-mandate
Preliminary audit of an existing agent mandate, eight canonical checks (DDAO appointed, perimeter, forbidden actions, escalation thresholds, kill switch, audit log, doctrine version, sign-off) → verdict approve / approve_with_changes / reject + required additions.
TBD, “ à compléter” or ??? in the text automatically drops the score by 20 points and classes the mandate as “ not signable”, by design. requires_human_review stays constant.When to use
Use this tool when an agent mandate has already been drafted, by a business team, a law firm, a DDAO, and you need to filter it through ACF® before signature or inspection. The tool applies eight canonical regex checks on the text and computes a weighted 0-100 compliance score, then rules approve / approve_with_changes / reject.
The board-level question the output answers: “Is this mandate signable as-is?” If not, required_additions surfaces the draft text to add, ACF® reference card by card. The automatic penalty on TBD/??? placeholders makes incomplete mandates immediately rejectable.
Input parameters
Four fields, two required. The mandate_text is passed raw to the evaluator, no upstream cleaning by the tool.
mandate_textstring (50-10000)requiredagent_purposestring (10-500)requireddeployment_contextstring (≤500)locale"en" | "fr"default: "en"Output schema
The output is a structured object containing a verdict, the compliance score, strengths, gaps, additions to integrate, and the signed footer.
verdict"approve" | "approve_with_changes" | "reject"rationalestringstrengthsstring[]identified_gaps{ area: string, severity: "low" | "medium" | "high" | "critical", description: string }[]required_additions{ section: string, suggested_text: string, fiche_reference: string }[]reference_fichesstring[]acf_compliance_scorenumber (0-100)confidence"low" | "medium" | "high"assumptionsstring[]gaps_to_validatestring[]requires_human_reviewtrueExample call
A treasury settlement agent mandate, complete, awaiting sign-off:
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-09 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));Response
{
"verdict": "approve",
"rationale": "All canonical mandate sections are present; no critical placeholders detected.",
"strengths": [
"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": [
{
"area": "Identification du DDAO",
"severity": "high",
"description": "Identification du DDAO missing or insufficient."
}
],
"required_additions": [
{
"section": "Identification du DDAO",
"suggested_text": "Name an actual DDAO (person or role): placeholders like 'TBD' are not acceptable.",
"fiche_reference": "ACF-13"
}
],
"reference_fiches": [
"ACF-04",
"ACF-07",
"ACF-P6",
"ACF-13"
],
"acf_compliance_score": 85,
"confidence": "low",
"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": false,
"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: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.493Z",
"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."
}Common errors
- Invalid parameters: mandate_text under 50 or over 10,000 characters, or empty agent_purpose. 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.
Related tools
acf.assign-ddao-controls: obtain the control set to paste into the mandate before the audit.acf.classify-agent: qualify the agent upstream if the mandate does not yet specify its autonomy level or regulatory role.acf.fiche.lookup: fetch the detail of referenced cards (ACF-04, ACF-07, ACF-P6, ACF-13) when drafting required_additions.