@chrischall/gemini-mcp 2.2.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "metadata": {
9
9
  "description": "MCP server for Google Gemini image generation and editing — generate and edit images via the Gemini API",
10
- "version": "2.2.0"
10
+ "version": "2.3.1"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "Gemini Images",
16
16
  "source": "./",
17
17
  "description": "Generate and edit images with Google Gemini image models (Nano Banana / Nano Banana Pro) via natural language prompts",
18
- "version": "2.2.0",
18
+ "version": "2.3.1",
19
19
  "author": {
20
20
  "name": "Chris Hall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gemini-mcp",
3
3
  "displayName": "Gemini Images",
4
- "version": "2.2.0",
4
+ "version": "2.3.1",
5
5
  "description": "MCP server for Google Gemini image generation and editing — generate and edit images via the Gemini API",
6
6
  "author": {
7
7
  "name": "Chris Hall",
package/README.md CHANGED
@@ -14,8 +14,10 @@ Developed and maintained by AI (Claude Code).
14
14
  |---|---|---|
15
15
  | `GEMINI_API_KEY` | Yes | Your Google Gemini API key ([aistudio.google.com/apikey](https://aistudio.google.com/apikey)) |
16
16
  | `GEMINI_IMAGE_MODEL` | No | Override the default image model (default: `gemini-3.1-flash-image`) |
17
- | `GEMINI_OUTPUT_DIR` | No | Default directory for generated images (default: current working directory) |
17
+ | `GEMINI_OUTPUT_DIR` | No | Default directory for generated images (default: current working directory). When set, a per-call `output_dir` must be inside it. |
18
18
  | `GEMINI_INPUT_DIR` | No | Directory to resolve bare input-image filenames against (so `images: ["foo.jpg"]` works) |
19
+ | `GEMINI_UPLOAD_DIR` | No | Restrict local files streamed to the Gemini Files API (`gemini_upload_file` `path`, `video_path`) to these directories — one or more, separated by `:` (`;` on Windows); `~` allowed. A path outside is refused before any upload. Unset: no restriction |
20
+ | `GEMINI_REFERENCE_DIR` | No | Restrict local **reference images** (the `images` / `master_images` paths read and sent to Gemini — inline, or as a Files API upload once reused) to these directories — `:`-separated (`;` on Windows), `~` allowed; `GEMINI_OUTPUT_DIR` is always allowed too, so generated images can be fed back in. A path outside (symlinks followed) is refused before it is read. Unset: `GEMINI_UPLOAD_DIR` applies instead. If both are unset, reference images are **unrestricted** on a local install (any file the server can read can be sent), and confined to `$MCP_DATA_DIR/uploads` when `MCP_DATA_DIR` is set (hosted) |
19
21
  | `GEMINI_TIMEOUT_MS` | No | Upstream request timeout in ms (default: `60000`, or `120000` for `image_size: "4K"`); each generation tool also takes a per-call `timeout_ms` |
20
22
  | `GEMINI_HEARTBEAT_MS` | No | Progress-notification cadence in ms while a generation runs (default: `10000`; `0` disables) — keeps MCP hosts that reset their timeout on progress from timing out long generations |
21
23
  | `GEMINI_CHAIN_RETRY_MS` | No | How long to wait out interactions-store lag when a chained call 404s (default: `120000`; `0` disables retrying) |
@@ -189,6 +191,15 @@ safe form, and a markdown link is a reasonable enhancement where you know it ren
189
191
  Signed-URL lifetime is clamped to `MEDIA_TTL_DAYS`, so a link never outlives the object it
190
192
  points at.
191
193
 
194
+ **Prompts are stored too.** Each generated object on a hosted deployment gets a small JSON
195
+ record beside it holding the prompt (first 500 characters), model and interaction id — that is
196
+ what `gemini_list_recent_media` shows and what lets a lost turn be recovered. The record lives
197
+ and is swept with its object, so it is kept for the same `MEDIA_TTL_DAYS` window, not longer.
198
+ Locally, `gemini_interact` writes an `<image>.json` sidecar (model, interaction id, options and
199
+ any text the model replied with — not the prompt itself) next to each image in the output dir;
200
+ those files are yours to keep or delete and never expire on their own. If your
201
+ prompts describe real people, bear in mind they sit in your bucket for the retention window.
202
+
192
203
  ## Sending reference images without burning context
193
204
 
194
205
  Every tool that takes a reference image — `gemini_image_generate`, `gemini_image_edit`,