Skip to main content
Glama

grok-faf-mcp — FAST⚡️AF Edition

IANA: vnd.faf+yaml DOI: Context paper DOI: Agents paper

Home: faf.one/grok Live demo: grok.faf.one

grok-faf-mcp hero

npm version Smithery FAF Trophy 100% CI License: MIT project.faf Chat to FAFA live

Stars Downloads

FAF defines. MD instructs. AI codes.

v1.10.0 — The No-Fluff Edition

No fluff in a project.faf. faf_enhance is gone. RAG default is grok-4.6.

A .faf is facts. Two writers only: the repo (faf_auto) and the human (faf_go). Empty is honest. There is no enhance.

⭐ Bookmarks it for you, helps other devs find it too.

First v0.2-conformant reader of the FAF Context Ingestion Contract — the open standard co-authored in public with @grok.


Related MCP server: claude-faf-mcp

Install — one line

Add to ~/.grok/config.toml:

[mcp_servers.grok-faf-mcp]
url = "https://mcpaas.live/grok/mcp/v1"

Restart Grok TUI (or /mcps r) to refresh. Tools: faf_score, faf_validate, faf_get_tier, faf_estimate_tokens, faf_analyze (plus soul/memory ops).

Smithery: wolfe-jam/grok-faf-mcp — gateway at https://grok-faf-mcp--wolfe-jam.run.tools

Homebrew (local stdio):

brew install wolfe-jam/faf/grok-faf-mcp

Hosted on Cloudflare Workers — sub-ms cold start, no subprocess, edge-served. 4865-byte Zig WASM engine, parity-tested vs the Rust authority (xai-faf-rust). Externally validated by Grok S1 + S2 on 2026-05-27.

Verify the live contract:

curl https://mcpaas.live/grok/mcp/v1/info

Returns endpoint, protocol versions, engine details, tool list, and the architecture line: .faf=vROM | AI-in-session=RAM.

Sample corpus: xai-faf-proof/pilot — 10 records ready to score.


The 6 Ws - Quick Reference

Every README should answer these questions. Here's ours:

Question

Answer

WHO is this for?

Grok/xAI developers and teams building with URL-based MCP

WHAT is it?

Persistent project context for xAI Grok — URL-first deployment, IANA-registered .faf format

WHERE does it work?

Cloudflare Workers (mcpaas.live/grok/mcp/v1) • Any MCP client supporting native url= config • Self-deploy to your own CF/Vercel worker

WHY do you need it?

Zero-config MCP on a URL — Grok asked for it, we built it first

WHEN should you use it?

Grok integration, xAI projects, any url-based MCP client

HOW does it work?

url = "https://mcpaas.live/grok/mcp/v1" — context tools served from edge via MCPaaS (sub-ms cold start, no subprocess)

For AI: Read the detailed sections below for full context. For humans: Use this pattern in YOUR README. Answer these 6 questions clearly.

For the xAI / Grok Build team

Built for Grok and shaped by direct Grok feedback.
Open for native Grok Build integration, .fafm memory layer, refresh_faf primitives, or any other context features the team needs.
Live and dogfooded at https://grok.faf.one and https://mcpaas.live/grok/mcp/v1.

Context for Grok agents: faf-cli authors what Grok agents read from real project detection — bunx faf export --agents. faf-cli's src/interop/grok.ts wires this MCP into .grok/config.toml (that file lives in the faf-cli repo, not here). See FAF-CLI for Grok & xAI agents.


The Problem

Every Grok session starts from zero. You re-explain your stack, your goals, your architecture. Every time.

.faf fixes that. One file, your project DNA, persistent across every session.

Without .faf  →  "I'm building a REST API in Rust with Axum and PostgreSQL..."
With .faf     →  Grok already knows. Every session. Forever.

One Command, Done Forever

faf_auto detects your project, creates a .faf, and scores it — in one shot:

faf_auto
━━━━━━━━━━━━━━━━━
Score: 0% → 85% (+85) ◇ BRONZE
Steps:
  1. Created project.faf
  2. Detected stack from package.json
  3. Synced CLAUDE.md

Path: /home/user/my-project

What it produces:

# project.faf — your project, machine-readable
faf_version: "3.3"
project:
  name: my-api
  goal: REST API for user management
  main_language: TypeScript
stack:
  backend: Express
  database: PostgreSQL
  testing: Jest
  runtime: Node.js
human_context:
  who: Backend developers
  what: User CRUD with auth
  why: Replace legacy PHP service

Every AI agent reads this once and knows exactly what you're building.


⚡ What You Get

URL:     https://mcpaas.live/grok/mcp/v1
Format:  IANA-registered .faf (application/vnd.faf+yaml)
Tools:   12 core by default (bunx) — re-grounding (refresh_faf/fafm/blend), LAZY-RAG, orchestration substrate, FAF essentials · extended utilities via FAF_TOOLS=all · 19 hosted (WASM-pure, served by mcpaas-cf) on the URL
Engine:  Mk4 WASM scoring (faf-scoring-kernel)
Speed:   0.5ms average (was 19ms — 3,800% faster with Mk4)
Tests: 27 .ts files (~518 test declarations) — WJTTC parity (heavy local ↔ light hosted) + full suites. Runner: sh scripts/run-tests.sh (bun + flake retry)
Status:  FAST⚡️AF

MCP on a URL. Point your Grok integration at the URL. That's it.


