INIT_FIX_610_IMPLEMENTATION.md•2.3 kB
# Initialization Fix Implementation - Issue #610
**Date**: August 16, 2025
**Branch**: fix/server-initialization-race-condition
**Issue**: #610 - Fix race condition in server initialization
## Problem Analysis
### Current Implementation (Race Condition)
In the constructor (lines 97-186):
- Portfolio initialization happens asynchronously with `.then()`
- `personasDir` starts as empty string
- Critical initialization happens in the callback
In the run() method (line 4457):
- Server connects immediately with `await this.server.connect(transport)`
- Doesn't wait for portfolio initialization
- MCP is ready but personas/portfolio aren't loaded
### The Fix
Move initialization to run() method and await it before connecting:
```typescript
async run() {
// Initialize BEFORE connecting
await this.initializePortfolio();
await this.completeInitialization();
// NOW connect MCP
const transport = new StdioServerTransport();
await this.server.connect(transport);
}
```
## Changes Made
### 1. Extract Post-Initialization Logic
Created new method `completeInitialization()` that contains all the logic that was in the `.then()` callback.
### 2. Modified Constructor
- Removed the async `.then()` pattern
- Constructor now only sets up basic state
- No async operations in constructor
### 3. Modified run() Method
- Added await for `initializePortfolio()`
- Added await for `completeInitialization()`
- These complete BEFORE connecting to transport
## Testing
### Local MCP Test ✅
```bash
# Test with proper parameters
echo '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"1.0.0","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}},"id":1}' | node dist/index.js 2>/dev/null
# Result: Server responds correctly
{"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"serverInfo":{"name":"dollhousemcp","version":"1.0.0"}},"jsonrpc":"2.0","id":1}
```
### Docker Test
```bash
docker compose --file docker/docker-compose.yml run --rm -T dollhousemcp
```
Note: Docker environment needs further testing but local MCP is working correctly.
## Impact
This fix ensures:
1. Portfolio and personas are loaded before MCP connects
2. No race condition between initialization and commands
3. Docker tests should pass
4. PR #606 is unblocked