DBDelve
Dive deep into your data. A fast, native, multi-engine database client written in Rust. Free and open source, no telemetry.
翻訳待ち
Free AI image generation MCP server — no API key, no billing. Nano Banana via Google Flow with your own Google account. Exact pixel sizes, reference images, $0 per image.
翻訳待ち
開発ツールTypeScript · JavaScriptGitHub @frannkurt自分でインストール所有者未確認
Paste into Claude or ChatGPT for installation instructions suited to your environment.
Have you tried it? One tap is enough. No sign-in needed.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗generate_image(prompt: "an orange fox on a white background", size: "1200x630")
-> images/an-orange-fox-on-a-white-background.jpg 1200x630 0 credits
Every image in this README was generated by this server. The banner above, the crops below, and the logo renders further down. Nothing was touched up by hand.
Every other image MCP server bills you. You register for an API key, attach a credit card, and pay per image — a few cents each, which quietly becomes real money once a model is iterating on a design and throwing away nine attempts out of ten.
This one doesn't, because it isn't calling a paid API at all. It drives Nano Banana, the image model inside Google Flow, through the web app you already have access to. Flow charges credits for video. Images cost zero.
| API-based image MCPs | nano-banana-mcp | |
|---|---|---|
| API key | Required | None |
| Billing account | Required | None |
| Cost per image | Cents each, and it adds up | $0.00 |
| Setup | Register, key, billing, secret | Sign into Google in a Chrome window |
| Exact pixel sizes | Rarely | Yes |
| Reference images | Sometimes | Yes |
The trade-off is honest and worth stating: it needs a real Chrome window that you are signed into, so it can't run headless or in CI. That's the price of not having a bill.
Flow generates in five fixed aspect ratios: 16:9, 4:3, 1:1, 3:4 and 9:16. Real design work almost never lands on one of them — an Open Graph card is 1200×630, a repo banner is 1456×180, an avatar is 400×400.
This server generates at the closest native ratio and crops to the exact size, using saliency detection so the crop
doesn't decapitate your subject. Ask for 1200x630, get a 1200×630 file.
What "exact size" does and doesn't mean. The model is not generating at your dimensions — Flow always returns its own native resolution, around 1 megapixel (1376×768 for 16:9, 1024×1024 for 1:1). The exact size is produced here, locally, by cropping and scaling that result. The file you get really is 1200×630; the pixels in it came from a 1376×768 render.
That's a genuine convenience when you're going down from native, which covers most web work. Going up it will still hand you the file you asked for — request 3000×3000 and you get 3000×3000 — but those extra pixels are interpolated, not generated. There is no more detail in them. The server prints a warning when this happens; if you need real resolution beyond native, upscale deliberately with a tool built for it.
One generation, three sizes. Same source image, cropped three ways — note how the crop follows the subject instead of blindly taking the centre:
1200x630 — Open Graph | 400x400 — avatar |
|---|---|
1456x180 — repo banner
Give it an image and the prompt stops describing what to create and starts describing what to change. Feed it a flat logo and ask for it letterpressed into cotton paper, or cast as a matte signage object:
Left: the source vector, handed in as a reference. Centre and right: two generations from it, four variants each, 0 credits, about a minute per batch.
generate_image({
prompt: "this logo letterpressed into thick warm off-white cotton paper, raking side light",
reference_images: ["assets/logo.png"],
count: 4
})
// iterating on the same reference? don't re-upload it
generate_image({
prompt: "same, but with a deeper impression and visible paper tooth",
reference_library_names: ["logo.png"],
count: 4
})
Flow doesn't take a file straight into the composer: it uploads to the project library first, and you pick it from there. Both steps are handled for you, including the confirm click that actually attaches it. Any reference left over from a previous turn is cleared first — a forgotten one silently changes the image, and the result gets blamed on the prompt.
Flow has no public API. Its internal generation call is signed with a reCAPTCHA Enterprise token minted by the page's own JavaScript, so it cannot be replayed from outside the browser — and this project does not try to. That single constraint shapes the whole design.
So it does what a person would do: type into the composer and press Enter. What's different is how it reads the result.
It intercepts the page's own network response instead of watching the library for something new to show up. That response already carries the media id, the true dimensions and a signed URL, so there's no polling, no guessing which thumbnail is yours, and no ambiguity when several generations are in flight. The only fragile part left is typing the prompt.
One request, four responses. Ask for four variants and Flow doesn't return an array — it sends four separate HTTP responses, staggered by a couple of seconds. Waiting for "the next response" quietly drops three of them and looks exactly like an account limit. The collector listens to the whole stream and closes on whichever comes first: all expected images, a 20-second silence, or the hard timeout. It never discards what already arrived.
UI anchors are Material Symbols ligature names (crop_16_9, image, add_2) and numeric labels (16:9, x4).
Those are identifiers, not translatable text, so it behaves the same whether the interface is in English, Spanish or
Japanese.
This is the beginning of the README. Read the rest at the original. Read the full README ↗