Startup Hooks Must Check Venv Cache Path First
Context
- Date: 2026-02-02
- Time Wasted: 4+ hours debugging across 3 devices
- Severity: Critical - blocks all MCP functionality
- Components: SessionStart hooks, MCP server venvs
Problem
SessionStart hooks in data-platform and pr-review plugins were reporting "MCP venv missing" even though venvs existed and MCP servers worked fine.
The hooks checked the WRONG path:
# WRONG - checks marketplace directory (gets wiped on updates)
VENV_PATH="$MARKETPLACE_ROOT/mcp-servers/data-platform/.venv/bin/python"
But venvs actually live in the CACHE directory (survives updates):
# CORRECT - cache location
~/.cache/claude-mcp-venvs/leo-claude-mktplace/{server}/.venv/
Root Cause
The run.sh scripts correctly check cache first, then local. But the startup hooks were written later and copied the wrong pattern - checking only the marketplace path.
Inconsistency between:
mcp-servers/*/run.sh- checks cache first ✓plugins/*/hooks/startup-check.sh- only checked marketplace ✗
Solution
Update startup hooks to match run.sh pattern:
# Check cache first (preferred), then local
CACHE_VENV="$HOME/.cache/claude-mcp-venvs/leo-claude-mktplace/{server}/.venv/bin/python"
LOCAL_VENV="$MARKETPLACE_ROOT/mcp-servers/{server}/.venv/bin/python"
if [[ -f "$CACHE_VENV" ]]; then
VENV_PATH="$CACHE_VENV"
elif [[ -f "$LOCAL_VENV" ]]; then
VENV_PATH="$LOCAL_VENV"
else
echo "$PREFIX MCP venv missing - run /initial-setup or setup.sh"
exit 0
fi
Prevention
1. Canonical Venv Path Pattern
Add to docs/CANONICAL-PATHS.md:
MCP Server Venvs (ALWAYS check in this order):
1. Cache: ~/.cache/claude-mcp-venvs/leo-claude-mktplace/{server}/.venv/
2. Local: {marketplace}/mcp-servers/{server}/.venv/
2. Pre-Commit Check
Add validation script that ensures all hooks checking for venvs use the cache-first pattern.
3. Code Review Checklist
When reviewing hooks that check venv paths:
- Does it check cache path FIRST?
- Does it match the pattern in run.sh?
- Is the server name correct?
Files Changed
plugins/data-platform/hooks/startup-check.sh- Fixed path checkingplugins/pr-review/hooks/startup-check.sh- Fixed path checking
Why This Matters
- Venvs in marketplace get DELETED on every update/reinstall
- Cache directory SURVIVES updates - that's its entire purpose
- False "venv missing" errors cause hours of debugging
- User wastes time running setup scripts that don't fix anything
Tags for Discovery
Search terms that should find this lesson:
- "venv missing"
- "MCP venv"
- "startup hook"
- "SessionStart"
- "cache path"
- "marketplace path"
- "run.sh"
Tags: venv, mcp, hooks, startup, cache, debugging, critical, path-mismatch