-
-
Notifications
You must be signed in to change notification settings - Fork 2k
Description
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.ts → buildCommandArgs() 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.jsonCLAUDE_MEM_CHROMA_MODE: "local"