npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

gemini-image-studio-mcp

v1.0.2

Published

MCP server for AI image generation and editing with Google Gemini. Create web assets, ad creatives, and brand visuals with structured JSON editing for precise control. Powered by Nano Banana.

Readme

gemini-image-studio-mcp

MCP server for AI image generation and editing with Google Gemini. Create web assets, ad creatives, and brand visuals — with structured JSON editing for precise, repeatable control.

npm version License: MIT

What Makes This Different

Most Gemini image MCP servers are basic text-to-image wrappers. This one adds a structured editing pipeline:

  1. Generate an image from text or JSON prompts
  2. Decompose it into a structured JSON blueprint (every visual component mapped)
  3. Edit by changing specific fields — subject[0].hair.color: "platinum_blonde" — and regenerating

This means precise, isolated changes without affecting the rest of the image. Change a hair color without touching the background. Swap clothing without altering the pose. All through dot-notation JSON paths.

Features

  • 5 MCP Tools — generate, decompose, edit, presets, list
  • Structured JSON Editing — decompose images into blueprints, edit specific fields with dot-notation
  • Natural Language Editing — or just describe the change in plain English
  • 10 Built-in Presets — Facebook ads, Instagram stories, hero images, OG images, YouTube thumbnails, and more
  • Reference Image Support — up to 14 reference images for character/object consistency
  • Dual Model Support — Gemini 3.1 Flash (fast) or Gemini 3 Pro (best quality)
  • Blueprint Caching — decomposed blueprints cached alongside images for instant re-edits
  • Google Search Grounding — real-world accuracy via web search
  • Smart Error Handling — retry on rate limits, clear safety block messages, file size warnings

Quick Start

1. Get a Gemini API Key

Get one free at Google AI Studio.

2. Install

npm install -g gemini-image-studio-mcp

3. Add to Claude Code

claude mcp add gemini-image-studio-mcp -e GEMINI_API_KEY=your-key-here -- gemini-image-studio-mcp

Or add to your project's .claude/mcp.json:

{
  "mcpServers": {
    "gemini-image-studio-mcp": {
      "command": "npx",
      "args": ["-y", "gemini-image-studio-mcp"],
      "env": {
        "GEMINI_API_KEY": "your-key-here"
      }
    }
  }
}

4. Use It

Ask Claude to generate images:

"Create a Facebook ad for a coffee shop with warm lighting"

"Generate a hero image for a tech startup landing page"

"Edit the hero image — change the background to a sunset beach"

Tools

generate_image

Create a new image from text or structured JSON prompts.

| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | prompt | string | Yes | Text description or JSON prompt | | prompt_format | "text" | "json" | No | Prompt format (default: "text") | | preset | string | No | Asset preset (e.g., "facebook_ad", "hero_image") | | aspect_ratio | string | No | Override ratio ("1:1", "16:9", "9:16", etc.) | | image_size | "1K" | "2K" | "4K" | No | Resolution (default: "1K") | | model | "flash" | "pro" | No | Gemini model (default: "flash") | | reference_images | string[] | No | Paths to reference images for consistency | | output_name | string | No | Custom filename | | enable_search_grounding | boolean | No | Use Google Search for accuracy |

decompose_image

Analyze an image into a structured JSON blueprint — the first step of the edit workflow.

| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | image_path | string | Yes | Path to the image | | detail_level | "basic" | "detailed" | "exhaustive" | No | Granularity (default: "detailed") |

Returns a full blueprint with subject, scene, technical, composition, text_rendering, style_modifiers, and meta sections — each field precisely describing the image's visual components.

edit_image

Edit an image using JSON changes or natural language.

| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | image_path | string | Yes | Path to the image | | edit_type | "json" | "natural_language" | Yes | Edit mode | | changes | object | For JSON edits | Dot-notation paths to change | | instruction | string | For NL edits | Natural language instruction | | blueprint | object | No | Blueprint (auto-loaded from cache if omitted) | | model | "flash" | "pro" | No | Model (default: "flash") | | output_name | string | No | Custom filename |

JSON edit example — change hair color and add sunglasses:

{
  "image_path": "/output/portrait.png",
  "edit_type": "json",
  "changes": {
    "subject[0].hair.color": "platinum_blonde",
    "subject[0].accessories": [
      { "item": "sunglasses", "material": "metal", "color": "#C0C0C0" }
    ]
  }
}

