From 3106523f2b1919e48ae392bfb6f85f0521a1d510 Mon Sep 17 00:00:00 2001 From: Mohammod Al Amin Ashik Date: Tue, 3 Mar 2026 22:46:57 +0800 Subject: [PATCH 1/2] fix: add Windsurf, JetBrains, and Android Studio to quick-connect grid Add popular AI client options to the ConnectIDEs dashboard panel so users can easily copy configuration for Windsurf, JetBrains IDEs (IntelliJ, WebStorm, PyCharm, etc.), and Android Studio alongside existing VS Code, Cursor, and Claude Code entries. - Add Windsurf, JetBrains, Android Studio entries to ConnectIDEs grid - Create SVG icons for JetBrains and Android Studio - Register new icon keys in CLIENT_ICON_ASSETS (ClientsPage, OAuthConsentModal) - Add client name patterns for all JetBrains products (IntelliJ, WebStorm, PyCharm, PhpStorm, RustRover, GoLand, Rider, CLion) and Android Studio to clientIcons.ts Signed-off-by: Mohammod Al Amin Ashik --- .../assets/client-icons/android-studio.svg | 24 +++++++++++++++++ .../src/assets/client-icons/jetbrains.svg | 13 +++++++++ apps/desktop/src/components/ConnectIDEs.tsx | 27 +++++++++++++++++++ .../src/components/OAuthConsentModal.tsx | 4 +++ .../src/features/clients/ClientsPage.tsx | 4 +++ apps/desktop/src/lib/clientIcons.ts | 10 +++++++ 6 files changed, 82 insertions(+) create mode 100644 apps/desktop/src/assets/client-icons/android-studio.svg create mode 100644 apps/desktop/src/assets/client-icons/jetbrains.svg diff --git a/apps/desktop/src/assets/client-icons/android-studio.svg b/apps/desktop/src/assets/client-icons/android-studio.svg new file mode 100644 index 00000000..5c92e3aa --- /dev/null +++ b/apps/desktop/src/assets/client-icons/android-studio.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/desktop/src/assets/client-icons/jetbrains.svg b/apps/desktop/src/assets/client-icons/jetbrains.svg new file mode 100644 index 00000000..397ac754 --- /dev/null +++ b/apps/desktop/src/assets/client-icons/jetbrains.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + JB + diff --git a/apps/desktop/src/components/ConnectIDEs.tsx b/apps/desktop/src/components/ConnectIDEs.tsx index 790f7f79..46783269 100644 --- a/apps/desktop/src/components/ConnectIDEs.tsx +++ b/apps/desktop/src/components/ConnectIDEs.tsx @@ -4,6 +4,9 @@ import { Card, CardHeader, CardTitle, CardDescription, CardContent, Button } fro import cursorIcon from '@/assets/client-icons/cursor.svg'; import vscodeIcon from '@/assets/client-icons/vscode.png'; import claudeIcon from '@/assets/client-icons/claude.svg'; +import windsurfIcon from '@/assets/client-icons/windsurf.svg'; +import jetbrainsIcon from '@/assets/client-icons/jetbrains.svg'; +import androidStudioIcon from '@/assets/client-icons/android-studio.svg'; import { addToVscode, addToCursor } from '@/lib/api/clientInstall'; type GridAction = 'deep_link' | 'copy_command' | 'copy_config'; @@ -46,6 +49,14 @@ export function ConnectIDEs({ gatewayUrl, gatewayRunning }: ConnectIDEsProps) { action: 'deep_link', handler: () => addToCursor(gatewayUrl), }, + { + id: 'windsurf', + name: 'Windsurf', + label: 'Windsurf', + icon: windsurfIcon, + action: 'copy_config', + handler: `"mcpmux": {\n "type": "http",\n "url": "${mcpUrl}"\n}`, + }, { id: 'claude-code', name: 'Claude Code', @@ -54,6 +65,22 @@ export function ConnectIDEs({ gatewayUrl, gatewayRunning }: ConnectIDEsProps) { action: 'copy_command', handler: `claude mcp add --transport http --scope user mcpmux ${mcpUrl}`, }, + { + id: 'jetbrains', + name: 'JetBrains IDEs', + label: 'JetBrains', + icon: jetbrainsIcon, + action: 'copy_config', + handler: `"mcpmux": {\n "type": "http",\n "url": "${mcpUrl}"\n}`, + }, + { + id: 'android-studio', + name: 'Android Studio', + label: 'Android', + icon: androidStudioIcon, + action: 'copy_config', + handler: `"mcpmux": {\n "type": "http",\n "url": "${mcpUrl}"\n}`, + }, { id: 'copy-config', name: 'JSON Config', diff --git a/apps/desktop/src/components/OAuthConsentModal.tsx b/apps/desktop/src/components/OAuthConsentModal.tsx index 0a022187..79d9d8c9 100644 --- a/apps/desktop/src/components/OAuthConsentModal.tsx +++ b/apps/desktop/src/components/OAuthConsentModal.tsx @@ -22,6 +22,8 @@ import cursorIcon from '@/assets/client-icons/cursor.svg'; import vscodeIcon from '@/assets/client-icons/vscode.png'; import claudeIcon from '@/assets/client-icons/claude.svg'; import windsurfIcon from '@/assets/client-icons/windsurf.svg'; +import jetbrainsIcon from '@/assets/client-icons/jetbrains.svg'; +import androidStudioIcon from '@/assets/client-icons/android-studio.svg'; /** Bundled icon assets for known clients */ const CLIENT_ICON_ASSETS: Record = { @@ -29,6 +31,8 @@ const CLIENT_ICON_ASSETS: Record = { vscode: vscodeIcon, claude: claudeIcon, windsurf: windsurfIcon, + jetbrains: jetbrainsIcon, + 'android-studio': androidStudioIcon, }; /** Look up a bundled logo for a known client by name */ diff --git a/apps/desktop/src/features/clients/ClientsPage.tsx b/apps/desktop/src/features/clients/ClientsPage.tsx index 475d5770..7e40421c 100644 --- a/apps/desktop/src/features/clients/ClientsPage.tsx +++ b/apps/desktop/src/features/clients/ClientsPage.tsx @@ -4,6 +4,8 @@ import cursorIcon from '@/assets/client-icons/cursor.svg'; import vscodeIcon from '@/assets/client-icons/vscode.png'; import claudeIcon from '@/assets/client-icons/claude.svg'; import windsurfIcon from '@/assets/client-icons/windsurf.svg'; +import jetbrainsIcon from '@/assets/client-icons/jetbrains.svg'; +import androidStudioIcon from '@/assets/client-icons/android-studio.svg'; import { resolveKnownClientKey } from '@/lib/clientIcons'; import { Laptop, @@ -87,6 +89,8 @@ const CLIENT_ICON_ASSETS: Record = { vscode: vscodeIcon, claude: claudeIcon, windsurf: windsurfIcon, + jetbrains: jetbrainsIcon, + 'android-studio': androidStudioIcon, }; // Client icon component — uses bundled icon for known clients, falls back to logo_uri, then emoji diff --git a/apps/desktop/src/lib/clientIcons.ts b/apps/desktop/src/lib/clientIcons.ts index 1e0f77bd..c49c45b0 100644 --- a/apps/desktop/src/lib/clientIcons.ts +++ b/apps/desktop/src/lib/clientIcons.ts @@ -5,11 +5,21 @@ */ const KNOWN_CLIENT_PATTERNS: { pattern: string; iconKey: string }[] = [ { pattern: 'visual studio code', iconKey: 'vscode' }, + { pattern: 'android studio', iconKey: 'android-studio' }, { pattern: 'claude desktop', iconKey: 'claude' }, { pattern: 'claude code', iconKey: 'claude' }, { pattern: 'vs code', iconKey: 'vscode' }, { pattern: 'windsurf', iconKey: 'windsurf' }, { pattern: 'codeium', iconKey: 'windsurf' }, + { pattern: 'intellij', iconKey: 'jetbrains' }, + { pattern: 'webstorm', iconKey: 'jetbrains' }, + { pattern: 'pycharm', iconKey: 'jetbrains' }, + { pattern: 'phpstorm', iconKey: 'jetbrains' }, + { pattern: 'rustrover', iconKey: 'jetbrains' }, + { pattern: 'goland', iconKey: 'jetbrains' }, + { pattern: 'rider', iconKey: 'jetbrains' }, + { pattern: 'clion', iconKey: 'jetbrains' }, + { pattern: 'jetbrains', iconKey: 'jetbrains' }, { pattern: 'cursor', iconKey: 'cursor' }, { pattern: 'vscode', iconKey: 'vscode' }, { pattern: 'claude', iconKey: 'claude' }, From c8c901e951d23ae28e5a8d6d09b6b766ed0d9271 Mon Sep 17 00:00:00 2001 From: Mohammod Al Amin Ashik Date: Tue, 3 Mar 2026 22:50:43 +0800 Subject: [PATCH 2/2] fix: use correct MCP config format per client - Windsurf: use `serverUrl` key (per Windsurf docs) - JetBrains: use `url` key (per JetBrains AI Assistant docs) - Android Studio: use `httpUrl` key (per Android Studio docs) Signed-off-by: Mohammod Al Amin Ashik --- apps/desktop/src/components/ConnectIDEs.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/desktop/src/components/ConnectIDEs.tsx b/apps/desktop/src/components/ConnectIDEs.tsx index 46783269..28b83685 100644 --- a/apps/desktop/src/components/ConnectIDEs.tsx +++ b/apps/desktop/src/components/ConnectIDEs.tsx @@ -55,7 +55,7 @@ export function ConnectIDEs({ gatewayUrl, gatewayRunning }: ConnectIDEsProps) { label: 'Windsurf', icon: windsurfIcon, action: 'copy_config', - handler: `"mcpmux": {\n "type": "http",\n "url": "${mcpUrl}"\n}`, + handler: `"mcpmux": {\n "serverUrl": "${mcpUrl}"\n}`, }, { id: 'claude-code', @@ -71,7 +71,7 @@ export function ConnectIDEs({ gatewayUrl, gatewayRunning }: ConnectIDEsProps) { label: 'JetBrains', icon: jetbrainsIcon, action: 'copy_config', - handler: `"mcpmux": {\n "type": "http",\n "url": "${mcpUrl}"\n}`, + handler: `"mcpmux": {\n "url": "${mcpUrl}"\n}`, }, { id: 'android-studio', @@ -79,7 +79,7 @@ export function ConnectIDEs({ gatewayUrl, gatewayRunning }: ConnectIDEsProps) { label: 'Android', icon: androidStudioIcon, action: 'copy_config', - handler: `"mcpmux": {\n "type": "http",\n "url": "${mcpUrl}"\n}`, + handler: `"mcpmux": {\n "httpUrl": "${mcpUrl}"\n}`, }, { id: 'copy-config',