Skip to main content
Glama

grok-faf-mcp v2.1 — The New Era 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 Business card · Get yours →

FAF defines. AGENTS.md instructs. AI codes.

v2.1.0 — The New Era Edition

Glass-box tools: every Grok tool now says what it does — reads, writes or rewrites — so your client knows when to ask first. New card, new look at grok.faf.one.

  • Every tool is labelled. All 20 tools carry MCP tool annotations, checked against what each handler really does: 7 read only, 3 can delete or overwrite (faf_init with force, faf_clear, faf_write), the rest write without losing anything. Only rag_query reaches the network (xAI Collections).

  • Honest about receipts. refresh_faf, refresh_fafm, refresh_blend, faf_orchestrate_recommendation and the FRC tools (faf_gate, faf_section, faf_memory) append small receipt files to your project folder, so they are labelled as writers. refresh_fafm no longer says "Read-only".

  • Its own card. Grok FAF now has a FAF passport (agent.fafa) at grok.faf.one/.well-known/fafa, with AI Catalog and ARD entries that point to it. The MCP Server Card is the hosted one, also at grok.faf.one/.well-known/mcp/server-card.json.

  • A new look. grok.faf.one is redesigned, with the current facts: 19 tools hosted, 12 by default locally.

  • Node 22 or later, like faf-cli 8 and the rest of the FAF family.

Earlier: v2.0.0 — The Always33 Edition — one engine, one number: every score is faf-cli 8's always-33 kernel, on npm and on mcpaas.live. ZEPH is opt-in until the Zig engine is always-33.

☆ Bookmark grok.faf.one for later.

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. The hosted endpoint scores always-33 — the same number as the npm package. 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. Scores and validates with the faf-kernel WASM (always-33, the same engine as the npm package) since mcpaas-cf 1.8.1; a Zig WASM engine handles token estimates and tier. 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:  faf-cli 8 — faf-scoring-kernel 3.0.0 (Rust → WASM, always-33)
Speed:   0.5ms average (was 19ms — 3,800% faster with Mk4)
Tests: 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:       faf-cli 8 (faf-scoring-kernel 3.0.0, always-33)
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/commands/score.ts → faf-cli scoreFafYaml (always-33)
│   ├── 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: faf-cli's scoreFafYaml → the always-33 kernel (faf-scoring-kernel, Rust → WASM) scores the file as written: 33 slots, slotignored slots drop out of the denominator. No per-type rewriting, no fallback scorer — the same number faf-cli, claude-faf-mcp and faf-mcp give.


Testing

