mcpIconAssets.ts55 lines · main
1/// <reference path="../../types/assets.d.ts" />
2
3import antigravityIcon from '../assets/antigravity-icon.svg'
4import claudeIcon from '../assets/claude-icon.svg'
5import copilotDarkIcon from '../assets/copilot-icon-dark.svg'
6import copilotIcon from '../assets/copilot-icon.svg'
7import cursorIcon from '../assets/cursor-icon.svg'
8import factoryDarkIcon from '../assets/factory-icon-dark.svg'
9import factoryIcon from '../assets/factory-icon.svg'
10import geminiCliIcon from '../assets/gemini-cli-icon.svg'
11import gooseDarkIcon from '../assets/goose-icon-dark.svg'
12import gooseIcon from '../assets/goose-icon.svg'
13import kiroIcon from '../assets/kiro-icon.svg'
14import openaiDarkIcon from '../assets/openai-icon-dark.svg'
15import openaiIcon from '../assets/openai-icon.svg'
16import opencodeDarkIcon from '../assets/opencode-icon-dark.svg'
17import opencodeIcon from '../assets/opencode-icon.svg'
18import vscodeIcon from '../assets/vscode-icon.svg'
19import windsurfDarkIcon from '../assets/windsurf-icon-dark.svg'
20import windsurfIcon from '../assets/windsurf-icon.svg'
21
22type ImportedAssetModule = string | { src: string }
23
24type McpClientIconAsset = {
25 light: ImportedAssetModule
26 dark: ImportedAssetModule
27}
28
29const MCP_CLIENT_ICON_ASSETS = {
30 antigravity: { light: antigravityIcon, dark: antigravityIcon },
31 claude: { light: claudeIcon, dark: claudeIcon },
32 copilot: { light: copilotIcon, dark: copilotDarkIcon },
33 cursor: { light: cursorIcon, dark: cursorIcon },
34 factory: { light: factoryIcon, dark: factoryDarkIcon },
35 'gemini-cli': { light: geminiCliIcon, dark: geminiCliIcon },
36 goose: { light: gooseIcon, dark: gooseDarkIcon },
37 kiro: { light: kiroIcon, dark: kiroIcon },
38 openai: { light: openaiIcon, dark: openaiDarkIcon },
39 opencode: { light: opencodeIcon, dark: opencodeDarkIcon },
40 vscode: { light: vscodeIcon, dark: vscodeIcon },
41 windsurf: { light: windsurfIcon, dark: windsurfDarkIcon },
42} satisfies Record<string, McpClientIconAsset>
43
44export type McpClientIconName = keyof typeof MCP_CLIENT_ICON_ASSETS
45
46function normalizeAssetUrl(asset: ImportedAssetModule): string {
47 return typeof asset === 'string' ? asset : asset.src
48}
49
50export function getMcpClientIconAssetUrl(icon: string, useDarkVariant: boolean): string {
51 const iconAssets = MCP_CLIENT_ICON_ASSETS[icon.toLowerCase() as McpClientIconName]
52 if (!iconAssets) return ''
53
54 return normalizeAssetUrl(useDarkVariant ? iconAssets.dark : iconAssets.light)
55}