GeminiDesktop GeminiDesktop
Guides

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

Published · By GeminiDesktop Team

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

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:

Stack Cold start Binary size Reuse Best for
Node + @modelcontextprotocol/sdk 300-800ms (incl. Node boot) Separate ~50 MB Standalone Prototypes, standalone servers
Python + mcp 500-1000ms Separate deploy Standalone Data-science adjacent
Rust + rmcp crate + stdio < 50ms Reuses GUI binary, 0 extra Shared with GUI and CLI Product-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

Tool What it does Typical use
chat Plain Gemini chat Second-opinion code review from Claude
generate_image Imagen / Nano Banana 2 Cover art while writing a blog post
generate_video Veo 3 text-to-video Product demo clips, hero video
generate_music Lyria soundtrack generation Podcast intros, video scoring
tts Gemini TTS (multi-voice, multilingual) Article-to-podcast, voice demos
embed gemini-embedding-001 (768-dim) Client-side RAG preprocessing
generate_audio_overview NotebookLM-style two-host podcast Turn a long doc into a 10-min commute podcast
rag_index Index files/folders into local sqlite-vec Index a codebase Claude is editing
rag_query Query 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