WJTTC parity (heavy local ↔ light hosted) + full suites (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

rag-system

RAG query, caching, context retrieval

security

Input validation + security guards

visibility

Tool visibility (core/advanced filtering)


Status & known limitations (v2.1)

v2.1.0 — The New Era Edition — glass-box tools (every tool labelled read, write or rewrite), its own FAF passport at grok.faf.one, a new look. Scoring is unchanged from v2.0.0.

v2.0.0 — The Always33 Edition — one engine, one number: faf-cli 8's always-33 kernel on npm and on mcpaas.live. ZEPH is opt-in until the Zig engine is always-33. FafCompiler upgraded to the Always33 fafb model — parity across frontier models, Enterprise/Teams ready.

Everything below still applies; operating it honestly means surfacing what's NOT in here alongside what is.

Earlier: 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.

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:

  • 19 tools on the hosted endpoint (https://mcpaas.live/grok/mcp/v1 and client-specific routes) — scoring · validation · refresh_faf · a content-in faf_orchestrate_recommendation · the FRC trio · souls and search. The live list is at …/grok/mcp/v1/info.

  • 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_get_orchestration_policy, refresh_fafm, refresh_blend, faf_init and faf_sync need filesystem access and run only on the local stdio path (bunx grok-faf-mcp / npx grok-faf-mcp). The hosted faf_orchestrate_recommendation takes file contents instead of reading your repo, and has no receipts or recurrence history (it reports those under partial[]).

  • 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.


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_policyA
Read-only
Inspect

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.5/5.0
Behavior4/5

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

Annotations already mark it read-only and closed-world, but the description adds valuable behavioral context: the exact return object keys and that no orchestrator execution or side effects occur. It stops short of documenting error or fallback behavior, so a 4 rather than 5.

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 dense sentences, front-loaded with the key distinction and return shape. Every clause adds scope or output information, with no filler.

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?

No output schema exists, yet the description supplies the return shape and the tool's read-only, non-executing nature. Annotations cover safety and the schema covers the single parameter, so the definition is complete enough for an agent to call correctly.

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?

There is one optional path parameter, and schema description coverage is 100%, so the schema already fully documents it. The description does not mention the path parameter or add syntax beyond what the schema provides, so the baseline 3 applies.

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?

States a specific verb ('Introspect') and resource ('effective orchestration policy'), and explicitly positions itself against sibling faf_orchestrate_recommendation by saying it does not run the orchestrator. An agent can tell what it does and how it differs from the alternative without opening schemas.

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?

Says when to use it (to see what the next faf_orchestrate_recommendation call would use without running it) and what it excludes (no drift detection, no signals, no receipt). It names the sibling relationship directly, leaving no ambiguity about the alternative.

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.3/5.0
Behavior4/5

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

Adds real behavioral context beyond the annotations: it writes a recommendation receipt on every call (explaining why readOnlyHint=false is correct for a tool that is otherwise 'read-only WRT substrate state'), and it is explicitly advisory and non-destructive. It does not disclose latency, cost, or failure modes.

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?

Front-loads the core purpose and the advisory constraint, and every clause carries information. It is dense with domain jargon ('substrate', 'take-a-hint'), which slightly reduces scannability but does not waste sentences.

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 complex, no-parameter orchestrator with no output schema, the description adequately conveys both the inputs (implicitly the current substrate state) and the shape of the returned recommendation. Return-value detail is generic rather than schema-precise, but the description covers what an agent needs to decide to call it.

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 takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a 0-param tool applies. The description correctly implies no caller inputs are needed, only current substrate state.

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?

States a specific verb and resource ('returns a structured recommendation about drift') and enumerates the payload (which refresh, why, severity, signals). It is clearly distinguishable from the sibling refresh_* tools, which actually perform refreshes, since this only recommends.

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?

Establishes clear context: it is the 'heavy orchestrator' that composes drift detection, contradiction check, repeat-offender, take-a-hint and refresh history, and it is ADVISORY ONLY and never auto-fires. It does not, however, explicitly route the agent against 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_scoreA
Read-only
Inspect

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

A3.9/5.0
Behavior4/5

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 genuinely non-structured behavioral facts: the operation is deterministic (same .faf always scores the same) and it returns score, tier, and per-slot breakdown. It does not mention auth/permission needs or rate limits, but the determinism disclosure is valuable added context.

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 tight sentences, front-loaded with the verb and scoring basis. The 'how much project DNA an agent has before it has to guess' metaphor follows the already-explicit '33-slot context model' and is mildly redundant, but every other clause carries real 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?

With no output schema, the description correctly compensates by naming the return values (score, tier, per-slot breakdown), and the single optional param is fully schema-documented. The main gap is that it never states which project or .faf artifact is scored, which is non-obvious for a zero-required-param 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?

Only one optional boolean parameter and schema description coverage is 100%, so the schema already documents 'details' fully; the baseline is 3. The description references a 'per-slot breakdown' return, which loosely maps to details=true, but adds no explicit semantics for the parameter itself.

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?

States a specific verb (score) and resource (project AI-readiness) with a named, concrete scoring basis: the fixed 33-slot context model and a 0–100% range. This is clearly distinguishable from siblings like faf_trust and refresh_faf, which imply different operations.

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?

Usage is only implied: an agent can infer it is for assessing readiness, but there is no explicit when-to-use, when-not-to-use, or routing to alternatives such as faf_trust (which presumably evaluates a related quality dimension). No prerequisites or calling 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_syncA
Idempotent
Inspect

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

A3.8/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, so the safety baseline is covered. The description adds real value beyond that by specifying the mechanism (inject a structured .faf block at the top) and the side effect boundary (prose below is preserved), which tells the agent exactly what gets modified. It stops short of saying whether missing context files are created.

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 short sentences, front-loaded with the action and its targets, then the safety guarantee, then the rationale. The closing line ('One source of truth, every tool kept current') is slightly promotional but does convey the maintenance intent.

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 zero-parameter, no-output-schema tool with annotations already covering the safety profile, the description supplies the missing pieces: what it writes, which files, and that existing prose survives. Only the behavior when target files or project.faf are absent is left unstated.

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 takes zero parameters and the schema is empty, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly implies no configuration is required.

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

Purpose4/5

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

States a specific verb (Sync) plus the resource (project.faf) and enumerates the concrete target files (CLAUDE.md, AGENTS.md, .cursorrules, GEMINI.md), which is far more than a tautology. It does not, however, distinguish itself from close siblings like refresh_faf or faf_init, so an agent must infer the boundary.

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?

Usage is only implied: the agent can infer this runs after project.faf changes to propagate into AI context files, and 'every tool kept current' hints at the maintenance scenario. There is no explicit when-to-use statement, no prerequisites, and no mention of when to prefer refresh_faf or faf_init instead.

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

faf_trustA
Read-only
Inspect

Validate a project.faf with faf-cli — confirm the context file is well-formed and parses cleanly before an agent grounds on it, and report its always-33 score. The pre-flight trust check: never build on a broken context layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoProject directory to check. Defaults to the current working directory.

TDQS

A3.8/5.0
Behavior4/5

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 meaningful context beyond that: it shells out to faf-cli, checks well-formedness/parsing, and returns an "always-33 score," which is non-obvious behavior an agent could not derive from the schema.

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 tightly written sentences, front-loaded with the action and followed by the rationale. Every clause earns its place and there is no filler.

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 zero-required-param, read-only validator with no output schema, the description covers what it does and what it returns (a score) well enough to call correctly. It could say more about failure output or how errors surface, but nothing essential is missing.

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% and the single optional path parameter is fully documented in the schema itself (directory to check, defaults to cwd). The description adds no parameter detail, so the baseline 3 applies.

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

Purpose4/5

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

Names a specific verb and resource: validates a project.faf via faf-cli and reports its score. The intent (confirm the context file parses cleanly) is concrete. It does not explicitly differentiate from the sibling faf_score, which also concerns scoring, so an agent must infer the split.

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 pre-flight trust check: never build on a broken context layer" implies the usage window (before an agent grounds on the file), which is real guidance. However, it never names an alternative or states when NOT to use it, and with faf_score and faf_init present as siblings, the routing choice is left implicit.

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

rag_cache_clearA
Idempotent
Inspect

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.4/5.0
Behavior4/5

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

Annotations already declare it is a non-readonly, idempotent, non-destructive, closed-world operation. The description adds genuinely new context: the effect is a full drop of cached retrievals and a source rebuild on the next query, which implies latency/cost the agent should anticipate. It doesn't address scope (per-session vs global) or authorization.

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 short sentences, zero waste, with the action front-loaded and the usage condition following. Nothing is repeated from the schema or annotations.

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 zero-argument, no-output-schema mutation, the description covers what happens, what it affects downstream, and when to invoke it. Missing only edge details such as behavior on an empty cache and the blast radius across sessions, which the idempotent annotation partially mitigates.

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?

Zero parameters, so there is nothing to document and the baseline of 4 applies. The description's reference to "all cached retrievals" usefully confirms the operation is unfiltered and takes no arguments.

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?

States a specific verb and resource ("Clear the LAZY-RAG cache") and immediately explains the mechanism: cached retrievals are dropped and the next rag_query rebuilds from source. This distinguishes it clearly from rag_cache_stats (read stats) and rag_query (consumes the cache).

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?

Gives an explicit trigger: "Use when the underlying context has changed and you want fresh results instead of cached ones." It names rag_query as the tool whose behavior changes, but stops short of stating when NOT to clear (e.g. cache is already fresh) or naming the stats sibling as a diagnostic alternative.

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

rag_cache_statsA
Read-only
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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 the useful detail that this returns aggregate counters rather than raw entries, but says nothing about rate limits, cost, or whether the counters are cumulative or since-reset.

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 the verb and resource first and the returned metrics listed after. Zero filler and no restatement of the title or schema.

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?

With no output schema, the description carries the burden of describing return values and does so by naming the four metrics. It stops short of describing the response shape or units, which is a minor gap for a simple stats call.

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 takes zero parameters, which sets the baseline at 4. There is nothing for the description to disambiguate, and the schema coverage is 100% by definition.

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

Purpose4/5

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

States a specific verb (Get) plus resource (LAZY-RAG cache statistics) and enumerates the exact metrics returned: hits, misses, hit rate, cache size. It is clearly distinct from the sibling rag_cache_clear, but never names or contrasts that sibling explicitly, so it falls 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.

Usage Guidelines3/5

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

There is no explicit when-to-use or when-not-to-use statement, but usage is strongly implied: a zero-argument read of cache performance metrics is self-evidently for diagnosing cache effectiveness. No alternatives are referenced, so this is implied guidance rather than stated guidance.

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

rag_queryB
Read-only
Inspect

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

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external-reach context is covered. The description adds genuine behavioral value by disclosing the LAZY-RAG cache layer and its speedup on repeated queries, but says nothing about latency on cache misses, auth requirements, or rate limits.

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?

Two short, front-loaded sentences with no filler. The '100,000x speedup' figure leans promotional rather than operational, which costs a point, but the structure is otherwise clean.

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?

For a single-parameter read tool with no output schema, nothing critical is missing to invoke it, but the definition never says what comes back (an answer only, or answer plus source context/citations). That omission is minor given the annotations, but it leaves the agent guessing at the response shape.

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% and the single 'question' parameter is self-explanatory, so the schema does the heavy lifting. The description adds no syntax, format, or scope detail beyond what the schema already provides, making the baseline 3 appropriate.

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

Purpose4/5

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

The description states a specific verb and resource: ask a question and get RAG-enhanced context from xAI Collections. It clearly identifies the tool's function and separates it from the cache-management siblings by name ('cache'), though it never names rag_cache_stats or rag_cache_clear explicitly.

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?

There is no explicit guidance on when to use this versus alternatives. The mention of 'repeated queries' hints at the caching benefit but never tells the agent when to query directly, when to check rag_cache_stats, or when rag_cache_clear is relevant, leaving routing to inference.

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.1/5.0
Behavior4/5

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

Annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=false) only tell the agent it's a non-destructive write; the description adds real behavioral context by explaining the delta vs verbatim difference between modes and that intensity tracks drift per layer. It omits reversibility/auth/rate details, but goes meaningfully 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.

Conciseness4/5

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

Front-loaded with the core action and combined-tool behavior, then mode distinctions. Dense with domain jargon (faf/fafm/soul) but every sentence carries information; slight density cost keeps it from a 5.

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 5-param, 0-required, no-output-schema tool, the description covers the mode semantics and how intensity maps to layers, which is enough to call it correctly. It does not address what a successful refresh returns or whether 'nuke' overwrites are reversible.

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%, so the schema already documents all five parameters including the mode enum and per-sub-tool applicability. The description's mode analogies add flavor but no syntax or format detail beyond what the schema provides, so the baseline 3 holds.

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?

States a specific verb (refresh) and resource (blend = .faf + .fafm) and explicitly says it 'Fires BOTH `refresh_faf` + `refresh_fafm` in one call,' which directly distinguishes it from those two siblings.

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?

Clearly frames each mode's use case: 'blend' is 'the everyday re-ground' and 'nuke' is 'the hard reload for polluted session memory,' giving concrete selection criteria. It stops short of saying when to prefer the underlying refresh_faf/refresh_fafm over this combined call.

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

refresh_fafBInspect

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

B3.3/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, which opens the question of whether re-grounding persists state; the description only says it re-reads, re-scores and returns context, and never discloses writes, caching, or side effects. It adds the drift-report behavior, which is useful, but leaves the non-read-only hint unexplained.

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

Conciseness3/5

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

The opening clause is front-loaded and precise, but 'drift → refresh → re-grounded' and 'Built for Grok, by request' are filler that consume space without helping an agent decide or invoke correctly.

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?

With only two optional parameters and no output schema, the description adequately covers the trigger condition and that a drift delta plus fresh context are returned, but 'return the fresh context' is left vague for a tool whose entire value is that returned context.

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%, so both parameters are already documented and the baseline 3 applies. The description reinforces the purpose of 'baseline' ('report drift vs your last-known score') but adds no syntax or format detail beyond the schema.

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

Purpose4/5

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

Specific verb+resource: 're-read + re-score the current project DNA' and 're-ground on the live .faf'. This is clearly distinct from refresh_blend/refresh_fafm in intent, though it never names the sibling it most overlaps with (faf_score) to explain the difference in practice.

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?

It implies usage via 'The explicit re-grounding primitive for long sessions: drift → refresh → re-grounded', which tells the agent it is a session-maintenance call, but gives no explicit when-not or alternatives (e.g., why not just call faf_score again).

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. Reads your files and writes a refresh receipt (.fafm-refresh-receipts.json) to the project folder. 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

A3.9/5.0
Behavior4/5

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

With readOnlyHint=false, the description correctly discloses the side effect that matters: it reads files and writes a refresh receipt (.fafm-refresh-receipts.json) to the project folder. It also guarantees a content hash + timestamp stamp and states that 'since' is ignored under verbatim, which is real behavioral context beyond the annotations. Gaps remain around failure behavior and what a refresh does to in-session state.

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?

Front-loaded with the core action and default return, then layers side effects and routing. Five sentences is slightly dense for three parameters, but every sentence carries usable information and none is filler.

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?

With no output schema, the description carries the return-value burden and does so: stamped delta with added/updated facts, hash + timestamp, or full content under verbatim. The only missing piece is what the receipt file contains and whether refresh is idempotent.

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%, so the schema already documents soul, since, and verbatim in full. The description restates the since/verbatim interaction rather than adding new semantics, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource: reload the latest structured memory (.fafm) for souls into the current session, and clarifies the default return shape (stamped delta). It also positions itself relative to recall/load_soul/etch, though those are not siblings in the supplied list, so the differentiation against the actual sibling set (refresh_faf, refresh_blend) is weaker than it could be.

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?

Gives clear operational guidance: deltas are the default, use verbatim:true for full content and 'sparingly', and it explicitly says it complements rather than replaces related tools. It stops short of an explicit when-not-to-use condition or any prerequisite/permission statement.

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. 1 tool updatev2.0.0
    • Changedfaf_trust1 field changed
      • addedInput schema / properties / path
        Added value: +{
        +  "description": "Project directory to check. Defaults to the current working directory.",
        +  "type": "string"
        +}
  2. 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."
  3. 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
  4. 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."
  5. 4 tool updatesv1.5.0
    • Addedfaf_get_orchestration_policy
    • Addedfaf_orchestrate_recommendation
    • Addedrefresh_blend
    • Addedrefresh_fafm
  6. 2 tool updatesv1.4.5
    • Removedfaf_chat
    • Addedrefresh_faf
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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

A3.6/5.0

Scored across 12 tools

Disambiguation4/5

Most tools target distinct operations, but refresh_faf, refresh_fafm, and refresh_blend overlap in re-grounding behavior, and faf_score vs. faf_trust both evaluate project.faf. The detailed descriptions do clarify when each is appropriate, so confusion is limited but present.

Naming Consistency3/5

All names use snake_case and domain prefixes (faf_, refresh_, rag_), but verb/noun ordering is mixed: faf_score, faf_trust, refresh_faf, refresh_blend, rag_cache_stats. The convention is readable but not predictable across the set.

Tool Count4/5

12 tools is reasonable for a context-management and RAG-cache server, fitting the 3–15 sweet spot. There is some redundancy among refresh and orchestration tools, but not enough to make the count feel excessive.

Completeness3/5

The set covers init, score, validate, sync, refresh, orchestration advice, and RAG query/cache lifecycle, but lacks direct update/delete operations for .faf or .fafm and has no tool to set orchestration policy. Referenced soul operations like recall, load_soul, and etch are also absent, leaving notable gaps.

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.
    13
    802 PyPI
    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.
    401 npm
    4
    MIT