Gemini Image

io.github.JimothySnicket由 GitHub 帳號 JimothySnicket 發布v0.6.2更新於 Oct 24, 2026

Google Gemini image generation, editing, and local processing via MCP

已驗證STDIO僅桌面媒體與設計AI 與機器學習

概覽

AI 產生的概覽

一個本機 MCP 伺服器,讓助理用 Google Gemini 模型生成與編輯圖像,並在本機處理圖像,結果儲存到磁碟。

可以做什麼
依文字提示、參考圖像或影片生成圖像,可設定模型、長寬比、解析度、隨機種子與思考深度,並可在一次呼叫中輸出透明 PNG 去背結果。透過工作階段 ID 進行多輪編輯,並可用 Google 搜尋結果作為生成依據。不需呼叫 API 即可在本機處理圖像:裁切、縮放、去除邊框、以色度鍵或閾值去除背景,以及在 PNG、JPEG 與 WebP 之間轉換。以有意義的檔名與子資料夾儲存輸出,並記錄每次生成的提示、參數與預估費用。
適用情境
適合讓助理製作或修改圖像,例如橫幅、產品圖、縮圖或透明素材,也適合快速在本機裁切、縮放與轉換格式,且圖像資料不經過模型上下文。
執行需求
以本機 stdio 程序執行,通常透過 npx 與 Node.js 啟動。需要來自 Google AI Studio 的 GEMINI_API_KEY 環境變數,並在該金鑰所屬的 Google Cloud 專案啟用按量計費,因為圖像生成沒有免費額度。生成需要連線至 Google API 的網路;本機處理可離線使用。選用設定包括 OUTPUT_DIR、DEFAULT_MODEL 與速率限制。
安裝前請注意
圖像生成按張計費,視模型與解析度約為每張 0.03 至 0.24 美元,免費額度金鑰會因配額錯誤而失敗。GEMINI_API_KEY 是可計費憑證,不要提交到版本控制或寫入設定檔。伺服器會將圖像與 generations.jsonl 記錄寫入磁碟,影片輸入會上傳到 Google 的 Files API。選用的 AI 去背引擎在首次使用時會自動安裝較大的套件,除非將其停用。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Gemini Image,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

gemini-image-mcp

A simple, focused MCP server for Google Gemini's native image generation — the "Nano Banana" models. Generate, edit, and locally process images from Claude Code, Claude Desktop, or any stdio-based MCP client. Two tools, no bloat.

Built for agents: a single call returns a saved image — or, with one-call background removal, a ready-to-use transparent PNG — without streaming image data through your agent's context. Uses Gemini's generateContent API (not the deprecated Imagen API).

Install

bash
npm install -g @jimothy-snicket/gemini-image-mcp

Or use directly with npx:

bash
npx -y @jimothy-snicket/gemini-image-mcp

Claude Code (one command):

bash
claude mcp add gemini-image -- npx -y @jimothy-snicket/gemini-image-mcp

Requires a GEMINI_API_KEY environment variable — see Setup for details.

Set up a config file (optional):

bash
npx @jimothy-snicket/gemini-image-mcp --init

Creates ~/.gemini-image-mcp.json with commented defaults. For project-specific overrides:

bash
npx @jimothy-snicket/gemini-image-mcp --init --local

Features

generate_image — AI-powered

  • Text-to-image — describe what you want, get an image
  • Image editing — provide reference images and an editing instruction
  • Video-to-image — the model watches a video and synthesizes a new image from what it understood: YouTube thumbnails, posters from footage, summary infographics, style-transferred stills. See Advanced Features
  • Thinking depth control — thinkingLevel: "HIGH" for renders that depend on reasoning (infographics, diagrams, dense typography); cheap MINIMAL default otherwise
  • Transparent assets in one call — removeBackground returns a clean transparent PNG: a local AI matte (works on any subject; optional add-on, see below) by default, or built-in green-screen / white-threshold keying. No extra API cost
  • Multi-turn edits — pass a sessionId to refine an image across calls, with prior turns kept as context
  • Multi-image input — reference images for editing and character/style consistency (per-model limits; the API enforces)
  • Cost reporting — every response includes token counts, estimated USD cost, and session totals
  • Rate limiting — configurable per-hour caps on requests and cost to prevent runaway agents
  • Auto model discovery — detects available image models from your API key at startup
  • Seed — reproducible generation with integer seeds
  • Search grounding — ground renders in live Google Search results; "web+image" also pulls image-search results for mood boards and trend references, with sources returned for attribution. See Advanced Features

