TL;DR: Run faf git on any Go, Rust, or Python repo and get the right project type — MCP server, CLI, service, or library — detected from native manifests (go.mod, Cargo.toml, pyproject.toml). No more type: library for everything that isn't JavaScript.
The Problem
Run faf git on github/github-mcp-server — one of the most-watched MCP repos on GitHub. Before v6.1.0:
Same repo. Zero prior context. The full journey in one session — detection fix, README enrichment, then a single sentence from a human to complete the picture.
The root cause: FAF's dependency signal matching only checked package.json. Go, Rust, and Python have their own manifest formats — and FAF was ignoring them. Everything that wasn't JavaScript fell through to the default: type: library. That's wrong for almost every Go and Rust project, and wrong for most Python projects.
What's New
Go — go.mod parsing
FAF now reads go.mod for dependency matching. MCP detection, CLI detection, and service fallback all work:
github.com/modelcontextprotocol/go-sdk→type: mcp(covers github/github-mcp-server)github.com/mark3labs/mcp-go→type: mcpgithub.com/spf13/cobraorcmd/+main.go→type: cli- Go service with no CLI markers →
type: service
Rust — Cargo.toml binary detection
Rust has three distinct project shapes. FAF now distinguishes them:
[[bin]]section orcategories = ["command-line-utilities"]→type: cli(covers ripgrep)src/main.rs+clap/argh/lexopt→type: clisrc/main.rswithout CLI markers →type: servicesrc/lib.rsonly →type: library(correct — it's a crate)
Python — pyproject.toml intent detection
[project.scripts]/console_scripts→type: clisetup.pypresent →type: libraryapp.py/main.py→type: service- FastAPI / Django / Flask detected →
type: backend(unchanged)
Better default
The fallback for unrecognised projects changed from library to service. Libraries are a specific, deliberate choice — they expose an API for other packages to import. Most projects that don't match a known pattern are services or tools, not libraries.
Live Test: github/github-mcp-server
This is a real test run against GitHub's own MCP server — no project.faf, no CLAUDE.md, rich README:
faf git https://github.com/github/github-mcp-server9 slots filled automatically — including project.goal from the README. The remaining 6 are human_context. Run faf go: one sentence in, sign off, 🏆.
WJTTC — TIER 4 NATIVE
12 new championship tests covering every detection path. They run on every CI push:
One Sentence In. Review. Sign Off.
faf go was a slot-by-slot form. Now it's an interview with a single opener:
★ In one sentence, what is this project designed to do?You answer. The AI thinks. It infers who, what, why, where, when, how from your sentence and the detected stack. You see all 6Ws and sign off. One correction if needed. Done.
On github/github-mcp-server, the conversation went:
What shipped in v6.2.0
- ★ Opener — one question replaces the entire 6Ws interview
- AI thinking step — Claude interprets your answer into structured slots (with
ANTHROPIC_API_KEY) - Keyword extraction — detects
whofrom "devs", "engineers", "teams" without API key - 6Ws sign-off loop — review, correct by slot name, confirm
faf git --keep— keeps cloned repo in cwd for follow-upfaf go- README enrichment —
faf gitnow extracts goal, detects build tool, setsslotignoredfor MCP

Try It
npm install -g faf-cli@6.2.0Or zero-install:
bunx faf git https://github.com/github/github-mcp-server --keep && cd github-mcp-server && bunx faf goThe Numbers
- v6.1.0 + v6.2.0 — Both released April 14, 2026
- 402/402 — Tests passing across 44 files
- 12 new — WJTTC TIER 4 NATIVE tests (#28–#39)
- 22% → 🏆 100% — github/github-mcp-server, one session
- 51,500+ — Downloads across npm, PyPI, crates.io
