Rust FAF

one.faf由 faf.one 發布v0.9.0更新於 Nov 7, 2026

Persistent project context — Rust-native MCP server. IANA-registered .faf format.

發布方自己的服務:rust.wiki

已驗證STDIO僅桌面知識與記憶開發者工具

概覽

AI 產生的概覽

本機 MCP 伺服器,用來建立、評分並同步 project.faf 專案脈絡檔,讓 AI 助理不必反覆重新了解專案。

可以做什麼
  • 建立與尋找脈絡:從檔案樹初始化 project.faf、執行初始化並同步 CLAUDE.md 與評分、依 GitHub 儲存庫網址草擬,或往上尋找最近的 project.faf
  • 讀取與評分:顯示解析後的 project.faf 內容,並依欄位給出 0 到 100% 的 AI 就緒度評分
  • 產生助理檔案:由 project.faf 產生 CLAUDE.md 與 AGENTS.md,並保留 faf 區塊之外的手寫內容
  • 配合脈絡上限:以 minimal、standard、full 三種層級壓縮 project.faf,並估算各層級的 token 數
  • 檢視演進紀錄:顯示 .faf-dna 中記錄的 FAF DNA 歷程
適用情境
適合想用單一持久專案脈絡檔取代每次向 AI 重複說明程式庫的情況,也適合讓產生的 CLAUDE.md 或 AGENTS.md 與該檔保持同步。主要面向本機的 Rust 相關 MCP 用戶端。
執行需求
以本機 stdio 程序執行,不需參數、設定檔、環境變數或身分驗證。可用 cargo 安裝(需 Rust 工具鏈),或以 npx 執行 npm 套件下載預先編譯的執行檔;macOS 另有 Homebrew 方式。只有依 GitHub 儲存庫產生脈絡的工具需要連網。
安裝前請注意
多個工具會在專案中寫入檔案:project.faf、CLAUDE.md 與 AGENTS.md,不過寫入工具宣稱不具破壞性,且不會覆寫既有的 project.faf。GitHub 工具會把儲存庫網址送到公開的 GitHub API。建議固定套件版本,因為 PATH 上的同名執行檔可能是舊版。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Rust FAF,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

rust-faf-mcp

Persistent Project Context for Rust MCP clients. Native. Fast. cargo install

⭐ Star it on GitHub: bookmarks it for you, helps other devs find it too.

The Your-Files-Stay-Yours Edition (v0.9.0) — one.faf/rust-faf-mcp · rmcp 3.0.1 (MCP Tier 1 foundation) · faf-rust-sdk 3.1.1 (the same always-33 kernel faf-wasm-sdk uses) · solid cargo-native Rust MCP for Rust devs

v0.9.0 — faf_sync keeps your hand-written CLAUDE.md, refuses what it can't write safely, and says so. See CHANGELOG.

FAF defines. AGENTS.md instructs. AI codes.

Stop re-explaining your project to every AI session. One .faf file holds your persistent project context. Every AI reads it once and knows what you're building.

[Crates.io] [FAF Trophy 100%] [Tests] [IANA] [License] [Business card · Get yours →]

Rust-native MCP (Model Context Protocol) server for FAF — structured AI project context in YAML (application/vnd.faf+yaml). Single binary, stdio transport, 4.3 MB stripped. Built on rmcp and faf-rust-sdk.

Quickstart

bash
# Rust toolchain (install):cargo install rust-faf-mcp --version 0.9.0
# No Rust (try — downloads GH Release binary for darwin/linux):npx --yes [email protected]

Point an MCP client at the pin. A bare rust-faf-mcp on PATH may be an old Homebrew binary.

bash
# Claude Codeclaude mcp add faf -- npx --yes [email protected]
jsonc
// Cursor, Claude Desktop, Windsurf — any client that reads mcpServers{  "mcpServers": {    "faf": {      "command": "npx",      "args": ["--yes", "[email protected]"]    }  }}

After cargo install rust-faf-mcp --version 0.9.0, "command": "rust-faf-mcp" is the install. Until you have proven that binary, use the npx pin.

No flags, no config files, no network listener. Pure stdio JSON-RPC.

