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

  1. Inspect the stdoutTail/stderrTail fields in the log entry for the underlying failure
  2. Run uvx chroma-mcp --help once interactively to populate the package cache
  3. Verify uv is installed and reachable on the service environment's PATH
  4. If timeouts dominate, increase the prewarm timeout or delay prewarm until the network is up
Defensive patterns

Strategy: fallback

Prevention

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


AI-assisted analysis of thedotmack/claude-mem@8bc631a71a (2026-08-20). Data as JSON: /api/errors/42c0b1253b10fc93. Report an issue: GitHub.