fix(mcp): persistent venv cache survives marketplace updates #211

Merged
lmiranda merged 1 commits from fix/persistent-venv-cache into development 2026-01-27 16:49:19 +00:00
Owner

Summary

  • Store venvs in external cache (~/.cache/claude-mcp-venvs/) that survives marketplace updates
  • Auto-repair symlinks via SessionStart hook (0.03 sec vs 2-3 min reinstall)
  • Only run pip install on first use or when requirements change

Problem

Every marketplace update deleted the .venv directories (gitignored), forcing users to manually run setup.sh and wait for full pip reinstall. This was a major UX issue.

Solution Architecture

Cache (runtime) → Marketplaces → External venv cache

The chain of symlinks ensures all three locations work:

  1. ~/.claude/plugins/cache/.../mcp-servers/* (runtime)
  2. ~/.claude/plugins/marketplaces/.../mcp-servers/* (install)
  3. ~/.cache/claude-mcp-venvs/* (persistent venvs)

Performance

Scenario Before After
First install ~2-3 min ~2-3 min (same)
After marketplace update ~2-3 min 0.03 sec

Test plan

  • Fresh install: venvs created in cache, symlinks work
  • Simulate update: delete symlinks, verify auto-repair
  • MCP servers load correctly from all paths
  • Restart session to verify hook runs

🤖 Generated with Claude Code

## Summary - Store venvs in external cache (`~/.cache/claude-mcp-venvs/`) that survives marketplace updates - Auto-repair symlinks via SessionStart hook (0.03 sec vs 2-3 min reinstall) - Only run pip install on first use or when requirements change ## Problem Every marketplace update deleted the `.venv` directories (gitignored), forcing users to manually run `setup.sh` and wait for full pip reinstall. This was a major UX issue. ## Solution Architecture ``` Cache (runtime) → Marketplaces → External venv cache ``` The chain of symlinks ensures all three locations work: 1. `~/.claude/plugins/cache/.../mcp-servers/*` (runtime) 2. `~/.claude/plugins/marketplaces/.../mcp-servers/*` (install) 3. `~/.cache/claude-mcp-venvs/*` (persistent venvs) ## Performance | Scenario | Before | After | |----------|--------|-------| | First install | ~2-3 min | ~2-3 min (same) | | After marketplace update | ~2-3 min | **0.03 sec** | ## Test plan - [ ] Fresh install: venvs created in cache, symlinks work - [ ] Simulate update: delete symlinks, verify auto-repair - [ ] MCP servers load correctly from all paths - [ ] Restart session to verify hook runs 🤖 Generated with [Claude Code](https://claude.com/claude-code)
lmiranda added 1 commit 2026-01-27 16:48:47 +00:00
Problem:
- Venvs in marketplace directory got deleted on every update
- Users had to manually run setup.sh and wait for full pip install
- This caused MCP servers to fail until manually fixed

Solution:
- Store venvs in external cache (~/.cache/claude-mcp-venvs/)
- Auto-repair symlinks via SessionStart hook (instant operation)
- Only run pip install on first use or when requirements change

Architecture:
  Cache (runtime) → Marketplaces → External venv cache

  The chain of symlinks ensures all three locations work:
  1. ~/.claude/plugins/cache/.../mcp-servers/* (runtime)
  2. ~/.claude/plugins/marketplaces/.../mcp-servers/* (install)
  3. ~/.cache/claude-mcp-venvs/* (persistent venvs)

Performance:
- First install: ~2-3 min (unchanged)
- After marketplace update: 0.03 sec (was 2-3 min)

Files:
- scripts/venv-repair.sh: Fast symlink restoration for hooks
- scripts/setup-venvs.sh: Full setup with external cache
- plugins/projman/hooks/startup-check.sh: Auto-repair on session start
- .gitignore: Ignore .venv symlinks

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
lmiranda merged commit a21199d3db into development 2026-01-27 16:49:19 +00:00
lmiranda deleted branch fix/persistent-venv-cache 2026-01-27 16:49:19 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: personal-projects/leo-claude-mktplace#211