GeminiDesktop
Guides

GeminiDesktop MCP Server 2026: Plug Gemini's Native Tools Into Claude Code and Cursor

Published · By GeminiDesktop Team
Add GeminiDesktop as a preferred source on Google See more GeminiDesktop in Top Stories and AI answers.

Bottom line: GeminiDesktop exposes the nine most useful Gemini-native capabilities (chat / generate_image / generate_video / generate_music / tts / embed / generate_audio_overview / rag_index / rag_query) as a single stdio MCP server. If you already have GeminiDesktop.app installed, you already have the CLI and the MCP server — no npm publish, no pip install, no glue code. A single claude mcp add line lets Claude Code call Gemini’s Nano Banana 2 for cover art or query your local RAG while it writes code.

One-liner: One Rust binary, three entry modes (GUI / CLI / MCP). Rust + rmcp + stdio is the lightest possible stack. BYOK via env var first, Tauri store as fallback. Claude Code and Cursor get the actual native Gemini tools — not another REST wrapper.

The MCP Ecosystem in 2026: Who Ships a Server, Who Doesn’t

Since Anthropic open-sourced MCP (Model Context Protocol) in late 2024, the ecosystem has settled into three tiers:

  • Official reference servers: Anthropic maintains filesystem / github / slack / puppeteer in modelcontextprotocol/servers. High quality, narrow coverage.
  • Community wrappers: Individual developers wrap REST APIs with @modelcontextprotocol/sdk. Quality varies; Gemini, Claude, and OpenAI still don’t ship first-party MCP servers.
  • Product-native servers: Linear, Sentry, and a few others embed MCP directly into their apps — install once, it’s already there.

GeminiDesktop follows tier three. Install the app and you automatically get /Applications/GeminiDesktop.app/Contents/MacOS/GeminiDesktop mcp as an entry point. That’s the lowest-friction path for Claude Code and Cursor users.

Why Rust + rmcp + stdio

Three realistic stacks for building an MCP server:

StackCold startBinary sizeReuseBest for
Node + @modelcontextprotocol/sdk300-800ms (incl. Node boot)Separate ~50 MBStandalonePrototypes, standalone servers
Python + mcp500-1000msSeparate deployStandaloneData-science adjacent
Rust + rmcp crate + stdio< 50msReuses GUI binary, 0 extraShared with GUI and CLIProduct-native MCP

GeminiDesktop is already a Tauri 2.x + Rust desktop app. Pulling in the rmcp crate (the official Rust SDK) meant adding one mcp subcommand branch in main.rs. Every Gemini API call is shared with the GUI — fix a bug once, all three entry modes update together.

stdio transport is a natural fit: Claude Code, Cursor, Continue all spawn subprocesses and talk over stdio by default. No HTTP port, no OAuth, nothing to break.

Single Binary: GeminiDesktop.app Already Ships It

The usual approach is “download the GUI and then npm install @something/mcp-server.” Users install twice, upgrade twice, configure the API key twice. GeminiDesktop’s approach:

# After installing GeminiDesktop.app, the same binary gives you three entry modes:
/Applications/GeminiDesktop.app/Contents/MacOS/GeminiDesktop           # GUI mode
/Applications/GeminiDesktop.app/Contents/MacOS/GeminiDesktop chat      # CLI mode
/Applications/GeminiDesktop.app/Contents/MacOS/GeminiDesktop mcp       # MCP mode

The three modes share:

  • Config: one Tauri store (~/Library/Application Support/app.geminidesktop.desktop/)
  • API key: set once in the GUI, CLI and MCP both pick it up
  • Caches: Gemini model list, embedding cache, RAG indexes — all shared
  • Upgrades: Tauri’s updater upgrades the GUI, CLI and MCP come along

Install once, everything works. No npm publish, no version skew.

The Nine Tools

ToolWhat it doesTypical use
chatPlain Gemini chatSecond-opinion code review from Claude
generate_imageImagen / Nano Banana 2Cover art while writing a blog post
generate_videoVeo 3 text-to-videoProduct demo clips, hero video
generate_musicLyria soundtrack generationPodcast intros, video scoring
ttsGemini TTS (multi-voice, multilingual)Article-to-podcast, voice demos
embedgemini-embedding-001 (768-dim)Client-side RAG preprocessing
generate_audio_overviewNotebookLM-style two-host podcastTurn a long doc into a 10-min commute podcast
rag_indexIndex files/folders into local sqlite-vecIndex a codebase Claude is editing
rag_queryQuery local sqlite-vec, top-k”Find how I implemented X in my notes”

