gemini-faf-mcp
The gemini-faf-mcp server creates, manages, validates, and exports .faf (Foundational AI-context Format) files — a unified, IANA-registered YAML format for sharing project context across AI platforms like Gemini, Claude, and OpenAI.
faf_init– Generate a starter.faffile with a project name, goal, and language without overwriting existing files.faf_auto– Scan manifest files (package.json,pyproject.toml,Cargo.toml,go.mod, etc.) to auto-detect languages, frameworks, databases, and build tools, then generate or update a.faffile.faf_discover– Walk the directory tree to locate an existingproject.faffile.faf_read– Parse a.faffile into full structured data (project info, stack, preferences, scoring).faf_validate– Run full Mk4 validation returning a score (0–100%), tier (TROPHY → RED), slot counts, errors, and warnings.faf_score– Quick score check returning tier and slot counts without full validation detail.faf_stringify– Re-serialize parsed FAF data back into clean YAML.faf_context– Extract an AI-optimized project summary (info, stack, instructions, score) for instant context without reading the full file.faf_gemini– Export aGEMINI.mdfile with YAML frontmatter optimized for the Gemini CLI.faf_agents– Export anAGENTS.mdfile compatible with OpenAI Codex, Cursor, and other AI tools.faf_model– Retrieve a 100% Trophy-scored example.faffile for any of 15 supported project types.faf_about– Get FAF format metadata including IANA registration, server version, and ecosystem info.
The server also functions as a Cloud Run REST API supporting badges, multi-agent context brokering, and agent-optimized responses via the X-FAF-Agent header.
Automatically detects project stack and configuration for Rust projects using the Actix framework.
Scans composer.json files to automatically detect and integrate PHP project stack details into the FAF context.
Automatically detects project stack and dependency information for Django-based Python projects.
Identifies and integrates project stack details for applications built with the Express framework.
Automatically detects project stack and configuration for FastAPI applications.
Automatically detects project stack and configuration for Flask-based Python projects.
Identifies and integrates project stack details for Go applications using the Gin framework.
Provides Gemini-optimized project context and exports GEMINI.md files to align project goals and stack definitions within Google Gemini environments.
Auto-detects project DNA and stack details for JavaScript projects by scanning project manifest files.
Automatically detects project stack and configuration for Next.js applications.
Scans package.json to extract project stack and dependency data for Node.js environments.
Exports project context to AGENTS.md to align project goals and stack for OpenAI Codex and other OpenAI-compatible AI tools.
Auto-detects project DNA and stack details for PHP projects by scanning manifest files like composer.json.
Identifies PostgreSQL as the project database during automatic stack detection and FAF context generation.
Identifies pytest as the project testing framework during automatic stack detection and FAF context generation.
Auto-detects project DNA and stack details for Python projects by scanning pyproject.toml or requirements.txt.
Automatically detects project stack and configuration for React-based frontend projects.
Auto-detects project DNA and stack details for Ruby projects by scanning the Gemfile.
Auto-detects project DNA and stack details for Rust projects by scanning Cargo.toml.
Auto-detects project DNA and stack details for TypeScript projects by scanning project manifest files.
gemini-faf-mcp — The Agent Card Edition
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.
Before and after
Without FAF With FAF (.faf at 85%+ Bronze)
───────────────────────── ─────────────────────────
You: "I'm using FastAPI with... You: "Add a /users/me endpoint"
PostgreSQL, pytest, and..." Gemini: [generates 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 v2.6.0 — The Agent Card Edition
A real agent.fafa passport, MCP Server Card, and AI Catalog entry — gemini-faf-mcp joins the wider agent-discovery ecosystem.
agent.fafa is authored from live introspection of the server's actual tools, not guessed. Ships alongside an MCP Server Card (SEP-2127) and a fresh AI Catalog entry (spec ratified Nov 2025). GEMINI.md now renders real setup/test/key-files content instead of a thin project/goal/language stub. Not in this release: A2A support — faf cards --target a2a correctly refuses to fabricate an endpoint this server doesn't serve; real A2A support is a future release, not a claim made early.
v2.5.1 — one.faf namespace migration: gemini joins the fleet on
one.faf/gemini-faf-mcp(registry publish now DNS-authenticated). v2.5.0 — The Dart Edition detects Dart/Flutter frompubspec.yaml— Flutter app vs package · Dart MCP / backend / CLI / library. v2.4.3 madefaf_agents/faf_gemininon-destructive (inject a structured.fafblock, preserve your Markdown below). v2.4.2 — The Confinement Edition confined every callerpathargument (security). v2.4.0 — The Chameleon Edition auto-selects its transport: stdio locally, Streamable HTTP on Cloud Run. 12 tools, zero config.
One-Minute Setup
1. Install
uvx gemini-faf-mcp # zero-install run via uvx (fetched from PyPI)
# or: pip3 install gemini-faf-mcp2. Add to Gemini CLI
gemini extensions install https://github.com/Wolfe-Jam/gemini-faf-mcp3. Author your project context
In your Gemini CLI:
> /faf:setupYou 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:scoreto see what's missing and how to push to 100% (TROPHY).
Related MCP server: rust-faf-mcp RMCP
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.
# project.faf — your project, machine-readable
faf_version: '2.5.0'
project:
name: my-api
goal: REST API for user management
main_language: Python
stack:
backend: FastAPI
database: PostgreSQL
testing: pytest
human_context:
who: Backend developers
what: User CRUD with auth
why: Replace legacy PHP serviceResult: 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. .faf authors it. Run faf_gemini and you get a fresh GEMINI.md with the structured project data baked in as YAML frontmatter — the same GEMINI.md Gemini CLI already reads, but authored from a single source of truth instead of hand-maintained.
> /faf:export
# Generates 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 authors a .faf with accurate slot values. No manual entry needed.
> Auto-detect my project stack{
"detected": {
"main_language": "Python",
"package_manager": "pip",
"build_tool": "setuptools",
"framework": "FastMCP",
"api_type": "MCP",
"database": "BigQuery"
},
"score": 100,
"tier": "TROPHY"
}What it scans:
File | Detects |
| Python + build system + frameworks (FastAPI, Django, Flask, FastMCP) + databases |
| JavaScript/TypeScript + frameworks (React, Vue, Next.js, Express) |
| Rust + cargo + frameworks (Axum, Actix) |
| Go + go modules + frameworks (Gin, Echo) |
| Python (fallback) |
| Ruby |
| PHP |
Priority rule: pyproject.toml / Cargo.toml / go.mod take priority over package.json. Only sets values that are actually detected — no hardcoded defaults.
All 12 Tools
Create & Detect
Tool | What it does |
| Create a starter |
| Auto-detect stack from manifest files and author/update |
| Find |
Validate & Score
Tool | What it does |
| Full Mk4 validation — score, tier, slot counts, errors, warnings |
| Quick Mk4 score — score, tier, populated/active/total slot counts |
Read & Transform
Tool | What it does |
| Parse a |
| Convert parsed FAF data back to clean YAML |
| Get Gemini-optimized context (project + stack + score) |
Export & Interop
Tool | What it does |
| Export |
| Export |
Reference
Tool | What it does |
| FAF format info — IANA registration, version, ecosystem |
| Get a 100% Trophy-scored example |
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
> 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 warningsArchitecture
gemini-faf-mcp v2.4.2
├── server.py → FastMCP MCP server (12 tools, dual-transport, Mk4 scoring)
├── safe_path.py → path confinement for caller-supplied `path` args
├── main.py → Cloud Run REST API (GET/POST/PUT)
├── models.py → 15 project type examples
└── src/gemini_faf_mcp/ → Python SDK (FAFClient, parser)The MCP server delegates to faf-python-sdk for parsing, validation, and Mk4 scoring. Stack detection in faf_auto is Python-native — no external CLI dependencies.
Testing
pip3 install -e ".[dev]"
python -m pytest tests/ -v233 tests passing across 9 WJTTC tiers (137 MCP server + 55 Cloud Function + 41 Mk4 WJTTC championship). Championship-grade test coverage — WJTTC certified.
FAF Ecosystem
One format, every AI platform.
Package | Platform | Registry |
Anthropic | npm + MCP #2759 | |
gemini-faf-mcp | PyPI | |
xAI | npm | |
Rust | crates.io | |
Universal | npm |
Python SDK
Use FAF directly in Python without MCP:
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()Cloud Run REST API
Live endpoint for badges, multi-agent context brokering, and voice-to-FAF mutations.
https://faf-source-of-truth-631316210911.us-east1.run.appSupports 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.
Links
Citation
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
Wolfe, J. (2026). Why Agents Need a Passport: .fafa — Portable Identity for the Agentic Era. Zenodo. https://doi.org/10.5281/zenodo.21951641
BibTeX
@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}
}License
MIT
Built by @wolfe_jam | wolfejam.dev
Get the CLI
faf-cli — The original AI-Context CLI. A must-have for every builder.
npx faf-cli autoAnthropic MCP #2759 · IANA Registered: application/vnd.faf+yaml · faf.one · npm
Available Tools
12 toolsfaf_aboutA
FAF format info — IANA registration, version, ecosystem. Returns metadata about the FAF format, server version, and available MCP bridges. Use this when users ask what FAF is or how it connects to other AI platforms.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions return values (metadata, server version, MCP bridges) but does not disclose any potential side effects, rate limits, or auth requirements. For a read-only metadata tool, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: a title, a description of return value, and usage guidance. No unnecessary words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has zero parameters and a clear output schema, the description fully covers what the agent needs to know: what it does, what it returns, and when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so baseline is 4. The description adds no parameter-specific meaning, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: providing FAF format info including IANA registration, version, and ecosystem. It distinguishes itself from sibling tools like faf_agents and faf_validate by focusing on metadata about the FAF format and its connections to AI platforms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using the tool when users ask what FAF is or how it connects to other AI platforms. While it doesn't mention when not to use it, the context is clear given its informational nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_agentsA
Export and write AGENTS.md from a .faf file (non-destructive). Generates a universal agent context file (OpenAI Codex, Cursor, etc.) and injects it into AGENTS.md as a faf-managed block, preserving any existing content. Re-running updates the block in place — it never overwrites your file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | project.faf |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must cover behavioral traits. It states non-destructive behavior, block injection, and in-place updates, but lacks details on error handling, file creation if missing, or required permissions. Partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the key action, no wasted words. Efficient and impactful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple tool with one parameter and an output schema (not shown), the description is mostly complete. It covers the main action and side effects but does not mention the return value or error scenarios. Still sufficient for basic selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'path' is not explicitly described in the description; the description implies it's the .faf file path but gives no additional meaning. With 0% schema coverage, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb (export and write), resource (AGENTS.md from .faf file), and behavior (non-destructive, block injection, in-place updates). It distinguishes itself from sibling tools like faf_read or faf_context by focusing on creating a universal context file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when generating a standard AGENTS.md for various AI agents, but does not explicitly state when not to use or list alternatives. However, the purpose is clear enough for an agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_autoA
Auto-detect project stack and generate/update a .faf file. Scans for package.json, pyproject.toml, Cargo.toml, go.mod, and other manifest files. Extracts language, framework, database, API type, and build tools from actual dependencies — no hardcoded defaults. Creates a new .faf if none exists, or fills empty slots in an existing one.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | project.faf | |
| directory | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool scans for manifests, extracts dependencies, and creates/updates .faf, including that it only fills empty slots. Missing details like permissions or side effects, but overall adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no wasted words. First sentence states purpose, second details scanning behavior, third clarifies update behavior. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key actions and scan targets but lacks details on error handling, what happens if .faf exists with non-empty slots, or return value. Output schema exists but is not described. Adequate for a straightforward tool but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the tool description does not explain the two parameters (directory, path). Their meaning is only implied by context, which is insufficient for precise agent use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool auto-detects project stack and generates/updates a .faf file. It specifies what manifest files it scans and what it extracts, distinguishing it from siblings like faf_init which likely does not auto-detect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for auto-detecting project stack but does not explicitly state when to use it versus alternatives like faf_init or faf_validate. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_contextA
Get Gemini-optimized context from a .faf file. Returns the key sections an AI needs: project info, stack, instructions, and score. Use this to quickly understand a project without reading the full .faf structure.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | project.faf |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the tool returns specific sections (project info, stack, instructions, score), implying a read-only action. However, it does not explicitly confirm no side effects or clarify what 'Gemini-optimized' entails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no extraneous words. The first sentence states the action, the second adds essential context about the return value. Perfectly front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no annotations, but an output schema exists), the description covers the key return sections and usage intent. It lacks error handling or path requirements, but the core functionality is well communicated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter ('path') with 0% description coverage. The description does not mention the parameter or provide any additional context about its format or behavior, relying solely on the implicit reference to 'a .faf file.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get'), resource ('.faf file'), and the specific intent ('Gemini-optimized context'). It distinguishes from sibling tools like faf_read by emphasizing a quick summary without reading the full structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: 'quickly understand a project without reading the full .faf structure.' It implies alternative usage (full read via faf_read) but does not name it explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_discoverA
Find .faf files in the project tree by walking up from start_dir. Searches the current directory and parent directories for project.faf. Use this before faf_read to locate the file automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| start_dir | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses search behavior: walks up from start_dir, looks for project.faf. Adds context beyond schema, though could mention edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states the action, second provides additional detail and usage tip. No unnecessary words, front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema, the description covers purpose, search behavior, and integration with faf_read. No gaps given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description explains that 'start_dir' is the starting directory for the search, adding semantic meaning beyond the schema's type and default. The 0% schema coverage is compensated by this clarification.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Find .faf files in the project tree by walking up from start_dir' and specifies the exact file 'project.faf'. It distinguishes itself from sibling faf_read by suggesting use before reading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this before faf_read to locate the file automatically', providing clear context for when to use. However, it does not mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_geminiA
Export and write GEMINI.md from a .faf file (non-destructive). Generates Markdown with YAML frontmatter for Gemini CLI and injects it into GEMINI.md as a faf-managed block, preserving any existing content. Re-running updates the block in place — it never overwrites your file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | project.faf |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavior: non-destructive, writes to GEMINI.md as a faf-managed block, updates in place, never overwrites. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action, no redundant words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and an output schema, the description covers purpose, behavior, and key constraints completely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description mentions '.faf file' which relates to the 'path' parameter. However, it does not explain that the parameter specifies the input file path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Export and write GEMINI.md from a .faf file' with specific verb and resource, and distinguishes from sibling tools like faf_read or faf_init.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage through terms like 'non-destructive' and 'preserving existing content', but no explicit when-to-use or why-not-alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_initA
Create a starter .faf file with project name, goal, and language. Generates a valid FAF YAML file with all required sections. Will not overwrite an existing file — use faf_discover first to check. The path is confined to the project root (cwd / FAF_ALLOWED_ROOTS).
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | ||
| name | No | my-project | |
| path | No | project.faf | |
| language | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: no overwrite, path confinement. No annotations exist, so description carries full burden. Lacks details on error handling or permissions, but adequate for a simple creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences, each adding value: purpose, output, safety (no overwrite + alternative), and constraint. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, safety, and path constraint, but misses return value (despite output schema existence) and error cases. Moderate completeness for a simple tool with no schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description only mentions three of four parameters (name, goal, language) but omits 'path' and doesn't explain defaults or format. Incomplete parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a starter .faf file with project name, goal, and language, generating a valid FAF YAML. It does not explicitly differentiate from all siblings but provides enough context to understand its role as initial setup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when not to use (if file exists) and directs to sibling tool faf_discover. Also mentions path constraint to project root, providing clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_modelA
Get a 100% Trophy-scored example .faf file for a specific project type. Returns a complete, realistic project.faf that fills all 21 scored slots. Use this as a reference when building or improving a .faf file — shows exactly what 100% looks like. Call without arguments to list all 15 available project types.
| Name | Required | Description | Default |
|---|---|---|---|
| project_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that the tool returns a complete, realistic project.faf and fills all slots. No side effects or destructive behavior implied, and no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each adding value: first states purpose, second describes content, third gives usage tips. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated), the description adequately covers the return type and usage of the single parameter. It is complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 0%, the description explains that the parameter 'project_type' specifies the type, and omitting it lists all 15 available project types. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves a 100% Trophy-scored example .faf file for a specific project type, and mentions it fills all 21 scored slots. This distinguishes it from siblings like faf_read or faf_score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using it as a reference when building or improving a .faf file. Also explains that calling without arguments lists project types. However, it does not specify when not to use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_readA
Read project DNA from a .faf file. Returns the full parsed structure including project info, stack, preferences, and scoring data. Use this as the first step to understand any FAF-enabled project.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | project.faf |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It mentions what the tool returns but does not disclose whether it is read-only (implied by name) or any side effects. It lacks details on error handling or file existence requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the action and resource, then adding returns and usage guidance. Every sentence adds value without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input (one parameter with default) and presence of an output schema, the description adequately covers the tool's purpose, what it returns, and how it should be used. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explicitly detail the parameter beyond naming the file. However, for a single obvious parameter with a default, the context 'Read project DNA from a .faf file' provides sufficient meaning. The description partially compensates for the lack of schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('project DNA from a .faf file'), and lists what is returned. It also distinguishes from sibling tools by suggesting this as the first step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Use this as the first step to understand any FAF-enabled project,' which gives clear usage context. It does not list alternatives or when-not-to-use, but the sibling tools have different purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_scoreA
Quick Mk4 score check — returns score (0-100%), tier, and slot counts. Uses the Mk4 Championship 21-slot scoring engine for universal parity. Use this for status checks; use faf_validate when you need error details.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | project.faf |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as whether the tool reads or modifies data, permissions needed, or side effects. The word 'check' implies a read operation, but it is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences that are front-loaded with the main purpose. No wasted words; each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one optional parameter, simple return values) and the presence of an output schema, the description sufficiently covers the tool's purpose and usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 1 parameter ('path') with no description coverage. The description adds context about the scoring engine but does not explain the path parameter or its default value. It helps somewhat but leaves gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a score (0-100%), tier, and slot counts, using a specific scoring engine. It distinguishes itself from the sibling tool faf_validate by purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides usage guidance: 'Use this for status checks; use faf_validate when you need error details.' This tells the agent when to use this tool and when to use an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_stringifyB
Convert parsed FAF data back to YAML string. Useful for displaying the raw .faf content or preparing it for editing. Reads the file, parses it, then re-serializes to clean YAML.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | project.faf |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that reading, parsing, and re-serialization occur, but the inconsistency between 'convert parsed data' and 'reads the file' undermines clarity. No mention of side effects or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at three sentences with no redundancy. However, the first sentence could be more precise to avoid ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 param, no required inputs, output schema exists), the description covers the basic purpose and usage but has an internal inconsistency and lacks clarity on parameter semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with no parameter descriptions. The description only mentions 'path' implicitly via 'Reads the file' but adds no details on format, constraints, or usage. This is insufficient for an agent to understand the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it converts FAF data back to YAML string, but it also says it reads and parses the file, creating ambiguity about whether the input is already parsed. The tool is distinguished from siblings like faf_read, as it produces YAML output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context (displaying raw .faf content, preparing for editing) but does not explicitly mention when not to use it or how it differs from sibling tools like faf_read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_validateA
Validate a .faf file and return score, tier, and issues. Returns errors (must fix) and warnings (should fix) with specific messages. Use after faf_init or when checking if a .faf file meets quality standards.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | project.faf |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description explains return structure (errors and warnings) but does not disclose whether the tool modifies the file or any side effects. It adds some value beyond the schema but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, return details, usage context. No unnecessary words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema exists), the description adequately covers purpose, return values, and usage context. Could mention the path parameter explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. Description does not mention the 'path' parameter or its default, relying on the schema alone. Adds no additional meaning beyond the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool validates a .faf file and returns score, tier, and issues. It distinguishes from siblings like faf_score by including tier and issues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use after faf_init or when checking if a .faf file meets quality standards', providing clear usage context. However, it does not explicitly state when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
12 tool updates
v2.1.2- First observed
faf_about - First observed
faf_agents - First observed
faf_auto - First observed
faf_context - First observed
faf_discover - First observed
faf_gemini - First observed
faf_init - First observed
faf_model - First observed
faf_read - First observed
faf_score - First observed
faf_stringify - First observed
faf_validate
TDQS
Each tool targets a distinct operation on FAF files (create, read, validate, export, auto-detect, etc.) with no overlapping purposes. An agent can easily distinguish between them.
All tools follow a consistent 'faf_<verb_or_noun>' pattern (e.g., faf_init, faf_read, faf_validate). No mixing of styles or irregular naming.
12 tools cover the full lifecycle of FAF file management without being excessive. The count is well-scoped for the server's purpose.
The tool surface covers creation, reading, validation, scoring, discovery, export to multiple formats, auto-detection, and example generation. No critical gaps for typical workflows.
Maintenance
Related MCP Connectors
Persistent project context for xAI Grok. IANA-registered .faf format.
Persistent project context for Claude. IANA-registered .faf format.
Persistent project context — Rust-native MCP server. IANA-registered .faf format.
Share one project context across ChatGPT, Claude, Telegram and any MCP client.
Related MCP Servers
- AlicenseAqualityAmaintenance.FAF (Foundational AI-context Format) with 50+ tools - Only Persistent project context that integrates seamlessly with Claude Desktop workflows. Officially merged (#2759) Anthropic MCP server.1249122MIT
- AlicenseNot gradedqualityAmaintenancePersistent project context in Rust. 8 MCP tools via rmcp SDK — parse, validate, score, compress, discover, and token analysis. Single binary, zero config. IANA-registered format (application/vnd.faf+yaml). One file, every AI platform.7334MIT
- AlicenseAqualityAmaintenancePersistent project context MCP server that syncs a single .faf file to all AI tool formats (Cursor, Windsurf, Cline, etc.), enabling eternal bi-sync and optimized context for AI assistants.152386MIT
- AlicenseBqualityCmaintenancePortable, auditable, local-first MCP memory for MCP-compatible AI agents and coding workflows. It keeps durable project memory outside the model runtime, compresses continuity into smaller working packs, and carries forward operational state so agents can resume with less repetition.2837Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Wolfe-Jam/gemini-faf-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server