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-mcp

Or 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_git asks before overwriting, faf_sync previews each change. Not a blog.
  • v3.0.2: names that match the code. faf_bi_sync is now faf_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.
  • tbd and todo, in any case, count as empty.

Try it

bunx faf-mcp

Then, 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