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 @@
+
diff --git a/apps/desktop/src/components/ConnectIDEs.tsx b/apps/desktop/src/components/ConnectIDEs.tsx
index 790f7f79..28b83685 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 "serverUrl": "${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 "url": "${mcpUrl}"\n}`,
+ },
+ {
+ id: 'android-studio',
+ name: 'Android Studio',
+ label: 'Android',
+ icon: androidStudioIcon,
+ action: 'copy_config',
+ handler: `"mcpmux": {\n "httpUrl": "${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 3d158488..094ce065 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,
@@ -85,6 +87,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' },