process_image — Local (free, no API calls)

  • Crop — pixel-exact, aspect ratio (center), or focal point (attention/entropy)
  • Resize — to width, height, or both (maintains aspect ratio)
  • Background removal — threshold-based (white backgrounds) or chroma key (green screen, any solid colour)
  • Chroma key pipeline — HSV keying with smoothstep feather, spill suppression, and edge anti-aliasing
  • Trim — auto-remove whitespace borders
  • Format conversion — PNG, JPEG, WebP with quality control

Both tools

  • Output organization — meaningful filenames with auto-versioning, subfolders
  • Generation manifest — generations.jsonl logs every generation with prompt, params, cost
  • Full aspect ratio support — 1:1, 16:9, 9:16, 3:2, 2:3, 4:3, 3:4, 21:9
  • Resolution control — 1K, 2K, 4K

Setup

1. Get a Gemini API Key

Go to Google AI Studio and create an API key.

Billing required: image generation has no free tier — free-tier keys get 429 RESOURCE_EXHAUSTED (quota limit 0) on every image model. Enable pay-as-you-go billing on the key's Google Cloud project (usage & billing). Images cost ~$0.03–$0.24 each depending on model and resolution; the cheapest model (gemini-3.1-flash-lite-image, the default) is ~$0.034 per image.

2. Set the API Key

The server reads your key from the GEMINI_API_KEY environment variable. Set it once so it's available in every session:

Windows (PowerShell — run as admin):

powershell
[System.Environment]::SetEnvironmentVariable('GEMINI_API_KEY', 'your-key-here', 'User')

Then restart your terminal.

macOS / Linux:

bash
echo 'export GEMINI_API_KEY="your-key-here"' >> ~/.bashrcsource ~/.bashrc