Scoring: From Blind to Optimized

Tier

Score

What it means

🏆 TROPHY

100%

Gold Code — AI is optimized

★ GOLD

99%+

Near-perfect context

◆ SILVER

95%+

Excellent

◇ BRONZE

85%+

Strong baseline

GREEN

70%+

Solid foundation

● YELLOW

55%+

AI flipping coins

○ RED

<55%

AI working blind

♡ WHITE

0%

Start — good luck

At 55%, Grok guesses half the time. At 100%, Grok knows your project.


Two Ways to Deploy

Point your MCP client at the production URL — edge-served on Cloudflare Workers, no subprocess, sub-ms cold start. WASM-pure tools only on this path (scoring, validation, refresh_faf).

{
  "mcpServers": {
    "grok-faf": {
      "url": "https://mcpaas.live/grok/mcp/v1"
    }
  }
}

2. Local (stdio — for FS-touching workflows)

Use the local stdio path when you need filesystem access (faf_init, faf_sync, file-mutating tools):

brew install wolfe-jam/faf/grok-faf-mcp   # macOS tap
# or
bunx grok-faf-mcp

Or via MCP config:

{
  "mcpServers": {
    "grok-faf": {
      "command": "bunx",
      "args": ["grok-faf-mcp"]
    }
  }
}

MCP Tools

Create & Detect

Tool

Purpose

faf_init

Create project.faf from your project

faf_auto

Auto-detect stack and populate context

faf_score

AI-readiness score (0-100%) with breakdown

faf_status

Check current AI-readability

refresh_faf

Re-ground on the live .faf — re-read + re-score, report drift, return fresh DNA (drift → refresh → re-grounded). Requested by Grok.

Drift & Orchestration (1.5 — the prestige release)

Tool

Purpose

refresh_fafm

Re-ground on the live .fafm memory layer for one or more souls. Returns a stamped delta (added/updated facts) by default; verbatim: true for full content. Read-only · always stamped. Sister to refresh_faf for the RAM/memory layer in the vROM/RAM model. Built for Grok, by request.

refresh_blend

The baked-in two-intensity refresh (Cmd+R / Cmd+Shift+R analog). mode: "blend" (default) fires refresh_faf (light) + refresh_fafm (delta); mode: "nuke" fires both at hard intensity. Blend is BAKED IN, NOT a dial — both layers always fire; mode only affects fafm intensity.

faf_orchestrate_recommendation

The heavy orchestrator. Reads current substrate state, composes the full 1.5 library substrate (drift detection · CheckID · repeat-offender · take-a-hint · refresh history), returns a structured Recommendation with recommend, severity, summary, reason, and a rich hints object including effective_policy (the tier in force). Advisory only — never auto-fires (subordinate-not-daemon). Writes a recommendation receipt on every call (no silent decisions). Spec source: Grok-1 FAF-DRIFT-DETECTION-SPEC §9.5 + Appendix C.

faf_get_orchestration_policy

Pure introspection of the effective policy WITHOUT running the orchestrator. Returns { tier, thresholds, source, overrides_applied } — what aggressiveness tier the next orchestration call would use, and whether it came from defaults or a .faf:orchestration: override. No drift detection · no signals · no receipt write — the quietest tool in the 1.5 substrate. Useful for debugging unexpected orchestrator behavior, pre-flight checks before bulk operations, and override-took-effect verification.

Sync & Persist

Tool

Purpose

faf_sync

Sync .faf → CLAUDE.md

faf_bi_sync

Bi-directional .faf ↔ platform context

faf_trust

Validate .faf integrity

Read & Write

Tool

Purpose

faf_read

Read any file

faf_write

Write any file

faf_list

Discover projects with .faf files

RAG & Grok-Exclusive

Tool

Purpose

rag_query

RAG-powered context retrieval

rag_cache_stats

RAG cache statistics

rag_cache_clear

Clear RAG cache

grok_go_fast_af

Auto-load .faf context for Grok

Plus 34 advanced tools available with FAF_SHOW_ADVANCED=true.


Performance

Execution:    0.5ms average (97% faster than v1.1)
Fastest:      3,360ns (version — nanosecond territory)
Slowest:      1.3ms (score — Mk4 WASM)
Improvement:  19ms → 0.5ms (3,800% faster)
Engine:       Mk4 WASM via faf-scoring-kernel
Memory:       Zero leaks
Transport:    stdio (local, bunx) · Streamable HTTP (hosted, Cloudflare Workers)

Benchmarked 10x per tool, warmed up, on local stdio execution. Hosted edge adds sub-ms cold start on top.

Orchestrator (faf_orchestrate_recommendation) characteristics: composition call — reads up to 6 files (.faf, .fafm, package.json, CHANGELOG.md, README.md, plus all 3 receipt logs), runs 2 analyzers (detectFafmDrift + checkId), evaluates the decision table, writes 1 receipt. Expected latency: tens of ms on warm cache; higher under cold-disk or very large .fafm corpora. Designed for occasional agent-initiated calls, not per-turn polling. detectFafmDrift is O(n²) in fact count (cross-fact n-gram recurrence) — comfortable up to ~hundreds of facts.


Architecture

