Monorepo for Aesthetic.Computer aesthetic.computer

mcp: share one resident daemon per server, not one per session master

Claude Code spawns every stdio MCP server fresh per session, so N parallel sessions cost N copies. On neo (8 GB) three sessions carried ~570 MB of duplicate MCP processes. Memory got tight enough that launchd could no longer fork an sshd — ping and TCP still answered, so the box looked up while nothing could get in. It took a power cycle. emacs-mcp already had a --http shared-daemon mode, and install-daemons.sh already installed it. But the step that points Claude at the daemon lived in a comment and was never run on neo, so the daemon sat idle while every session still spawned its own stdio copy. A half-applied fix is worse than none: it looks installed. - toolchain/mcp/http-front.mjs: the POST front and the stdio loop, once. handleMessage is stateless per call in all of these servers, so sharing a process needs nothing more. - frame-mcp, puppet-mcp: gain --http. emacs-mcp drops its copy of the front. - install-daemons.sh: installs all four, runs the `claude mcp add` step itself, then verifies each daemon answers an initialize. Also fixes two silent breakages it had been papering over — the plists never passed EMACSCLIENT or AC_EMAIL_STYLE_GUIDE (both servers fall back to paths that are wrong here), and never put fnm's node on PATH, so frame-mcp's `spawn node` died under launchd where it worked under a shell. puppet takes 7769; 7768 is Spotify's. macOS ships bash 3.2, so no `declare -A`. The stdio entries in .mcp.json stay as the fallback for boxes without daemons. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>