check_system
Detect GPU hardware and verify Vulkan acceleration. Reports GPU name, VRAM, Vulkan availability, and recommends best Whisper model for your system.
Instructions
Detect GPU hardware and verify Vulkan acceleration is available. Reports GPU name, VRAM, whether the Vulkan binary is installed, and recommends the best Whisper model for your hardware. Run this if you want to confirm GPU acceleration is working or diagnose why it isn't.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/index.ts:1071-1079 (registration)Tool registration for 'check_system' in the ListToolsRequestSchema handler. Defines the tool name, description ('Detect GPU hardware and verify Vulkan acceleration is available...'), and inputSchema (empty object).
{ name: "check_system", description: "Detect GPU hardware and verify Vulkan acceleration is available. " + "Reports GPU name, VRAM, whether the Vulkan binary is installed, " + "and recommends the best Whisper model for your hardware. " + "Run this if you want to confirm GPU acceleration is working or diagnose why it isn't.", inputSchema: { type: "object", properties: {} }, }, - src/index.ts:1262-1297 (handler)Handler implementation for the 'check_system' tool. Detects GPU hardware via wmic (detectGpus), checks for Vulkan DLL (hasVulkanDll), formats GPU info including VRAM and recommended model, then returns a formatted system check report.
// check_system // ------------------------------------------------------------------------- if (name === "check_system") { const vulkan = hasVulkanDll(); const gpus = await detectGpus(); let gpuLines = ""; if (gpus.length === 0) { gpuLines = "⚠️ No GPU detected via wmic — this may indicate a driver issue.\n"; } else { for (const gpu of gpus) { const vramStr = formatVram(gpu.vramBytes); gpuLines += `🖥️ GPU: ${gpu.name}\n`; gpuLines += `💾 VRAM: ${vramStr} (reported by Windows — may be half of actual on AMD cards)\n`; if (gpu.vramBytes > 0) { gpuLines += `📦 Recommended model: ${recommendedModel(gpu.vramBytes)}\n`; } gpuLines += "\n"; } } const vulkanLine = vulkan ? `✅ Vulkan binary: ggml-vulkan.dll found — GPU acceleration is active` : `❌ Vulkan binary: ggml-vulkan.dll NOT found — whisper is running CPU-only\n\n` + ` To enable GPU acceleration:\n` + ` Download whisper-vulkan-win-x64.zip from:\n` + ` https://github.com/eviscerations/whisper-windows-mcp/releases\n` + ` Extract to: ${dirname(WHISPER_CLI_PATH)}`; return { content: [{ type: "text", text: `System check\n${"─".repeat(40)}\n\n${gpuLines}${vulkanLine}`, }], }; } - src/index.ts:504-530 (helper)Helper function detectGpus() — uses wmic to query Win32_VideoController for GPU name and AdapterRAM, returns array of GpuInfo objects.
interface GpuInfo { name: string; vramBytes: number; } async function detectGpus(): Promise<GpuInfo[]> { try { const { stdout } = await execFileAsync( "wmic", ["path", "win32_VideoController", "get", "name,AdapterRAM", "/format:csv"], { windowsHide: true } ); const gpus: GpuInfo[] = []; for (const line of stdout.split(/\r?\n/)) { const trimmed = line.trim(); if (!trimmed || trimmed.startsWith("Node") || trimmed.startsWith(",AdapterRAM")) continue; const parts = trimmed.split(","); if (parts.length < 3) continue; const vramBytes = parseInt(parts[1] ?? "0", 10) || 0; const name = (parts[2] ?? "").trim(); if (name && name !== "Name") gpus.push({ name, vramBytes }); } return gpus; } catch { return []; } } - src/index.ts:532-536 (helper)Helper function formatVram() — formats VRAM bytes into human-readable string (MB or GB).
function formatVram(bytes: number): string { if (!bytes || bytes < 1024 * 1024) return "Unknown"; const gb = bytes / (1024 * 1024 * 1024); return gb >= 1 ? `${gb.toFixed(1)} GB` : `${Math.round(bytes / (1024 * 1024))} MB`; } - src/index.ts:538-544 (helper)Helper function recommendedModel() — recommends a Whisper model based on available VRAM (GB thresholds: >=6GB, >=4GB, >=2GB, or base.en).
function recommendedModel(vramBytes: number): string { const gb = vramBytes / (1024 * 1024 * 1024); if (gb >= 6) return "large-v3-turbo (ggml-large-v3-turbo.bin) — ~6x faster than large-v3, minimal accuracy loss for English"; if (gb >= 4) return "medium.en (ggml-medium.en.bin) — good fit for your VRAM"; if (gb >= 2) return "small.en (ggml-small.en.bin) — safe choice for your VRAM"; return "base.en (ggml-base.en.bin) — recommended for limited VRAM"; }