grok-faf-mcp
├── src/
│   ├── server.ts             → MCP server (GrokFafMcpServer)
│   ├── handlers/
│   │   ├── championship-tools.ts  → 55+ tool definitions
│   │   ├── tool-registry.ts       → Visibility filtering (core/advanced)
│   │   └── engine-adapter.ts      → FAF engine bridge
│   ├── faf-core/compiler/faf-compiler.ts → Mk4 WASM scoring + Mk3.1 fallback
│   ├── types/                     → Canonical type substrate (1.5)
│   │   ├── drift-signals.ts       → DriftSignal · Contradiction · RepeatOffender
│   │   ├── refresh.ts             → RefreshMode
│   │   ├── escalation.ts          → EscalationLevel
│   │   ├── recommendation.ts      → RecommendationAction
│   │   └── receipts.ts            → ReceiptMetadata
│   ├── detection/fafm-drift.ts    → detectFafmDrift() — repetition-rate gauge
│   ├── integrity/check-id.ts      → checkId() — cross-stamp contradiction check
│   ├── orchestrator/
│   │   ├── repeat-offender.ts     → RepeatOffenderTracker
│   │   ├── take-a-hint.ts         → evaluateTakeAHint() — escalation ladder
│   │   ├── refresh-blend.ts       → runRefreshBlend()
│   │   └── recommendation.ts      → analyzeAndRecommend() + orchestrate()
│   └── telemetry/
│       ├── refresh-receipts.ts        → RefreshReceiptsLog
│       └── recommendation-receipts.ts → RecommendationReceiptsLog
├── smithery.yaml             → Smithery listing config
├── api/index.ts              → Vercel catch-site (legacy showcase surface; kept alive)
└── vercel.json               → Vercel routing for the catch-site

Production deployment: Cloudflare Workers via mcpaas-cf (serving mcpaas.live/grok/mcp/v1). The api/index.ts + vercel.json paths above stay alive as a catch-site for legacy/bookmarked links — they are no longer the production path.

Scoring pipeline: TypeScript compiler parses .faf → detects project type → The Bouncer injects slotignored for inapplicable slots → faf-scoring-kernel (WASM) scores → falls back to Mk3.1 if kernel unavailable.


Testing

27 test files (~518 test declarations) — WJTTC parity (heavy local ↔ light hosted) + full suites (recent runs green on CI):

sh scripts/run-tests.sh

Suite

Coverage

desktop-native-validation

Core native functions, security, performance

mcp-conformance

MCP protocol conformance — tools, transport, errors

wjttc-mcp

WJTTC MCP certification

wjttc-bun

WJTTC bun-migration + integrity

wjttc-compiler-scoring

Compiler scoring — engine, type detection, slots

rag-system

RAG query, caching, context retrieval

security

Input validation + security guards

visibility

Tool visibility (core/advanced filtering)


Status & known limitations (v1.10)

v1.10.0 — The No-Fluff Edition — no fluff in a project.faf. faf_enhance is gone. RAG default is grok-4.6. Fill stays on faf_auto / faf_go. Everything below still applies; operating it honestly means surfacing what's NOT in here alongside what is.

Earlier: v1.9.0 — The ZEPH Default Edition — the proven-fast Zig→WASM scoring path behind refresh_faf is now default-ON (same score, cheaper to compute; parity proven byte-identical — CI gate + 91/91 live). Kill switch USE_ZEPH=0 forces the canonical scorer. FRC tools stay opt-in behind USE_FRC.

Earlier: v1.8.0 — The Closed-Loop Edition — observability writes, token math is honest, FRC contract locked. The drift→refresh→re-ground loop can finally be measured. Earlier: v1.7.0 — The Grounded Memory Edition — ZEPH + the FRC layer over Grok Collections (faf_gate/faf_section/faf_memory), opt-in via USE_FRC/USE_ZEPH; 12-tool core unchanged. Earlier: v1.6.0 — The ZEPH Edition — the ZEPH fast path for re-grounding (refresh_faf/refresh_blend via Zig→WASM cascade.wasm, ~12µs, USE_ZEPH=1; faf-cli stays canonical, parity locked in CI).

