thedotmack/claude-mem · warning
chroma-mcp uvx prewarm failed
Error message
chroma-mcp uvx prewarm failed
What it means
A best-effort background prewarm spawns uvx to resolve and warm the chroma-mcp package before first use. On failure it logs the command, args, timeout, pid, and stdout/stderr tails, tree-kills the child, and lets the normal first-use connection proceed. Cost is a slower first search, not lost functionality.
Source
Thrown at src/services/sync/ChromaMcpManager.ts:714
timeoutMs
);
});
try {
await Promise.race([exitPromise, timeoutPromise]);
this.assertConnectionNotCancelled(connectionGeneration);
logger.debug('CHROMA_MCP', 'chroma-mcp uvx prewarm completed');
} catch (error) {
if (error instanceof ChromaMcpConnectionCancelledError) {
logger.debug('CHROMA_MCP', 'chroma-mcp uvx prewarm cancelled during shutdown');
throw error;
}
this.assertConnectionNotCancelled(connectionGeneration);
const errorMessage = error instanceof Error ? error.message : String(error);
const pid = child.pid;
const stdout = stdoutTail();
const stderr = stderrTail();
logger.warn('CHROMA_MCP', 'chroma-mcp uvx prewarm failed', {
command,
args: args.join(' '),
timeoutMs,
...(pid ? { pid } : {}),
error: errorMessage,
...(stdout ? { stdoutTail: stdout } : {}),
...(stderr ? { stderrTail: stderr } : {})
});
if (pid) {
try {
// Token from spawn time: by here the prewarm may already have exited
// (that is often WHY we are in this branch), so self-capture would
// read a replacement rather than the child we spawned.
await killProcessTree(pid, { expectedStartToken: prewarmTracked?.startToken ?? null });
} catch (killError) {
logger.debug('CHROMA_MCP', 'prewarm process tree kill finished (best-effort)', {
pid,View on GitHub (pinned to 8bc631a71a)
Solutions
- Inspect the stdoutTail/stderrTail fields in the log entry for the underlying failure
- Run uvx chroma-mcp --help once interactively to populate the package cache
- Verify uv is installed and reachable on the service environment's PATH
- If timeouts dominate, increase the prewarm timeout or delay prewarm until the network is up
Defensive patterns
Strategy: fallback
Prevention
- Warm the uvx cache during install or deploy, not at runtime
- Treat prewarm warnings as diagnostics — the first-use connect path is authoritative for availability
- Keep uv on PATH so prewarm does not fail on spawn
When it happens
Trigger: prewarm timeoutMs exceeded during a cold PyPI download; uvx not found; package resolution error; the child exiting non-zero. A shutdown race is logged at debug level instead, so a warn here is a genuine spawn/run failure.
Common situations: First run on a slow or offline machine; restricted CI networks; corrupted uv cache.
Related errors
- Connection failed, killing subprocess tree to prevent zombie
- failed to kill in-flight chroma-mcp prewarm tree (best-effor
- chroma-mcp subprocess closed unexpectedly, applying reconnec
- failed to kill prior chroma-mcp tree (best-effort)
- Backfill failed: ${error instanceof Error ? error.message :
AI-assisted analysis of thedotmack/claude-mem@8bc631a71a (2026-08-20).
Data as JSON: /api/errors/42c0b1253b10fc93.
Report an issue: GitHub.