From fbf582a493cb7005cd70c192caad735445ebdaaf Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Thu, 23 Apr 2026 13:20:58 +0300 Subject: [PATCH] fix(tauri): fix MCP server spawn on Windows and PATH on macOS - Windows: npm installs .cmd wrappers, not direct executables. Spawn via 'cmd /c openpencil-mcp-http' on Windows to resolve .cmd files. - macOS/Linux: add fix-path-env-rs to inherit shell PATH in GUI apps. - Add 'cmd' to shell spawn capabilities for Windows. Fixes #226 --- desktop/capabilities/default.json | 3 ++- src/automation/spawn-mcp.ts | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/desktop/capabilities/default.json b/desktop/capabilities/default.json index ca5dc7218..216c636fd 100644 --- a/desktop/capabilities/default.json +++ b/desktop/capabilities/default.json @@ -32,7 +32,8 @@ { "name": "claude-agent-acp", "cmd": "claude-agent-acp", "args": true }, { "name": "codex-acp", "cmd": "codex-acp", "args": true }, { "name": "gemini", "cmd": "gemini", "args": true }, - { "name": "openpencil-mcp-http", "cmd": "openpencil-mcp-http", "args": true } + { "name": "openpencil-mcp-http", "cmd": "openpencil-mcp-http", "args": true }, + { "name": "cmd", "cmd": "cmd", "args": true } ] }, "shell:allow-stdin-write", diff --git a/src/automation/spawn-mcp.ts b/src/automation/spawn-mcp.ts index dd048b500..5cf3999d2 100644 --- a/src/automation/spawn-mcp.ts +++ b/src/automation/spawn-mcp.ts @@ -66,12 +66,20 @@ export async function spawnMCPIfNeeded(): Promise runtimeAutomationAuthToken = authToken const { Command } = await import('@tauri-apps/plugin-shell') - const command = Command.create('openpencil-mcp-http', [], { - env: { - OPENPENCIL_MCP_AUTH_TOKEN: authToken, - OPENPENCIL_MCP_CORS_ORIGIN: window.location.origin - } - }) + const isWindows = navigator.userAgent.includes('Windows') + const command = isWindows + ? Command.create('cmd', ['/c', 'openpencil-mcp-http'], { + env: { + OPENPENCIL_MCP_AUTH_TOKEN: authToken, + OPENPENCIL_MCP_CORS_ORIGIN: window.location.origin + } + }) + : Command.create('openpencil-mcp-http', [], { + env: { + OPENPENCIL_MCP_AUTH_TOKEN: authToken, + OPENPENCIL_MCP_CORS_ORIGIN: window.location.origin + } + }) command.stderr.on('data', (raw: Uint8Array | number[] | string) => { console.error('[MCP]', decodeTauriStderr(raw))