Custom MCP client
If no MCP client in the ecosystem fits your case — Slack bot, SaaS backend, internal automation — you can talk to acf-mcp directly using the official @modelcontextprotocol/sdk (Node, Python, Go in progress).
Install the SDK
npm install @modelcontextprotocol/sdkConnect, list, call
The pattern is identical across both SDKs: (1) open the stdio transport by spawning npx -y acf-mcp, (2) initialise the session, (3) discover then call.
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"],
env: { ACF_LOCALE: "en" },
});
const client = new Client(
{ name: "my-app", version: "1.0.0" },
{ capabilities: {} },
);
await client.connect(transport);
// 1. Discover tools
const { tools } = await client.listTools();
console.log("available:", tools.map((t) => t.name));
// 2. Call a tool
const result = await client.callTool({
name: "acf.advisor",
arguments: { case_description: "We are building a recruiting agent..." },
});
console.log(result.content);
// 3. Read a resource
const wp = await client.readResource({ uri: "acf://whitepaper/fr" });
console.log(wp.contents[0].text.slice(0, 200));
await client.close();Server-exposed info
- Tools — 12 tools (7 REASON + 5 READ). See the tools reference.
- Resources — 34 signed resources (whitepaper, 17 cards, 5 regulator guides, glossary). See the resources reference.
- Prompts — 6 problem-first prompts ready to start an audit or a qualification.
Long-running sessions
For a backend service that opens the session once and keeps it warm, hold a reference to the transport and call its methods as needed. For a batch job, close explicitly (client.close()) at the end to release the npx subprocess.
HTTP transport
If you cannot run npx in your environment, acf-mcp also exposes an HTTP transport (acf-mcp/transport/http). To self-host behind your own auth gateway. See Authentication.