ACF
acfstandard.io
Developer docs
FR
READ

acf.search

Full-text search over the entire ACF® corpus — principles, autonomy levels, dimensions, DDAO, fiches, regulatory guides, glossary, whitepaper. Returns a ranked list of canonical URIs to read next.

Tip
READ tools return signed corpus content with no inference layer. acf.search does not rewrite, summarise or guess — it ranks acf://… URIs that a follow-up call will read.

When to use

Use this tool when the agent has to answer an operational or regulatory question and does not yet know which ACF® resource to cite. The query can be a technical keyword (“kill switch”), a business question (“who signs the go-live?”) or an external reference (“GDPR Art. 35”). The output gives the candidate URIs ranked by relevance, not their content.

Scoping step only: chain with acf.fiche.lookup, acf.regulation.article or a resources/read call to fetch the signed content before replying to the user. The lunr score is weighted to promote framework content (principles, levels, dimensions) above glossary synonyms.

Input parameters

Four simple fields. The query is normalised (diacritics stripped, lower-cased) before lunr indexing.

querystring (1-200)required
Search terms. Accents and case are normalised (“souveraineté” matches the stored token “souverainete”).
scope"all" | "framework" | "fiche" | "guide" | "whitepaper" | "glossary"default: "all"
Restrict the search to a sub-corpus. framework bundles principles, autonomy levels, dimensions and DDAO.
locale"en" | "fr"default: "en"
Locale of the queried corpus. Documents exist in FR and EN; no translation is invented.
limitinteger (1-20)default: 10
Maximum number of hits returned after weighted score sort.

Output schema

A list of hits ranked by descending score, plus the signed footer identifying the version of the corpus queried.

querystring
The query as received (not the normalised version). Useful for the audit trail.
scopestring
Sub-corpus actually queried.
locale"en" | "fr"
Locale actually served.
hits{ uri, title, snippet, score, category, locale }[]
Result array. uri is an acf://… to pass to resources/read or another READ tool. category is one of principle, autonomy_level, dimension, ddao, fiche, guide, whitepaper, glossary.
doctrine_versionstring
Doctrine version frozen for this call.
doctrine_hashstring
SHA-256 hash of the served corpus. Lets you check that no silent rewrite happened between two calls.
doctrine_signaturestring
Ed25519 signature of hash + version. Independently verifiable against the published public key.
doctrine_archive_urlstring
URL of the immutable doctrine archive matching doctrine_hash.
generated_atstring (ISO-8601)
UTC timestamp of the response.
disclaimerstring
Constant reminder: scores rank candidates, they do not validate an answer.

Example call

The agent searches for kill-switch-related resources while preparing a DORA audit reply:

search.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.search",
  arguments: {
    query: "kill switch escalation thresholds",
    scope: "all",
    locale: "en",
    limit: 5,
  },
});

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

Response

response.jsonjson
{
  "query": "kill switch escalation thresholds",
  "scope": "all",
  "locale": "en",
  "hits": [
    {
      "uri": "acf://fiche/ACF-06",
      "title": "ACF-06 — Kill switch and degraded modes",
      "snippet": "Defines the mandatory shutdown paths, the escalation thresholds that fire them, and the quarterly test cadence required for any N2+ agent.",
      "score": 8.42,
      "category": "fiche",
      "locale": "en"
    },
    {
      "uri": "acf://framework/principle/P-04",
      "title": "Principle P-04 — Reversibility",
      "snippet": "Every autonomous decision must remain reversible by a human operator within a bounded recovery window.",
      "score": 6.18,
      "category": "principle",
      "locale": "en"
    },
    {
      "uri": "acf://framework/autonomy-level/N2",
      "title": "Autonomy level N2 — Supervised autonomy",
      "snippet": "The agent decides and executes on its own; the DDAO sets escalation thresholds, a kill switch, and a signed decision register.",
      "score": 5.71,
      "category": "autonomy_level",
      "locale": "en"
    },
    {
      "uri": "acf://fiche/ACF-08",
      "title": "ACF-08 — Signed decision register",
      "snippet": "Every escalation event is logged in the signed register with the trigger threshold that fired it.",
      "score": 4.92,
      "category": "fiche",
      "locale": "en"
    },
    {
      "uri": "acf://glossary/kill%20switch",
      "title": "kill switch",
      "snippet": "Mandatory shutdown path that any DDAO can fire at any time, without prior sign-off, to stop an agent.",
      "score": 3.65,
      "category": "glossary",
      "locale": "en"
    }
  ],
  "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",
  "generated_at": "2026-06-14T11:47:22.318Z",
  "disclaimer": "Search results rank candidate resources by relevance — read the cited resources before quoting them."
}

Common errors

  • InvalidEnumValue scope receives an out-of-list value (e.g. scope: "fiches" plural). Fix to one of the six canonical values.
  • QueryTooLong query > 200 chars. acf.search is built for keywords, not full paragraphs — boil the intent down to a few tokens.
  • EmptyHits no result clears the relevance threshold. Broaden scope to "all", drop special characters or rephrase.
  • acf.fiche.lookup fetch the signed content of an ACF® fiche candidate identified by acf.search.
  • acf.regulation.article fetch the verified text of a regulatory article when the query points at an AI Act, GDPR, DORA, NIS2 or ISO 42001 guide.
  • acf.classify-agent when the search ends up needing an agent qualification, switch to the dedicated REASON tool.