Natural language edit example:

{
  "image_path": "/output/portrait.png",
  "edit_type": "natural_language",
  "instruction": "Change the background to a tropical beach at sunset. Keep the person exactly the same."
}

get_presets

List available asset presets with dimensions, tips, and conventions.

| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | category | "ad" | "web" | "social" | "all" | No | Filter (default: "all") |

list_generated

Browse previously generated images.

| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | filter | string | No | Search by filename | | limit | number | No | Max results (default: 20) | | include_blueprints | boolean | No | Include cached blueprints |

JSON Editing Workflow

The key differentiator — precise, field-level image editing:

Step 1: Generate
  generate_image(prompt: "Professional headshot, navy blazer", preset: "linkedin_post")
  → /output/headshot.png

Step 2: Decompose
  decompose_image(image_path: "/output/headshot.png")
  → JSON blueprint with every visual component mapped

Step 3: Edit (precise)
  edit_image(
    image_path: "/output/headshot.png",
    edit_type: "json",
    changes: {
      "subject[0].clothing[0].color": "#8B0000",
      "scene.lighting.type": "studio_softbox"
    }
  )
  → /output/headshot-edit-1.png (blazer changed to dark red, lighting adjusted)

Step 4: Edit (creative)
  edit_image(
    image_path: "/output/headshot-edit-1.png",
    edit_type: "natural_language",
    instruction: "Add warm bokeh to the background"
  )
  → /output/headshot-edit-1-edit-1.png

Dot-Notation Paths

subject[0].hair.color          → Hair color
subject[0].hair.style          → Hair style
subject[0].clothing[0].color   → First clothing item color
subject[0].accessories         → Add/change accessories
scene.lighting.type            → Lighting type
scene.location                 → Location/background
text_rendering.text_content    → Text in image
technical.lens                 → Camera lens
composition.framing            → Shot framing
style_modifiers.aesthetic      → Aesthetic style

Built-in Presets

| Preset | Category | Aspect Ratio | Dimensions | Best For | |--------|----------|-------------|------------|----------| | facebook_ad | Ad | 1:1 | 1080x1080 | Facebook/Instagram feed ads | | instagram_story_ad | Ad | 9:16 | 1080x1920 | Instagram/Facebook story ads | | google_display_banner | Ad | 16:9 | 1200x628 | Google Display Network | | hero_image | Web | 21:9 | 2560x1080 | Above-the-fold hero sections | | og_image | Web | 16:9 | 1200x630 | Social share / link previews | | product_card | Web | 4:5 | 800x1000 | E-commerce product grids | | email_header | Web | 3:1 | 600x200 | Email marketing headers | | linkedin_post | Social | 1:1 | 1080x1080 | LinkedIn feed posts | | twitter_post | Social | 16:9 | 1200x675 | Twitter/X posts | | youtube_thumbnail | Social | 16:9 | 1280x720 | YouTube thumbnails |

Configuration

| Variable | Required | Default | Description | |----------|----------|---------|-------------| | GEMINI_API_KEY | Yes | — | Google AI Studio API key | | OUTPUT_DIR | No | ./output | Where generated images are saved |

Integration

Claude Code

claude mcp add gemini-image-studio-mcp -e GEMINI_API_KEY=your-key -- gemini-image-studio-mcp

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "gemini-image-studio-mcp": {
      "command": "npx",
      "args": ["-y", "gemini-image-studio-mcp"],
      "env": {
        "GEMINI_API_KEY": "your-key-here"
      }
    }
  }
}

Any MCP Client

GEMINI_API_KEY=your-key npx gemini-image-studio-mcp

The server communicates over stdio using the Model Context Protocol.

MCP Prompt & Resource

This server also exposes:

  • Prompt: nano_banana_expert — invoke this to give Claude full knowledge of the JSON schema, editing best practices, and asset creation guidelines
  • Resource: nanobanana://schema/prompt — the raw JSON schema with all enum values for programmatic access

Models

| Model | ID | Best For | |-------|------|----------| | Flash (default) | gemini-3.1-flash-image-preview | Fast generation, high volume, cost-effective | | Pro | gemini-3-pro-image-preview | Best quality, complex scenes, professional assets |

Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/my-feature)
  3. Run tests (npm test)
  4. Commit your changes
  5. Push and open a PR

License

MIT