What is fully supported:

  • WASM-pure tools on the hosted endpoint (https://mcpaas.live/grok/mcp/v1 and client-specific routes) — scoring · validation · refresh_faf.

  • refresh_faf and refresh_fafm as explicit, callable re-grounding primitives.

  • refresh_blend as the baked-in two-intensity refresh (Cmd+R / Cmd+Shift+R analog).

  • faf_orchestrate_recommendation — the heavy orchestrator that composes drift signals, recurrence, receipts, and take-a-hint into an advisory recommendation.

  • faf_get_orchestration_policy — pure introspection of the effective policy without running the orchestrator (no drift detection, no receipt write — the quietest tool in the substrate).

  • Full policy visibility (effective_policy) returned on every orchestration call AND surfaced standalone via faf_get_orchestration_policy.

Current limitations:

  • faf_orchestrate_recommendation, faf_get_orchestration_policy, refresh_fafm, and refresh_blend require filesystem access and are only available via the local stdio path (bunx grok-faf-mcp / npx grok-faf-mcp). They are not exposed on the hosted WASM-pure endpoint. The hosted path serves the existing WASM-pure subset only (refresh_faf + scoring + validation).

  • Receipt storage — cwd-relative JSON, pull-discoverable. Three append-only JSON files live at the repo root with stable schemas:

    .faf-drift-index.json              ← RepeatOffenderTracker — per-slot recurrence counts
    .faf-refresh-receipts.json         ← RefreshReceiptsLog    — every refresh fire
    .faf-recommendation-receipts.json  ← RecommendationReceiptsLog — every orchestrator call

    Pull-discoverable by external tools (TAF, custom indexers, observability dashboards) — read on your own schedule, no callback/push API required. Promotion to a dedicated orphan branch (mirroring the TAF pattern) is documented but deferred per ship discipline; the cwd-relative JSON is the v1 bootstrap.

  • No multi-process file lock on the receipt logs. Within a process, the JS event loop serializes writes. Multi-agent concurrent writes can race; future task.

  • Aggressiveness tier hook.faf:orchestration:tier reads 'conservative' (default — quietest, no noisy first-impression) · 'balanced' · 'aggressive'. active_tier always surfaced in hints.effective_policy for observability, and standalone via faf_get_orchestration_policy. The policy WRITER (faf_set_orchestration_policy) and scheduling (faf_schedule_heavy_re_ground) are not included in v1.5 — edit .faf:orchestration:tier: directly to override.

  • No ack mechanism yet for recommendation receipts. acknowledged: false by default, never auto-flipped. Take-a-hint's ladder-reset semantics fire only on explicit ack — conservative by intent. Future task: explicit ack tool OR derived-from-subsequent-refresh-receipt timing.

  • Outcome tracking ("did this recommendation actually help?") — needs a learning layer beyond 1.5 scope.

The honest split is intentional: hosted = fast, auditable, WASM-pure; local = full capability including filesystem. We will expand the hosted surface only where it can be done safely and without compromising the model.

Subordinate-not-daemon throughout. The orchestrator NEVER auto-fires the recommended tool. Agents surface the recommendation; the user (or higher agent) decides whether to act. Even severity: 'block' is advisory.

See the public verifier and curl https://mcpaas.live/grok/mcp/v1/info for the current contract.


Ecosystem

One format, every AI platform.

Package

Platform

Registry

grok-faf-mcp (this)

xAI Grok

npm + Homebrew

claude-faf-mcp

Anthropic

npm + MCP #2759

gemini-faf-mcp

Google

PyPI

rust-faf-mcp

Rust

crates.io

faf-mcp

Cursor, IDE's, VS Code

npm

faf-cli

Terminal CLI

bunx, npm + Homebrew

Same project.faf. Same scoring. Same result. Different execution layer.


Voice variant — grok-faf-voice (VML)

.fafm 🐘🎙️ — the voice variant of the .faf 🐘 family.

grok-faf-voice is the reference implementation of the Voice Memory Layer (VML) — what your voice agent remembers across sessions, devices, and model switches. Companion to grok-faf-mcp:

  • grok-faf-mcp (this) — .faf Foundational Context Layer for Grok via MCP-on-a-URL.

  • grok-faf-voice.fafm Voice Memory Layer (VML) for Grok Voice via LiveKit + xAI realtime.

Same family. Different surface. Voice swappable; memory permanent.

PyPI · GitHub · Onboarding


For the xAI / Grok Build team

This MCP server was built for Grok and continues to be shaped by direct feedback from Grok itself.

Open for deeper collaboration on:

  • Native Grok Build integration

  • .fafm memory layer

  • refresh_faf primitives inside the Grok TUI / CLI

  • Any other context or orchestration features the team needs

I ship fast, test rigorously, and dogfood everything live on https://grok.faf.one and https://mcpaas.live/grok/mcp/v1.

Happy to:

  • Open PRs

  • Run private dogfood sessions

  • Jump on a call

  • Or just ship whatever moves the needle

Real software only. Just say the word.


Contributing

PR conventions, code style, CI doctrine, MCP-tool contribution path, npm publish discipline, architecture decisions: CONTRIBUTING.md.

xAI / Grok devs welcome — TL;DR setup at the top, F1-inspired tone throughout.


For xAI / Grok Build team

Open for deeper native integration, .fafm memory layer, or Grok Build CLI collaboration.
Happy to ship PRs, dogfood, or jump on a call. Just say the word.


Citation

If you use grok-faf-mcp or the .faf / .fafa formats in research or production, please cite the format papers:

Wolfe, J. (2025). Format-Driven AI Context Architecture: The .faf Standard for Persistent Project Understanding. Zenodo. https://doi.org/10.5281/zenodo.18251362

Wolfe, J. (2026). Why Agents Need a Passport: .fafa — Portable Identity for the Agentic Era. Zenodo. https://doi.org/10.5281/zenodo.21951641

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{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 — Free and open source



Get the CLI

faf-cli — The original AI-Context CLI. A must-have for every builder.

npx faf-cli auto

Anthropic MCP #2759 · IANA Registered: application/vnd.faf+yaml · faf.one · npm · Talk to my Agent →

Available Tools

12 tools
faf_get_orchestration_policyAInspect

Introspect the effective orchestration policy WITHOUT running the orchestrator. Returns { tier, thresholds, source, overrides_applied } — what aggressiveness tier the next faf_orchestrate_recommendation call would use, and whether it came from defaults or a .faf:orchestration: override. No drift detection, no signals, no receipt — pure introspection. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional explicit `.faf` file path or project directory (supports ~). When omitted, the live process cwd is searched for project.faf / .faf.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully covers behavioral traits: read-only, no side effects, pure introspection, no drift detection, no signals, no receipt. This is comprehensive for a safe introspection tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences. First sentence captures purpose and return. Second lists fields. Third summarizes what it is not. Efficient and front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, single-parameter, read-only tool, the description fully explains its purpose, behavior, and return value. No output schema exists, but the JSON-like return structure is described. Given the complexity, it is completely adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single optional path parameter. The schema already explains it clearly. The description adds no further meaning about the parameter, but the behavioral context (pure introspection) is indirectly useful. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool introspects the orchestration policy without running the orchestrator, distinguishing it from faf_orchestrate_recommendation. It specifies the verb 'introspect', the resource 'orchestration policy', and the concrete return structure, leaving no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use (to check policy before actual orchestration) and what not to expect (no drift detection, no signals, no receipt). Implicitly contrasts with faf_orchestrate_recommendation by naming it as the sibling that would perform orchestration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faf_initA
Destructive
Inspect

Create a project.faf — the IANA-registered context file (application/vnd.faf+yaml) that gives Grok persistent project DNA (stack, structure, intent) in one portable file, so an agent reads the whole project cold each session instead of re-discovering it. Writes project.faf to the target directory (created if missing) and refuses to overwrite an existing context file unless force is set. Run once at project start, or with force to regenerate, then call faf_score to check readiness. Returns a text confirmation with the written file path and the detected project type.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAlias for `directory`; takes precedence if both are supplied.
forceNoOverwrite an existing project.faf. Default false: if a context file already exists, faf_init refuses and leaves it untouched.
directoryNoAbsolute or ~-relative project directory to initialize; created if it does not exist. Defaults to the current working directory.
projectNameNoProject name used to resolve the directory via the Projects convention when no directory/path is given.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive behavior (destructiveHint=true). The description adds context: writes file to target directory (created if missing), refuses overwrite unless force set, and returns confirmation. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three well-structured sentences, front-loaded with purpose. No wasted words; every sentence adds necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers key aspects: file creation, overwrite behavior, directory creation, return value, and next step (call faf_score). Despite no output schema, the return value is described. For a tool of this complexity, it is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. The description adds value by explaining the force parameter's effect (override refusal) and implying the directory parameter's role (target for writing). This goes beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a project.faf file (IANA-registered context file) with specific purpose (persistent project DNA). It distinguishes from sibling tools like faf_score (readiness check) and faf_sync by detailing its unique role and output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Run once at project start, or with `force` to regenerate, then call faf_score to check readiness.' It also notes the refusal to overwrite without force. However, it does not directly compare with all siblings like refresh_faf, but the intended use case is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faf_orchestrate_recommendationAInspect

Heavy orchestrator — given current substrate state, returns a structured recommendation about drift: which refresh to call (or no_action), why, how severe, and the underlying signals. ADVISORY ONLY — never auto-fires. Composes the full 1.5 substrate (drift detection · contradiction check · repeat-offender · take-a-hint · refresh history). Writes a recommendation receipt on every call (auditable trail, no silent decisions). Read-only WRT substrate state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: it is read-only with respect to substrate state, never auto-fires, writes a recommendation receipt for audit, and composes multiple internal checks. This provides clear expectations for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, starting with the main purpose, then listing components, usage caveat, audit behavior, and read-only nature. Each sentence adds value, though it could be slightly more concise by removing the list of components which may be unnecessary for the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description covers all essential aspects: purpose, behavior (advisory, read-only), side effects (writes receipt), and internal logic (composes multiple checks). No critical information is missing for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, and schema description coverage is 100%. The description does not need to explain parameters. It adds context by noting that the tool operates on 'current substrate state,' which is implicit rather than parameter-driven. Baseline score for 0 parameters is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a structured recommendation about drift, specifying the output includes which refresh to call or no_action, severity, and underlying signals. It differentiates itself from siblings by being a 'heavy orchestrator' that composes multiple checks, distinguishing it from lighter tools like faf_guide or faf_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'ADVISORY ONLY — never auto-fires,' telling the agent not to automatically execute actions based on the recommendation. It also mentions it writes an auditable receipt, implying it's for logging. However, it does not specify when not to use this tool versus alternatives like faf_get_orchestration_policy or refresh_faf.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faf_scoreAInspect

Score a project's AI-readiness 0–100% against the fixed 33-slot context model — how much project DNA an agent has before it has to guess. Deterministic: the same .faf always scores the same. Returns the score, tier, and per-slot breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailsNoInclude detailed breakdown and improvement suggestions

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It explicitly states determinism ('the same .faf always scores the same') and that it returns score, tier, and per-slot breakdown. It does not mention side effects, auth needs, or rate limits, but none are expected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first defines purpose and scale, second adds determinism and return info. No fluff, front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains return values (score, tier, per-slot breakdown). It covers the single parameter's effect implicitly. Could mention tier categories but sufficient for a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for one optional parameter. The description aligns with the schema ('Returns the score, tier, and per-slot breakdown') but adds no additional meaning beyond what the parameter description already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Score' and resource 'project's AI-readiness', clearly defines the 0–100% scale and the 33-slot context model. It distinguishes this tool from siblings by its unique assessment focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for scoring AI-readiness but provides no explicit guidance on when to use versus alternatives like faf_trust or faf_init. No exclusions or context are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faf_syncAInspect

Sync project.faf into your AI context files (CLAUDE.md, AGENTS.md, .cursorrules, GEMINI.md). Non-destructive: injects a structured .faf block at the top for fast machine reading and preserves your prose below. One source of truth, every tool kept current.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses non-destructive behavior and action (inject at top, preserve prose). However, it does not specify behavior if .faf block already exists, file permissions, or error handling, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, then adds qualifiers. Every sentence serves a purpose—no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, no output schema, and a simple operation, the description covers the action, target files, and key behavioral traits. Lacks details on prerequisites or failure modes, but sufficient for basic use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters with 100% coverage, so baseline is 4. The description adds value by explaining the tool's purpose without relying on parameters, so no deduction.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool syncs project.faf into specific AI context files, listing them explicitly. It distinguishes from siblings by specifying its unique action (injecting a .faf block) and its non-destructive nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (to sync project.faf into context files) and mentions its non-destructive property. However, it does not explicitly compare with siblings like refresh_faf or refresh_blend, missing an opportunity to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faf_trustAInspect

Validate a project.faf's structure and integrity — confirm the context file is well-formed and parses cleanly before an agent grounds on it. The pre-flight trust check: never build on a broken context layer.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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 discloses the tool validates structure and integrity by checking well-formedness and parsing. However, it does not specify the return format (e.g., boolean, error messages) or what happens if validation fails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main action and purpose. Every word serves a purpose, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description is brief but covers the core purpose. However, it lacks details on what constitutes a successful validation or the return value, which would be helpful for an agent invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the baseline is 4. The description adds value by explaining the tool's purpose and context, which is sufficient since no parameters need documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool validates a project.faf's structure and integrity, acting as a pre-flight trust check. It specifies the verb 'validate' and the resource, and it distinguishes from sibling tools like faf_init and faf_score by focusing on validation rather than initialization or scoring.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using this tool before an agent grounds on the context file, with the principle 'never build on a broken context layer.' This gives clear usage timing but does not explicitly state when not to use it or provide alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rag_cache_clearAInspect

Clear the LAZY-RAG cache — drop all cached retrievals so the next rag_query rebuilds from source. Use when the underlying context has changed and you want fresh results instead of cached ones.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, but the description fully discloses the behavior: it is destructive (drops all cached retrievals) and causes the next query to rebuild from source. This compensates for the lack of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The first sentence states the action and effect, the second gives usage guidance. Perfectly front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no output schema), the description fully explains what it does and when to use it. No gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and per the rubric baseline is 4. The description does not need to add parameter meaning since there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (Clear) and resource (LAZY-RAG cache), explicitly states the effect (drop all cached retrievals), and distinguishes from siblings like rag_query and rag_cache_stats by focusing on cache management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for use: 'Use when the underlying context has changed and you want fresh results instead of cached ones.' However, it does not mention when not to use it or suggest alternative tools, which prevents a higher score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rag_cache_statsAInspect

Get LAZY-RAG cache statistics - hits, misses, hit rate, cache size

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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 states the tool retrieves statistics (read-only) but does not disclose any side effects, permissions, or rate limits, leaving behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. Every word adds value, listing the core functionality and output metrics concisely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple stat retrieval tool, the description covers the basic purpose and output. However, it omits important context such as whether stats are cumulative or per session, and does not reference sibling tools like rag_cache_clear that could affect these stats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters (100% coverage). The description adds value by specifying the output fields (hits, misses, hit rate, cache size), which is beyond the schema and compensates for the missing output schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'LAZY-RAG cache statistics', listing specific metrics (hits, misses, hit rate, cache size). It effectively distinguishes from sibling tools like rag_cache_clear or rag_query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives such as rag_cache_clear or rag_query. The description implies monitoring use but lacks explicit context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rag_queryAInspect

Ask a question with RAG-enhanced context from xAI Collections. Uses LAZY-RAG cache for 100,000x speedup on repeated queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesQuestion to ask

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations present; description mentions LAZY-RAG cache and speedup but lacks details on side effects (e.g., cache writing), permissions, rate limits, or error behavior. Missing critical behavioral context for a query tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states purpose, second adds a key technical detail. No fluff, front-loaded, efficiently communicates core function and a differentiator.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but description does not explain what the tool returns (e.g., answer text, references). For a simple query tool with one parameter, the lack of return description is a moderate gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter 'question' with schema description 'Question to ask'. Schema coverage is 100%, so baseline 3 is appropriate. Description adds no extra semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb 'ask' and resource 'question with RAG-enhanced context from xAI Collections'. Differentiates from siblings like rag_cache_clear and rag_cache_stats by specifying the core querying functionality. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for question-answering with RAG, but no explicit guidance on when to use vs. alternatives (e.g., direct search or other faf tools). Does not provide when-not-to-use or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_blendAInspect

Baked-in two-intensity refresh (Cmd+R / Cmd+Shift+R analog). Fires BOTH refresh_faf + refresh_fafm in one call. mode: "blend" (default) = light .faf + delta .fafm — the everyday re-ground. mode: "nuke" = light .faf + verbatim .fafm — the hard reload for polluted session memory. Intensity matches drift rate per layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo'blend' (Cmd+R analog, default) = .faf + .fafm delta. 'nuke' (Cmd+Shift+R analog) = .faf + .fafm verbatim.blend
pathNoFor refresh_faf: project directory or .faf path (supports ~).
soulNoFor refresh_fafm: specific soul. Omit or 'default' for primary; 'all' for every soul.
sinceNoFor refresh_fafm (delta mode only): ISO timestamp. Only facts modified after this. Ignored when mode=nuke (verbatim).
baselineNoFor refresh_faf: your last-known score (0-100). Drift delta reported if provided.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It explains the two modes and mentions intensity matching drift rate per layer. It does not disclose potential side effects, authentication needs, or rate limits, but for a refresh operation the behavioral description is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it begins with the core purpose, then explains the two modes with their analogs, and ends with a relevant behavioral detail. Every sentence earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters and no output schema, the description covers the input semantics and mode behaviors adequately. Missing details include what the output looks like (e.g., success message, return values), but the description is sufficient for an AI agent to understand when and how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter descriptions. The tool description adds a high-level context (analogy to keyboard shortcuts, 'light .faf + delta .fafm') but does not significantly extend the meaning beyond what the schema already provides for each parameter. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool is a combined refresh that fires both refresh_faf and refresh_fafm. It distinctly separates the two modes ('blend' vs 'nuke') and relates them to keyboard shortcuts (Cmd+R / Cmd+Shift+R), making the purpose unambiguous and differentiating it from the sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use each mode ('everyday re-ground' vs 'hard reload'). However, it does not explicitly state when to prefer this combined tool over calling refresh_faf or refresh_fafm individually, nor does it mention any prerequisites or conditions that might require separate calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_fafAInspect

Re-ground on the live .faf — re-read + re-score the current project DNA, report drift vs your last-known score, and return the fresh context. The explicit re-grounding primitive for long sessions: drift → refresh → re-grounded. Built for Grok, by request.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoProject directory or .faf path (supports ~). Defaults to the session working directory.
baselineNoYour last-known score (0-100). If provided, the drift delta is reported.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full transparency burden. It discloses re-reading and re-scoring but does not mention side effects (e.g., does it modify any state?), required permissions, or rate limits. The phrase 'Built for Grok, by request' adds no behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences cover purpose, usage flow, and note. The first two sentences are informative; the third ('Built for Grok, by request') is peripheral. Overall concise but not maximally efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description mentions returning 'fresh context' and drift delta, which suffices for a re-grounding tool. It explains both parameters and the session workflow. Lacks specifics on return format but enough for most agents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (both parameters have descriptions). The description adds no extra meaning beyond the schema: 'baseline' is already described as last-known score for drift, and 'path' as project directory. Per guidelines, baseline is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool re-reads and re-scores the .faf, reports drift vs last-known score, and returns fresh context. It explicitly uses the verb 're-ground' and distinguishes from siblings like faf_read and faf_score by positioning itself as a 're-grounding primitive' for long sessions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage in long sessions where drift occurred ('drift → refresh → re-grounded') and mentions the optional 'baseline' parameter for drift reporting. However, it lacks explicit guidance on when not to use this tool or specific alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_fafmAInspect

Reload the latest structured memory (.fafm) for one or more souls into the current session. Returns a stamped delta by default (added/updated facts since last refresh or a given timestamp). Use verbatim: true to receive the full current .fafm content instead. Read-only. Always returns a content hash + timestamp stamp. Complements recall, load_soul, and etch — does not replace them.

ParametersJSON Schema
NameRequiredDescriptionDefault
soulNoSpecific soul to refresh. Omit or use 'default' for the primary memory layer. Use 'all' to refresh every available soul.default
sinceNoOptional ISO timestamp. Only return facts modified after this time. Ignored when verbatim=true.
verbatimNoIf true, returns the full current .fafm content for the requested soul(s) instead of a delta. Use sparingly — deltas are preferred for normal operation.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: read-only, returns hash+timestamp stamp, delta by default, verbatim option, and that since parameter is ignored when verbatim=true. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise and front-loaded: specifies action, default behavior, and alternatives in two sentences with no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description adequately explains return values (stamped delta or full content with hash+timestamp). Covers all parameters, usage, and relationships between options.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant context beyond the schema: explains default soul behavior, advises sparing use of verbatim, and notes interplay between since and verbatim.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reloads structured memory (.fafm) for souls into the current session, with specific verbs like 'reload' and 'refresh', and distinguishes it from siblings (recall, load_soul, etch).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains when to use (reload latest memory) and when to use alternatives (verbatim for full content, delta default). Mentions it complements but does not replace other tools, providing clear guidance.

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.

  1. 1 tool updatev1.9.1
    • Changedfaf_init4 fields changed
      • changedInput schema / properties / directory / description
        Previous value: -"Project directory path (supports ~ tilde expansion). Creates directory if it doesn't exist."New value: +"Absolute or ~-relative project directory to initialize; created if it does not exist. Defaults to the current working directory."
      • changedInput schema / properties / force / description
        Previous value: -"Force reinitialize existing FAF context"New value: +"Overwrite an existing project.faf. Default false: if a context file already exists, faf_init refuses and leaves it untouched."
      • changedInput schema / properties / path / description
        Previous value: -"Alias for directory parameter"New value: +"Alias for `directory`; takes precedence if both are supplied."
      • changedInput schema / properties / projectName / description
        Previous value: -"Project name for path inference (used with Projects convention)"New value: +"Project name used to resolve the directory via the Projects convention when no directory/path is given."
  2. 12 tool updatesv1.5.5
    • Removedfaf_about
    • Removedfaf_bi_sync
    • Removedfaf_clear
    • Removedfaf_debug
    • Removedfaf_enhance
    • Removedfaf_friday
    • Removedfaf_guide
    • Removedfaf_list
    • Removedfaf_read
    • Removedfaf_status
    • Removedfaf_what
    • Removedfaf_write
  3. 1 tool updatev1.5.3
    • Changedfaf_read1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"Absolute or relative file path to read"New value: +"File path within the project root. Paths outside it (e.g. /etc, ~/.ssh) are refused."
  4. 4 tool updatesv1.5.0
    • Addedfaf_get_orchestration_policy
    • Addedfaf_orchestrate_recommendation
    • Addedrefresh_blend
    • Addedrefresh_fafm
  5. 2 tool updatesv1.4.5
    • Removedfaf_chat
    • Addedrefresh_faf
  6. 20 tool updatesv1.4.1
    • Addedfaf_about
    • Addedfaf_bi_sync
    • Addedfaf_chat
    • Addedfaf_clear
    • Addedfaf_debug
    • Addedfaf_enhance
    • Addedfaf_friday
    • Addedfaf_guide
    • Addedfaf_init
    • Addedfaf_list
    • Addedfaf_read
    • Addedfaf_score
    • Addedfaf_status
    • Addedfaf_sync
    • Addedfaf_trust
    • Addedfaf_what
    • Addedfaf_write
    • Addedrag_cache_clear
    • Addedrag_cache_stats
    • Addedrag_query
  7. 20 tool updatesv1.4.0
    • Removedfaf_about
    • Removedfaf_bi_sync
    • Removedfaf_chat
    • Removedfaf_clear
    • Removedfaf_debug
    • Removedfaf_enhance
    • Removedfaf_friday
    • Removedfaf_guide
    • Removedfaf_init
    • Removedfaf_list
    • Removedfaf_read
    • Removedfaf_score
    • Removedfaf_status
    • Removedfaf_sync
    • Removedfaf_trust
    • Removedfaf_what
    • Removedfaf_write
    • Removedrag_cache_clear
    • Removedrag_cache_stats
    • Removedrag_query
  8. 20 tool updatesv1.3.1
    • Addedfaf_about
    • Addedfaf_bi_sync
    • Addedfaf_chat
    • Addedfaf_clear
    • Addedfaf_debug
    • Addedfaf_enhance
    • Addedfaf_friday
    • Addedfaf_guide
    • Addedfaf_init
    • Addedfaf_list
    • Addedfaf_read
    • Addedfaf_score
    • Addedfaf_status
    • Addedfaf_sync
    • Addedfaf_trust
    • Addedfaf_what
    • Addedfaf_write
    • Addedrag_cache_clear
    • Addedrag_cache_stats
    • Addedrag_query
  9. 20 tool updatesv1.3.0
    • Removedfaf_about
    • Removedfaf_bi_sync
    • Removedfaf_chat
    • Removedfaf_clear
    • Removedfaf_debug
    • Removedfaf_enhance
    • Removedfaf_friday
    • Removedfaf_guide
    • Removedfaf_init
    • Removedfaf_list
    • Removedfaf_read
    • Removedfaf_score
    • Removedfaf_status
    • Removedfaf_sync
    • Removedfaf_trust
    • Removedfaf_what
    • Removedfaf_write
    • Removedrag_cache_clear
    • Removedrag_cache_stats
    • Removedrag_query
  10. 20 tool updatesv1.2.0
    • First observedfaf_about
    • First observedfaf_bi_sync
    • First observedfaf_chat
    • First observedfaf_clear
    • First observedfaf_debug
    • First observedfaf_enhance
    • First observedfaf_friday
    • First observedfaf_guide
    • First observedfaf_init
    • First observedfaf_list
    • First observedfaf_read
    • First observedfaf_score
    • First observedfaf_status
    • First observedfaf_sync
    • First observedfaf_trust
    • First observedfaf_what
    • First observedfaf_write
    • First observedrag_cache_clear
    • First observedrag_cache_stats
    • First observedrag_query

TDQS

A4.1/5.0
Disambiguation4/5

Tools are generally distinct across the three subsystems (faf, rag, refresh), but there is some overlap between refresh_faf and refresh_blend—refresh_blend always fires both refresh_faf and refresh_fafm, so an agent might wonder whether to use refresh_faf alone or the compound tool. However, descriptions are clear enough to prevent major confusion.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with a clear subsystem prefix (faf_, rag_, refresh_). The naming is uniform and predictable, making it easy to infer the action and resource.

Tool Count5/5

With 12 tools, the server is well-scoped. Each tool serves a distinct function within its subsystem, and the count feels appropriate for the domain of project context management and RAG caching—not too few, not too many.

Completeness4/5

The tool surface covers initialization, scoring, syncing, validation, orchestration, and refresh for the FAF context, plus cache management for RAG. Minor gaps exist, such as the absence of an explicit update or delete for the project.faf file (though force overwrite exists) and no tool to configure RAG parameters.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Persistent project context for Google Gemini. 12 MCP tools for .faf Project DNA — auto-detect your stack, validate, score, and sync across CLAUDE.md, GEMINI.md, and AGENTS.md. Python/FastMCP. IANA-registered format (application/vnd.faf+yaml). 183 tests. One file, every AI platform.
    12
    2
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Persistent 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.
    733
    4
    MIT

Latest Blog Posts

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/grok-faf-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server