Executor version
1.5.40. The same code path is present on 1.5.41.
Reproduction
- Start the local headless daemon with at least one toolkit configured.
- Initialize the default
/mcp endpoint. It succeeds.
- Send the same MCP
initialize request to /mcp/toolkits/<slug>.
Expected
The toolkit-scoped MCP session initializes successfully.
Actual
The toolkit route returns HTTP 500 and the daemon logs:
Failed to open local SQLite data. Close other Executor processes and retry, or run with --log-level debug for details.
Only one Executor process is running. That process already owns the data-directory lock. createConfigForResource calls createExecutorHandle for the toolkit, which attempts to acquire the same local SQLite ownership lock a second time inside the daemon.
Proposed fix
Reuse the shared daemon database when constructing a toolkit-scoped executor, while retaining the toolkit-specific plugin configuration. A regression test should initialize a toolkit MCP route in the same server process.
Executor version
1.5.40. The same code path is present on 1.5.41.
Reproduction
/mcpendpoint. It succeeds.initializerequest to/mcp/toolkits/<slug>.Expected
The toolkit-scoped MCP session initializes successfully.
Actual
The toolkit route returns HTTP 500 and the daemon logs:
Only one Executor process is running. That process already owns the data-directory lock.
createConfigForResourcecallscreateExecutorHandlefor the toolkit, which attempts to acquire the same local SQLite ownership lock a second time inside the daemon.Proposed fix
Reuse the shared daemon database when constructing a toolkit-scoped executor, while retaining the toolkit-specific plugin configuration. A regression test should initialize a toolkit MCP route in the same server process.