gemini-faf-mcp
gemini-faf-mcp
Google Gemini를 위한 지속적인 프로젝트 컨텍스트. 한 번 정의하고 어디서나 동기화하세요.
FAF가 정의하고, MD가 지시하며, AI가 코딩합니다.
새로운 Gemini 세션을 시작할 때마다 프로젝트를 다시 설명하는 일을 멈추세요. 모든 Gemini 대화는 초기 상태에서 시작되며, 매번 스택, 목표, 규칙을 다시 말해야 합니다. .faf는 이 모든 것을 담고 있는 하나의 구조화된 파일입니다. 이 패키지는 Gemini가 해당 파일을 읽을 수 있게 해주는 MCP 서버입니다.
이전과 이후
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는 세션 시작 시 한 번 읽힙니다. 모든 도구 호출은 이미 프로젝트를 알고 있는 Gemini에게 전달됩니다.
v2.2.0의 새로운 기능
Mk4 챔피언십 점수 산정 엔진 — 이제 12개의 모든 도구가 Rust 컴파일러 및 TypeScript CLI와 동일한 점수 산정 알고리즘을 사용합니다. faf_score 및 faf_validate는 슬롯 수준의 세부 정보(populated, active, total)를 반환합니다. 모든 언어의 모든 FAF 도구에서 점수가 일치합니다. 221개의 테스트와 41개의 새로운 WJTTC 챔피언십 테스트가 포함되었습니다. 불필요한 코드(sync_faf.py)가 제거되었습니다.
v2.2.1은 패치 릴리스입니다. PyPI, Gemini Extensions Gallery 및 MCP Registry 전반에서 패키지 설명을 "Google Gemini를 위한 지속적인 프로젝트 컨텍스트"라는 표준 문구로 정렬했습니다. 코드 변경 사항은 없습니다.
1분 설정
1. 설치
pip install gemini-faf-mcp2. Gemini CLI에 추가
gemini extensions install https://github.com/Wolfe-Jam/gemini-faf-mcp3. 프로젝트 컨텍스트 생성
Gemini CLI에서 다음을 실행하세요:
> /gemini-faf-mcp:setup다음과 같은 메시지가 표시되어야 합니다: Created project.faf — Score: 85% (BRONZE). 이제부터 이 프로젝트의 모든 Gemini 세션은 자동으로 해당 파일을 읽습니다.
팁: 85%(BRONZE) 점수는 Gemini가 추측을 멈추는 최소 기준입니다.
/gemini-faf-mcp:score를 실행하여 무엇이 부족한지 확인하고 100%(TROPHY)까지 올리는 방법을 알아보세요.
Related MCP server: rust-faf-mcp RMCP
"단일 파일"의 장점
.faf 파일은 프로젝트 DNA를 캡처하는 구조화된 YAML입니다. 모든 AI 에이전트가 이를 한 번 읽으면 무엇을 빌드 중인지 정확히 파악합니다.
# 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 service결과: Gemini는 이를 한 번 읽고 프로젝트를 파악합니다. 20분간의 온보딩도, 잘못된 가정도 없습니다. 모든 세션이 정렬된 상태로 시작됩니다.
FAF가 정의하고, MD가 지시하며, AI가 코딩합니다.
GEMINI.md는 어떻게 하나요?
대체하는 것이 아닙니다. .faf가 이를 생성합니다. faf_gemini를 실행하면 YAML 프런트매터에 구조화된 프로젝트 데이터가 포함된 새로운 GEMINI.md를 얻게 됩니다. 이는 Gemini CLI가 이미 읽고 있는 것과 동일한 GEMINI.md이지만, 수동으로 유지 관리하는 대신 단일 진실 공급원(Single Source of Truth)에서 생성됩니다.
> /gemini-faf-mcp:export
# Generates GEMINI.md from project.faf.faf가 소스입니다. GEMINI.md는 그 출력물 중 하나입니다. AGENTS.md(OpenAI Codex), .cursorrules, CLAUDE.md 등도 동일한 논리가 적용됩니다. 한 번 작성하고 어디서나 렌더링하세요.
스택 자동 감지
faf_auto는 프로젝트의 매니페스트 파일을 스캔하여 정확한 슬롯 값을 가진 .faf를 생성합니다. 수동 입력이 필요 없습니다.
> 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"
}스캔 대상:
파일 | 감지 항목 |
| Python + 빌드 시스템 + 프레임워크(FastAPI, Django, Flask, FastMCP) + 데이터베이스 |
| JavaScript/TypeScript + 프레임워크(React, Vue, Next.js, Express) |
| Rust + cargo + 프레임워크(Axum, Actix) |
| Go + go 모듈 + 프레임워크(Gin, Echo) |
| Python (대체) |
| Ruby |
| PHP |
우선순위 규칙: pyproject.toml / Cargo.toml / go.mod가 package.json보다 우선합니다. 실제로 감지된 값만 설정하며, 하드코딩된 기본값은 없습니다.
12개의 모든 도구
생성 및 감지
도구 | 기능 |
| 프로젝트 이름, 목표, 언어가 포함된 시작용 |
| 매니페스트 파일에서 스택을 자동 감지하고 |
| 프로젝트 트리에서 |
검증 및 점수 산정
도구 | 기능 |
| 전체 Mk4 검증 — 점수, 등급, 슬롯 수, 오류, 경고 |
| 빠른 Mk4 점수 산정 — 점수, 등급, 채워짐/활성/전체 슬롯 수 |
읽기 및 변환
도구 | 기능 |
|
|
| 파싱된 FAF 데이터를 깔끔한 YAML로 변환 |
| Gemini 최적화 컨텍스트(프로젝트 + 스택 + 점수) 가져오기 |
내보내기 및 상호 운용성
도구 | 기능 |
| Gemini CLI용 YAML 프런트매터가 포함된 |
| OpenAI Codex, Cursor 및 기타 AI 도구용 |
참조
도구 | 기능 |
| FAF 형식 정보 — IANA 등록, 버전, 생태계 |
| 15가지 프로젝트 유형 중 하나에 대한 100% Trophy 점수 예제 |
점수 및 등급 시스템
.faf 파일은 완전성, 즉 실제 값으로 채워진 슬롯의 수에 따라 점수가 매겨집니다.
점수 | 등급 | 의미 |
100% | TROPHY | AI가 프로젝트에 대한 전체 컨텍스트를 보유함 |
99% | GOLD | 탁월함 |
95% | SILVER | 최상위 등급 |
85% | BRONZE | 권장 최소치 — AI가 여기서부터 빌드 가능 |
70% | GREEN | 탄탄한 기반 |
55% | YELLOW | 개선 필요 |
<55% | RED | 주요 공백 — AI가 추측함 |
0% | WHITE | 비어 있음 |
Bronze(85% 이상)를 목표로 하세요. 그때부터 AI는 추측을 멈추고 알기 시작합니다.
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 warnings아키텍처
gemini-faf-mcp v2.2.1
├── server.py → FastMCP MCP server (12 tools, Mk4 scoring)
├── main.py → Cloud Run REST API (GET/POST/PUT)
├── models.py → 15 project type examples
└── src/gemini_faf_mcp/ → Python SDK (FAFClient, parser)MCP 서버는 파싱, 검증 및 Mk4 점수 산정을 위해 faf-python-sdk에 위임합니다. faf_auto의 스택 감지는 Python 네이티브이며 외부 CLI 종속성이 없습니다.
테스트
pip install -e ".[dev]"
python -m pytest tests/ -v9개의 WJTTC 등급에 걸쳐 221개의 테스트가 통과되었습니다(125개 MCP 서버 + 55개 Cloud Function + 41개 Mk4 WJTTC 챔피언십). 챔피언십 수준의 테스트 커버리지 — WJTTC 인증.
FAF 생태계
하나의 형식으로 모든 AI 플랫폼 지원.
패키지 | 플랫폼 | 레지스트리 |
Anthropic | npm + MCP #2759 | |
gemini-faf-mcp | PyPI | |
xAI | npm | |
Rust | crates.io | |
Universal | npm |
Python SDK
MCP 없이 Python에서 직접 FAF를 사용하세요:
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
배지, 다중 에이전트 컨텍스트 브로커링 및 음성-FAF 변환을 위한 라이브 엔드포인트.
https://faf-source-of-truth-631316210911.us-east1.run.appX-FAF-Agent 헤더를 통해 에이전트 최적화 응답(Gemini, Claude, Grok, Jules, Codex/Copilot/Cursor)을 지원합니다. PUT 엔드포인트를 통한 Gemini Live 음성 변환도 지원합니다. main 브랜치 푸시 시 Cloud Build를 통해 자동 배포됩니다.
gemini-faf-mcp가 유용했다면 저장소에 별표를 눌러주세요. 다른 사람들이 찾는 데 도움이 됩니다.
링크
라이선스
MIT
제작자: @wolfe_jam | wolfejam.dev
CLI 받기
faf-cli — 오리지널 AI-Context CLI. 모든 빌더에게 필수입니다.
npx faf-cli autoAnthropic MCP #2759 · IANA 등록: application/vnd.faf+yaml · faf.one · npm
Available Tools
13 toolsfaf_aboutFaf AboutARead-only
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?
readOnlyHint=true and openWorldHint=false already establish this as a side-effect-free, non-networked read. The description adds the content scope of the response, which is modest value, but says nothing about auth, caching, or limits, and since an output schema exists the return enumeration is partly redundant. Adequate but not rich.
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 clauses with the subject (FAF format info) front-loaded and the usage cue trailing. The first clause and the second sentence overlap slightly by both stating that format metadata is returned, a minor redundancy in an otherwise tight entry.
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 zero-parameter informational tool with an output schema covering the return shape, the description covers what the tool is and when to reach for it. Nothing needed to invoke it correctly is missing, though it could say a bit more about what distinguishes it from the other format-related siblings.
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 tool takes zero parameters, so there is no parameter semantics for the description to clarify; the baseline for a no-arg tool is 4. Nothing in the description misrepresents the empty input contract.
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 names a specific resource (the FAF format) and enumerates what the tool returns: IANA registration, version, ecosystem, server version, and available MCP bridges. That is enough to distinguish it from data-manipulation siblings like faf_read, faf_validate, or faf_migrate, though no sibling is named explicitly.
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?
"Use this when users ask what FAF is or how it connects to other AI platforms" gives a clear triggering context rather than leaving usage implied. It stops short of naming alternatives (e.g. faf_model or faf_discover for deeper spec detail) or stating when not to use it, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_agentsFaf AgentsAIdempotent
Export and write AGENTS.md from a .faf file (non-destructive).
Authors a BETTER-shaped AGENTS.md (setup · tests · layout · conventions ·
three-tier guardrails · definition of done · security · commit) via
faf-python-sdk's authoring tool — in parity with faf-cli's faf export --agents.
Injects it into AGENTS.md as a faf-managed block, preserving any hand
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?
Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false. The description usefully adds that it preserves hand-written content, injects a faf-managed block, and never overwrites the file, which clarifies the mutation behavior beyond the annotations.
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 front-loaded with the core action and then adds useful behavioral detail. It is slightly repetitive around non-destructive behavior, but every sentence contributes relevant context.
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?
With an output schema present and annotations covering safety and idempotency, the description supplies enough behavioral context for correct invocation. The main remaining gap is the undocumented path parameter, but overall it is complete for this tool.
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 single path parameter is not mentioned by name or default in the description. The phrase 'from a .faf file' hints at the input but does not compensate for the missing parameter documentation.
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 a specific verb and resource: export/write AGENTS.md from a .faf file. It is specific enough to distinguish from most siblings, but it does not explicitly differentiate itself from other faf_* tools such as faf_stringify or faf_context.
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 when to use it by naming the output artifact and noting that re-running updates the block in place. However, it gives no explicit when-not conditions or alternative sibling tools to use instead, leaving usage guidance at an implied level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_autoFaf AutoBIdempotent
Auto-detect project stack and author/update a .faf file. Scans package.json, pyproject.toml, Cargo.toml, go.mod, and other manifest files for language, framework, database, API type, and build tools — then grounds the result in the repo's own files: docker-compose service images (Postgres, Redis, Elasticsearch...) map onto stack slots, and Makefile / justfile targets map onto test / build / lint commands. Facts from files, 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?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and the description usefully elaborates beyond them: it lists the manifest files scanned, the fact that docker-compose images and Makefile/justfile targets are mapped, and that it only fills empty slots rather than overwriting. That last point is meaningful behavioral context for a mutation tool, though permissions/auth and any failure behavior remain unstated.
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 front-loaded sentences with no filler; the mechanism and the create-or-fill outcome are stated up front. The middle sentence is dense with examples but every clause adds signal.
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?
An output schema exists, so return values need no elaboration, and the detection mechanics are well covered. The definition is still incomplete for a writer tool with 0% parameter coverage and heavy sibling overlap: it does not resolve how path/directory interact or when to prefer this over faf_init/faf_discover.
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%, so the description carries the full burden, yet it never mentions the two parameters. Crucially, the 'path' default ('project.faf') versus 'directory' ('.') distinction is ambiguous and undocumented, leaving the agent to infer which one governs where the file is written.
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?
It names a concrete verb (auto-detect + author/update) and resource (.faf file) and describes the mechanism in detail. The gap is sibling differentiation: faf_init and faf_discover plausibly overlap with this, yet the description never says how faf_auto differs from them, so an agent must guess.
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?
Usage is only implied through the create-or-fill branch ('Creates a new .faf if none exists, or fills empty slots in an existing one'), which is genuinely informative. But there is no explicit when-to-use vs faf_init/faf_discover/faf_read, and no exclusions or prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_contextFaf ContextBRead-only
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?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safe read-only profile is covered. The description adds the shape of what comes back (project info, stack, instructions, score), but since an output schema exists this adds limited behavioral value and it discloses no side-effect or edge-case behavior.
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 tight sentences that front-load the core action and then the return content, with no filler. Efficient and well-ordered, though the second sentence could be slightly leaner.
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 read-only context-fetching tool with an output schema, the description covers what it does, what it returns, and a usage context, so an agent can call it correctly. The only notable gap is guidance on the path parameter and explicit differentiation from sibling retrieval tools.
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 single 'path' parameter (default 'project.faf') is never addressed in the description. The phrase 'from a .faf file' faintly implies path targets a .faf file, but the description does not compensate for the undocumented parameter or explain acceptable values.
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?
States a specific verb (Get) and resource (Gemini-optimized context from a .faf file), and enumerates the sections returned (project info, stack, instructions, score). It partially differentiates from siblings by noting it avoids 'reading the full .faf structure', but does not clarify how it differs from close siblings like faf_gemini or faf_read.
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?
'Use this to quickly understand a project without reading the full .faf structure' gives a clear use case and implicitly contrasts with faf_read. However, no explicit alternatives are named and no when-not-to-use condition or prerequisite is stated, leaving the routing to inference among 12 siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_discoverFaf DiscoverARead-only
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?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely new behavioral detail: the search proceeds upward from start_dir through parent directories, clarifying that this is not a flat directory lookup. It omits not-found behavior and search limits, so not a 5.
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, zero filler, front-loaded with the core action and finishing with the routing hint. Every sentence earns its place.
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?
An output schema exists, so return values need not be described, and annotations cover the safety profile. Purpose, mechanism, and ordering relative to faf_read are all present. What is missing is failure semantics (no .faf found) for a discovery tool.
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% and start_dir has no schema description, so the description must carry the load. It does explain that start_dir is the origin of an upward traversal, giving the parameter real meaning. It omits the '.' default and path-format expectations, so it only partially compensates.
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?
States a specific verb and resource ('Find .faf files') plus the exact mechanism ('walking up from start_dir') and target artifact ('project.faf'). It explicitly names the sibling faf_read, so an agent can distinguish it without inspecting either schema.
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?
Gives explicit workflow guidance: 'Use this before faf_read to locate the file automatically,' which tells the agent when this tool is the right choice. It does not state exclusions (e.g., what to do if no file exists or when to skip discovery), so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_geminiFaf GeminiAIdempotent
Export and write GEMINI.md from a .faf file (non-destructive).
Authors GEMINI.md in Gemini CLI's own convention (hierarchical,
@file-importable — setup · verify · key files · stack · confirm-first
actions) via faf-python-sdk's authoring tool, in parity with faf-cli's
faf export --gemini. Injects it as a faf-managed block, preserving any
hand content. Re-running updates the block in place.
| 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?
Annotations already declare non-destructive and idempotent, but the description adds real substance beyond them: it discloses that output is injected as a faf-managed block, that hand-written content is preserved, and that re-running updates the block in place. This tells the agent exactly what is and is not overwritten, which is the key behavioral risk for a write 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?
Front-loaded correctly: the first clause gives verb, artifact and the non-destructive guarantee. The parenthetical listing of GEMINI.md sections is somewhat dense and partly decorative, but every sentence still earns its place.
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?
An output schema exists, so return values need no explanation, and the annotations plus description together cover the safety and idempotency profile well. The only real gap is the undocumented 'path' parameter, which is low-risk given it is optional with a default.
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?
There is a single parameter, 'path', with 0% schema description coverage, and the description never mentions it, its expected format, or that it defaults to project.faf. The phrase 'from a .faf file' hints at the input but adds no syntax or resolution detail, so the schema carries an undocumented parameter with no compensating explanation.
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?
States a specific verb and artifact: 'Export and write GEMINI.md from a .faf file.' It also names what convention the output follows and equates itself to a known CLI command, so the purpose is unambiguous. It does not, however, differentiate itself from the likely sibling for other agent files (e.g. faf_agents), leaving the agent to infer the routing.
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?
Usage is implied rather than stated: this is the tool for producing GEMINI.md for Gemini CLI, but the description never says when to pick it over siblings like faf_agents or faf_context. There is no exclusion or precondition guidance, so the agent must infer the choice from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_initFaf InitAIdempotent
Create a starter .faf file with project name, goal, and language. Writes 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?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=false, so the safety profile is known. The description adds genuinely new behavior: the no-clobber rule on existing files and the path confinement to cwd / FAF_ALLOWED_ROOTS, which is a sandbox constraint the annotations do not express.
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 short sentences plus a parenthetical constraint; the core action and output are front-loaded and each sentence carries a distinct fact (what it writes, the no-overwrite rule, the path sandbox). Nothing is padded, though the constraint sentence could be tightened.
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?
An output schema exists, so return values need not be described, and the description covers the mutation's side effects and path safety. Complete enough for a 4-param optional-only tool; only parameter defaults and error behaviour on a blocked path are left implicit.
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%, so the description must compensate, and it largely does: it names name, goal, and language as the file's content and addresses path both via 'the path is confined to the project root' and the file it writes. It does not explain the defaults or accepted value formats, so it is not fully compensatory.
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?
States a specific verb and resource ('Create a starter .faf file') and names the exact contents (project name, goal, language) plus the output artefact (valid FAF YAML with all required sections). It also routes the agent away from itself toward the sibling faf_discover, so it is distinguishable from the other faf_* tools without opening a schema.
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?
Gives an explicit when-not ('Will not overwrite an existing file') and names the alternative to use for the check ('use faf_discover first'). There is no guidance on when this is preferable to other creation/config siblings such as faf_auto or faf_migrate, but the main precondition is covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_migrateFaf MigrateADestructiveIdempotent
Migrate a .faf file to the current format version (3.0).
Bumps faf_version, ensures the section roots exist (project, stack,
human_context, monorepo), and re-serializes. Legacy slot names
(frontend/database/…) still score via the registry's aliases — this
only touches the version and structure, never your values. The file is
re-serialized, so YAML comments and formatting are not kept. Parity with
faf-cli's faf migrate. Pass dry_run=true to preview.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | project.faf | |
| dry_run | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive=true/false readOnly, and the description adds substantial context beyond them: it names exactly what changes (faf_version bump, section roots created, re-serialization), what is preserved (values, legacy slot aliases), what is irreversibly lost (YAML comments and formatting), and how to preview via dry_run.
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?
Front-loaded with the primary action, followed by the precise transformation details and caveats. Dense but every sentence carries distinct information — no filler or repetition of the name.
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?
An output schema exists so return shape needn't be described. The description covers mutation scope, data-loss caveat, idempotency-adjacent claims, and the dry-run escape hatch, leaving nothing an agent needs to call it safely.
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% and neither parameter is described in the schema, but the description explains the non-obvious dry_run semantics ('preview'), which is the parameter whose behavior actually matters; path is only implied via the .faf file reference.
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?
States a specific verb (migrate) and resource (.faf file) plus the target version (3.0), and its scope (version + structure only) clearly separates it from siblings like faf_init, faf_validate, and 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?
Gives a clear condition of use (moving a file to the current format version) and an operational hint ('Pass dry_run=true to preview'), but never names an alternative tool or states when NOT to use this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_modelFaf ModelARead-only
Get a 100% Trophy-scored example .faf file for a specific project type. Returns a complete, realistic project.faf that fills all 33 scored slots (populated, or slotignored where a slot does not apply). 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?
With readOnlyHint and openWorldHint already declaring the safety profile, the description adds real value: it explains the return is a complete realistic project.faf covering all 33 slots, including 'slotignored' semantics for non-applicable slots. It omits any rate limits or auth notes, but for a read-only reference tool this is solid disclosure.
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?
Front-loaded with the core action, then adds scope, usage, and the no-argument behavior. Four sentences, each adding distinct information, though the 'shows exactly what 100% looks like' clause is mildly redundant with the Trophy-scored framing.
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?
An output schema exists, so return values need not be detailed, and the description still characterizes the returned file usefully. For a single-parameter read-only tool it covers purpose, usage, return shape, and no-arg behavior, with only the parameter's value format left unstated.
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% for the single project_type parameter, so the description must compensate. It explains the meaningful behavior — omitting the argument lists all 15 project types — but never states the expected value format or enumerates the valid types, leaving the parameter partially opaque.
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?
States a specific verb and resource: 'Get a 100% Trophy-scored example .faf file for a specific project type', and clarifies it returns a complete project.faf filling all 33 scored slots. The purpose is unambiguous, but it never explicitly contrasts itself with siblings like faf_read or faf_init, so it stops short of a 5.
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?
'Use this as a reference when building or improving a .faf file' clearly frames when to reach for this tool, and 'Call without arguments to list all 15 available project types' gives the discovery path. It offers no exclusions or named alternatives, so it lacks the explicit when-not guidance of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_readFaf ReadARead-only
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?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful read-behavior detail (it returns the full parsed structure, not a partial view), but says nothing about failure modes such as a missing or malformed .faf file, which matters for a path-based reader.
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, front-loaded with purpose and followed by return content and usage ordering. The return-content sentence partially duplicates the output schema, but no sentence is filler.
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?
An output schema exists, so return values need not be spelled out, and the tool has one defaulted parameter and a covered safety profile. The main omission is edge-case behavior when the target file is absent or invalid.
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% for the single 'path' parameter, and the description only obliquely implies it by saying '.faf file'. It never explains the default (project.faf), path form, or resolution rules, so the description does not compensate for the schema gap.
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?
States a specific verb and resource ('Read project DNA from a .faf file') and even summarizes the returned structure. It does not differentiate itself from the many sibling tools (faf_stringify, faf_validate, faf_model), so an agent must infer the boundaries.
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?
'Use this as the first step to understand any FAF-enabled project' gives clear when-to-use context and establishes the tool's entry-point role. It names no exclusions or alternatives, so an agent is not told when another sibling is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_scoreFaf ScoreARead-only
Quick Mk4 score check — returns score (0-100%), tier, and slot counts. Uses the Mk4 always-33 scoring engine (faf-kernel parity) 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?
Annotations declare readOnlyHint=true and openWorldHint=false, so safety profile is already covered. The description adds useful scope ('quick', 'status check' vs error-detail path) and names the scoring engine, but doesn't disclose the return shape beyond the three fields, and an output schema exists anyway. Modest added value over annotations.
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 tight sentences; the purpose is front-loaded and the routing instruction follows immediately. No filler, no repetition of the title.
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 single-param read-only status tool with an output schema, the description covers purpose and sibling routing, which is most of what's needed. The gap is the undocumented 'path' parameter, whose 0% schema coverage leaves an agent guessing about valid inputs.
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?
Only one optional parameter (path) with a default of 'project.faf', but schema description coverage is 0% — the schema gives no hint what 'path' points to or its format. The description does not compensate; it never mentions path, accepted file locations, or what happens if omitted/defaulted.
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?
Clearly states a specific verb+resource: 'Mk4 score check' returning score, tier, and slot counts. Distinguishes itself from sibling faf_validate by routing error-detail needs elsewhere. Not a 5 because 'Mk4 always-33 scoring engine (faf-kernel parity)' is jargon that may be opaque to a first-time agent, but the core purpose is legible.
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 for status checks; use faf_validate when you need error details' — names the alternative and the condition that selects it. This is exactly the when/when-not routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_stringifyFaf StringifyBRead-only
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?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuine process detail ('Reads the file, parses it, then re-serializes'), but says nothing about failure behavior on malformed YAML or path resolution. With annotations handling the read-only story, a 3 is fair.
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 brief, front-loaded sentences with no filler. Slight redundancy between the second and third sentences, which restate the display/edit intent alongside the mechanics, but it is efficient overall.
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?
An output schema exists, so return values need not be spelled out, and the operation is a simple single-param read. The main gap is sibling differentiation: the description never clarifies why an agent should choose faf_stringify over faf_read, which matters given twelve related tools.
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?
One parameter ('path') with 0% schema description coverage and a default of project.faf. The description only hints at it via 'Reads the file', never naming the parameter or explaining the default or accepted path forms. Marginal value over the bare 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?
States a concrete verb+resource ('Convert parsed FAF data back to YAML string') and the pipeline that produces it. It is distinguishable from read-only siblings like faf_read, though it never names one directly. Minor tension: it claims to convert 'parsed FAF data' while the third sentence reveals the input is a file path.
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?
Offers two use contexts ('displaying the raw .faf content or preparing it for editing'), which implies when to reach for it. However, it gives no when-not guidance and never contrasts against faf_read or faf_model, which an agent must otherwise infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faf_validateFaf ValidateARead-only
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?
Annotations declare readOnlyHint=true and openWorldHint=false, so the agent already knows this is a safe, local read. The description adds useful behavioral nuance by categorizing output into errors (must fix) and warnings (should fix), but it doesn't expand on whether validation can fail, how deep the checks go, or any file prerequisites. With annotations covering the safety profile, a 3 is appropriate.
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 tight sentences, front-loaded with the result of validation, then output structure, then usage. No filler or redundancy; every sentence is informative.
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?
An output schema exists, so the description needn't detail return values, and it correctly sketches them anyway. It covers purpose, output categories, and when to run it. The only minor gap is not relating it to sibling tools like faf_score, but for a single-param read-only validator it is sufficiently 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 coverage is 0% and the single 'path' parameter has a default but no description in the schema. The description says 'a .faf file' but does not explain the path parameter, its default, or expected format. It adds only marginal meaning, so baseline 3 (one param, implicit scope) is fair.
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 a specific verb (validate) and resource (.faf file), and it names the concrete return values: score, tier, and issues. This distinguishes it from siblings like faf_score (which only scores) and faf_read, giving an agent a clear functional boundary without opening the schema.
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?
It explicitly says to use it 'after faf_init' and 'when checking if a .faf file meets quality standards', providing clear usage context and a workflow anchor. It doesn't name alternatives or state when not to use it (e.g., vs. faf_score), but the context is strong.
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.
1 tool update
v2.8.2- Added
faf_migrate
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
Scored across 13 tools
Most tools target distinct operations (read, discover, init, migrate, export), and the descriptions actively differentiate the two closest pairs: faf_validate vs faf_score (error details vs quick status) and faf_read vs faf_context (full structure vs AI-optimized subset). The overlap is real but the guidance reduces misselection, leaving only mild ambiguity.
Every tool uses a uniform faf_ prefix followed by a single snake_case noun/verb (faf_read, faf_score, faf_discover, faf_migrate). The pattern is fully predictable throughout with no mixed conventions.
13 tools sit squarely in the well-scoped 3-15 range, and each maps to a concrete lifecycle step (discover, init/auto, read/context, validate/score, stringify, migrate, export). No tool feels redundant or padded.
The surface covers the full FAF lifecycle: discovery, creation (init/auto), reading (read/context), validation/scoring, serialization, migration, and two export targets (GEMINI.md, AGENTS.md). Minor gaps exist — no explicit delete/edit for arbitrary slots and no updater beyond faf_auto filling empty slots — but core workflows are covered.
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.
Project management shared by people and AI agents, with persistent project state through MCP.
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.14529 npm23MIT
- 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.401 npm4MIT
- 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.15415 npm7MIT
- 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.2839Apache 2.0