{"_id":"@aeven/nanobanana-mcp","_rev":"13-838cb8506e4e7d434ce7a0d960e2c4a3","name":"@aeven/nanobanana-mcp","dist-tags":{"latest":"1.0.13"},"versions":{"1.0.1":{"name":"@aeven/nanobanana-mcp","version":"1.0.1","_id":"@aeven/nanobanana-mcp@1.0.1","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"dist":{"shasum":"dbcdf3559ccc66b0840b578689cfb7e71a3bace5","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.1.tgz","fileCount":27,"integrity":"sha512-twoP/sNXHP2tMwCc7TIYO3Yy9FpCx8xSXIzowh8OssSsVRR1+mayECoqJGefjmxS6Uh9y737uN9PxZAGXFo2zw==","signatures":[{"sig":"MEYCIQC+FbjNkbnyjUIshuJjz4DKiwBCaO+kDGXcXYqaEkvmCAIhAKrDYl1Da5jUhTW03mvtUBuSAg30DL55KN0BhLe4KGjX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156171},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"6463c49d119af34ab906c196c4f1d09014f939fa","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","postinstall":"npm run install-deps && npm run build","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"10.8.2","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.1_1761910096114_0.5358973852819942","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aeven/nanobanana-mcp","version":"1.0.2","_id":"@aeven/nanobanana-mcp@1.0.2","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"dist":{"shasum":"be93b1ce6a4f4ecec4ee571485f3928987970dde","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.2.tgz","fileCount":26,"integrity":"sha512-ltMqfOWulqNb2bfM9i2xevsikvIs7ealtEk2kZmuUKry5A0pz58KRDAYF4VD6h8r/vV7TaTzjquOQE6z9fEhRA==","signatures":[{"sig":"MEQCIATbeasqrbi1RnMwbaPyzbrSnWNAl4u/G/p3u/4U0OrnAiABBKU9MD3DRTnqI0TYu715H+XYiIcAYfNBLD2DHyLYEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115472},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"bcd5b147ca6b18c1b5f33e6bbbe39d5cde7e5899","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","postinstall":"npm run install-deps && npm run build","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"10.8.2","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.2_1761911440944_0.2665526853233724","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aeven/nanobanana-mcp","version":"1.0.3","_id":"@aeven/nanobanana-mcp@1.0.3","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"dist":{"shasum":"15e3423b0109294d9ea318b7583a1d095eb86811","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.3.tgz","fileCount":27,"integrity":"sha512-03KnE+vrud93QiPPJ4OUjfG5SsQoRWUAxOdD3ZzcDcist2jhrYUUomfW635XRiK+aMEctb6OyC3jRJbYUe3Vow==","signatures":[{"sig":"MEUCIQChFCGbz7+daughPcpwx81eLZeYryMLgba3Jy4WIFpeiwIgeRqQs+dKKJsfIBpB3G0Jsb7J0tciEVGTqwJSORB3F7U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115026},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"6753b06e235e1a871786d08c4c7b04fd6208e35a","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","postinstall":"npm run install-deps && npm run build","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"10.8.2","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{},"_nodeVersion":"20.19.4","dependencies":{"@modelcontextprotocol/sdk":"^1.20.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.3_1761918801263_0.31621676240092955","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@aeven/nanobanana-mcp","version":"1.0.4","_id":"@aeven/nanobanana-mcp@1.0.4","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"dist":{"shasum":"1dbe4ad697754ea52dfcb56f661d9955786be6ab","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.4.tgz","fileCount":27,"integrity":"sha512-9mWgsBOpmJmbQ7ACs5RbYH0d1xjEgm5RnMxEKnXzP4hRcDx0qojHt5eLFWul8IUkMpI/I+7JFR2rBhigAyyhgA==","signatures":[{"sig":"MEUCIFJrDGNHM8sRBW2rv+KW0hioKSm3d7XY/lMkoZhVZ29jAiEA2fS3RA2Ly9Wy3AkGGVLkCnyL4Dg1Ay7iPlRfzbcQQYI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115034},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"cea2589e1288bab86a78370232ffcd2997dbd47e","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","postinstall":"npm run install-deps && npm run build","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"10.8.2","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{},"_nodeVersion":"20.19.4","dependencies":{"@modelcontextprotocol/sdk":"^1.20.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.4_1761919445646_0.04334147790090048","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@aeven/nanobanana-mcp","version":"1.0.5","keywords":[],"author":"","license":"ISC","_id":"@aeven/nanobanana-mcp@1.0.5","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"dist":{"shasum":"6995e52b9f71bfff178ee5f978ae857b947ef66f","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.5.tgz","fileCount":29,"integrity":"sha512-YFBdKSNLgwkGJO9CPt1kkz39oMS7fPq1sFLJYwa8qlC5DBsRQv7nC7Og4rU/lgGUFBrJD2x3DyRLkl1xM6Ai0A==","signatures":[{"sig":"MEQCICUfqtNxscPz2DVZEdRIb/OOAfdJj+hmOwzezrqZwcKjAiAETP4cQd9Ny0sr2BJBVgEdxH4UQMx5/RkwOBUOTl4hqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125279},"main":"eslint.config.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"bf99e4c1699cfb2038b91795545bb778e5d8c2e8","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","verify:npm":"node scripts/verify-npm-distribution.mjs","postinstall":"npm run install-deps && npm run build","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"10.8.2","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{"doc":"docs"},"_nodeVersion":"20.19.4","dependencies":{"@modelcontextprotocol/sdk":"^1.20.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.5_1761993097664_0.25215791583975955","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@aeven/nanobanana-mcp","version":"1.0.6","keywords":[],"author":"","license":"ISC","_id":"@aeven/nanobanana-mcp@1.0.6","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"dist":{"shasum":"ce1fbdf00952346376a00da87a3ffd03843d4152","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.6.tgz","fileCount":29,"integrity":"sha512-Elu2fVrF/WJLls/hDIFFvKSpObCWJszmkMUPrymSyP1ixzcMb+7EJa9qelazBwl95uKCTg7ghDhgm1+7vM9joQ==","signatures":[{"sig":"MEQCIHnTno9FLwXG/q+pOvhsVLeDunsm346I+iVAPnpq6DViAiBmAMPTlJUBzjlo3WbaWkl75l0dgey4VOOqakBtAkuwFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125303},"main":"eslint.config.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"b75fcabc51f7b1980d7968beacb8ab9443fd6823","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","verify:npm":"node scripts/verify-npm-distribution.mjs","postinstall":"npm run install-deps && npm run build","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"10.8.2","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{"doc":"docs"},"_nodeVersion":"20.19.4","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.20.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.6_1761994554786_0.2023493537198071","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@aeven/nanobanana-mcp","version":"1.0.7","keywords":[],"author":"","license":"ISC","_id":"@aeven/nanobanana-mcp@1.0.7","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"dist":{"shasum":"61c152fde0460fda4678efd6630b321e5e176ff9","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.7.tgz","fileCount":28,"integrity":"sha512-khhSb/p9BaGV1+MN5xJFqTyxG0qO275zl1KOCz3v3wv08b9zb7Xryw/B8L8q+NI2WGDfmuThPXolQAJ95X0SJA==","signatures":[{"sig":"MEQCIDw/GAVk71JABnZWzP4zvfRTcrt0ihjWsxmkPQGFgKeHAiBIDY/HgGK0XTArHtsJhnryVzGh3SWbCQHAA0DQsIKYvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125597},"main":"eslint.config.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"43e4bf8c50764abd09a87e83e0d06136264576b2","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","verify:npm":"node scripts/verify-npm-distribution.mjs","postinstall":"npm run install-deps && npm run build","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"10.8.2","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{"doc":"docs"},"_nodeVersion":"20.19.4","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.20.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.7_1761996272199_0.9077372722394303","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@aeven/nanobanana-mcp","version":"1.0.8","keywords":[],"author":"","license":"ISC","_id":"@aeven/nanobanana-mcp@1.0.8","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"dist":{"shasum":"69c74eba7ac5d4f78795125fc1a0d49cf50f59f7","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.8.tgz","fileCount":28,"integrity":"sha512-fQjSYriUDGZ1QFxrvWruy+wu5hFKSFgX/3dZzavrQhPL8Q0HFt0GOtSGm42zj1TuTE1pj2EllNn3Ghh35izIPw==","signatures":[{"sig":"MEQCIFlHb8T3Af77mW1DCYLhDko09b1LIJTmhCl+ZLOBcNqXAiAWpP64CEzmaQTzpQLU9FAdKQQ3qJEXtp4Di2V+c3WFUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125625},"main":"eslint.config.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"03e16e8810359f59db3624b2bfbf03e17aeb2fdd","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","verify:npm":"node scripts/verify-npm-distribution.mjs","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"9.6.7","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{"doc":"docs"},"_nodeVersion":"18.17.1","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.20.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.8_1762004932061_0.4758233621543193","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@aeven/nanobanana-mcp","version":"1.0.9","keywords":[],"author":"","license":"ISC","_id":"@aeven/nanobanana-mcp@1.0.9","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"dist":{"shasum":"db06e84d5d3b56d51b58fc6b014c97a0276f580f","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.9.tgz","fileCount":28,"integrity":"sha512-GXSDuHxABwiIqy56RQ7iah+vhAyY9rQ6Y36URX1Setn+uIrMXkb466T/oB7h2MRJpCkOF8JQvltKe5NCbBOFgQ==","signatures":[{"sig":"MEYCIQD8mpdJYYDOdQZGFUcAS7SGmYlr5eSStlj8eaxcCIU7vAIhAPttKA1I1lPkCgXDb9LOAprmIBKCFcrZNWQluSHTZzfZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125654},"main":"eslint.config.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"204e443ab2426f4ba7c908570e8b6ea055f9298e","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","verify:npm":"node scripts/verify-npm-distribution.mjs","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"10.8.2","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{"doc":"docs"},"_nodeVersion":"20.19.4","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.20.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.9_1762005642715_0.3048580407064254","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@aeven/nanobanana-mcp","version":"1.0.10","keywords":[],"author":"","license":"ISC","_id":"@aeven/nanobanana-mcp@1.0.10","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"dist":{"shasum":"31bc4ad742239922ac385a6704dbf3033ccd0f41","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.10.tgz","fileCount":30,"integrity":"sha512-dTlaLctv2kCNPgtO+4FtaNnsDQtOqXQzXM745xRlKeJJjih4RwIBXgKMNVssxM3g3QqxEdoK158MJDOkjNsJRg==","signatures":[{"sig":"MEYCIQCAn7TDaw6YM4+MpZnz6e0KVRhSwWoQaHtJecfhlssX+wIhAPM+Tu+WLmHVI7mtBuFgYvUpMBzP2odqrzxbNOyTLxSQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127475},"main":"eslint.config.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"8a42bca4fce649ceab6e03308370a6e5f69254c6","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","verify:npm":"node scripts/verify-npm-distribution.mjs","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"10.8.2","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{"doc":"docs"},"_nodeVersion":"20.19.4","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.20.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.10_1762008503724_0.7685278069241726","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@aeven/nanobanana-mcp","version":"1.0.11","keywords":[],"author":"","license":"ISC","_id":"@aeven/nanobanana-mcp@1.0.11","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"dist":{"shasum":"afb324a9593b4b55a8ace63882829d0644b00eea","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.11.tgz","fileCount":30,"integrity":"sha512-DVCJaM4isaSbZ5d99Dp98Zke0if/SpdV4bj+mN+hhhptXUdFn5cwAPv1L+x0SqVmqu4h447ViFq0PWDv0ubn4A==","signatures":[{"sig":"MEUCIAEPecXe0n/1l4OdHPr/qoUrZ5dGy2tEsem+N2fXPbciAiEA+j/HThp3I4P8i6jLh5/fuSoj4FPZJJWJaauX4TZQf9c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129093},"main":"eslint.config.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"e9ff092f3b0bc93d9a35f905e40410444d572af8","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","verify:npm":"node scripts/verify-npm-distribution.mjs","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"10.8.2","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{"doc":"docs"},"_nodeVersion":"20.19.4","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.20.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.11_1762012785707_0.5912315594621667","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"@aeven/nanobanana-mcp","version":"1.0.12","keywords":[],"author":"","license":"ISC","_id":"@aeven/nanobanana-mcp@1.0.12","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"dist":{"shasum":"6f564747b18f7cbcc6dea5f8edf5a178f0e90966","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.12.tgz","fileCount":30,"integrity":"sha512-so31tLPMVC0zBvIYqIHblRFF0vOKJ+Gzu0m4CXSCPa/25uxVsqaMLYn+VDMh2iE5gmEuU5Htd0se/V1NlhxQYg==","signatures":[{"sig":"MEQCIAsvEAzl3ACRKrVZXsjjc8yvmUMTUteJ/k4YiOeOqULQAiBkkUXzLXfCu1xMjvTa/BEr7kZkYdQfnwVxEP4eO8HCiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129172},"main":"eslint.config.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"db6a26434b731c978eb5c28207faa42fdc2e30f4","scripts":{"dev":"cd mcp-server && npm run dev","lint":"eslint . --fix","test":"cd mcp-server && npm run test","build":"cd mcp-server && npm run build","clean":"rm -rf mcp-server/dist && rm -rf node_modules","format":"prettier --write .","lint:ci":"eslint . --max-warnings 0","lint:fix":"eslint . --fix","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","typecheck":"cd mcp-server && npm run typecheck","verify:npm":"node scripts/verify-npm-distribution.mjs","install-deps":"cd mcp-server && npm install"},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"_npmVersion":"10.8.2","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","directories":{"doc":"docs"},"_nodeVersion":"20.19.4","dependencies":{"dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.20.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.24.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","@types/node":"^22.0.0","typescript-eslint":"^8.30.1","eslint-plugin-import":"^2.31.0","eslint-config-prettier":"^10.1.2","eslint-plugin-license-header":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/nanobanana-mcp_1.0.12_1762156712904_0.11003525876754927","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@aeven/nanobanana-mcp","version":"1.0.13","type":"module","description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","bin":{"nanobanana-mcp":"mcp-server/dist/index.js"},"scripts":{"build":"cd mcp-server && npm run build","install-deps":"cd mcp-server && npm install","dev":"cd mcp-server && npm run dev","format":"prettier --write .","lint":"eslint . --fix","lint:fix":"eslint . --fix","lint:ci":"eslint . --max-warnings 0","typecheck":"cd mcp-server && npm run typecheck","test":"cd mcp-server && npm run test","clean":"rm -rf mcp-server/dist && rm -rf node_modules","preflight":"npm run clean && npm ci && npm run format && npm run lint || true && npm run build && npm run typecheck","verify:npm":"node scripts/verify-npm-distribution.mjs"},"engines":{"node":">=18.0.0"},"devDependencies":{"@types/node":"^22.0.0","eslint":"^9.24.0","eslint-config-prettier":"^10.1.2","eslint-plugin-import":"^2.31.0","eslint-plugin-license-header":"^0.8.0","globals":"^16.0.0","prettier":"^3.5.3","typescript":"^5.0.0","typescript-eslint":"^8.30.1"},"dependencies":{"@modelcontextprotocol/sdk":"^1.20.2","dotenv":"^17.2.3"},"main":"eslint.config.js","directories":{"doc":"docs"},"keywords":[],"author":"","license":"ISC","_id":"@aeven/nanobanana-mcp@1.0.13","gitHead":"040c52e541a5568dc2d96cfbcac4046405953361","_nodeVersion":"20.19.4","_npmVersion":"10.8.2","dist":{"integrity":"sha512-yCzS/Ep8SrbH1VYrBamCzpGJlTk0en/DEqCTlJYcpXcCL9Ot0MrRbvLKoQ4qyBdCfs1pycc8YxKytAs6MHo1kA==","shasum":"02c35731eafa5b48eebc9d2e737467173082e9b3","tarball":"https://registry.npmjs.org/@aeven/nanobanana-mcp/-/nanobanana-mcp-1.0.13.tgz","fileCount":31,"unpackedSize":130259,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDXFd8Jm0f2EL8QZSw7TR2kdGDe3FhwPmk30jlzr0vOCwIhAJnw9ETZWvW2m0/+Q4fQRqOINUnabsl6WvoXkIWL4Mkw"}]},"_npmUser":{"name":"aeven","email":"hello@aeven.io"},"maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nanobanana-mcp_1.0.13_1762340681815_0.46931853277109004"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-31T11:28:16.046Z","modified":"2025-11-05T11:04:42.259Z","1.0.1":"2025-10-31T11:28:16.301Z","1.0.2":"2025-10-31T11:50:41.159Z","1.0.3":"2025-10-31T13:53:21.448Z","1.0.4":"2025-10-31T14:04:05.896Z","1.0.5":"2025-11-01T10:31:37.852Z","1.0.6":"2025-11-01T10:55:54.961Z","1.0.7":"2025-11-01T11:24:32.412Z","1.0.8":"2025-11-01T13:48:52.268Z","1.0.9":"2025-11-01T14:00:42.954Z","1.0.10":"2025-11-01T14:48:23.917Z","1.0.11":"2025-11-01T15:59:45.886Z","1.0.12":"2025-11-03T07:58:33.077Z","1.0.13":"2025-11-05T11:04:42.009Z"},"license":"ISC","keywords":[],"description":"MCP server for Nano Banana image generation (OpenRouter by default, configurable provider)","maintainers":[{"name":"aeven","email":"hello@aeven.io"}],"readme":"# Nano Banana - MCP Image Generation Extension\n\nA professional MCP (Model Context Protocol) extension for any MCP-compatible client (including Gemini CLI and Codex CLI), for generating and manipulating images. It uses the **google/gemini-2.5-flash-image** model by default, and is pre-configured to connect to OpenRouter. You can point it at any provider that hosts the model by adjusting the `MODEL_*` environment variables.\n\n## ✨ Features\n\n- **🎨 Text-to-Image Generation**: Create stunning images from descriptive prompts\n- **✏️ Image Editing**: Modify existing images with natural language instructions\n- **🔧 Image Restoration**: Restore and enhance old or damaged photos\n- **📁 Smart File Management**: User-friendly filenames with automatic duplicate prevention\n\n## 📋 Prerequisites\n\n1.  **MCP-compatible CLI** installed and configured (e.g., Gemini CLI, Codex CLI)\n2.  **Node.js 18+** and npm\n3.  **API Key**: You will need an API key from OpenRouter or another provider that hosts the `google/gemini-2.5-flash-image` model.\n\nBy default, the extension talks to OpenRouter. Optional overrides are useful when targeting other providers that host the model:\n\n- `MODEL_BASE_URL` – alternate provider endpoint (default: `https://openrouter.ai/api/v1`)\n- `MODEL_ID` – override model id (default: `google/gemini-2.5-flash-image`)\n- `MODEL_REFERER` / `MODEL_TITLE` – analytics headers for providers that require them\n- `MODEL_GENERATE_PATH` – alternate generation endpoint path (default: `/responses`)\n\nIf you are using OpenRouter, refer to their [authentication guide](https://openrouter.ai/docs#authenticate) for generating API keys. For other providers, consult their documentation.\n\n## 🚀 Installation\n\n### From NPM (Recommended)\n\nFor most users, installing via `npx` or your CLI's extension manager is the easiest method.\n\n**Gemini CLI:**\n\nWhen you install the extension, you will be prompted to enter your API key.\n\n```bash\ngemini extensions install https://github.com/Aeven-AI/mcp-nanobanana\n```\n\n**Codex CLI:**\n\n```bash\ncodex mcp add nanobanana --env MODEL_API_KEY=\"YOUR_API_KEY_HERE\" -- npx -y @aeven/nanobanana-mcp@latest\n```\n\n**Opencode CLI:**\n\n1.  Run `opencode config edit` (or open your `opencode.jsonc` settings file manually).\n2.  Register the server with an entry similar to:\n\n    ```jsonc\n    {\n      \"mcp\": {\n        \"nanobanana\": {\n          \"type\": \"local\",\n          \"command\": [\"npx\", \"-y\", \"@aeven/nanobanana-mcp@latest\"],\n          \"enabled\": true,\n          \"environment\": {\n            \"MODEL_API_KEY\": \"{env:MODEL_API_KEY}\"\n          }\n        }\n      }\n    }\n    ```\n\n3.  Save the file and restart Opencode so it picks up the new MCP server.\n\n**Claude Code:**\n\n1.  Open Claude Code and navigate to **Settings → Model Context Protocol → Add Server**.\n2.  Set the command to `npx` and the arguments to `-y` and `@aeven/nanobanana-mcp@latest`.\n3.  Add an environment variable `MODEL_API_KEY` pointing at your provider key.\n4.  Save the server configuration and restart Claude Code (or reload the window) to connect.\n\n### For Local Development\n\nIf you have cloned this repository to work on the code, you can register your local version.\n\n**1. Install server dependencies (once per clone):**\n\n```bash\nnpm run install-deps\n```\n\n**2. Build the server:**\n\n```bash\nnpm run build\n```\n\n**3. Register with your CLI:**\n\n\n\n**For Codex CLI:**\n\n```bash\n\ncodex mcp add nanobanana --env MODEL_API_KEY=\"YOUR_API_KEY_HERE\" -- node mcp-server/dist/index.js\n\n```\n\n\n\n\n\n## 🔑 API Key Configuration\n\nThis extension requires a `MODEL_API_KEY` to authenticate with your model provider (e.g., OpenRouter). Here’s how to configure it for different clients:\n\n### Gemini CLI\n\nYou will be prompted to enter your API key automatically during the installation process.\n\n### Codex CLI\n\nThe `codex mcp add` command has a dedicated `--env` flag to handle this for you. The command provided in the \"Installation\" section already includes this and is the recommended way to install.\n\n### Other CLIs (Shell Profile)\n\nFor other clients, or if you prefer to manage the key manually, you can set the `MODEL_API_KEY` as an environment variable in your shell's profile file (e.g., `~/.zshrc`, `~/.bashrc`, or `~/.profile`).\n\n1.  Add the following line to the end of the file:\n    ```bash\n    export MODEL_API_KEY=\"YOUR_API_KEY_HERE\"\n    ```\n2.  Restart your terminal for the change to take effect.\n\n### Activate\n\nRestart your MCP CLI (Gemini CLI, Codex CLI, etc.). The following commands will be available:\n\n- `/generate` - Single or multiple image generation with style/variation options\n- `/edit` - Image editing\n- `/restore` - Image restoration\n- `/icon` - Generate app icons, favicons, and UI elements in multiple sizes\n- `/pattern` - Generate seamless patterns and textures for backgrounds\n- `/story` - Generate sequential images that tell a visual story or process\n- `/diagram` - Generate technical diagrams, flowcharts, and architectural mockups\n- `/nanobanana` - Natural language interface\n\n## 💡 Usage\n\nThe extension provides multiple command options for different use cases:\n\n> **Note:** Examples below use Gemini CLI slash commands. In Codex CLI and other MCP clients, call the same MCP tools (`generate_image`, `edit_image`, etc.) using the syntax your client provides.\n\n### 🎯 Specific Commands (Recommended)\n\n**Generate Images:**\n\n```bash\n# Single image\n/generate \"a watercolor painting of a fox in a snowy forest\"\n\n# Multiple variations with preview\n/generate \"sunset over mountains\" --count=3 --preview\n```\n\n**Edit Images:**\n\n```bash\n/edit my_photo.png \"add sunglasses to the person\"\n/edit portrait.jpg \"change background to a beach scene\" --preview\n```\n\n**Restore Images:**\n\n```bash\n/restore old_family_photo.jpg \"remove scratches and improve clarity\"\n```\n\n**Generate Icons:**\n\n```bash\n/icon \"coffee cup logo\" --sizes=\"64,128,256\" --type=\"app-icon\" --preview\n```\n\n**Create Patterns:**\n\n```bash\n/pattern \"geometric triangles\" --type=\"seamless\" --style=\"geometric\" --preview\n```\n\n**Generate Stories:**\n\n```bash\n/story \"a seed growing into a tree\" --steps=4 --type=\"process\" --preview\n```\n\n**Create Diagrams:**\n\n```bash\n/diagram \"user login process\" --type=\"flowchart\" --style=\"professional\" --preview\n```\n\n### 🌟 Natural Language Command (Flexible)\n\n**Open-ended prompts:**\n\n```bash\n/nanobanana create a logo for my tech startup\n/nanobanana I need 5 different versions of a cat illustration in various art styles\n/nanobanana fix the lighting in sunset.jpg and make it more vibrant\n```\n\n## 🎨 Advanced Generation Options\n\nThe `/generate` command supports advanced options for creating multiple variations with different styles and parameters.\n\n\\<details\\>\n\\<summary\\>Generation Options\\</summary\\>\n\n**`--count=N`** - Number of variations (1-8, default: 1)\n**`--styles=\"style1,style2\"`** - Comma-separated artistic styles\n**`--variations=\"var1,var2\"`** - Specific variation types\n**`--format=grid|separate`** - Output format (default: separate)\n**`--seed=123`** - Seed for reproducible variations\n**`--preview`** - Automatically open generated images in default viewer\n\n\\</details\\>\n\n\\<details\\>\n\\<summary\\>Available Styles\\</summary\\>\n\n- `photorealistic` - Photographic quality images\n- `watercolor` - Watercolor painting style\n- `oil-painting` - Oil painting technique\n- `sketch` - Hand-drawn sketch style\n- `pixel-art` - Retro pixel art style\n- `anime` - Anime/manga art style\n- `vintage` - Vintage/retro aesthetic\n- `modern` - Contemporary/modern style\n- `abstract` - Abstract art style\n- `minimalist` - Clean, minimal design\n\n\\</details\\>\n\n\\<details\\>\n\\<summary\\>Available Variations\\</summary\\>\n\n- `lighting` - Different lighting conditions (dramatic, soft)\n- `angle` - Various viewing angles (above, close-up)\n- `color-palette` - Different color schemes (warm, cool)\n- `composition` - Different layouts (centered, rule-of-thirds)\n- `mood` - Various emotional tones (cheerful, dramatic)\n- `season` - Different seasons (spring, winter)\n- `time-of-day` - Different times (sunrise, sunset)\n\n\\</details\\>\n\n### Advanced Examples\n\n**Style Variations:**\n\n```bash\n/generate \"mountain landscape\" --styles=\"watercolor,oil-painting,sketch,photorealistic\"\n# Creates the same mountain scene in 4 different artistic styles\n```\n\n**Multiple Variations:**\n\n```bash\n/generate \"cozy coffee shop\" --variations=\"lighting,mood\" --count=4\n# Generates: dramatic lighting, soft lighting, cheerful mood, dramatic mood versions\n```\n\n## 🎯 Icon Generation\n\nThe `/icon` command specializes in creating app icons, favicons, and UI elements with proper sizing and formatting.\n\n\\<details\\>\n\\<summary\\>Icon Options\\</summary\\>\n\n**`--sizes=\"16,32,64\"`** - Array of icon sizes in pixels (common: 16, 32, 64, 128, 256, 512, 1024)\n**`--type=\"app-icon|favicon|ui-element\"`** - Icon type (default: app-icon)\n**`--style=\"flat|skeuomorphic|minimal|modern\"`** - Visual style (default: modern)\n**`--format=\"png|jpeg\"`** - Output format (default: png)\n**`--background=\"transparent|white|black|color\"`** - Background type (default: transparent)\n**`--corners=\"rounded|sharp\"`** - Corner style for app icons (default: rounded)\n\n\\</details\\>\n\n### Icon Examples\n\n```bash\n# Complete app icon set\n/icon \"productivity app with checklist\" --sizes=\"64,128,256,512\" --corners=\"rounded\"\n\n# Website favicon package\n/icon \"mountain logo\" --type=\"favicon\" --sizes=\"16,32,64\" --format=\"png\"\n```\n\n## 🎨 Pattern & Texture Generation\n\nThe `/pattern` command creates seamless patterns and textures perfect for backgrounds and design elements.\n\n\\<details\\>\n\\<summary\\>Pattern Options\\</summary\\>\n\n**`--size=\"256x256\"`** - Pattern tile size (common: 128x128, 256x256, 512x512)\n**`--type=\"seamless|texture|wallpaper\"`** - Pattern type (default: seamless)\n**`--style=\"geometric|organic|abstract|floral|tech\"`** - Pattern style (default: abstract)\n**`--density=\"sparse|medium|dense\"`** - Element density (default: medium)\n**`--colors=\"mono|duotone|colorful\"`** - Color scheme (default: colorful)\n**`--repeat=\"tile|mirror\"`** - Tiling method for seamless patterns (default: tile)\n\n\\</details\\>\n\n### Pattern Examples\n\n```bash\n# Website background pattern\n/pattern \"subtle geometric hexagons\" --type=\"seamless\" --colors=\"duotone\" --density=\"sparse\"\n\n# Material texture\n/pattern \"brushed metal surface\" --type=\"texture\" --style=\"tech\" --colors=\"mono\"\n```\n\n## 📖 Visual Storytelling\n\nThe `/story` command generates sequential images that tell a visual story or demonstrate a step-by-step process.\n\n\\<details\\>\n\\<summary\\>Story Options\\</summary\\>\n\n**`--steps=N`** - Number of sequential images (2-8, default: 4)\n**`--type=\"story|process|tutorial|timeline\"`** - Sequence type (default: story)\n**`--style=\"consistent|evolving\"`** - Visual consistency across frames (default: consistent)\n**`--layout=\"separate|grid|comic\"`** - Output layout (default: separate)\n**`--transition=\"smooth|dramatic|fade\"`** - Transition style between steps (default: smooth)\n**`--format=\"storyboard|individual\"`** - Output format (default: individual)\n\n\\</details\\>\n\n### Story Examples\n\n```bash\n# Product development process\n/story \"idea to launched product\" --steps=5 --type=\"process\" --style=\"consistent\"\n\n# Educational tutorial\n/story \"git workflow tutorial\" --steps=6 --type=\"tutorial\" --layout=\"comic\"\n```\n\n## 📊 Technical Diagrams\n\nThe `/diagram` command generates professional technical diagrams, flowcharts, and architectural mockups from simple text descriptions.\n\n\\<details\\>\n\\<summary\\>Diagram Options\\</summary\\>\n\n**`--type=\"flowchart|architecture|network|database|wireframe|mindmap|sequence\"`** - Diagram type (default: flowchart)\n**`--style=\"professional|clean|hand-drawn|technical\"`** - Visual style (default: professional)\n**`--layout=\"horizontal|vertical|hierarchical|circular\"`** - Layout orientation (default: hierarchical)\n**`--complexity=\"simple|detailed|comprehensive\"`** - Level of detail (default: detailed)\n**`--colors=\"mono|accent|categorical\"`** - Color scheme (default: accent)\n**`--annotations=\"minimal|detailed\"`** - Label and annotation level (default: detailed)\n\n\\</details\\>\n\n### Diagram Types & Use Cases\n\n- **flowchart**: Process flows, decision trees, workflows\n- **architecture**: System architecture, microservices, infrastructure\n- **network**: Network topology, server configurations\n- **database**: Database schemas, entity relationships\n- **wireframe**: UI/UX mockups, page layouts\n- **mindmap**: Concept maps, idea hierarchies\n- **sequence**: Sequence diagrams, API interactions\n\n### Diagram Examples\n\n```bash\n# Development workflow\n/diagram \"CI/CD pipeline with testing stages\" --type=\"flowchart\" --complexity=\"detailed\"\n\n# System design\n/diagram \"chat application architecture\" --type=\"architecture\" --style=\"technical\"\n```\n\n## 📁 File Management\n\n### Smart Filename Generation\n\nImages are saved with user-friendly names based on your prompts:\n\n- `\"sunset over mountains\"` → `sunset_over_mountains.png`\n- `\"abstract art piece\"` → `abstract_art_piece.png`\n\n### Automatic Duplicate Prevention\n\nIf a file already exists, a counter is automatically added:\n\n- `sunset_over_mountains.png`\n- `sunset_over_mountains_1.png`\n- `sunset_over_mountains_2.png`\n\n### File Search Locations\n\nFor editing/restoration, the extension searches for input images in:\n\n1.  Current working directory\n2.  `./images/` subdirectory\n3.  `./input/` subdirectory\n4.  `./nanobanana-output/` subdirectory\n5.  `~/Downloads/`\n6.  `~/Desktop/`\n\n### Output Directory\n\nGenerated images are saved to `./nanobanana-output/` which is created automatically.\n\n## 🛠️ Development\n\n### Build Commands\n\n```bash\n# Build the MCP server\nnpm run build\n\n# Install MCP server dependencies\nnpm run install-deps\n\n# Development mode with file watching\nnpm run dev\n```\n\n### MCP Server Commands\n\n```bash\n# Build MCP server directly\ncd mcp-server && npm run build\n\n# Start server standalone (for testing)\ncd mcp-server && npm start\n\n# Development mode with TypeScript watching\ncd mcp-server && npm run dev\n```\n\n### Tests\n\n```bash\n# Run the full suite (build + unit + integration)\ncd mcp-server && npm test\n\n# Only unit tests (FileHandler, ImageGenerator with mocked fetch)\ncd mcp-server && npm run test:unit\n\n# Only integration tests (in-memory MCP handshake with a stub image generator)\ncd mcp-server && npm run test:integration\n```\n\n> The default integration test uses an in-memory transport and a stubbed image generator, so it runs offline and does not require an API key.\n\nTo exercise the real OpenRouter workflow end-to-end, run the manual script after setting `MODEL_API_KEY`:\n\n```bash\ncd mcp-server\nMODEL_API_KEY=\"sk-...\" node ./tests/manual/openrouter.integration.js\n```\n\nGenerated assets are placed under `mcp-server/nanobanana-output/` for manual inspection.\n\n### Verify npm packaging\n\nRun the automated smoke test to make sure the published npm binary boots correctly:\n\n```bash\nnpm run verify:npm\n```\n\nThis command packs the project, installs the tarball in a temporary directory, launches `npx nanobanana-mcp`, and confirms the stdio server banner appears. It is safe to interrupt after the success message.\n\n## 🔧 Technical Details\n\n### Key Components\n\n- **`index.ts`**: MCP server using `@modelcontextprotocol/sdk` for professional protocol handling\n- **`imageGenerator.ts`**: Handles all OpenRouter API interactions and response processing\n- **`fileHandler.ts`**: Manages file I/O, smart filename generation, and file searching\n- **`types.ts`**: Shared TypeScript interfaces for type safety\n\n### MCP Server Protocol\n\nThe extension uses the official Model Context Protocol (MCP) SDK for robust client-server communication:\n\n- **Protocol**: JSON-RPC over stdio\n- **SDK**: `@modelcontextprotocol/sdk`\n- **Tools**: `generate_image`, `edit_image`, `restore_image`\n\n### API Integration\n\n- **Model**: `google/gemini-2.5-flash-image` (configurable via environment variable)\n- **Transport**: Direct HTTP requests (OpenRouter by default; set `MODEL_BASE_URL` to target other providers hosting the model)\n- **Response Handling**: Base64 decoding with graceful fallbacks for missing image data\n- **Output Size**: All images are returned at 1024×1024 resolution (model maximum)\n\n### Error Handling\n\n- Comprehensive error messages with debugging information\n- Graceful fallbacks for API response parsing\n- File validation and search path reporting\n\n## 🐛 Troubleshooting\n\n### Common Issues\n\n1.  **\"Command not recognized\"**: Verify the MCP server is registered for your CLI (e.g., `~/.gemini/extensions/nanobanana-extension/` for Gemini CLI, Codex CLI configuration for Codex users) and restart the client\n\n2.  **\"No API key found\"**: Ensure you have entered the API key correctly when prompted during installation, or that the `MODEL_API_KEY` environment variable is set correctly if you are not using Gemini CLI.\n\n3.  **\"Build failed\"**: Ensure Node.js 18+ is installed and run `npm run install-deps && npm run build`.\n\n4.  **\"Image not found\"**: Check that input files are in one of the searched directories (see File Search Locations above)\n\n5.  **`npx` install errors**: Stale directories in `~/.npm/_npx` can cause install failures. Remove the cache with `rm -rf ~/.npm/_npx/*` and rerun the install command.\n\n### Debug Mode\n\nThe MCP server includes detailed debug logging that appears in your CLI console (Gemini CLI, Codex CLI, etc.) to help diagnose issues.\n\n## 📄 Legal\n\n- **License**: Apache License 2.0\n- **Security**: [Security Policy](SECURITY.md)\n\n## 🤝 Contributing\n\n1.  Fork the repository\n2.  Create a feature branch\n3.  Make your changes in the modular architecture\n4.  Run `npm run build` to ensure compilation\n5.  Test with your MCP CLI (Gemini CLI, Codex CLI, etc.)\n6.  Submit a pull request\n","readmeFilename":"README.md"}