Or via Homebrew (macOS, pre-built). If you already have it, upgrade — an old keg can sit on PATH as rust-faf-mcp:

bash
brew updatebrew install Wolfe-Jam/faf/rust-faf-mcp# already installed:brew upgrade Wolfe-Jam/faf/rust-faf-mcp

One command, done forever

faf_auto runs setup if project.faf is missing (tree detection writes mechanical facts), then syncs CLAUDE.md. It does not rewrite an existing file. Confirm setup (sweeps) lists what setup occupied — walk it; not a second write-gate. Empty human slots stay empty until you state them.

faf_auto complete━━━━━━━━━━━━━━━━━Score: 0% → 42% (+42) ● GREENSteps:  1. Setup — created project.faf  2. Created CLAUDE.md
Path: /home/user/my-project
Confirm setup (sweeps)Walk these. Detection is already a fact. Not a second write-gate.  project.name           my-api  project.main_language  Rust  stack.backend          Rust

What it produces:

yaml
# project.faf — your project, machine-readablefaf_version: "3.3"project:  name: my-api  goal: REST API for user management  main_language: Rust  version: "0.1.0"  license: MITinstant_context:  what_building: REST API for user management  tech_stack: Rust 2024  key_files:    - Cargo.toml    - src/main.rs    - README.md  commands:    build: cargo build    test: cargo teststack:  backend: Rust  build: cargo

Every AI agent reads this once and knows exactly what you're building. No 20-minute onboarding. No wrong assumptions.

Tools

Create & Detect

ToolWhat it does
faf_autoSetup if missing, sync CLAUDE.md, score — Confirm setup (sweeps); does not invent 6Ws
faf_initSetup: first write from the tree. Refuses if the file exists. Confirm setup (sweeps). 6Ws stay empty
faf_goTable-of-8 + Confirm setup (sweeps). 6Ws score after ☑. Below 100: add Human Context. After 100: courtesy check every 30 days (90 max)
faf_gitAuthor project.faf from any GitHub repo URL — no clone needed. Uses the public GitHub API; returns the text, writes nothing
faf_discoverWalk up the directory tree to find the nearest project.faf

Score & Validate

ToolWhat it does
faf_scoreScore AI-readiness 0-100% with field-level breakdown
faf_syncSync project.faf → CLAUDE.md (preserves existing content)
faf_agentsAuthor AGENTS.md from project.faf (non-destructive, preserves hand-written content)

Optimize

ToolWhat it does
faf_readParse and display project.faf contents
faf_compressCompress .faf for token-limited contexts (minimal / standard / full)
faf_tokensEstimate token count at each compression level

Lineage

ToolWhat it does
faf_dnaYour FAF DNA journey from .faf-dna: Birth DNA to now, with history. faf_init births it, faf_auto records growth — the same file as faf-cli

Every tool declares MCP annotations: faf_read, faf_score, faf_compress, faf_discover, faf_tokens, faf_dna and faf_git are read-only; the writers are non-destructive; only faf_git reaches the network.

faf_init will not overwrite an existing file. Setup occupies mechanical facts; Confirm setup (sweeps) is the walk. Empty human slots stay empty until faf_go.

Architecture

src/├── main.rs      # ~20 lines — tokio entry, rmcp stdio transport├── server.rs    # FafServer: #[tool_router], ServerHandler, resources└── tools.rs     # Business logic — tools as pure functions returning Value
  • Runtime: tokio single-threaded (current_thread)
  • HTTP: reqwest async (only used by faf_git for GitHub API)
  • SDK: faf-rust-sdk 3.1 (Cargo pin — the facade over faf-kernel/faf-fafb in faf-rust; score() for the always-33 number, validate() for structural checks only)
  • Server: rmcp 3.0.1 with #[tool_router] / #[tool_handler] — JSON-RPC, JSON Schema from the param types, stdio transport (Tier-1 assessed SDK cut)

Tools return serde_json::Value. The server adapts them to Result<String, String> for rmcp's IntoCallToolResult.

Testing

223 tests (152 integration + 71 unit):

