gemini_info
Check connectivity, get version, or list models, sessions, and extensions for the Gemini CLI diagnostics tool.
Instructions
Gemini CLI diagnostics: check connectivity, get version, list sessions or extensions.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ping: test CLI works, version: CLI version, list_models: available models and aliases, list_sessions: past sessions, list_extensions: available extensions. |
Implementation Reference
- src/index.ts:554-635 (handler)The handler function for the `gemini_info` MCP tool, which implements various diagnostics actions (ping, version, etc.) by executing the Gemini CLI.
server.tool( "gemini_info", "Gemini CLI diagnostics: check connectivity, get version, list sessions or extensions.", { action: z.enum(["ping", "version", "list_models", "list_sessions", "list_extensions"]).describe( "ping: test CLI works, version: CLI version, list_models: available models and aliases, list_sessions: past sessions, list_extensions: available extensions." ), }, async ({ action }) => { try { let result: GeminiResult; switch (action) { case "ping": { // Use --version for lightweight connectivity check (no API call, no tokens) result = await runGeminiRaw({ args: ["--version"], timeoutMs: 10_000 }); const version = stripNoise(result.stdout).trim(); if (result.code === 0 && version) { return { content: [{ type: "text" as const, text: `Gemini CLI OK (v${version})`, }], }; } return { content: [{ type: "text" as const, text: `Gemini CLI error (exit ${result.code}):\n${result.stderr || result.stdout}`, }], isError: true, }; } case "list_models": return { content: [{ type: "text" as const, text: `Available Gemini models:\n${formatModelList()}\n\nDefault: ${DEFAULT_MODEL}\nFree tier: 60 RPM / 1000 req/day`, }], }; case "version": result = await runGeminiRaw({ args: ["--version"], timeoutMs: 10_000 }); return { content: [{ type: "text" as const, text: stripNoise(result.stdout) || result.stderr.trim() || "unknown", }], }; case "list_sessions": result = await runGeminiRaw({ args: ["--list-sessions"], timeoutMs: 10_000 }); return { content: [{ type: "text" as const, text: truncate(stripNoise(result.stdout) || "(no sessions)", MAX_RESPONSE_CHARS), }], }; case "list_extensions": result = await runGeminiRaw({ args: ["-l"], timeoutMs: 10_000 }); return { content: [{ type: "text" as const, text: stripNoise(result.stdout) || "(no extensions)", }], }; default: { const _exhaustive: never = action; return { content: [{ type: "text" as const, text: `Unknown action: ${_exhaustive}` }], isError: true, }; } } } catch (err: unknown) { const message = err instanceof Error ? err.message : String(err); return { content: [{ type: "text" as const, text: `Error: ${message}` }], isError: true,