This MCP server provides persistent project context for Google Gemini. It is implemented with Python and FastMCP, and it uses an IANA-registered .faf format to define canonical project context for reuse across sessions.
๐ ๏ธ Key Features
Persistent project context for Google Gemini
Python/FastMCP implementation
IANA-registered .faf format
Exposes MCP as a model-context-protocol server
๐ Use Cases
Keeping project context consistent between Gemini sessions
Defining project context once, then syncing it everywhere
Supporting Gemini CLI workflows (gemini-cli) with reusable context
โก Developer Benefits
Reduces re-explaining project details to new Gemini conversations
Uses FAF as the canonical context source (project.faf)
Aligns with context engineering practices for agents and tooling
โ ๏ธ Limitations
Described as Python/FastMCP for Gemini; no other runtimes or formats are stated
The provided excerpt focuses on .faf and canonical context, not on tool-specific capabilities
Persistent Project Context for Google Gemini. Define once. Sync everywhere.
FAF defines. MD instructs. AI codes.
โญ A star helps other devs discover gemini-faf-mcp โ despite the downloads, ~3 of 4 devs check stars first.
Stop re-explaining your project to every new Gemini session. Every Gemini conversation starts cold โ you re-state your stack, your goals, your conventions every single time. .faf is one structured file that captures all of it. This package is the MCP server that lets Gemini read it.
Without FAF With FAF (.faf at 85%+ Bronze)
โโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโ
You: "I'm using FastAPI with... You: "Add a /users/me endpoint"
PostgreSQL, pytest, and..." Gemini: [writes correct code,
Gemini: "Got it. What's the uses your auth pattern,
codebase like?" matches your test style]
You: "It's a REST API for..."
[5 minutes of re-explaining]
Gemini: [now ready to help]
.faf is read once at session start. Every tool call lands on a Gemini that already knows your project.
What's New in v3.0.0 โ The Always33 Edition
One engine, one number: gemini-faf-mcp scores with the always-33 engine, exactly like faf-kernel โ the same score faf-cli 8, claude-faf-mcp 7, faf-mcp 4 and grok-faf-mcp 2 give.
Built on faf-python-sdk>=2.0.0. The 12 enterprise slots count unless marked slotignored: 21 slots filled with no markers scores 64% (21/33); the same file plus the 12 markers scores 100% (21/21). faf auto (faf-cli) writes the markers. The 15 faf_model templates carry them and stay 100% Trophy.
v2.8.2 โ The Full-Facts Edition
Privacy patch โ FAFClient's start-up ping is now opt-in (FAF_TELEMETRY=1).
FAFClient (the Python SDK client โ the MCP server never used it) sent a start-up ping, package name and version, by default, and the opt-out wasn't documented. It now sends only when you set FAF_TELEMETRY=1; FAF_TELEMETRY_OFF still turns it off. See faf.one/privacy.
v2.8.1 was a dependency patch โ faf-python-sdk floor >=1.4.0, where the interop functions are now named author_agents_md / author_gemini_md. Authored AGENTS.md / GEMINI.md output is byte-identical.
v2.8.0 โ faf_auto now grounds its detection in the repo's own files, and every faf_model reference template scores 100% Trophy.
faf_auto used to read only the root manifest (pyproject.toml, package.json, โฆ). It now also reads the files that carry the real stack: docker-compose service images map onto database / cache / search / storage (a running Postgres service is the database โ it beats a dependency guess), Makefile / justfile targets map onto the commands block (test / build / check-all, root file or a nested backend/Makefile), and .github/workflows/ sets cicd. A polyglot repo that reported library / JavaScript now reports its real Postgres + Redis + FastAPI stack. In parity with faf-cli 7.10.
Separately: the 15 faf_model reference templates were scoring 48โ57% โ they filled 4 stack slots and used null. All rewritten to the full 21-slot schema; every one is 100% Trophy now, and a test keeps it that way. 13 tools ยท 265 tests.
v2.7.1 / v2.7.0 โ The Interop Edition โ faf_agents / faf_gemini rewritten as faf-python-sdk authoring-tool wrappers (were 4-field stubs); new faf_migrate brings a .faf up to the current format. v2.6.0 โ The Agent Card Edition added a real agent.fafa passport, an MCP Server Card (SEP-2127), and an AI Catalog entry. v2.5.0 โ The Dart Edition detects Dart/Flutter from pubspec.yaml. v2.4.2 โ The Confinement Edition confined every caller path argument. v2.4.0 โ The Chameleon Edition auto-selects its transport: stdio locally, Streamable HTTP on Cloud Run.
One-Minute Setup
1. Install
bash
uvx gemini-faf-mcp # zero-install run via uvx (fetched from PyPI)# or: pip3 install gemini-faf-mcp
You should see: Created project.faf โ Score: 85% (BRONZE). From this point, every Gemini session in this project reads it automatically.
Tip: A score of 85% (BRONZE) is the minimum where Gemini stops guessing. Run /faf:score to see what's missing and how to push to 100% (TROPHY).
The "One-File" Advantage
A .faf file is structured YAML that captures your project DNA. Every AI agent reads it once and knows exactly what you're building.
yaml
# project.faf โ your project, machine-readablefaf_version:"3.0"project:name:my-apigoal:RESTAPIforusermanagementmain_language:Pythonstack:backend:FastAPIdatabase:PostgreSQLtesting:pytesthuman_context:who:Backenddeveloperswhat:UserCRUDwithauthwhy:ReplacelegacyPHPservice
Result: Gemini reads this once and knows your project. No 20-minute onboarding. No wrong assumptions. Every session starts aligned.
FAF defines. MD instructs. AI codes.
What about my GEMINI.md?
You don't replace it. .fafauthors it. Run faf_gemini and you get a fresh GEMINI.md in Gemini CLI's own hierarchical, @file-importable convention โ setup, verify, key files, stack, confirm-first actions โ authored from a single source of truth instead of hand-maintained. Your hand-written content outside the faf-managed block is preserved.
bash
> /faf:export# Authors GEMINI.md from project.faf
.faf is the source. GEMINI.md is one of its outputs. Same logic for AGENTS.md (OpenAI Codex), .cursorrules, CLAUDE.md, and others โ write once, render everywhere.
Auto-Detect Your Stack
faf_auto scans your project's manifest files and its docker-compose services, Makefile targets, and CI config, then authors a .faf with accurate slot values. No manual entry needed.
database and cache came from docker-compose.yml, commands from the Makefile, cicd from .github/workflows/ โ none of which the manifest scan sees. Fill in the six W's and you are at Trophy.
What it scans:
File
Detects
pyproject.toml
Python + build system + frameworks (FastAPI, Django, Flask, FastMCP)
database / cache / search / storage from service images (Postgres, Redis, Elasticsearch, MinIO, ClickHouse, Qdrant, โฆ)
Makefile / justfile
test / build / lint commands from targets (root, or a nested backend/ dir)
.github/workflows/
cicd: GitHub Actions (also GitLab CI, CircleCI)
Priority rule:pyproject.toml / Cargo.toml / go.mod take priority over package.json. File-facts (a real compose service, a Makefile target) win over dependency guesses. Only sets values that are actually detected โ no hardcoded defaults.
All 13 Tools
Create & Detect
Tool
What it does
faf_init
Create a starter .faf file with project name, goal, and language
faf_auto
Auto-detect stack from manifest files and author/update .faf
faf_discover
Find .faf files in the project tree
Validate & Score
Tool
What it does
faf_validate
Full Mk4 validation โ score, tier, slot counts, errors, warnings
Get Gemini-optimized context (project + stack + score)
Export & Interop
Tool
What it does
faf_gemini
Export GEMINI.md in Gemini CLI's hierarchical convention (non-destructive)
faf_agents
Export a BETTER-shaped AGENTS.md for OpenAI Codex, Cursor, and other AI tools (non-destructive)
Migrate
Tool
What it does
faf_migrate
Bring a .faf up to the current format version (3.0); dry_run to preview
Reference
Tool
What it does
faf_about
FAF format info โ IANA registration, version, ecosystem
faf_model
Get a 100% Trophy-scored example .faf for any of 15 project types
Score and Tier System
Your .faf file is scored on completeness โ how many slots are filled with real values.
Score
Tier
Meaning
100%
TROPHY
AI has full context for your project
99%
GOLD
Exceptional
95%
SILVER
Top tier
85%
BRONZE
Minimum recommended โ AI can build from here
70%
GREEN
Solid foundation
55%
YELLOW
Needs improvement
<55%
RED
Major gaps โ AI will guess
0%
WHITE
Empty
Aim for Bronze (85%+). That's where AI stops guessing and starts knowing.
Using with Gemini CLI
code
> Create a .faf file for my Python FastAPI project
> Auto-detect my project and fill in the stack
> Score my .faf and show what's missing
> Export GEMINI.md for this project
> Show me a 100% example for an MCP server
> What is FAF and how does it work?
> Read my project.faf and summarize the stack
> Validate my .faf and fix the warnings
> Migrate my project.faf to the current format
The MCP server delegates to faf-python-sdk for parsing, validation, Mk4 scoring, and AGENTS.md / GEMINI.md authoring. Stack detection in faf_auto โ including the Full-Facts grounding โ is Python-native, no external CLI dependencies.
from gemini_faf_mcp import FAFClient, parse_faf, validate_faf, find_faf_file
# Parse and validate locally
data = parse_faf("project.faf")
result = validate_faf(data)
print(f"Score: {result['score']}%, Tier: {result['tier']}")
# Find .faf files automatically
faf_path = find_faf_file(".")
# Or use the Cloud Run endpoint
client = FAFClient()
dna = client.get_project_dna()
FAFClient sends no telemetry unless you set FAF_TELEMETRY=1, which adds one start-up ping (package name and version). FAF_TELEMETRY_OFF always turns it off. Remote mode sends your requests to the Cloud Run endpoint. Privacy: faf.one/privacy.
Cloud Run REST API
Live endpoint for badges, multi-agent context brokering, and voice-to-FAF mutations.
Supports agent-optimized responses (Gemini, Claude, Grok, Jules, Codex/Copilot/Cursor) via X-FAF-Agent header. Voice mutations via Gemini Live through PUT endpoint. Auto-deploys via Cloud Build on push to main.
If gemini-faf-mcp has been useful, consider starring the repo โ it helps others find it.
If you use gemini-faf-mcp or the .faf / .fafm / .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). Permanent Memory and Instant Recall: The .fafm Standard for Multi-Profile AI Agent Memory. Zenodo. https://doi.org/10.5281/zenodo.20348942
@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{wolfe2026fafm,
title = {Permanent Memory and Instant Recall: The .fafm Standard for Multi-Profile AI Agent Memory},
author = {Wolfe, James},
year = {2026},
month = {may},
publisher = {Zenodo},
doi = {10.5281/zenodo.20348942},
url = {https://doi.org/10.5281/zenodo.20348942}
}
@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}
}