bash
cargo test    # runs all 223
# Full ship bar (same gates as GitHub CI — run before push)bash scripts/ci.sh# Optional: block push on red CI twinbash scripts/install-hooks.sh
FileTestsCoverage
mcp_protocol.rs11Init handshake, tools/list, tool annotations, resources, schema validation, ID preservation
tools_functional.rs37Tools — happy path, error paths, language detection, faf_go
tier1_security.rs12Path traversal, null bytes, shell injection, oversized input, malformed JSON
tier2_engine.rs37Corrupt YAML, sync replacement, pipelines, dual manifests, legacy filenames, direct paths
tier3_edge_cases.rs10Unicode, CJK, score boundaries, unknown fields, GitHub URL parsing
tier4_aero.rs22Manifest structure, version sync, server.json, context block, manifest-server cross-validation
wjttc_setup.rs16Setup / Confirm setup (sweeps) — BRAKE · ENGINE · AERO · TYRE · PIT
wjttc_faf_dna.rs7.faf-dna lineage — faf_init birth, faf_auto growth, faf_dna, faf-cli's lines
src unit71setup sweep, skills digest, agents::, inject::, intent, app-type, dna:: lineage + faf-cli fixtures

Tests spawn the compiled binary as a subprocess and communicate via stdin/stdout JSON-RPC — true integration tests against the real server.

FAF Ecosystem

One format, every AI platform.

PackagePlatformRegistry
rust-faf-mcpRustcrates.io
claude-faf-mcpAnthropicnpm + MCP #2759
gemini-faf-mcpGooglePyPI
grok-faf-mcpxAInpm
faf-cliUniversalnpm

Build from source

bash
git clone https://github.com/Wolfe-Jam/rust-faf-mcpcd rust-faf-mcpcargo build --release# Binary at target/release/rust-faf-mcp (about 5 MB)

Edition: 2024 | LTO: enabled | Strip: symbols

If rust-faf-mcp has been useful, consider starring the repo — it helps others find it.

Links

Citation

If you use rust-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

License

MIT


Built by @wolfe_jam | wolfejam.dev

來源:README.md,提交 1f4f8a7

工具

12

faf_agents

Author AGENTS.md from project.faf. Non-destructive: preserves any hand-written content outside the faf-managed block.

輸入參數path

faf_auto

Setup if missing, sync CLAUDE.md, score. Existing project.faf unchanged. Returns Confirm setup (sweeps). Does not invent 6Ws. Use faf_go for the human card.

輸入參數path

faf_compress

Compress project.faf for token-limited contexts. Levels: minimal (names only), standard (names + goals), full (everything minus extras).

輸入參數pathlevel

faf_discover

Find the nearest project.faf by walking up the directory tree from the given path.

輸入參數path

faf_dna

Show your FAF DNA journey from .faf-dna: Birth DNA to now (e.g. 22% → 85% → 99%), with history. Reads only; faf_init births the lineage, faf_auto records growth.

輸入參數path

faf_git

Author a project.faf from a GitHub repository URL. Fetches repo metadata and creates AI context instantly. Calls the public GitHub API (no auth). Returns the project.faf text; writes nothing.

輸入參數url必填

faf_go

Table-of-8 plus Confirm setup (sweeps). 6Ws need ☑ to score. Suggestions from the goal (beats only) are not typed and not scored. Below 100 run this to add Human Context. After 100, courtesy: Time to check your Context.

輸入參數pathanswersinterval_days

faf_init

Setup: first write of project.faf from the tree. Will not overwrite. Returns Confirm setup (sweeps). App-type assigns slotignored. Human 6Ws stay empty. Use faf_go to state them.

輸入參數path

faf_read

Read and display the project.faf file contents with parsed structure.

輸入參數path

faf_score

Score the AI-readiness of a project.faf file (0-100%). Shows breakdown and suggestions.

輸入參數path

faf_sync

Write CLAUDE.md from project.faf. Updates faf's own section and keeps everything else in the file.

輸入參數path

faf_tokens

Estimate token count for project.faf at each compression level. Shows minimal/standard/full token counts.

輸入參數path

版本歷史

4
  1. v0.9.0最新Nov 6, 2026
  2. v0.8.3Oct 7, 2026
  3. v0.8.1Sep 21, 2026
  4. v0.8.0Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Rust 整合