The first seven are Gemini cloud capabilities. The last two are GeminiDesktop-exclusive local RAG — no upload, everything goes into a local SQLite file. Engineering details in Local sqlite-vec RAG: Indexing 500K Words of Notes Into a 200 MB File.

Claude Code: One Line to Install

Claude Code 0.6+ supports claude mcp add for registering servers from the command line:

# macOS
claude mcp add geminidesktop -- /Applications/GeminiDesktop.app/Contents/MacOS/GeminiDesktop mcp

# Windows
claude mcp add geminidesktop -- "C:\Program Files\GeminiDesktop\GeminiDesktop.exe" mcp

# Verify
claude mcp list
# Expect: geminidesktop (stdio) - 9 tools available

Then in any Claude Code conversation:

> Give me a cover image for the README I just wrote, 1600x900 landscape.

Claude picks generate_image, calls Nano Banana 2 behind the scenes, saves the file to your project, and posts the path back. All without leaving the terminal.

Cursor settings.json

Cursor 0.46+ supports MCP natively. Add this block to ~/.cursor/settings.json:

{
  "mcp": {
    "servers": {
      "geminidesktop": {
        "command": "/Applications/GeminiDesktop.app/Contents/MacOS/GeminiDesktop",
        "args": ["mcp"],
        "env": {}
      }
    }
  }
}

Differences vs Claude Code:

  • Claude Code: CLI-driven (claude mcp add), stored in ~/.claude/mcp.json
  • Cursor: manual JSON edit, no management CLI yet
  • Both: stdio transport, same binary, shared API key

In Cursor Composer, just say “generate an image of…” in the Cmd+I chat — Cursor picks the right MCP tool automatically.

BYOK Priority: Env Var > Tauri Store

GeminiDesktop resolves API keys in this order:

  1. GEMINI_API_KEY env var (highest) — great for CI, one-off overrides, per-project keys
  2. Tauri store (~/Library/Application Support/app.geminidesktop.desktop/config.json) — the persisted key from the GUI
  3. Error — no fallback to a Google-hosted shared key, on purpose (prevents quota leaks)

Why this order:

  • Different project wants a different key? Just export GEMINI_API_KEY=xxx before launching Claude Code / Cursor
  • CI/team shared runners: never write keys into the Tauri store (which can get rsynced or accidentally committed); inject via env
  • Individual users: set the key once in the GUI, CLI and MCP both inherit it

Workflow Example: Claude Code + Gemini Cover Art + Local RAG

A real blog-writing loop:

[you]    I'm drafting "How to Build an AI Chat With React Server Components."
         First, find my previous RSC-related notes in ~/notes.

[claude] Calling geminidesktop.rag_query...
         Top 3 matches:
         1. 2025-11-20-rsc-streaming.md (score 0.89)
         2. 2025-09-03-ai-chat-patterns.md (score 0.84)
         3. 2026-02-14-use-server-actions.md (score 0.78)
         
         Based on these notes, here's an outline...

[you]    Good, generate a cover image for each H2 section.

[claude] Calling geminidesktop.generate_image x 5...
         Saved 5 images to ./images/.

Claude gets both local context (RAG) and multimodal generation (Gemini), all via a single binary. No extra browser tab, no key juggling, no glue code.

More engineering notes at geminidesktop.app and in How to Migrate Claude Code Skills Into GeminiDesktop.

FAQ

Q1: How is this different from calling Gemini’s REST API directly?

A: REST means you write fetch, handle auth, track rate limits. MCP makes these “tools” that Claude Code / Cursor picks automatically based on the conversation. No code, no glue layer.

Q2: Can I use this MCP server without installing GeminiDesktop?

A: Not today. The design point is “GUI + CLI + MCP share one binary” so config and caches are reused. If you really want headless-only, grab the headless build from GitHub releases — but you lose auto-update.

Q3: Windows / Linux support?

A: macOS and Windows are first-class. Linux has a community-maintained AppImage with the same MCP entry point.

Get Started

View all 8 articles in Power-User & Developer Setups →