.FAF Context — persistent project context for Cursor, VS Code and every MCP-compatible IDE.
Runs on your machine from its package; the steps are below.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y faf-mcp
MCP client config
{
"mcpServers": {
"faf-context": {
"command": "npx",
"args": [
"-y",
"faf-mcp"
]
}
}
}Home: wolfe-jam.github.io/faf-mcp
.FAF Context is the MCP server for the IDE side of FAF. One project.faf in your repo, and every AI tool's context file is authored from it — AGENTS.md, .cursorrules, GEMINI.md, CLAUDE.md — and scored, so you know exactly where to focus. It runs locally over stdio on the same faf-cli the terminal uses. The FAF ecosystem it belongs to has comfortably passed 100k downloads across npm and PyPI (live count).
⭐ Bookmarks it for you, helps other devs find it too.
One engine, one number: faf-mcp 4 scores with faf-cli 8's always-33 kernel — the same score faf-cli, claude-faf-mcp 7 and faf-kernel give.
slotignored unless your app-type uses them. faf_score scores against all 33; slotignored slots drop out of the denominator..faf without the 12 markers now scores against 33. Run faf_auto — it writes them and your score returns.Tools that say what they do: faf_git scores with faf-cli and asks before overwriting, faf_sync previews each change, and imports say when nothing was written.
faf_git has one scorer. It reports faf-cli's score of the file it authored, writes the slots faf-cli scores, and asks before replacing an existing project.faf.faf_sync previews each change. The dry run lists every field it would update and names apply: true.merge: true with no project.faf fails clearly.3.0.1 renamed faf_bi_sync to faf_claude and made faf_init write what faf init writes. The full history is in the CHANGELOG.
Compose, don't port: faf-mcp 3.0 runs on faf-cli 7.12 in-process — one scorer, one set of renderers, one injector — and every number, file and claim this package makes is true. Local stdio, 29 tools, Node 22+.
faf export and faf sync write. faf_auto runs faf-cli's own update chain. The hand-ported renderers, the pre-v3 CLAUDE.md template and the local injector are gone.faf_auto, faf_go, faf_dna, faf_doctor and faf_claude all report faf-cli's scorer on the bytes on disk — no local heuristics, no frozen birth score, no "0%".which faf detector, the exec fallback and the "install faf-cli first" banner are gone; nothing under src/ imports child_process. A machine with an unrelated faf on PATH is no longer a problem.prebuild clears dist/ so nothing deleted ever ships again.faf://context and faf://status; claude-faf:// remains readable as an alias for this release.You maintain .cursorrules. Your teammate uses AGENTS.md. Someone on the team just switched to Gemini. Every AI tool wants its own context file — and they all say the same thing in different formats.
faf-mcp is the dedicated MCP server for Cursor, Windsurf, Cline, VS Code, and every non-Claude platform. One .faf file in your repo, synced to every format your team needs.
Context for Cursor & IDE agents: faf-cli (v7.12) authors the files this server syncs — bunx faf export --agents, zero-install and git-native. See FAF-CLI for Cursor & IDE agents 👀.
project.faf
│
┌────────┬───────┴───────┬────────────┐
▼ ▼ ▼ ▼
CLAUDE.md AGENTS.md .cursorrules GEMINI.md
(Claude) (Codex) (Cursor) (Gemini)
Everywhere else:
bunx faf-mcp
Add to your MCP config:
{"mcpServers": {"faf": {"command": "bunx", "args": ["faf-mcp"]}}}
| Platform | Config File |
|---|---|
| Cursor | ~/.cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Cline | Cline MCP settings |
| VS Code | MCP extension config |
| Claude Desktop | Use claude-faf-mcp |
faf-mcp runs locally over stdio. Point your IDE at one of these commands.
| Method | Command |
|---|---|
| npm | npx faf-mcp |
| Bun | bunx faf-mcp |
| Tool | Platform | Action |
|---|---|---|
faf_agents | OpenAI Codex | Import/export/sync AGENTS.md |
faf_cursor | Cursor IDE | Import/export/sync .cursorrules |
faf_gemini | Google Gemini | Import/export/sync GEMINI.md |
faf_conductor | Conductor | Import/export directory structure |
faf_git | GitHub | Author .faf from any repo URL |
# MCP tool calls — ask your IDE's AI
# Write all four formats from project.faf
faf_claude { all: true }
# Author .faf from any GitHub repo
faf_git { url: "https://github.com/facebook/react" }
Core tier: 15 essential tools shown by default; set FAF_TOOLS=all for the full 29 (every tool stays callable by name either way) · 26 test suites · 7 bundled parsers
project.faf is the source. faf-mcp writes every tool's context file from it in milliseconds.
project.faf ──── 8ms ───→ CLAUDE.md / AGENTS.md / .cursorrules / GEMINI.md
Single source of truth
faf_claude { all: true } writes all four formats at oncefaf_agents, faf_cursor and faf_gemini can also import an existing file: merge: true merges it into project.fafAI assistants forget. They drift. Every new session, AI starts guessing again. One source means context never goes stale.
| Tier | Score | Status |
|---|---|---|
| ✪ TROPHY | 100% | AI never has to guess |
| ★ GOLD | 99%+ | 1 slot from Trophy |
| ◆ SILVER | 95%+ | Close — keep going |
| ◇ BRONZE | 85%+ | Interim — keep going |
| ● GREEN | 70%+ | Interim — keep going |
| ● YELLOW | 55%+ | AI flipping coins |
| ○ RED | <55% | AI working blind |
| ♡ WHITE | 0% | No context at all |
At 55%, AI is guessing half the time. At 100%, AI is optimized.
Start every prompt with "Use FAF" to invoke MCP tools:
Use FAF to initialize my project
Use FAF to score my AI-readiness
Use FAF to sync my context
Use FAF to enhance my project
Works on all platforms — stops web search, forces tool usage.
The 15 Core tools, shown by default:
| Tool | Purpose |
|---|---|
faf_init | Create a new project.faf (use faf_auto to enhance an existing one) |
faf_auto | One-call setup: init or merge, stack detection, CLAUDE.md, score |
faf_go | Guided interview that fills the missing human-context and goal fields toward 100% |
faf_score | AI-readiness score (0-100%) and tier; details:true adds a slot-by-slot breakdown |
faf_doctor | Diagnose a low score: missing files, slot counts, config issues, each with a fix |
faf_check | Rate each human_context field empty / generic / good |
faf_trust | Validate the required fields and about.* block with faf-cli's validator |
faf_sync | Reconcile project.faf with package.json (dry-run; apply:true writes) |
faf_context | Set or show the active project path |
faf_about | What the IANA-registered .faf format is, in plain language |
| Interop Tools | |
faf_claude | Write CLAUDE.md from project.faf (all:true also writes AGENTS.md, .cursorrules, GEMINI.md) |
faf_agents | Import AGENTS.md into project.faf, or write it from project.faf |
faf_cursor | Import .cursorrules into project.faf, or write it from project.faf |
faf_gemini | Import GEMINI.md into project.faf, or write it from project.faf |
faf_git | Author a project.faf from a public GitHub repo URL |
+14 more with FAF_TOOLS=all: faf_status · faf_what · faf_guide · faf_debug · faf_clear · faf_list · faf_read (read a file within the allowed roots: cwd, the OS temp dir, or FAF_ALLOWED_ROOTS) · faf_write (write a file within the same roots) · faf_readme · faf_human_add · faf_quick · faf_formats · faf_dna · faf_conductor
Built on faf-cli. Every tool composes the bundled faf-cli in-process — the same scorer, the same renderers, the same block injector the CLI uses. Nothing shells out to a faf on your PATH.
project.faf authoring engine, browser/edge (faf-wasm's authoring sibling)faf-ide (stdio · skills/list · digests)If faf-mcp has been useful, consider starring the repo — it helps others find it.
If you use faf-mcp or the .faf / .fafa formats in research or production, please cite the format papers:
Wolfe, J. (2025). Format-Driven AI Context Architecture: The .faf Standard for Persistent Project Understanding. Zenodo. https://doi.org/10.5281/zenodo.18251362
Wolfe, J. (2026). Why Agents Need a Passport: .fafa — Portable Identity for the Agentic Era. Zenodo. https://doi.org/10.5281/zenodo.21951641
@article{wolfe2025faf,
title = {Format-Driven AI Context Architecture: The .faf Standard for Persistent Project Understanding},
author = {Wolfe, James},
year = {2025},
month = {nov},
publisher = {Zenodo},
doi = {10.5281/zenodo.18251362},
url = {https://doi.org/10.5281/zenodo.18251362}
}
@article{wolfe2026fafa,
title = {Why Agents Need a Passport: .fafa — Portable Identity for the Agentic Era},
author = {Wolfe, James},
year = {2026},
month = {aug},
publisher = {Zenodo},
doi = {10.5281/zenodo.21951641},
url = {https://doi.org/10.5281/zenodo.21951641}
}
MIT License — Free and open source
Zero drift. Eternal sync. AI optimized. ✪
"It's so logical if it didn't exist, AI would have built it itself" — Claude