ACF
acfstandard.io
Developer docs
FR
MCP resources

Resources reference

The acf-mcp server exposes the ACF® corpus as MCP resources — canonical URIs, typed MIME, read-only access, signed content. Every resource is addressable by its acf://… URI and served in the locale negotiated with the client.

Tip
Resources vs tools. An MCP tool either reasons (REASON) or retrieves (READ); an MCP resource is just read. acf-mcp resources are the raw matter: whitepaper, cards, regulator articles, glossary, metadata. READ tools (e.g. acf.fiche.lookup) are enriched access points to the same resources with context and cross-refs.

What is an MCP resource

In the Model Context Protocol specification, a resource is content identified by a URI, accompanied by a MIME type and exposed read-only through the resources/list and resources/read methods. The client negotiates the content, the server serves it. It is the doctrinal equivalent of an HTTP GET — no mutation, no side effect.

Every acf-mcp resource is signed at the source: the doctrine version is frozen in the content_hash exposed by acf://meta, signed Ed25519 and archived on acfstandard.com. A client can therefore cite a resource in a user reply and prove, offline and years later, that it was read exactly as it stands today.

By category

ACF® resources are organised into four logical categories. Click for the exhaustive list and a fetch example.

By URI pattern

All resources are addressed by a URI of the form acf://category/identifier. The locale is negotiated outside the URI via the Accept-Language header or the ACF_MCP_LOCALE variable — not in the URI itself, so that each piece of content has a single canonical URI.

  • acf://whitepaper the founding ACF® whitepaper (Markdown)
  • acf://deck the standard’s presentation deck (Markdown)
  • acf://manual, acf://manual/toc, acf://manual/section/{N} the full pedagogical manual, its table of contents, and each part individually (9 parts)
  • acf://framework/principle/{P1..P4} the 4 founding principles (structured JSON)
  • acf://framework/autonomy-level/{N0..N3} the 4 autonomy levels (structured JSON)
  • acf://framework/dimension/{D1..D6} the 6 maturity dimensions (structured JSON)
  • acf://framework/ddao the canonical definition of the DDAO role
  • acf://fiche/{ACF-00..ACF-16} one of the 17 methodological cards (Markdown with frontmatter)
  • acf://guide/{ai-act|gdpr|dora|nis2|iso-42001} the operational guide for a regulator (Markdown)
  • acf://glossary the canonical index of ACF® terms
  • acf://meta doctrine metadata — version, hash, archive URL, locales

Fetching a resource

An MCP client calls the resources/read method with the target URI. The server returns a contents array with the MIME type and the text. The actually-served locale is exposed in the served_locale frontmatter (for Markdown) or in the served_locale / is_fallback envelope (for JSON), so a client can detect a fallback to English.

fetch-resource.tsts
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@latest"],
  env: { ACF_MCP_LOCALE: "fr" },
});

const client = new Client({ name: "acf-demo", version: "1.0.0" }, {});
await client.connect(transport);

// List every resource
const { resources } = await client.listResources();

// Read one — here ACF-07 (Kill switch)
const { contents } = await client.readResource({
  uri: "acf://fiche/ACF-07",
});

console.log(contents[0].mimeType);   // "text/markdown"
console.log(contents[0].text);       // frontmatter + body

Signing

Signing does not target each resource individually — it targets the content_hash of the full doctrine, exposed by acf://meta and embedded in every tool output footer. That hash is what makes the whole corpus defensible: if a single card changes, the hash changes, and the entire doctrine receives a new version. Cryptographic details and verification code: Signatures page.