Configuration
acf-mcp is a local MCP server that runs on the client machine, started by npx over stdio. It needs no secret and a single environment variable, for the default language.
iNote
No secret. acf-mcp stores no API key, no token, no credential, and calls no remote service during a tool call: the doctrine, the rules and the search index ship inside the package.
Declare the server in your client
Every MCP client (Claude Desktop, Cursor, Windsurf, Continue, Zed) uses the same declaration: a command and its arguments. The client starts the server and talks to it over stdio.
mcp-config.jsonjson
{
"mcpServers": {
"acf": {
"command": "npx",
"args": ["-y", "acf-mcp"],
"env": {
"ACF_MCP_LOCALE": "fr"
}
}
}
}Environment variable
ACF_MCP_LOCALE"fr" | "en"default: "en"Default language of resources when neither the URI (?lang=) nor a tool’s locale argument sets it. French and English are served; any other value falls back to English.
Choosing the language per call
The priority order is: explicit parameter (?lang= in the URI or locale argument), then ACF_MCP_LOCALE, then English.
locale.tstypescript
// Per resource: ?lang=fr or ?lang=en
await client.readResource({ uri: "acf://fiche/ACF-13?lang=fr" });
// Per tool call: the locale argument
await client.callTool({
name: "acf.glossary.define",
arguments: { term: "DDAO", locale: "fr" },
});Pinning the version
npx -y acf-mcp takes the latest published version. For an audit, pin the version: the doctrine hash and signature only change with it.
mcp-config.jsonjson
{
"mcpServers": {
"acf": {
"command": "npx",
"args": ["-y", "acf-mcp@2.0.1"]
}
}
}The served version, its hash and its public key are read from the acf://meta resource. See Signatures.