Releases: graph-memory/process-mcp
Releases · graph-memory/process-mcp
v0.2.0
v0.1.0
feat: initial process-mcp supervisor implementation HTTP MCP server that supervises long-running dev processes. Runs in its own process so state survives Claude Code restarts. Tools (10): proc_start, proc_stop, proc_restart, proc_list, proc_remove, proc_logs, proc_wait_ready, proc_port_who, proc_exec, proc_signal Features: - In-memory log ring per process, O(1) push, filter backward-scan - JSON log enrichment (pino/bunyan/winston/structlog level normalization) and structured `where` DSL over parsed JSON fields - Pretty-render (two-line pino-style) + raw/json output modes - Cross-platform tree-kill (POSIX process groups, Windows taskkill /T) - `proc_wait_ready` with URL probe + regex log pattern, early-death fast-fail with tail of stderr - `proc_exec` with tree-kill timeout, stdin input, bounded output - Idle TTL per process (opt-in) and grave TTL for exited entries - TTL sweeper also enforces global log memory cap - Resource caps: max sessions (100), max processes (200), total log mem (200 MB), per-line size (10 KB), per-tool string length limits Security: - Refuse-to-start on non-loopback bind without API key - CSRF defense: Content-Type application/json required, Origin allowlist - API key compared with crypto.timingSafeEqual - Per-name lock serializes start/stop/restart/remove (no orphan races) - No shell invoked; cmd strings parsed by execa splitter only - PROC_MCP_* env filtered from spawned children (extendEnv:false) - Non-root Docker user (node) + tini as PID 1 Crash recovery: - State file in \$TMPDIR/process-mcp-<uid>/<port>.json records all running child PIDs (debounced writes) - Startup reaper tree-kills orphans left by a previous supervisor crash, refuses to reap if the prev supervisor is still alive Platform: macOS, Linux, Windows. CI runs on all three × node 24. Docker image: multi-arch (amd64/arm64), binds 0.0.0.0, requires API key. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>