(Use ~/.zshrc if you're on zsh.)

Verify it's set:

bash
echo $GEMINI_API_KEY

3. Connect to Your MCP Client

Pick the method that matches how you use MCP:

Claude Code (one-liner)
bash
claude mcp add gemini-image -- npx -y @jimothy-snicket/gemini-image-mcp

Claude Code will pick up GEMINI_API_KEY from your environment automatically.

Claude Code (manual .mcp.json)

Add to .mcp.json in your project root or ~/.claude/.mcp.json for global access:

json
{  "mcpServers": {    "gemini-image": {      "command": "npx",      "args": ["-y", "@jimothy-snicket/gemini-image-mcp"],      "env": {        "GEMINI_API_KEY": "${GEMINI_API_KEY}"      }    }  }}

The ${GEMINI_API_KEY} syntax reads the value from your shell environment — your actual key never gets written into config files.

Claude Desktop

Edit claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
json
{  "mcpServers": {    "gemini-image": {      "command": "npx",      "args": ["-y", "@jimothy-snicket/gemini-image-mcp"],      "env": {        "GEMINI_API_KEY": "${GEMINI_API_KEY}"      }    }  }}

Restart Claude Desktop after saving.

Other MCP Clients

Any client that supports stdio transport works. Point it at npx -y @jimothy-snicket/gemini-image-mcp and pass GEMINI_API_KEY in the environment.

Security Notes

  • Never commit your API key to version control. The ${GEMINI_API_KEY} syntax in config files references your environment — the key itself stays in your shell profile.
  • If your .mcp.json is in a project repo, add it to .gitignore or use the global config at ~/.claude/.mcp.json instead.
  • For extra security, you can use a wrapper script that reads the key from your OS keychain (macOS Keychain, Windows Credential Manager) and launches the server with it injected.

Configuration

All optional. The only required setup is GEMINI_API_KEY (covered above).

VariableDefaultDescription
OUTPUT_DIR~/gemini-imagesDefault directory for saved images
DEFAULT_MODELgemini-3.1-flash-lite-imageDefault Gemini model
LOG_LEVELinfodebug, info, or error
REQUEST_TIMEOUT_MS60000API request timeout in milliseconds
MAX_REQUESTS_PER_HOUR0 (unlimited)Max image generations per rolling hour
MAX_COST_PER_HOUR0 (unlimited)Max estimated cost (USD) per rolling hour
SESSION_TIMEOUT_MS1800000 (30min)Multi-turn session expiry
GEMINI_IMAGE_AUTO_INSTALL1 (on)Auto-install the AI matte engine on first removeBackground: { mode: "auto" } use. Set 0 to disable (then auto falls back to chroma/threshold with instructions)

Set these the same way as GEMINI_API_KEY, or pass them in the env block of your MCP config.

Rate limiting is recommended when agents have access to this tool. An agent in a loop can generate images quickly — set MAX_REQUESTS_PER_HOUR=20 and MAX_COST_PER_HOUR=5 as sensible defaults.

Config File

Instead of environment variables, you can use a JSON config file. Create one with:

bash
npx @jimothy-snicket/gemini-image-mcp --init

This creates ~/.gemini-image-mcp.json with all defaults and inline documentation. Edit it to set your preferences.

Priority: env vars > local config (.gemini-image-mcp.json in CWD) > global config (~/.gemini-image-mcp.json) > defaults.

You can also set per-tool defaults so every request uses your preferred settings:

json
{  "defaultModel": "gemini-3.1-flash-image",  "defaults": {    "generate": {      "aspectRatio": "16:9",      "resolution": "2K"    },    "process": {      "removeBackground": { "color": "#00FF00" },      "trim": true    }  }}

Per-request parameters always override config defaults.

Custom pricing. Cost estimates come from a built-in per-token rate table (there's no pricing API to fetch live). If you use a model the table doesn't know yet — or Google changes a rate before this package updates — add pricingOverrides so cost reporting stays accurate without waiting for a release:

json
{  "pricingOverrides": {    "some-new-image-model": {      "inputPerMillion": 0.5,      "textOutputPerMillion": 60,      "imageOutputPerMillion": 60,      "thinkingPerMillion": 60    }  }}

Models with no entry (built-in or override) still generate — their cost is reported as unknown rather than guessed.

Tool: generate_image

Parameters

ParameterRequiredDescription
promptYesText description or editing instruction
imagesNoArray of file paths to input/reference images
modelNoGemini model ID
aspectRatioNo1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, plus 1:4, 4:1, 1:8, 8:1 (gemini-3.1-flash-image). Validated by the API.
resolutionNo512 (gemini-3.1-flash-image only), 1K, 2K, 4K
outputDirNoOverride output directory for this request
filenameNoBase name for saved file (e.g. hero-banner). Auto-versioned if duplicate.
subfolderNoSubfolder within output directory (e.g. landing-page)
sessionIdNoContinue a multi-turn editing session from a previous response
seedNoInteger seed for reproducible generation
groundingNo"web" = Google Search grounding; "web+image" adds image-search results (gemini-3.1-flash-image only). See Advanced Features
useSearchGroundingNoLegacy alias for grounding: "web"
thinkingLevelNo"MINIMAL" (default) or "HIGH" — thinking depth on the gemini-3.1-flash family. See Advanced Features
videosNoArray of file paths to input videos for video-to-image (gemini-3.1-flash family). See Advanced Features
removeBackgroundNoReturn a transparent PNG cutout. { "mode": "auto" } = local AI matte (any subject; default); { "mode": "chroma" } = green screen; { "mode": "threshold" } = white removal (line art). No extra API cost

Example Response

json
{  "imagePath": "/home/user/gemini-images/hero-banner.png",  "mimeType": "image/png",  "model": "gemini-3.1-flash-lite-image",  "sessionId": "session-1711929600000-a1b2c3",  "sessionTurn": 1,  "usage": {    "promptTokens": 5,    "outputTokens": 1295,    "imageTokens": 1290,    "thinkingTokens": 412,    "totalTokens": 1712,    "estimatedCost": "$0.0390",    "pricingVerifiedDate": "2026-09-16"  },  "session": {    "generationsThisSession": 3,    "totalCostThisSession": "$0.1161",    "generationsThisHour": 5,    "limit": {      "maxPerHour": 20,      "maxCostPerHour": 5,      "remainingThisHour": 15    }  }}

Usage Examples

Text-to-image:

"Generate a hero image for a SaaS landing page, modern gradient style, 16:9"

Image editing:

"Take this screenshot and redesign the header with a dark theme" (with image paths)

Iterative editing (multi-turn):

Generate an image, then call again with the returned sessionId and a refinement like "make it more minimal" — the prior image stays in context.

Organized output:

"Generate a hero banner" with filename: "hero", subfolder: "landing-page" → saves to ~/gemini-images/landing-page/hero.png

High quality:

"A photorealistic product shot of headphones on marble, 4K" (using gemini-3-pro-image)

Transparent asset (one call):

"A glossy red sneaker, product shot" with removeBackground: { "mode": "auto" } → a ready-to-place transparent PNG. The local AI matte works on any subject — no green screen needed.

Tool: process_image

Local image processing via sharp. Free, fast, no API calls.

Parameters

ParameterRequiredDescription
imagePathYesPath to the image file to process
cropNoCrop by pixel dimensions, aspect ratio, or focal point strategy
resizeNoResize to width/height (maintains aspect ratio)
removeBackgroundNoRemove background: { "mode": "auto" } (AI matte, any subject), { "mode": "chroma" } (green screen), or { "mode": "threshold" } (white). Defaults to chroma if color set, else threshold
trimNoAuto-remove whitespace/transparent borders
formatNoConvert to png, jpeg, or webp
qualityNoOutput quality for JPEG/WebP (1-100)
filenameNoBase name for saved file. Auto-versioned if duplicate.
subfolderNoSubfolder within output directory
outputDirNoOverride output directory

Crop Options

json
// Pixel-exact{"width": 500, "height": 300, "left": 100, "top": 50}
// Aspect ratio (center crop){"aspectRatio": "16:9"}
// Focal point — shifts crop to the most interesting region{"aspectRatio": "16:9", "strategy": "attention"}
// Detail-based — shifts crop to the most detailed region{"aspectRatio": "16:9", "strategy": "entropy"}

Background Removal Options

json
// AI semantic matte — best quality, works on ANY subject{"mode": "auto"}
// White/light background (threshold){"mode": "threshold", "threshold": 240}
// Green screen (chroma key){"mode": "chroma", "color": "#00FF00"}
// Any solid colour{"mode": "chroma", "color": "#0000FF", "tolerance": 60}

mode: "auto" runs a local BiRefNet matte that isolates the subject semantically — so it handles hair, glass, and green/yellow subjects that chroma key can't. The matte engine isn't bundled (keeps the base install ~65 MB). On your first auto call the server auto-installs it (@huggingface/transformers, ~340 MB) plus the fp16 model (~109 MB) — a one-time pause of a minute or two, then it runs locally with no extra API cost. Set GEMINI_IMAGE_AUTO_INSTALL=0 to disable auto-install (then auto falls back to returning the image with instructions to install it manually). chroma and threshold need nothing extra.

Chroma key (mode: "chroma") uses HSV keying with smoothstep feathering, spill suppression, and 5-pass edge anti-aliasing (default tolerance 80). Use #00FF00 for AI-generated green screens — it works better than matching the exact shade Gemini produces.

Note: Chroma key destroys subjects that share the key colour (green/yellow) and transparent/reflective subjects (glass) — the green parrot vanishes. For those, use mode: "auto" (the AI matte preserves them), or the canvas approach: feed a solid-colour background image to generate_image and let Gemini place the subject with correct lighting. The canvas approach is still best for truly transparent objects like glass, which should transmit the final background rather than be cut out.

Common Pipelines

Subject on a specific background (canvas approach):

generate_image → "Place a [subject] on this background" with images: [solid colour canvas]

One API call. Best for yellow, green, or glass subjects where chroma key struggles.

Transparent asset (one call):

generate_image → "A product photo of <subject>" with removeBackground: {mode: "auto"}

One API call → a transparent PNG. The local AI matte works on any subject. (For truly transparent/reflective objects like glass, the canvas approach above is still best.)

Transparent asset from green screen (zero-dependency):

generate_image → "A product photo on a bright green background"process_image → removeBackground {mode: "chroma"} + trim

Avoids the matte model entirely — best for high-contrast subjects on locked-down/offline machines.

Favicon from a generated logo:

process_image → removeBackground {threshold: 230} + trim + resize {width: 192, height: 192}

Social card from a photo:

process_image → crop {aspectRatio: "16:9", strategy: "attention"} + resize {width: 1200}

WebP conversion for web:

process_image → format: "webp" + quality: 85

Advanced Features

These are opt-in knobs on generate_image. Most requests don't need them — they're documented here rather than in the tool schema to keep agent context small.

Video-to-image (videos)

The model watches your video and synthesizes a new image from what it understood — the subject, mood, colors, and action — rather than copying a frame. If you just want a frame, use ffmpeg; this is for images that require understanding the footage:

  • YouTube thumbnails — "watch my video and make a click-worthy thumbnail" (the headline use case: no scrubbing for a non-blurry frame)
  • Posters and cover art — gameplay footage → key art, a gig recording → gig poster, a product demo → a clean product shot
  • Summary infographics — "diagram the key steps from this tutorial video"
  • Style-transferred stills — a pencil-sketch of a dance video, a comic panel from home footage
json
{  "prompt": "A bold movie poster for this video, dramatic typography",  "videos": ["./clip.mp4"],  "model": "gemini-3.1-flash-image"}
  • Supported on the gemini-3.1-flash family (gemini-3.1-flash-image, gemini-3.1-flash-lite-image); other models reject it.
  • Accepts local files (mp4, mov, webm, avi, mpeg, wmv, flv, 3gpp), max 500MB each, up to 3 per call. Each video is uploaded to Google's Files API, polled until processed, used for the call, then deleted. Video tokens count as input (a 2s clip ≈ 140 tokens).
  • Not combinable with sessionId — sessions are text+image only, and video turns don't create sessions (the upload is deleted after the call, so a stored session would replay a dead reference).
  • Upload + server-side processing happen before the generation call and are bounded by a 120s-per-video processing cap, not by REQUEST_TIMEOUT_MS (which only bounds the generation call itself).
  • You must have the necessary rights to any video you upload.
  • Scope note: this is video input. Video generation is a different model family (Google's Veo, accessed via its own API) and is out of this server's scope.

Thinking depth (thinkingLevel)

All Gemini 3 image models "think" before rendering. The default MINIMAL keeps cost and latency down. Use "HIGH" for renders where quality depends on reasoning: infographics, diagrams, menus, dense typography, multi-step compositions.

json
{ "prompt": "An infographic explaining the water cycle with labeled diagrams", "thinkingLevel": "HIGH" }

Supported on the gemini-3.1-flash family (API validates elsewhere). Can be set as a project default via defaults.generate.thinkingLevel in the config file.

Image-search grounding (grounding: "web+image")

grounding: "web" grounds the render in live Google Search results (weather, stock charts, current events). "web+image" — exclusive to gemini-3.1-flash-image — also pulls in image-search results, useful for mood boards and trend references.

When grounding is used, the response includes a grounding object: source chunks (URI + title, up to 5), searchQueries, and searchEntryPointHtml. Google's Terms of Service require displaying the search suggestions entry point when you show grounded results — pass searchEntryPointHtml through to the user (it is render-ready HTML provided by Google for exactly this purpose).

Not supported on gemini-3.1-flash-lite-image (the API rejects grounding there).

Models

ModelStrengthsResolutionNotes
gemini-3.1-flash-lite-imageCheapest (~$0.034/image), video input1KDefault (Nano Banana 2 Lite). No search grounding; up to 14 reference images but not optimized for multi-image or multi-turn editing — prefer 3.1-flash for those
gemini-3.1-flash-imageSpeed + quality, search grounding (web + image), video input512, 1K, 2K, 4K~$0.07/1K image. Up to 10 object + 4 character + 3 style reference images
gemini-3-pro-imageBest quality, text rendering1K, 2K, 4K~$0.13/1K image. Up to 6 object + 5 character reference images
gemini-2.5-flash-imageLegacy1KShuts down 2026-10-02

The retired -preview IDs (gemini-3-pro-image-preview, gemini-3.1-flash-image-preview) may still appear in your key's model list but were retired 2026-06-25 — use the GA IDs above. The server discovers whichever image models your API key supports at startup and validates each request against that live list, so new models work without an update.

Development

bash
bun installbun run build     # TypeScript -> dist/bun run dev       # Run directly with Bun

License

MIT

來源:README.md,提交 866189f

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

2
  1. v0.6.2最新Sep 16, 2026
  2. v0.5.0Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分