{"_id":"@daniel.barta/nano-banana-mcp","_rev":"3-5c28591848c109aa52d413ea1ec9249c","name":"@daniel.barta/nano-banana-mcp","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@daniel.barta/nano-banana-mcp","version":"0.1.0","keywords":["mcp","gemini","image-generation","ai","claude","model-context-protocol"],"author":{"name":"Daniel Barta"},"license":"MIT","_id":"@daniel.barta/nano-banana-mcp@0.1.0","maintainers":[{"name":"daniel.barta","email":"barta.daniel@gmail.com"}],"homepage":"https://github.com/bartadaniel/nano-banana-mcp#readme","bugs":{"url":"https://github.com/bartadaniel/nano-banana-mcp/issues"},"bin":{"nano-banana-mcp":"dist/index.js"},"dist":{"shasum":"ff6af73cf5468e45e1dc297b9197fbf546d0f9ce","tarball":"https://registry.npmjs.org/@daniel.barta/nano-banana-mcp/-/nano-banana-mcp-0.1.0.tgz","fileCount":12,"integrity":"sha512-QIvMo5gbwgKAWffQD+5OytjpIM4ZblD7iEv//iFFNHCo0A8BIefXl+oJsLVQ24Yi+MzjSjgea4Qnmk49JKFb1Q==","signatures":[{"sig":"MEUCIFIc4iTqWWAW6r4vRD86PsUeE09C0ZTFej09Dfdcsu60AiEA7bQ2yK3/5uy5k8zXBkKIuzf6NIDki1wauRR0z83kXKo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26602},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"52cfcc54d05154d8aab82304aa71b02621e60fb9","scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"daniel.barta","email":"barta.daniel@gmail.com"},"repository":{"url":"git+https://github.com/bartadaniel/nano-banana-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"Standalone MCP server for generating and editing images with Google Gemini","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.24.0","@google/genai":"^1.44.0","@modelcontextprotocol/sdk":"^1.17.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nano-banana-mcp_0.1.0_1772840578079_0.3344860141020225","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@daniel.barta/nano-banana-mcp","version":"0.1.1","keywords":["mcp","gemini","image-generation","ai","claude","model-context-protocol"],"author":{"name":"Daniel Barta"},"license":"MIT","_id":"@daniel.barta/nano-banana-mcp@0.1.1","maintainers":[{"name":"daniel.barta","email":"barta.daniel@gmail.com"}],"homepage":"https://github.com/bartadaniel/nano-banana-mcp#readme","bugs":{"url":"https://github.com/bartadaniel/nano-banana-mcp/issues"},"bin":{"nano-banana-mcp":"dist/index.js"},"dist":{"shasum":"59dad17b63e3693c4c85049fd99eb05090a97247","tarball":"https://registry.npmjs.org/@daniel.barta/nano-banana-mcp/-/nano-banana-mcp-0.1.1.tgz","fileCount":12,"integrity":"sha512-lySZJunojwAqV4z3ejFaMf8OS4WSUP9AWuqxmdikqAardgjuJu/ClEvWNAmuGoiGi0YO3gIiHV6MUVyQfWhYGQ==","signatures":[{"sig":"MEUCIQCVYZy+YlX0yyIGeyiIHxG86myR6ZvR0Vh8Stb+uEz1BwIgZXMqVU7430fLIy3ugNFgMK/l0HT7sSGfqmNm/wULx1E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28381},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"ea56613c94e817919bc4c89406233a5de07ab35c","scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"daniel.barta","email":"barta.daniel@gmail.com"},"repository":{"url":"git+https://github.com/bartadaniel/nano-banana-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"Standalone MCP server for generating and editing images with Google Gemini","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.24.0","@google/genai":"^1.44.0","@modelcontextprotocol/sdk":"^1.17.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nano-banana-mcp_0.1.1_1772911034804_0.9423841746781292","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@daniel.barta/nano-banana-mcp","version":"0.2.0","description":"Standalone MCP server for generating and editing images with Google Gemini","type":"module","main":"dist/index.js","bin":{"nano-banana-mcp":"dist/index.js"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"npm run build && node --test dist/__tests__/*.test.js"},"keywords":["mcp","gemini","image-generation","ai","claude","model-context-protocol"],"author":{"name":"Daniel Barta"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bartadaniel/nano-banana-mcp.git"},"engines":{"node":">=20.0.0"},"dependencies":{"@google/genai":"^1.44.0","@modelcontextprotocol/sdk":"^1.17.0","sharp":"^0.34.5","zod":"^3.24.0"},"devDependencies":{"@types/node":"^22.0.0","@types/sharp":"^0.31.1","typescript":"^5.8.0"},"gitHead":"2f8055d6c036c77255215d5ecfd1e4b23a7cfce1","types":"./dist/index.d.ts","_id":"@daniel.barta/nano-banana-mcp@0.2.0","bugs":{"url":"https://github.com/bartadaniel/nano-banana-mcp/issues"},"homepage":"https://github.com/bartadaniel/nano-banana-mcp#readme","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-F/WEPmPZIaxlbSlIaMVtMutJDlsNib/SrgosLBAE4QZEiNxiA14L6mof9ArNBWJyYjHufdmxWz02SGoLn+1SMQ==","shasum":"e6758f384320af37437d0079da7625914bad8679","tarball":"https://registry.npmjs.org/@daniel.barta/nano-banana-mcp/-/nano-banana-mcp-0.2.0.tgz","fileCount":24,"unpackedSize":144234,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICUGfF8vuOvfTPF0krjBsY9K8canjhwnXau9yLWelAGTAiEAjmaLRFKv0P8P+qA9RX/cLPFyXPTNVI9ZdqqQ58rhiN8="}]},"_npmUser":{"name":"daniel.barta","email":"barta.daniel@gmail.com"},"directories":{},"maintainers":[{"name":"daniel.barta","email":"barta.daniel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nano-banana-mcp_0.2.0_1773015390520_0.8924222821273535"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-06T23:42:58.011Z","modified":"2026-03-09T00:16:31.099Z","0.1.0":"2026-03-06T23:42:58.263Z","0.1.1":"2026-03-07T19:17:14.951Z","0.2.0":"2026-03-09T00:16:30.683Z"},"bugs":{"url":"https://github.com/bartadaniel/nano-banana-mcp/issues"},"author":{"name":"Daniel Barta"},"license":"MIT","homepage":"https://github.com/bartadaniel/nano-banana-mcp#readme","keywords":["mcp","gemini","image-generation","ai","claude","model-context-protocol"],"repository":{"type":"git","url":"git+https://github.com/bartadaniel/nano-banana-mcp.git"},"description":"Standalone MCP server for generating and editing images with Google Gemini","maintainers":[{"name":"daniel.barta","email":"barta.daniel@gmail.com"}],"readme":"# nano-banana-mcp\n\n[![npm](https://img.shields.io/npm/v/@daniel.barta/nano-banana-mcp)](https://www.npmjs.com/package/@daniel.barta/nano-banana-mcp)\n\nStandalone MCP server for generating and editing images with Google Gemini. No Gemini CLI required -- just an API key.\n\n## Quick Start\n\n1. Get a Gemini API key from [Google AI Studio](https://aistudio.google.com/apikey)\n\n2. Add to your Claude Code settings (`~/.claude/settings.json`) or Claude Desktop config:\n\n```json\n{\n  \"mcpServers\": {\n    \"nano-banana\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@daniel.barta/nano-banana-mcp\"],\n      \"env\": {\n        \"GEMINI_API_KEY\": \"your-api-key\"\n      }\n    }\n  }\n}\n```\n\n3. Restart Claude and ask it to generate an image.\n\n## Configuration\n\n| Environment Variable | Required | Default | Description |\n|---------------------|----------|---------|-------------|\n| `GEMINI_API_KEY` | Yes | -- | Your Google AI API key |\n| `GEMINI_MODEL` | No | `gemini-3.1-flash-image-preview` | Gemini model for image generation/editing |\n| `GEMINI_DESCRIBE_MODEL` | No | `gemini-2.5-flash` | Gemini model for image description (text-only output) |\n| `GEMINI_BASE_URL` | No | -- | Custom base URL for Gemini API (proxy support) |\n| `OUTPUT_DIR` | No | `~/nano-banana-output` | Directory for saved images |\n\n### Supported Models\n\n| Model | Notes |\n|-------|-------|\n| `gemini-3.1-flash-image-preview` | Default. Latest, fastest |\n| `gemini-3-pro-image-preview` | Higher quality, slower |\n| `gemini-2.5-flash-image` | Fast, cost-effective |\n\n## Tools\n\n### `generate_image`\n\nGenerate an image from a text prompt. Supports batch generation (up to 4 images). Response contains a thumbnail preview; full-res image is saved to disk.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `prompt` | string | Yes | Text description of the image |\n| `aspectRatio` | string | No | Aspect ratio (`1:1`, `1:4`, `1:8`, `2:3`, `3:2`, `3:4`, `4:1`, `4:3`, `4:5`, `5:4`, `8:1`, `9:16`, `16:9`, `21:9`) |\n| `size` | string | No | Image size (`512px`, `1K`, `2K`, `4K`) |\n| `n` | number | No | Number of images to generate (1-4, default 1) |\n| `negativePrompt` | string | No | Things to exclude from the generated image |\n| `systemInstruction` | string | No | System instruction to guide the model |\n\n### `edit_image`\n\nEdit an existing image based on a text instruction. Supports multi-image input (up to 10 images total). Response contains a thumbnail preview; full-res image is saved to disk.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `prompt` | string | Yes | What to change |\n| `filePath` | string | Yes | Path to the source image |\n| `additionalFilePaths` | string[] | No | Additional image paths (up to 9) for multi-image editing |\n| `aspectRatio` | string | No | Aspect ratio (`1:1`, `1:4`, `1:8`, `2:3`, `3:2`, `3:4`, `4:1`, `4:3`, `4:5`, `5:4`, `8:1`, `9:16`, `16:9`, `21:9`) |\n| `size` | string | No | Image size (`512px`, `1K`, `2K`, `4K`) |\n| `negativePrompt` | string | No | Things to exclude from the edited image |\n| `systemInstruction` | string | No | System instruction to guide the model |\n\n### `describe_image`\n\nGet a text description of an image.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `filePath` | string | Yes | Path to the image |\n| `question` | string | No | Specific question about the image |\n| `systemInstruction` | string | No | System instruction to guide the model |\n\n## Supported Input Formats\n\nFor `edit_image` and `describe_image`, the following image formats are supported:\n\nJPEG, PNG, WebP, GIF, BMP, TIFF, SVG, HEIC/HEIF\n\n## File Path Resolution\n\nWhen you provide a file path for editing or describing, the server searches for the file in this order:\n\n1. Absolute path as given\n2. Relative to the current working directory\n3. Relative to the output directory\n4. Basename only in the output directory\n\n## Thumbnails\n\nTo avoid hitting Claude Code's session file size limits, MCP responses contain **thumbnail previews** (max 512px, JPEG quality 80, ~20-50KB) instead of full-resolution images. Full-res images are always saved to disk at the path shown in the response metadata.\n\nThe first content block in generate/edit responses is a JSON metadata object:\n```json\n{\n  \"model\": \"gemini-3.1-flash-image-preview\",\n  \"count\": 1,\n  \"images\": [\n    { \"filePath\": \"/Users/you/nano-banana-output/a-cat-1234567890.png\", \"mimeType\": \"image/png\" }\n  ]\n}\n```\n\n## Development\n\n```bash\ngit clone https://github.com/bartadaniel/nano-banana-mcp.git\ncd nano-banana-mcp\nnpm install\nnpm run build\n```\n\nUse the local build in your config:\n\n```json\n{\n  \"mcpServers\": {\n    \"nano-banana\": {\n      \"command\": \"node\",\n      \"args\": [\"path/to/nano-banana-mcp/dist/index.js\"],\n      \"env\": {\n        \"GEMINI_API_KEY\": \"your-api-key\"\n      }\n    }\n  }\n}\n```\n\n### Testing\n\n```bash\nnpm test\n```\n\nRuns unit tests using Node.js built-in test runner (`node:test`). Tests cover error classes, all documented Gemini API response codes (BlockedReason, FinishReason), config shapes, image extraction edge cases, file operations, path security, and thumbnail generation.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}