gemini-faf-mcp@3.3.0
CAUTION· not startedPublisher claims: "Persistent Project Context for Google Gemini. IANA-registered .faf format, MCP server + Cloud Run REST API, unifies CLAUDE.md, GEMINI.md, AGENTS.md." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Not started: dependency install failed; the server itself was not observed.- Tested
- the dependency install step · every file read, file written and host contacted by what ran
- Not tested
- server startup · the tool list · tool behavior
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
- no credential variables read in the code
- Where it talks to
- no vendor host named in the codeAlso faf.one, run.app — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- server startup · the tool list · tool behavior
Connect it under the guard. Not started: dependency install failed; the server itself was not observed. The code names no credential variable; the guard pins the network to what the honeypot saw and logs every call.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-14 and scored it 73/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Hidden zero-width characters detected; Access to sensitive file paths; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenarios · 0 deviationsStatic findings
if existing.lstrip("").lstrip().startswith(FAF_METASTAMP) or _has_unpaired_marker(existing, start, end):Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.`.faf` / `.fafm` context file. Blocks /etc/passwd, ~/.ssh/id_rsa,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."path": "../../../etc/passwd"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.assert "\u30d7\u30ed\u30b8\u30a7\u30af\u30c8" in contentFix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.assert not is_faf_context_file(Path("/etc/passwd"))Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.binary.write_bytes(b"\x00\x01\x02\xff\xfe\xfd")Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.flags = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = await _call_error(client, "faf_read", {"path": "/etc/passwd"})Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.~/.aws/credentials, .env, etc. regardless of directory.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.out = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.`.faf` / `.fafm` context file. Blocks /etc/passwd, ~/.ssh/id_rsa,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.~/.aws/credentials, .env, etc. regardless of directory.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.out = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.bom = "" if existing.startswith("") else ""Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.confine_path("../../../../../../etc/passwd")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."name": "\u30d7\u30ed\u30b8\u30a7\u30af\u30c8", "path": targetFix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.confine_path("/etc/passwd")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""Export and write AGENTS.md from a .faf file (non-destructive).Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.**faf_gemini and faf_agents keep your hand-written GEMINI.md and AGENTS.md, and tell you what they couldn't write.**Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.**faf_gemini and faf_agents keep your hand-written GEMINI.md and AGENTS.md, and tell you what they couldn't write.**Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.**faf_gemini and faf_agents keep your hand-written GEMINI.md and AGENTS.md, and tell you what they couldn't write.**Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct."project.faf is the source: faf_gemini and faf_agents write GEMINI.md and AGENTS.md from it, leaving hand-written content alone.",Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for gemini-faf-mcp@3.3.0 as of 8 h ago. This is the package itself, not its dependencies.
What would make this Verified
7 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim wolfe-jam: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Hidden zero-width characters detected≈ +4 on the totalKeep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- References a credential file in the home directory≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Unicode escape sequence detected≈ +2 on the totalPut hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.
- Hex-encoded string detected≈ +2 on the totalPut hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.