Skip to content

ChromaMcpManager ignores CLAUDE_MEM_PYTHON_VERSION, breaks on Python 3.14+ #1208

@alpinist-pnw

Description

@alpinist-pnw

Bug

ChromaMcpManager.buildCommandArgs() spawns uvx chroma-mcp ... without passing --python <version>, even though CLAUDE_MEM_PYTHON_VERSION exists in settings and defaults to 3.13.

On systems where uvx resolves to Python 3.14+, this crashes immediately because ChromaDB depends on Pydantic v1, which is incompatible with Python 3.14:

pydantic.v1 ... UserWarning: Core Pydantic V1 functionality isn't compatible with Python 3.14 or greater.

The MCP search tools return chroma-mcp connection in backoff / Connection closed errors. SQLite observation capture still works, but all semantic search is broken.

Root Cause

src/services/sync/ChromaMcpManager.tsbuildCommandArgs() builds the uvx args array starting with 'chroma-mcp' directly, never reading CLAUDE_MEM_PYTHON_VERSION from settings. The setting is defined in SettingsDefaultsManager (default '3.13'), validated in SettingsRoutes, and written to ~/.claude-mem/settings.json by the installer — but never consumed by the code that actually spawns the subprocess.

Fix

Read the setting and prepend --python <version> to the uvx args before chroma-mcp:

private buildCommandArgs(): string[] {
    const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH);
    const chromaMode = settings.CLAUDE_MEM_CHROMA_MODE || 'local';
    const pythonVersion = settings.CLAUDE_MEM_PYTHON_VERSION || '3.13';

    // Pin Python version for uvx to avoid Pydantic v1 / Python 3.14+ incompatibility
    const pythonArgs = ['--python', pythonVersion];

    if (chromaMode === 'remote') {
      // ... existing remote config ...
      const args = [
        ...pythonArgs,
        'chroma-mcp',
        // ...
      ];
      return args;
    }

    // Local mode
    return [
      ...pythonArgs,
      'chroma-mcp',
      '--client-type', 'persistent',
      '--data-dir', DEFAULT_CHROMA_DATA_DIR
    ];
}

Both the remote and local return paths need the prefix.

Environment

  • claude-mem v10.3.1
  • macOS (Darwin 25.3.0, aarch64)
  • Python 3.14 as system default via uv
  • CLAUDE_MEM_PYTHON_VERSION: "3.13" in ~/.claude-mem/settings.json
  • CLAUDE_MEM_CHROMA_MODE: "local"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions