TL;DR: faf-mcp v4 scores with faf-cli v8's always-33 kernel, so your IDE
gets the same number as faf-cli and claude-faf-mcp. Upgrading from v3? Run faf_auto once. It marks the 12 enterprise slots slotignored, and
your score is back.
In Plain English
Old state. faf-mcp used faf-cli v7's scoring, which counted 21 slots. The always-33 tools counted 33. Your IDE and the rest of FAF could show different numbers for the same file.
Fix. v4 composes faf-cli v8. Every tool's score now comes from the
always-33 kernel. Slots that are not applicable to a project are marked slotignored, and do not score.
New state. One score, every IDE. Cursor, VS Code, Windsurf and Cline give your file the same score as faf-cli.
Cursor: add .FAF Context in one click.
Everywhere else, point your MCP config at:
bunx faf-mcpOr npx faf-mcp. Config files: Cursor ~/.cursor/mcp.json ·
Windsurf ~/.codeium/windsurf/mcp_config.json · Cline MCP settings · VS Code
MCP config. For Claude, use claude-faf-mcp v7.
What happened since Compose
One blog, one arc. The last faf-mcp write-up was v3.0 The Compose Edition. Short tour to today:
- v3.0.1: tools that say what they do.
faf_gitasks before overwriting,faf_syncpreviews each change. Not a blog. - v3.0.2: names that match the code.
faf_bi_syncis nowfaf_claude. Not a blog. - v4.0.0: The Always33 Edition. This is the log entry for the stretch.
This is Part III of the Always33 series. Part I was faf-cli v8, where the engine was authored. Part II was claude-faf-mcp v7. The overview is The Always33 Suite.
What v4 is
The Always33 engine, in your IDE. faf-mcp composes faf-cli ^8.0.0. The old range, ^7.12.0, could never reach 8.x. Every
tool's score is now faf-cli v8's, from the always-33 kernel. Checked live: faf_score gave faf-python-sdk 56, mcp-context-card 56 and faf-cli ✪ 100, the
same as faf-cli v8 and claude-faf-mcp v7.
One kernel copy. The direct scoring-kernel dependency is gone; nothing imported it. The only kernel in an install is faf-cli's own.
Your 21 slots, and the 12 enterprise slots in view. faf-cli fills the 21
base slots and marks the 12 enterprise slots slotignored unless your app type
uses them. Those slots drop out of the count.
Upgrading: run faf_auto once
This is why v4 is a major release. A .faf without the 12 enterprise markers
now counts them as empty: 21 filled is 64%. Run faf_auto. It writes the
markers and the score returns. On a v3-era file we tested:
faf_auto 56% → 100%Anything that gates on faf_score should re-check its threshold.
Also in v4
- faf-cli's owner rule for the blocks it writes. A block faf can prove is its own is replaced in place. An ambiguous one is left whole below a fresh block. Nothing is ever partly wiped.
tbdandtodo, in any case, count as empty.
Try it
bunx faf-mcpThen, in your IDE's AI: ask it to run faf_auto, then faf_score.
More depth: faf-cli v8 · claude-faf-mcp v7 · The Always33 Suite · CHANGELOG · repo.
Technical details
- Version: 4.0.0 (September 26, 2026)
- Edition: The Always33 Edition
- Scoring: faf-cli v8's always-33 kernel (Rust → WASM); 21 slots filled,
the 12 enterprise slots
slotignored - Tools: Core 15 (29 with
FAF_TOOLS=all) - Tests: 402
- Runs in: Cursor · VS Code · Windsurf · Cline, local stdio
- Needs: Node 22 or later
Feedback welcome
Questions, nits, suggestions: guide the next version. Tell us what you want to see.
