The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the The Metis Fca Handbook AI Harness MCP listing page.
An MCP (Model Context Protocol) server that integrates the Metis FCA Handbook AI Harness into your AI workflow. MCP is supported by Claude, OpenAI, Gemini, and most desktop/IDE MCP clients (Cursor, Windsurf, Cline, and others) — this README uses Claude Code and Claude Desktop as fully worked examples; adjust the configuration steps to fit your own client.
Source & full documentation: github.com/99blakeD99/the-metis-fca-handbook-ai-harness-mcp-files
evaluate_fca_handbook_applicabilityEvaluate which FCA Handbook entries apply to an entity, via the Metis FCA Handbook AI Harness. One-shot: no session, no conversation state. Supports quick mode (60-120 seconds, default) and full mode (longer, more detailed). Returns a compliance report with verbatim citations, gaps, and refinement suggestions.
Efficiency Multiplies effectiveness of compliance advice. Saves £80+ in token fees per Harness run.
Deals with "Hard Problem", in which LLMs' token incentives prioritise training data so results are unreliable.
Verbatim citations Quotes verbatim entries from the FCA Handbook. Other AI systems struggle to do this.
Matches real-world need You do not have to start off knowing which sections you are looking for. Carries out structured searches across all 33,000+ FCA Handbook entries.
Secure Design Harness compartmentalisation, one-shot structure, and statelessness fits natively with emerging AI agent security standards such as OWASP Top 10 for Agentic Applications 2026.
AI Accessible Integrates easily with AI workflows and agents. Your LLM can use it as a tool.
Experience the Harness interactively before integrating:
Email the-metis-fca-handbook-ai-harness@jbmd.co.uk and request a free temporary Access Code.
Ask compliance questions in natural language and watch each reasoning step unfold in real-time.
The Harness is built on proven principles:
Embed FCA reasoning as a service within your compliance platform. Users ask natural-language questions; your platform calls the Harness and presents structured reasoning.
Agents building compliance workflows can include FCA Handbook reasoning as a composed tool—no external API calls, just MCP configuration.
Integrate into document review or due-diligence pipelines. Automatically screen new rules against FCA applicability.
FS firms screening MCP servers will find:
Visit the Metis account dashboard:
The mcpServers JSON shape below is shared by most desktop/IDE MCP clients, but the config file location and restart step vary by client. Pick the one that matches what you are using.
Important: The Harness API key should be supplied at runtime from an environment variable or secrets manager, never hardcoded as a literal value in a configuration file that may be committed to a shared repository. Two methods are supported — pick one, since they require different MCP config:
export METIS_API_KEY="sk_live_..." to your shell startup file (~/.bashrc, ~/.zshrc, etc.), before launching your MCP client (VS Code, Claude Desktop, etc.), so the variable is present in the client's own process environment. With this method, your MCP config should reference the variable via substitution:
.env file in your project directory containing METIS_API_KEY=sk_live_.... The server loads this itself at startup (via load_dotenv()) — your MCP client never needs to see the value. With this method, omit the env block from your MCP config entirely. Do not copy the "${METIS_API_KEY}" snippet from Method A — your client's own environment will not have that variable set, so the substitution will silently fail and pass the literal string ${METIS_API_KEY} through as your API key. This produces a 401 error that is easy to mistake for a bad/revoked key.⚠️ If your MCP config lives in your home directory (~/.mcp.json) rather than a project-local location (.mcp.json in a project root), it applies to every project on the machine — a stray ${METIS_API_KEY} placeholder there will break the harness for every project, not just the one you are setting up. Prefer a project-local config unless you specifically want a shared, machine-wide key.
Claude Code (the Claude IDE extension) supports both global (user-level) and project-level MCP configuration. Note: MCP servers are configured in .mcp.json files, never in .claude/settings.json — that file is for permissions/preferences only and does not recognize an mcpServers key (Claude Code will reject it with Unrecognized field: mcpServers).
The easiest way to add either scope is the CLI itself, which writes the correct file for you. Quote the ${METIS_API_KEY} reference exactly as shown (single quotes) so your shell does not expand it before claude mcp add sees it — otherwise your actual key gets written as a literal into the config file, which is the hardcoding this whole section is trying to avoid:
This is Method A — export the real key in your shell profile as shown below. Use --scope project instead of --scope user for a project-local setup. If you would rather edit the file directly, or want Method B (.env), see below.
If you work across multiple projects, configure the MCP globally so it is available everywhere. Because this file is shared machine-wide, use Method A — a stray .env lookup path is per-project and does not fit a global setup as cleanly.
File location: ~/.mcp.json (your home directory — note this is a standalone file, not inside .claude/)
Edit or create ~/.mcp.json and add:
Then add to your shell profile (e.g. ~/.bashrc, ~/.zshrc, ~/.fish/config.fish), before starting Claude Code:
Replace sk_live_... with your actual API key from your Metis account. Claude Code substitutes ${METIS_API_KEY} from this environment variable when it starts the server — if the variable is not set at that point, Claude Code loads the server with the literal string ${METIS_API_KEY} instead (and warns about it), which is what causes the misleading 401 described in Troubleshooting below.
Restart: Restart Claude Code. Once connected, the evaluate_fca_handbook_applicability tool will be available in all projects.
If you only need the MCP in one specific project, configure it project-locally instead. This is the natural fit for Method B.
File location: .mcp.json in your project root (a standalone file, not inside .claude/)
Edit or create .mcp.json and add — no env block, per Method B above:
Then create a .env file in your project root containing:
Replace sk_live_... with your actual API key from your Metis account.
Important: Project-level .mcp.json and .env files are often checked into version control — ensure METIS_API_KEY is in .gitignore before committing (the .mcp.json itself contains no secret, since Method B omits the env block), or use the global configuration approach instead (recommended for FS firms).
Restart: Claude Code will detect the change and reload MCP connections automatically (or you can restart the IDE).
File location:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.jsonClaude Desktop's config is inherently machine-wide (there is no project-local variant), so Method A is the more consistent fit — see the ⚠️ note above before using Method B here.
Method A — Shell Profile:
Set METIS_API_KEY in your system environment (e.g. in ~/.bashrc, system preferences, or via GUI) before launching Claude Desktop:
Method B — .env File: create a .env file in the directory Claude Desktop runs from, containing METIS_API_KEY=sk_live_..., and use the config above with the env block omitted entirely (not left in with the ${METIS_API_KEY} placeholder — see Method B warning above).
Restart: Quit and restart the Claude Desktop app. Once connected, the evaluate_fca_handbook_applicability tool will be available.
These clients typically use the same mcpServers JSON shape as Claude Desktop above. Consult your client's documentation for the config file location, restart procedure, and whether it performs ${VAR} substitution in env blocks the way Claude Code and Claude Desktop do (some use GUI connectors rather than JSON files, or may not substitute at all — check before relying on Method A).
Claude Code, first run only: the first time you launch claude (interactively, not with -p) in a project with a new or changed project-scoped .mcp.json, it shows a one-time trust/approval prompt for that server before connecting — until you accept it, the server sits in a "pending approval" state and its tool is not actually available (running claude mcp list will show ⏸ Pending approval). Accept the prompt, or run /mcp in an existing session to approve it there. This gate does not apply to ~/.mcp.json (global scope).
Once approved/restarted, you should see evaluate_fca_handbook_applicability available as a tool in your agent workflows. If it does not appear, check the Troubleshooting section below.
The tool accepts two parameters:
"quick" (default, ~60-120 seconds) or "full" (longer, detailed conditional reasoning)The tool returns:
input, output, and total token counts, for cost/complexity trackingClaude Code: "Settings validation failed: Unrecognized field: mcpServers":
mcpServers was added to .claude/settings.json (or ~/.claude/settings.json) — that file does not support it. Move the mcpServers block to .mcp.json (project-local) or ~/.mcp.json (global) instead, per 3a above, or run claude mcp add --scope project|user ... to have Claude Code write it for you.Claude Code: the model seems vaguely aware "an MCP" exists but does not know its name or what it does, and never calls it:
.mcp.json server never actually connects, so the model never receives its real name/description/schema, only generic MCP-resource tools. Run claude mcp list to confirm (⏸ Pending approval means this is it), then run /mcp or restart claude interactively to approve it.Tool not appearing (Claude Desktop; the same class of issue applies to most desktop MCP clients):
fca-handbook-harness-mcp resolves on the command line (which fca-handbook-harness-mcp / where fca-handbook-harness-mcp). Desktop MCP clients typically launch with a minimal environment and may not see the same PATH as your shell — if the command does not resolve, replace "command": "fca-handbook-harness-mcp" with the absolute path from that lookup401 Unauthorized with a key you've confirmed is valid on the dashboard:
${METIS_API_KEY} (or similar) placeholder that never got substituted — this happens when Method B (.env) is used but the config still has an env block written for Method A. Inspect the actual spawned server process's environment (e.g. /proc/<pid>/environ on Linux) to confirm what value it is really receivingMETIS_API_KEY is set — either in the config env (Method A) or in a .env file the server can find (Method B), not both and not neitherConnection timeout:
mcp, requests)uv run__init__.py — Python package markerFor questions or issues, contact: the-metis-fca-handbook-ai-harness@jbmd.co.uk
Product: Metis FCA Handbook AI Harness
License: MIT