R82.D — Launcher Config Audit

Task: R82.D · launcher config reality Scope: .mcp.json, .vscode/mcp-settings.example.json Round: R82 phase-0-1-stabilization, Wave 2 Author: T3 executor Date: 2026-04-19 Greek letter: γ (Server Lifecycle) + α (System Core)

1. Intent

Both launcher configs at the repo root drifted from the live Phase 0 env-var contract. .mcp.json is outright wrong (AMS donor namespace + nonexistent src/server.js + “Phase 0 not started” inline note). .vscode/mcp-settings.example.json is partially wrong (COLIBRI_DB instead of COLIBRI_DB_PATH, COLIBRI_WATCH_MODE instead of COLIBRI_MODE, COLIBRI_ROOT not read by any live code). R82.D reconciles both files to what src/config.ts + src/modes.ts actually accept.

2. Surface inventory

2.1. .mcp.json (as of b88d7ca0, 18 lines)

{
  "mcpServers": {
    "ams-unified": {
      "command": "node",
      "args": [
        "E:/AMS/src/server.js"
      ],
      "env": {
        "AMS_ROOT": "E:/AMS",
        "AMS_WATCH_MODE": "none"
      },
      "_note": "Phase 0 not started — src/server.js does not exist yet. Update when P0.2 completes."
    },
    "github": {
      "url": "http://localhost:3000/sse"
    }
  }
}

2.2. .vscode/mcp-settings.example.json (as of b88d7ca0, 36 lines)

{
  "_comment_r75_wave_h": [ /* 9-line R75 Wave H annotation block */ ],
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${env:GITHUB_TOKEN}"
      }
    },
    "_colibri_phase_0_placeholder": {
      "_enabled_when": "Rename the key to 'colibri' to activate; src/server.ts and data/colibri.db are live as of R75 Wave H",
      "command": "node",
      "args": ["--loader", "tsx", "${workspaceFolder}/src/server.ts"],
      "env": {
        "COLIBRI_ROOT": "${workspaceFolder}",
        "COLIBRI_DB": "${workspaceFolder}/data/colibri.db",
        "COLIBRI_WATCH_MODE": "none"
      }
    }
  }
}

3. Drift items (with live-code citations)

# File Line Current value Correct value Source of truth
D1 .mcp.json 3 key "ams-unified" "colibri" Server identity per package.json:2 "name": "colibri" and .vscode/mcp-settings.example.json placeholder rename note
D2 .mcp.json 4 "command": "node" "command": "node" with tsx loader args (see D3) src/server.ts (TypeScript) runs under tsx per package.json:20 "dev": "tsx watch src/server.ts"
D3 .mcp.json 6 ["E:/AMS/src/server.js"] ["--loader", "tsx", "${workspaceFolder}/src/server.ts"] src/server.js does NOT exist; only src/server.ts (2026-04-17 mtime). VS Code example uses node --loader tsx ${workspaceFolder}/src/server.ts — adopt same invocation
D4 .mcp.json 9 "AMS_ROOT": "E:/AMS" REMOVE src/config.ts:26-33 rejects any AMS_* variable at load time. No live code reads COLIBRI_ROOT (verified: only reference is in the VS Code example itself + CONTRIBUTING.md doc placeholder)
D5 .mcp.json 10 "AMS_WATCH_MODE": "none" "COLIBRI_MODE": "FULL" src/modes.ts:84-89 rejects AMS_MODE; src/modes.ts:90 reads env.COLIBRI_MODE; valid values FULL | READONLY | TEST | MINIMAL per src/modes.ts:31. Default behavior when unset = FULL per src/modes.ts:91-93
D6 .mcp.json 12 "_note": "Phase 0 not started..." REMOVE or rewrite Phase 0 is 28/28 sealed at R75 Wave I (d5f6a1ff); src/server.ts + data/colibri.db shipped. This banner is factually obsolete
D7 .vscode/mcp-settings.example.json 30 "COLIBRI_ROOT": "${workspaceFolder}" REMOVE grep -rn COLIBRI_ROOT src/ returns zero reads. Only CONTRIBUTING.md:65 references it (as an author-facing path placeholder, not a runtime variable). No live code consumes it
D8 .vscode/mcp-settings.example.json 31 "COLIBRI_DB" "COLIBRI_DB_PATH" src/config.ts:48 reads COLIBRI_DB_PATH
D9 .vscode/mcp-settings.example.json 32 "COLIBRI_WATCH_MODE" "COLIBRI_MODE" src/modes.ts:90 reads env.COLIBRI_MODE
D10 .vscode/mcp-settings.example.json 2-16 _comment_r75_wave_h APPEND R82.D note Annotation block is intentional doc; R82.D should land a reality note for the next round that touches it
D11 .vscode/mcp-settings.example.json 26 _enabled_when text Update to drop “Wave H” framing (Phase 0 is sealed); keep rename hint Annotation still useful but reflects stale waypoint

