Atlas / MCP servers / luetzey / who2be

who2beBLOCK

mcp/luetzey/who2be

Self-hosted hub for AI agent configuration: versioned personas, playbooks and knowledge with a mandatory review step, served to agents over MCP. Agent configuration you review — not behavior you hope for.

Verdict
BLOCK
Grade
F
Trust score
31 /100
Exposed tools
5 5r · 0w · 0d
Transport
stdio · streamable-http
License
NOASSERTION
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Agent configuration you review — not agent behavior you hope for.

Self-hosted hub for the personas, playbooks and knowledge your agents run on — versioned, reviewed, and served to them over MCP.

Quickstart · Connect an agent · Documentation · Changelog · Discussions

<img src="docs/assets/screenshots/version-review-light.png" width="880" alt="Who2Be web UI: the version history of a persona. Version 3 is waiting in review, and its diff against the active version 2 is open.">

Why Who2Be

Instead of scattering system prompts, workflows, and knowledge documents across chat histories, notes, or repositories, Who2Be keeps them in one self-hosted configuration store (the "AgentDB") and serves them to your agents at runtime through an MCP server.

  • Stop re-typing the same instructions. Personas, playbooks and reference

knowledge li

Read from source at commit f68bc20f3fe6OBSERVED · 2026-10-11
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add who2be-web --env BLOBSTORE_ACCESS_KEY=${BLOBSTORE_ACCESS_KEY} --env BLOBSTORE_SECRET_KEY=${BLOBSTORE_SECRET_KEY} --env E2E_AUTH_URL=${E2E_AUTH_URL} --env JWT_SECRET=${JWT_SECRET} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "who2be-web": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "BLOBSTORE_ACCESS_KEY": "${BLOBSTORE_ACCESS_KEY}",
        "BLOBSTORE_SECRET_KEY": "${BLOBSTORE_SECRET_KEY}",
        "E2E_AUTH_URL": "${E2E_AUTH_URL}",
        "JWT_SECRET": "${JWT_SECRET}"
      }
    }
  }
}
03

Exposed tools (5)

5 read · 0 write · 0 destructive.

ToolRiskDescription
Carlaread
CoachreadDesc
Recherche-Agentread
TestreadDesc
coderread
04

Trust audit

BLOCKgrade F · trust 31/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (9 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (25)

CRITICALHard-coded secrets · secret.private_key · CWE-798, CWE-321
scripts/gen_apple_client_secret.py:118
"'-----BEGIN PRIVATE KEY-----')."
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.env.example:21
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/who2be
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.env.example:29
# APP_DATABASE_URL=postgresql://who2be_app:CHANGE_ME@localhost:5432/who2be
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
apps/api/src/who2be_api/core/config.py:42
database_url: str = "postgresql://postgres:postgres@localhost:5432/who2be"
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
deploy/hetzner/.env.example:15
DATABASE_URL=postgresql://supabase_admin:CHANGE_ME@db:5432/postgres
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
docker-compose.yml:56
DATABASE_URL: postgresql://postgres:postgres@db:5432/who2be
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
.claude/plan/2026-07-19-1030_memory-guard-config.md:20
Phrasen-Vorkommens liegt (z. B. Treffer „jailbreak" in erlaubtem
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
.claude/plan/2026-07-19-1030_memory-guard-config.md:21
„Jailbreak-Detection"). Verhindert den trivialen Bypass „Allow-Phrase
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
.claude/plan/2026-06-14-0832_notion-decoupling.md:21
- [x] **WP-4 — Doku/Code neutralisiert (meaning-erhaltend):** CLAUDE.md,
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/gen_apple_client_secret.py:212
print(token)
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:13
# WHO2BE_PUBLIC_URL=http://192.168.1.42:5173
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:182
# MCP_RESOURCE_URL=http://127.0.0.1:8765/mcp
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:185
# WHO2BE_MCP_PUBLIC_URL=http://127.0.0.1:8765
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/models/tests/test_token.py:54
token="w2b_secret_plaintext",
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
apps/api/tests/test_memory_expiry.py:109
"-----BEGIN OPENSSH PRIVATE KEY-----",
LOWInventory / provenance · inv.hidden_file · CWE-1104
.gitleaks.toml
.gitleaks.toml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.suspicious_name · CWE-1104
.claude/plan/2026-05-25-2021_ms2-c2-supabase-stack.md
2026-05-25-2021_ms2-c2-supabase-stack.md
Why it matters. member named after an attack tool
Fix. remove or justify
LOWInventory / provenance · inv.suspicious_name · CWE-1104
.claude/plan/2026-09-26-2030_mcp-payload-budget-inventar.md
2026-09-26-2030_mcp-payload-budget-inventar.md
Why it matters. member named after an attack tool
Fix. remove or justify
LOWInventory / provenance · inv.suspicious_name · CWE-1104
changelog.d/mcp-payload-budget-wire-form.fixed.md
mcp-payload-budget-wire-form.fixed.md
Why it matters. member named after an attack tool
Fix. remove or justify
LOWInventory / provenance · inv.suspicious_name · CWE-1104
changelog.d/t89ffc946-mcp-payload-budget.added.md
t89ffc946-mcp-payload-budget.added.md
Why it matters. member named after an attack tool
Fix. remove or justify
LOWInventory / provenance · inv.suspicious_name · CWE-1104
docs/mcp-payload-budget.md
mcp-payload-budget.md
Why it matters. member named after an attack tool
Fix. remove or justify
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
apps/api/tests/test_compose_env_promises.py:100
data: dict[str, Any] = yaml.load(path.read_text(encoding="utf-8"), Loader=_ComposeLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
apps/api/tests/test_operators.py:223
data: dict[str, Any] = yaml.load(text, Loader=_ComposeLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
apps/api/tests/test_single_writer_guard.py:295
data = yaml.load((_REPO_ROOT / relpath).read_text(encoding="utf-8"), Loader=_ComposeLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
apps/mcp/tests/test_tool_payload_budget.py:211
module = importlib.import_module(f"who2be_mcp.tools.{module_name}")

Gates applied: critical_finding, instruction_override, no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha f68bc20f3fe6full audit observations/trust-audit/mcp-server/luetzey__who2be.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11f68bc20f3fe6BLOCKF31first audit
06

Questions

What is the who2be MCP server?

Self-hosted hub for AI agent configuration: versioned personas, playbooks and knowledge with a mandatory review step, served to agents over MCP. Agent configuration you review — not behavior you hope for.

What tools does who2be expose?

5 in total: 5 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is who2be safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (31/100) and found 9 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does who2be need?

It reads BLOBSTORE_ACCESS_KEY, BLOBSTORE_SECRET_KEY, E2E_AUTH_URL, JWT_SECRET and TOKEN_TTL_SECONDS from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does who2be run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as who2be-web at 0.1.0.

How current is this page?

The grade is for one exact copy of the source (f68bc20f3fe6), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement