Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Claude FAF

NPM · CLAUDE-FAF-MCP · 2 COMPONENTS · SCANNED SEP 20

Persistent project context for Claude. IANA-registered .faf format.

+15 this week 82 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security92
  • No malware found by supply-chain analysis.Pass
  • Known CVEs were checked across the 115 of 116 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
  • Runs a script at install time (postinstall) that we could not recognise. It may be perfectly ordinary, but we do not read the published tarball, so we cannot say what it does. View diagnostics → Partial
  • Dependency health was assessed across the 115 of 116 dependencies we could resolve, so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 6 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability82
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2474 tokens (~154/item across 16 items; 14 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
  • Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (64% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 14 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 15 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Claude FAF MCP server?

Claude FAF runs locally as an npm package, launched with npx -y claude-faf-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · claude-faf-mcp

# add to Claude Code
claude mcp add one-faf-claude-faf-mcp -- npx -y claude-faf-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "one-faf-claude-faf-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "claude-faf-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "one-faf-claude-faf-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "claude-faf-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add one-faf-claude-faf-mcp -- npx -y claude-faf-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "one-faf-claude-faf-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "claude-faf-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add one-faf-claude-faf-mcp --command npx --arg -y --arg claude-faf-mcp
# ~/.hermes/config.yaml
mcp_servers:
  one-faf-claude-faf-mcp:
    command: "npx"
    args: ["-y", "claude-faf-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "one-faf-claude-faf-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "claude-faf-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add one-faf-claude-faf-mcp -t stdio -c npx -a -y claude-faf-mcp
// mcp.json
{
  "mcpServers": {
    "one-faf-claude-faf-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "claude-faf-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Sept 26 −3
    • Known CVEs: pass → partial security
    • Dependency health: 0.86 → partial functional
    • Stability: pass → 0.80 functional
  • 17 Sept 26 0
    • Stability: 0.97 → pass security
  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Sept 26 0
    • Known CVEs: partial → pass security
    • Dependency health: partial → 0.85 functional
  • 14 Sept 26 +16
    • Malware scan: unverified → pass security
  • 13 Sept 26 −15
    • Malware scan: pass → unverified security
    • Known CVEs: pass → partial security
    • Schema quality: 108 → 154 functional
    • Tool coverage: 58% → 64% functional
    • Dependency health: 0.89 → partial functional
    • Package version: 5.22.1 → 6.0.0 functional
  • 11 Sept 26 −3
    • Stability: pass → 0.80 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/claude-faf-mcp@6.0.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
postinstall unreviewed node scripts/postinstall.js

Background: Why install scripts are a supply-chain risk →

Dependencies 115 packages
Packages resolved 115
Stale 36
Tree resolution Partial

The dependency tree was only partially resolved, so these counts may be incomplete.

Background: SBOMs and build attestations, explained →

MCP tools · 14 exposed · ~2,425 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
faf_about ~67

Explain what the .faf format is — project context for AI, IANA-registered as application/vnd.faf+yaml — and how this server uses it. Returns a short plain-text overview with this server's version. Reads nothing and writes nothing. Use it when someone asks what FAF is.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

faf_auto ~187

Create <folder>/project.faf, or fill the empty slots of the one there, with faf-cli's detection over the repo's own files (package.json, Cargo.toml, pyproject.toml, go.mod…) — no hardcoded defaults. A value already there is kept. A typed None or placeholder word is an empty slot: in a tech slot the app-type uses, only a repo fact replaces it (with no fact it stays as typed); in a tech slot the app-type leaves out, faf_auto writes slotignored; in a 6W it stays as typed (faf_go asks). Every value it changes is listed. Then writes CLAUDE.md's faf-managed block. Returns what was filled and faf-cli's score before and after. faf_go does the human 6Ws.

NameTypeReqDescription
pathstringProject path. Sets session context for subsequent calls.

No output schema declared.

No examples provided.

faf_bench ~304

Prove the .faf earns its place — measure how much the context is worth, on THIS repo, falsifiably. Questions derive from the project.faf's own populated slots (the .faf is the answer key), so grading is mechanical — no judge, no rubric. action=questions returns the answer-key-safe question set; action=grade takes your answers WITHOUT the .faf (cold) and WITH it (faf), grades both, and returns the cold→with-faf lift with a receipt hash. The delta is the product; the cold number belongs to the absence of context, never to FAF. Reads only.

NameTypeReqDescription
actionstringquestions = get the answer-key-safe question set to answer; grade = submit cold + with-faf answers to score the delta. Default: questions.
coldobjectaction=grade: answers produced WITHOUT the .faf (general repo knowledge only). Map of question number → answer string.
coldTokensnumberaction=grade (optional): tokens spent answering cold.
fafobjectaction=grade: answers produced WITH the project.faf in context. Map of question number → answer string.
fafTokensnumberaction=grade (optional): tokens spent answering with the .faf.
modelstringaction=grade (optional): the model that produced the answers.
pathstringProject path (optional — the active project if omitted).
NameTypeReqDescription
actionstring
coldobjectaction=grade — score WITHOUT context (absence baseline).
deltanumberwith-faf minus cold — the product.
fafobjectaction=grade — score WITH the .faf.
protocolstringin-session — answers are self-reported by the agent under test.
qsetHashstringHash of the question set — rides the receipt; same .faf reproduces it.
questionsarrayaction=questions only — NEVER includes the answer key.
receiptobjectfaf-cli's bench receipt — sha256 over the canonical projection; third-party verifiable.
totalnumberNumber of questions in the set.
versionstring

No examples provided.

faf_context ~124

Show the active project — the folder every faf_* call without a path uses — and the .faf there; pass path to make another folder the active project (your home folder and the filesystem root are refused). detail: true also returns the .faf's text. Writes no file. Call it once at the start of a session.

NameTypeReqDescription
detailbooleanAlso return the text of the .faf (read with faf-cli's reader), for reading project.faf in one call
pathstringSet active project path. If omitted, shows current context.
NameTypeReqDescription
activestringyesAbsolute path of the active project
changedbooleanyesTrue if this call set a new context, false if it only reported
contentstringdetail: true — the text of the .faf
filenamestring|nullThe .faf filename, if found
hasFafbooleanyesWhether a project.faf (or .faf) was found there or one level up
pathstring|nullThe .faf file readers use (faf-cli's finder: the folder, then one level up), if found

No examples provided.

faf_doctor ~110

Diagnose the project's .faf: faf-cli's validateFaf errors, faf-cli's score with every empty slot and the tool that fills it (faf_auto from the repo, faf_go for the 6Ws), whether CLAUDE.md is there, and the formats faf-cli finds in the folder. Returns a checklist of findings, each with its fix. Reads only. Use it when faf_score is below 100%.

NameTypeReqDescription
pathstringProject path. Sets session context for subsequent calls.
NameTypeReqDescription
checksnumberyesNumber of checks run
diagnosticsarrayyesPer-check results
errorsnumberCount of error-level findings
healthstringyesOverall verdict: ok | warning | error
scorenumber|nullfaf-cli's score (-1 only with unknown: true), or null when not scored
unknownbooleanTrue when the score is not known (an About repo with no about.source_score)
validboolean|nullfaf-cli's validateFaf verdict, or null when no .faf could be read
warningsnumberCount of warning-level findings

No examples provided.

faf_etch ~188

Remember a decision, gotcha, or win across sessions by writing it to the project soul (soul.fafm) with faf-cli's Soul. Returns the stored memory and the soul's size. Re-etching an id updates that memory in place. Use it to persist something an AI should recall later; faf_recall reads them back.

NameTypeReqDescription
idstringStable id — re-etching the same id updates in place (dedup)
pathstringProject path. Sets session context for subsequent calls.
prioritystringRecall ranks by priority then recency
tagsarrayTags (e.g. decision, gotcha, win) for filtering + recall coupling
textstringyesThe memory to remember — capture the why (decision/gotcha/win)
typestringMemory category
NameTypeReqDescription
etchedobjectyes
namepointstring
soulstringyesPath to soul.fafm
totalnumberTotal memories in the soul

No examples provided.

faf_go ~270

The human half of project.faf. Without answers it returns the Table-of-8 — project name, goal and the 6Ws (who, what, why, where, when, how) — each filled, seeded from the goal, or empty, with faf-cli's score and, for each slot still empty, whether it is a fact from repo (faf_auto writes it: its dry run, the one faf_formats shows) or needs an answer here. With answers (slot path → text, e.g. {"stack.hosting": "<the answer>"}) it writes them into <folder>/project.faf in place and returns the new score; a value already in a slot you answer is replaced. With no project.faf yet it runs faf_init and faf_auto first. faf_auto writes each fact from repo; a stack slot with no fact in repo is answered here.

NameTypeReqDescription
answersobjectAnswers to apply: a slot path (e.g. "project.goal", "human_context.why", "stack.database") → the answer text. Any other key, or an answer that is not text, is refused and nothing is written. If provi…
pathstringProject path. Sets session context for subsequent calls.

No output schema declared.

No examples provided.

faf_init ~236

Create a new project.faf for a folder: faf-cli detects its name, language and stack, and the reply gives the file path, faf-cli's starting score and the birth .faf-dna. An existing project.faf is left as it is — use faf_auto to fill its empty slots from your manifests, or faf_go for the human 6Ws. force: true replaces an existing project.faf with a fresh one, after copying the old file to a backup beside it.

NameTypeReqDescription
forcebooleanReplace an existing project.faf with a fresh one: every value and comment in it is replaced. The old file is copied to project.faf.bak-<time> first.
pathstringProject path or name. Smart resolution: "my-app" finds ~/Projects/my-app OR ~/Code/my-app. Full paths like ~/Projects/app or /Users/me/code/app work too; ".", "..", "./app" are relative to the active…

No output schema declared.

No examples provided.

faf_recall ~137

Recall memories from the project soul (soul.fafm), ranked by priority then recency, filtered by query/tags/type. Returns the matching entries. Reads only. Use it to surface past decisions; faf_etch adds new ones.

NameTypeReqDescription
limitnumberMax memories to return
minPrioritystringPriority floor (default ephemeral)
pathstringProject path. Sets session context for subsequent calls.
querystringCase-insensitive substring match on memory text (optional)
tagsarrayFilter by tag intersection
typestringFilter by memory type
NameTypeReqDescription
memoriesarrayyes
soulstring
soulTotalnumberTotal memories in the soul
totalnumberyesNumber returned

No examples provided.

faf_score ~120

Score the project's .faf with faf-cli's scorer — the one score every faf tool reports: 0–100%, the tier, populated/active slots, and a faf-parity/v1 hash of the result. details: true lists every slot as populated, empty or slotignored. Reads only. Use faf_doctor for what to fix.

NameTypeReqDescription
detailsbooleanList every slot as populated, empty or slotignored, and the tools that fill the empty ones
pathstringProject path. Sets session context for subsequent calls.
NameTypeReqDescription
activenumberSlots active for this app_type
emptynumberActive slots still empty
hasFafbooleanyesWhether a readable, valid project.faf was scored
ignorednumberSlots marked slotignored (inactive for this app_type)
inheritedbooleanTrue if the score is attested from a source repo (an about: block)
nextTierobject|nullNext tier above the current score, or null at top tier
parityobjectfaf-parity/v1 — claude-faf-mcp's own spec (no other engine computes it yet): sha256 over a canonical projection of faf-cli's score for these exact bytes. Check it yourself: sha256(projection) === par…
pathstringPath that was scored
populatednumberActive slots that are filled
scorenumberyesAI-readiness score, 0-100 (-1 only together with unknown: true)
slotsobjectSlot paths by state
tierstringyesTier name for this score (e.g. BRONZE, TROPHY)
totalnumberTotal slots
unknownbooleanTrue when the score is not known: an About repo with no about.source_score. Shown as "unknown (—)", never as a number.

No examples provided.

faf_setup ~184

Install the native SessionStart hook in the project settings (<project>/.claude/settings.json) — every Claude Code session in this project starts with fresh .faf context. Shows the exact settings first (preview); writes only with confirm: true, install or remove. faf changes only its own hook entry; every other key and hook stays as written. remove: true takes out only the hook whose command is exactly the faf hook command. Never writes the user settings: the home folder is refused.

NameTypeReqDescription
confirmbooleanWrite the change to the project settings (.claude/settings.json). Without it, faf_setup only previews — install and remove alike.
pathstringProject path. Defaults to the current project context.
removebooleanRemove the faf SessionStart hook (and only it) from the project settings. Previews unless confirm: true.
NameTypeReqDescription
actionstringyesWhat faf_setup did
hookCommandstringThe command the SessionStart hook runs
messagestringyesHuman-readable summary
settingsobjectThe full settings object as written (or as it would be written in preview)
settingsPathstringyesThe settings file involved

No examples provided.

faf_sync ~251

Write project.faf into CLAUDE.md as a faf-managed block (faf-cli's render and injector), and on request into AGENTS.md (agents), .cursorrules (cursor), GEMINI.md (gemini) and .github/copilot-instructions.md (copilot) — or all of them (all) — with faf-cli's writers. Each file keeps every line outside faf's block. Returns the files written and any requested file that could not be written, with the reason (then isError). Use it after editing project.faf.

NameTypeReqDescription
agentsbooleanAlso write AGENTS.md (OpenAI Codex and other agents)
allbooleanWrite every format: CLAUDE.md + AGENTS.md + .cursorrules + GEMINI.md + .github/copilot-instructions.md
copilotbooleanAlso write .github/copilot-instructions.md (GitHub Copilot)
cursorbooleanAlso write .cursorrules (Cursor IDE)
geminibooleanAlso write GEMINI.md (Google Gemini CLI)
pathstringProject path. Sets session context for subsequent calls.
NameTypeReqDescription
fafPathstringThe .faf the files were written from
filesFailedarrayyesRequested files that were not written
filesWrittenarrayyesFiles written, CLAUDE.md first
scorestringfaf-cli's score of that .faf, as text ("85%" or "unknown (—)")

No examples provided.

faf_tri_sync ~135

Write project.faf as a faf-managed block into the MEMORY.md Claude Code loads for this project (~/.claude/projects/<project-id>/memory/MEMORY.md, or under CLAUDE_CONFIG_DIR). Only the block changes; every note of Claude's is kept, and the reply says so only after reading the file back. action: status reads only. faf_sync writes CLAUDE.md.

NameTypeReqDescription
actionstringexport = write faf's block into MEMORY.md (default), status = show what MEMORY.md holds (reads only)
pathstringProject path. Sets session context for subsequent calls.

No output schema declared.

No examples provided.

faf_trust ~112

Attest the project's .faf: faf-cli's validateFaf, faf-cli's score, and a faf-parity/v1 hash (claude-faf-mcp's own spec) of that score that anyone can check with sha256(projection) === parityHash. Returns a trust receipt whose subject is the project. An invalid .faf, or a score that is unknown, gets no receipt (isError). Reads only.

NameTypeReqDescription
pathstringProject path. Sets session context for subsequent calls.
NameTypeReqDescription
errorsarrayfaf-cli's validateFaf errors, when valid is false
hasFafbooleanyesWhether a project.faf was found
parityobjectfaf-parity/v1 — claude-faf-mcp's own spec (no other engine computes it yet): sha256 over a canonical projection of faf-cli's score for these exact bytes. Check it yourself: sha256(projection) === par…
pathstringPath that was attested
reasonstringWhy no receipt was issued
receiptobjectThe trust receipt — render-identical, self-verifying score + parity.
scorenumberAI-readiness score, 0-100
sourceSha256stringSHA-256 of the raw .faf bytes
subjectstringThe project the receipt attests: project.name, else its folder name
tierstringTier name for this score
validbooleanyesWhether faf-cli's validateFaf accepts the .faf

No examples provided.

Common questions

What is the Claude FAF MCP server?

Claude FAF is an MCP server listed in the public MCP registry as one.faf/claude-faf-mcp. Persistent project context for Claude. IANA-registered .faf format. This page covers its npm package (claude-faf-mcp).

Is the Claude FAF MCP server safe to use?

Claude FAF scores 82 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Claude FAF MCP server expose?

Claude FAF exposes 14 tools: faf_about, faf_score, faf_init, faf_trust, faf_setup, and 9 more. Their descriptions and schemas cost roughly 2,425 tokens of context every time the server is loaded.

Is the Claude FAF MCP server still maintained?

Claude FAF is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Claude FAF MCP server under?

Claude FAF declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.