4. Live-code env map

Verified via Grep process\.env\.(COLIBRI_|AMS_) src/:

Env key Read by Accepted? Default
NODE_ENV src/config.ts:44 yes (required) none
COLIBRI_DB_PATH src/config.ts:48 yes data/colibri.db
COLIBRI_LOG_LEVEL src/config.ts:49-51 yes info
COLIBRI_WEBHOOK_URL src/config.ts:65 yes (optional)
ANTHROPIC_API_KEY src/config.ts:79 yes (optional, call-time validation)
COLIBRI_ANTHROPIC_MODEL src/config.ts:84 yes claude-sonnet-4-5
COLIBRI_ANTHROPIC_TIMEOUT_MS src/config.ts:88-94 yes 30000
COLIBRI_STARTUP_TIMEOUT_MS src/config.ts:95-101 yes 30000
COLIBRI_MCP_TIMEOUT src/config.ts:111-117 yes 30000
COLIBRI_MODE src/modes.ts:90 yes FULL if unset
AMS_* (any) src/config.ts:26-33 REJECTED at load time
AMS_MODE src/modes.ts:84-89 REJECTED
COLIBRI_ROOT (no reader) not consumed

5. Downstream impact

  • .mcp.json is read by Claude Code / MCP clients at workspace boot. With current drift, the ams-unified server fails twice: (a) src/server.js does not exist, (b) src/config.ts:29 would throw Colibri does not support the legacy AMS_* namespace. Found: AMS_ROOT, AMS_WATCH_MODE. Rename to COLIBRI_* or unset. even if the entry point were correct.
  • .vscode/mcp-settings.example.json is the canonical copy-and-rename template for per-user VS Code MCP config. With current drift, copied config would pass AMS_* guard (Colibri-prefixed keys) but fail at first DB open because COLIBRI_DB_PATH is unset (config.ts:48 default data/colibri.db would kick in silently — the user’s intended ${workspaceFolder}/data/colibri.db override is lost) and COLIBRI_MODE defaults to FULL instead of the user’s intended none/READONLY.
  • Fix is config-only; no src/ or test changes required.

6. Out of scope (this task)

  • The github MCP server entry in both files — unchanged.
  • CONTRIBUTING.md:65 $COLIBRI_ROOT placeholder — author-facing doc, not runtime env. Leave alone.
  • Any other config file (package.json, tsconfig.json, .env.example). Scope is exactly the two launcher files.
  • src/ runtime code. R82 is docs+config only (per manifest §Out-of-scope).

7. Next step

Contract — see docs/contracts/r82-d-launcher-contract.md (Step 2).


R82.D audit. Inventoried 11 drift items (D1–D11) across two launcher configs, cited live-code source of truth at src/config.ts:26-117 + src/modes.ts:83-101. All fixes are config-only; no code changes.


Back to top

Colibri — documentation-first MCP runtime. Apache 2.0 + Commons Clause.

This site uses Just the Docs, a documentation theme for Jekyll.