@chrischall/gemini-mcp 2.3.4 → 2.4.0
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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/dist/bundle.js +14 -10
- package/dist/models.js +11 -6
- package/dist/pricing.js +4 -0
- package/dist/tools/interact.js +1 -1
- package/dist/tools/shared.js +6 -3
- package/dist/version.js +1 -1
- package/mint.yaml +1 -1
- package/package.json +1 -1
- package/server.json +3 -3
- package/skills/gemini-mcp/SKILL.md +3 -2
|
@@ -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.
|
|
10
|
+
"version": "2.4.0"
|
|
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.
|
|
18
|
+
"version": "2.4.0",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ Developed and maintained by AI (Claude Code).
|
|
|
13
13
|
| Variable | Required | Description |
|
|
14
14
|
|---|---|---|
|
|
15
15
|
| `GEMINI_API_KEY` | Yes | Your Google Gemini API key ([aistudio.google.com/apikey](https://aistudio.google.com/apikey)) |
|
|
16
|
-
| `GEMINI_IMAGE_MODEL` | No | Override the default image model (default: `gemini-
|
|
16
|
+
| `GEMINI_IMAGE_MODEL` | No | Override the default image model (default: `gemini-nano-banana-2.1`) |
|
|
17
17
|
| `GEMINI_OUTPUT_DIR` | No | Default directory for generated images (default: ~/Downloads/gemini-mcp). 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
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 |
|
package/dist/bundle.js
CHANGED
|
@@ -23439,10 +23439,10 @@ var require_v4 = __commonJS({
|
|
|
23439
23439
|
}
|
|
23440
23440
|
});
|
|
23441
23441
|
|
|
23442
|
-
// node_modules/@modelcontextprotocol/core/dist/auth-BNDyLTqp.mjs
|
|
23442
|
+
// node_modules/@modelcontextprotocol/server/node_modules/@modelcontextprotocol/core/dist/auth-BNDyLTqp.mjs
|
|
23443
23443
|
var z, LATEST_PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, RELATED_TASK_META_KEY, PROTOCOL_VERSION_META_KEY, CLIENT_INFO_META_KEY, SERVER_INFO_META_KEY, CLIENT_CAPABILITIES_META_KEY, SUBSCRIPTION_ID_META_KEY, LOG_LEVEL_META_KEY, JSONRPC_VERSION, JSONValueSchema, JSONObjectSchema, JSONArraySchema, ProgressTokenSchema, CursorSchema, TaskMetadataSchema, RelatedTaskMetadataSchema, RequestMetaSchema, BaseRequestParamsSchema, TaskAugmentedRequestParamsSchema, RequestSchema, NotificationsParamsSchema, NotificationSchema, ResultMetaObjectSchema, ResultSchema, RequestIdSchema, JSONRPCRequestSchema, JSONRPCNotificationSchema, JSONRPCResultResponseSchema, JSONRPCErrorResponseSchema, JSONRPCMessageSchema, JSONRPCResponseSchema, EmptyResultSchema, CancelledNotificationParamsSchema, CancelledNotificationSchema, IconSchema, IconsSchema, BaseMetadataSchema, ImplementationSchema, FormElicitationCapabilitySchema, ElicitationCapabilitySchema, ClientTasksCapabilitySchema, ServerTasksCapabilitySchema, ClientCapabilitiesSchema, InitializeRequestParamsSchema, InitializeRequestSchema, ServerCapabilitiesSchema, InitializeResultSchema, InitializedNotificationSchema, DiscoverRequestSchema, DiscoverResultSchema, PingRequestSchema, ProgressSchema, ProgressNotificationParamsSchema, ProgressNotificationSchema, PaginatedRequestParamsSchema, PaginatedRequestSchema, PaginatedResultSchema, ResourceContentsSchema, TextResourceContentsSchema, Base64Schema, BlobResourceContentsSchema, RoleSchema, AnnotationsSchema, ResourceSchema, ResourceTemplateSchema, ListResourcesRequestSchema, ListResourcesResultSchema, ListResourceTemplatesRequestSchema, ListResourceTemplatesResultSchema, ResourceRequestParamsSchema, ReadResourceRequestParamsSchema, ReadResourceRequestSchema, ReadResourceResultSchema, ResourceListChangedNotificationSchema, SubscribeRequestParamsSchema, SubscribeRequestSchema, UnsubscribeRequestParamsSchema, UnsubscribeRequestSchema, SubscriptionFilterSchema, SubscriptionsListenRequestParamsSchema, SubscriptionsListenRequestSchema, SubscriptionsAcknowledgedNotificationParamsSchema, SubscriptionsAcknowledgedNotificationSchema, SubscriptionsListenResultMetaSchema, SubscriptionsListenResultSchema, ResourceUpdatedNotificationParamsSchema, ResourceUpdatedNotificationSchema, PromptArgumentSchema, PromptSchema, ListPromptsRequestSchema, ListPromptsResultSchema, GetPromptRequestParamsSchema, GetPromptRequestSchema, TextContentSchema, ImageContentSchema, AudioContentSchema, ToolUseContentSchema, EmbeddedResourceSchema, ResourceLinkSchema, ContentBlockSchema, PromptMessageSchema, GetPromptResultSchema, PromptListChangedNotificationSchema, ToolAnnotationsSchema, ToolExecutionSchema, ToolSchema, ListToolsRequestSchema, ListToolsResultSchema, CallToolResultSchema, CompatibilityCallToolResultSchema, CallToolRequestParamsSchema, CallToolRequestSchema, ToolListChangedNotificationSchema, ListChangedOptionsBaseSchema, LoggingLevelSchema, SetLevelRequestParamsSchema, SetLevelRequestSchema, LoggingMessageNotificationParamsSchema, LoggingMessageNotificationSchema, ModelHintSchema, ModelPreferencesSchema, ToolChoiceSchema, ToolResultContentSchema, SamplingContentSchema, SamplingMessageContentBlockSchema, SamplingMessageSchema, CreateMessageRequestParamsSchema, CreateMessageRequestSchema, CreateMessageResultSchema, CreateMessageResultWithToolsSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema, UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema, LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema, EnumSchemaSchema, PrimitiveSchemaDefinitionSchema, ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema, ElicitRequestParamsSchema, ElicitRequestSchema, ElicitationCompleteNotificationParamsSchema, ElicitationCompleteNotificationSchema, ElicitResultSchema, ResourceTemplateReferenceSchema, PromptReferenceSchema, CompleteRequestParamsSchema, CompleteRequestSchema, CompleteResultSchema, RootSchema, ListRootsRequestSchema, ListRootsResultSchema, RootsListChangedNotificationSchema, TaskCreationParamsSchema, TaskStatusSchema, TaskSchema, CreateTaskResultSchema, TaskStatusNotificationParamsSchema, TaskStatusNotificationSchema, GetTaskRequestSchema, GetTaskResultSchema, GetTaskPayloadRequestSchema, GetTaskPayloadResultSchema, ListTasksRequestSchema, ListTasksResultSchema, CancelTaskRequestSchema, CancelTaskResultSchema, ClientRequestSchema, ClientNotificationSchema, ClientResultSchema, ServerRequestSchema, ServerNotificationSchema, ServerResultSchema, SafeUrlSchema, OAuthProtectedResourceMetadataSchema, OAuthMetadataSchema, OpenIdProviderMetadataSchema, OpenIdProviderDiscoveryMetadataSchema, OAuthTokensSchema, IdJagTokenExchangeResponseSchema, OAuthErrorResponseSchema, OptionalSafeUrlSchema, OAuthClientMetadataSchema, OAuthClientInformationSchema, OAuthClientInformationFullSchema, OAuthClientRegistrationErrorSchema, OAuthTokenRevocationRequestSchema;
|
|
23444
23444
|
var init_auth_BNDyLTqp = __esm({
|
|
23445
|
-
"node_modules/@modelcontextprotocol/core/dist/auth-BNDyLTqp.mjs"() {
|
|
23445
|
+
"node_modules/@modelcontextprotocol/server/node_modules/@modelcontextprotocol/core/dist/auth-BNDyLTqp.mjs"() {
|
|
23446
23446
|
z = __toESM(require_v4(), 1);
|
|
23447
23447
|
LATEST_PROTOCOL_VERSION = "2025-11-25";
|
|
23448
23448
|
SUPPORTED_PROTOCOL_VERSIONS = [
|
|
@@ -24386,9 +24386,9 @@ var init_auth_BNDyLTqp = __esm({
|
|
|
24386
24386
|
}
|
|
24387
24387
|
});
|
|
24388
24388
|
|
|
24389
|
-
// node_modules/@modelcontextprotocol/core/dist/internal.mjs
|
|
24389
|
+
// node_modules/@modelcontextprotocol/server/node_modules/@modelcontextprotocol/core/dist/internal.mjs
|
|
24390
24390
|
var init_internal = __esm({
|
|
24391
|
-
"node_modules/@modelcontextprotocol/core/dist/internal.mjs"() {
|
|
24391
|
+
"node_modules/@modelcontextprotocol/server/node_modules/@modelcontextprotocol/core/dist/internal.mjs"() {
|
|
24392
24392
|
init_auth_BNDyLTqp();
|
|
24393
24393
|
}
|
|
24394
24394
|
});
|
|
@@ -61227,7 +61227,7 @@ async function loadStdioDotenv() {
|
|
|
61227
61227
|
}
|
|
61228
61228
|
|
|
61229
61229
|
// src/version.ts
|
|
61230
|
-
var VERSION = "2.
|
|
61230
|
+
var VERSION = "2.4.0";
|
|
61231
61231
|
|
|
61232
61232
|
// src/errors.ts
|
|
61233
61233
|
init_dist2();
|
|
@@ -61511,14 +61511,14 @@ init_zod();
|
|
|
61511
61511
|
init_dist2();
|
|
61512
61512
|
|
|
61513
61513
|
// src/models.ts
|
|
61514
|
-
var DEFAULT_IMAGE_MODEL = "gemini-
|
|
61514
|
+
var DEFAULT_IMAGE_MODEL = "gemini-nano-banana-2.1";
|
|
61515
61515
|
var DEFAULT_VIDEO_MODEL = "gemini-omni-1.1-flash";
|
|
61516
61516
|
var DEFAULT_MUSIC_MODEL = "lyria-3-clip-preview";
|
|
61517
61517
|
function resolveModel(perCall, envOverride) {
|
|
61518
61518
|
return perCall?.trim() || envOverride?.trim() || DEFAULT_IMAGE_MODEL;
|
|
61519
61519
|
}
|
|
61520
61520
|
function filterImageModels(raw) {
|
|
61521
|
-
return raw.filter((m) => /image/i.test(m.name ?? "") && !/imagen/i.test(m.name ?? "")).map((m) => ({
|
|
61521
|
+
return raw.filter((m) => /image|nano-banana/i.test(m.name ?? "") && !/imagen/i.test(m.name ?? "")).map((m) => ({
|
|
61522
61522
|
id: (m.name ?? "").replace(/^models\//, ""),
|
|
61523
61523
|
displayName: m.displayName ?? "",
|
|
61524
61524
|
description: m.description ?? ""
|
|
@@ -62399,7 +62399,7 @@ function resolveAspectRatio(opts, supported) {
|
|
|
62399
62399
|
var orientationSchema = external_exports.enum(ORIENTATIONS).optional().describe(
|
|
62400
62400
|
"Output shape in plain terms: landscape (16:9), portrait (9:16) or square (1:1). For any other proportion \u2014 3:2, 4:3, 4:5, 21:9 \u2014 use aspect_ratio, which wins if both are given."
|
|
62401
62401
|
);
|
|
62402
|
-
var MODEL_CHOICE_GUIDE = "gemini-
|
|
62402
|
+
var MODEL_CHOICE_GUIDE = "gemini-nano-banana-2.1 (Nano Banana 2.1, the default) is the generalist: fast, 4K, reliable text, strong multi-reference consistency. gemini-3-pro-image (Pro) is for the hardest work \u2014 best world knowledge, brand precision. gemini-3.1-flash-lite-image (Lite) is cheapest: 1K only, no search grounding.";
|
|
62403
62403
|
var timeoutMsSchema = external_exports.number().int().positive().optional().describe(
|
|
62404
62404
|
"Upstream timeout in ms for this call (default $GEMINI_TIMEOUT_MS, else 60000 \u2014 120000 at 4K, which runs past 60s)"
|
|
62405
62405
|
);
|
|
@@ -62502,7 +62502,7 @@ var sharedImageSchema = {
|
|
|
62502
62502
|
model: external_exports.string().regex(/^[\w.-]+$/, 'must be a bare model id (letters, digits, ".", "_", "-")').optional().describe(`Model id override (default: server default; see gemini_list_models). ${MODEL_CHOICE_GUIDE}`),
|
|
62503
62503
|
aspect_ratio: external_exports.enum(ASPECT_RATIOS).optional().describe("Exact output aspect ratio. For a plain landscape/portrait/square request, `orientation` is the shorthand; this wins if both are given."),
|
|
62504
62504
|
orientation: orientationSchema,
|
|
62505
|
-
image_size: external_exports.enum(IMAGE_SIZES).optional().describe("Output resolution (512 = 0.5K,
|
|
62505
|
+
image_size: external_exports.enum(IMAGE_SIZES).optional().describe("Output resolution (512 = 0.5K, gemini-3.1-flash-image only)"),
|
|
62506
62506
|
output_dir: external_exports.string().optional().describe("Directory to write images to (default: $GEMINI_OUTPUT_DIR or ~/Downloads/gemini-mcp)"),
|
|
62507
62507
|
inline: external_exports.boolean().optional().describe("Return the image as an inline image block you can SEE, instead of a path (stdio) or link (hosted). The default costs nothing to carry and hands back a reference you can reuse; use this when you need to check the result yourself. On the hosted connector gemini_view_media does the same for an image you already have"),
|
|
62508
62508
|
seed: external_exports.number().int().optional().describe("Seed for reproducible generation; random if omitted"),
|
|
@@ -63336,6 +63336,10 @@ var PRICED_AT = "2026-09-09";
|
|
|
63336
63336
|
var RATE_CARD = Object.freeze({
|
|
63337
63337
|
"gemini-3-pro-image": { input: 2, text_output: 12, image_output: 120 },
|
|
63338
63338
|
"gemini-3.1-flash-image": { input: 0.5, text_output: 3, image_output: 60 },
|
|
63339
|
+
// Nano Banana 2.1 (GA 2026-10-06; rates read 2026-10-14, after PRICED_AT):
|
|
63340
|
+
// a pricier input and text rate than 2 but half the image rate, so a 1K
|
|
63341
|
+
// image is $0.0336 rather than $0.067.
|
|
63342
|
+
"gemini-nano-banana-2.1": { input: 1.5, text_output: 7.5, image_output: 30 },
|
|
63339
63343
|
"gemini-3.1-flash-lite-image": { input: 0.25, text_output: 1.5, image_output: 30 },
|
|
63340
63344
|
// Google publishes 2.5-flash-image's output as $0.039 PER IMAGE at 1290
|
|
63341
63345
|
// tokens, not as a per-1M rate. 0.039 / 1290 * 1e6 = 30.23 — a back-derived
|
|
@@ -65345,7 +65349,7 @@ function registerInteractTools(server, client2) {
|
|
|
65345
65349
|
model: external_exports.string().optional().describe(`Model id override (default: server default; see gemini_list_models). ${MODEL_CHOICE_GUIDE}`),
|
|
65346
65350
|
aspect_ratio: external_exports.enum(ASPECT_RATIOS).optional().describe("Exact output aspect ratio. For a plain landscape/portrait/square request, `orientation` is the shorthand; this wins if both are given."),
|
|
65347
65351
|
orientation: orientationSchema,
|
|
65348
|
-
image_size: external_exports.enum(IMAGE_SIZES).optional().describe("Output resolution (512 = 0.5K,
|
|
65352
|
+
image_size: external_exports.enum(IMAGE_SIZES).optional().describe("Output resolution (512 = 0.5K, gemini-3.1-flash-image only)"),
|
|
65349
65353
|
thinking_level: external_exports.enum(["minimal", "high"]).optional().describe("Reasoning depth; higher can help complex/structural edits"),
|
|
65350
65354
|
filename: external_exports.string().optional().describe("Base filename for the output image (extension stripped; default: slugified input)"),
|
|
65351
65355
|
output_dir: external_exports.string().optional().describe("Directory to write images to (default: $GEMINI_OUTPUT_DIR or ~/Downloads/gemini-mcp)"),
|
package/dist/models.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The generalist workhorse (Nano Banana 2) — overridable per-call and via
|
|
3
|
-
* GEMINI_IMAGE_MODEL.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* The generalist workhorse (Nano Banana 2.1) — overridable per-call and via
|
|
3
|
+
* GEMINI_IMAGE_MODEL. Replaced gemini-3.1-flash-image (Nano Banana 2), which
|
|
4
|
+
* Google deprecated 2026-10-06 with no shutdown date yet; 2.1 is also half the
|
|
5
|
+
* per-image price ($0.0336 vs $0.067 at 1K). The premium gemini-3-pro-image
|
|
6
|
+
* is a deliberate opt-in: it costs more and needs a funded account, so callers
|
|
7
|
+
* reach for it via the `model` param when the task warrants it (see
|
|
8
|
+
* MODEL_CHOICE_GUIDE).
|
|
6
9
|
*/
|
|
7
|
-
export const DEFAULT_IMAGE_MODEL = 'gemini-
|
|
10
|
+
export const DEFAULT_IMAGE_MODEL = 'gemini-nano-banana-2.1';
|
|
8
11
|
/**
|
|
9
12
|
* Default video model (omni, Interactions API) — overridable per-call.
|
|
10
13
|
*
|
|
@@ -28,10 +31,12 @@ export function resolveModel(perCall, envOverride) {
|
|
|
28
31
|
* Keep only Gemini image-generation models (the Nano Banana family) and strip
|
|
29
32
|
* the `models/` prefix. Excludes `imagen-*` — those contain the substring
|
|
30
33
|
* "image" but use a different `:predict` API this server doesn't implement.
|
|
34
|
+
* `nano-banana` is matched too: `gemini-nano-banana-2.1`, the default, has no
|
|
35
|
+
* "image" in its id and would otherwise be invisible to gemini_list_models.
|
|
31
36
|
*/
|
|
32
37
|
export function filterImageModels(raw) {
|
|
33
38
|
return raw
|
|
34
|
-
.filter((m) => /image/i.test(m.name ?? '') && !/imagen/i.test(m.name ?? ''))
|
|
39
|
+
.filter((m) => /image|nano-banana/i.test(m.name ?? '') && !/imagen/i.test(m.name ?? ''))
|
|
35
40
|
.map((m) => ({
|
|
36
41
|
id: (m.name ?? '').replace(/^models\//, ''),
|
|
37
42
|
displayName: m.displayName ?? '',
|
package/dist/pricing.js
CHANGED
|
@@ -57,6 +57,10 @@ export const PRICED_AT = '2026-09-09';
|
|
|
57
57
|
export const RATE_CARD = Object.freeze({
|
|
58
58
|
'gemini-3-pro-image': { input: 2.0, text_output: 12.0, image_output: 120.0 },
|
|
59
59
|
'gemini-3.1-flash-image': { input: 0.5, text_output: 3.0, image_output: 60.0 },
|
|
60
|
+
// Nano Banana 2.1 (GA 2026-10-06; rates read 2026-10-14, after PRICED_AT):
|
|
61
|
+
// a pricier input and text rate than 2 but half the image rate, so a 1K
|
|
62
|
+
// image is $0.0336 rather than $0.067.
|
|
63
|
+
'gemini-nano-banana-2.1': { input: 1.5, text_output: 7.5, image_output: 30.0 },
|
|
60
64
|
'gemini-3.1-flash-lite-image': { input: 0.25, text_output: 1.5, image_output: 30.0 },
|
|
61
65
|
// Google publishes 2.5-flash-image's output as $0.039 PER IMAGE at 1290
|
|
62
66
|
// tokens, not as a per-1M rate. 0.039 / 1290 * 1e6 = 30.23 — a back-derived
|
package/dist/tools/interact.js
CHANGED
|
@@ -121,7 +121,7 @@ export function registerInteractTools(server, client) {
|
|
|
121
121
|
image_size: z
|
|
122
122
|
.enum(IMAGE_SIZES)
|
|
123
123
|
.optional()
|
|
124
|
-
.describe('Output resolution (512 = 0.5K,
|
|
124
|
+
.describe('Output resolution (512 = 0.5K, gemini-3.1-flash-image only)'),
|
|
125
125
|
thinking_level: z
|
|
126
126
|
.enum(['minimal', 'high'])
|
|
127
127
|
.optional()
|
package/dist/tools/shared.js
CHANGED
|
@@ -14,7 +14,10 @@ import { buildZip } from '../zip.js';
|
|
|
14
14
|
const DEFAULT_SINK = createDiskSink();
|
|
15
15
|
/** Supported output aspect ratios (Gemini image API). */
|
|
16
16
|
export const ASPECT_RATIOS = ['1:1', '2:3', '3:2', '3:4', '4:3', '4:5', '5:4', '9:16', '16:9', '21:9', '1:4', '4:1', '1:8', '8:1'];
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Supported output resolutions. `512` (0.5K) is gemini-3.1-flash-image only — Nano Banana 2.1, the
|
|
19
|
+
* default, documents 1K/2K/4K — while `1K`/`2K`/`4K` work on all image models.
|
|
20
|
+
*/
|
|
18
21
|
export const IMAGE_SIZES = ['512', '1K', '2K', '4K'];
|
|
19
22
|
/**
|
|
20
23
|
* The words people actually use for shape, as a shorthand over
|
|
@@ -77,7 +80,7 @@ export const orientationSchema = z
|
|
|
77
80
|
* When to pick which Nano Banana model — shared by every tool's `model` param
|
|
78
81
|
* so the guidance can't drift between them.
|
|
79
82
|
*/
|
|
80
|
-
export const MODEL_CHOICE_GUIDE = 'gemini-
|
|
83
|
+
export const MODEL_CHOICE_GUIDE = 'gemini-nano-banana-2.1 (Nano Banana 2.1, the default) is the generalist: fast, 4K, reliable text, strong ' +
|
|
81
84
|
'multi-reference consistency. gemini-3-pro-image (Pro) is for the hardest work — best world knowledge, brand ' +
|
|
82
85
|
'precision. gemini-3.1-flash-lite-image (Lite) is cheapest: 1K only, no search grounding.';
|
|
83
86
|
/**
|
|
@@ -299,7 +302,7 @@ export const sharedImageSchema = {
|
|
|
299
302
|
.optional()
|
|
300
303
|
.describe('Exact output aspect ratio. For a plain landscape/portrait/square request, `orientation` is the shorthand; this wins if both are given.'),
|
|
301
304
|
orientation: orientationSchema,
|
|
302
|
-
image_size: z.enum(IMAGE_SIZES).optional().describe('Output resolution (512 = 0.5K,
|
|
305
|
+
image_size: z.enum(IMAGE_SIZES).optional().describe('Output resolution (512 = 0.5K, gemini-3.1-flash-image only)'),
|
|
303
306
|
output_dir: z.string().optional().describe('Directory to write images to (default: $GEMINI_OUTPUT_DIR or ~/Downloads/gemini-mcp)'),
|
|
304
307
|
inline: z.boolean().optional().describe('Return the image as an inline image block you can SEE, instead of a path (stdio) or link (hosted). The default costs nothing to carry and hands back a reference you can reuse; use this when you need to check the result yourself. On the hosted connector gemini_view_media does the same for an image you already have'),
|
|
305
308
|
seed: z.number().int().optional().describe('Seed for reproducible generation; random if omitted'),
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Single source of the server version. release-please bumps the literal below. */
|
|
2
|
-
export const VERSION = '2.
|
|
2
|
+
export const VERSION = '2.4.0'; // x-release-please-version
|
package/mint.yaml
CHANGED
|
@@ -13,7 +13,7 @@ env:
|
|
|
13
13
|
- name: GEMINI_IMAGE_MODEL
|
|
14
14
|
required: false
|
|
15
15
|
help: >-
|
|
16
|
-
Override the default image model (default: gemini-
|
|
16
|
+
Override the default image model (default: gemini-nano-banana-2.1)
|
|
17
17
|
- name: GEMINI_OUTPUT_DIR
|
|
18
18
|
required: false
|
|
19
19
|
help: >-
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrischall/gemini-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"mcpName": "io.github.chrischall/gemini-mcp",
|
|
5
5
|
"description": "Gemini image-generation MCP server for Claude — developed and maintained by AI (Claude Code)",
|
|
6
6
|
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/chrischall/gemini-mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "2.
|
|
9
|
+
"version": "2.4.0",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "@chrischall/gemini-mcp",
|
|
14
|
-
"version": "2.
|
|
14
|
+
"version": "2.4.0",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"name": "GEMINI_IMAGE_MODEL",
|
|
28
|
-
"description": "Override the default image model (default: gemini-
|
|
28
|
+
"description": "Override the default image model (default: gemini-nano-banana-2.1)",
|
|
29
29
|
"isRequired": false,
|
|
30
30
|
"format": "string",
|
|
31
31
|
"isSecret": false
|
|
@@ -69,7 +69,7 @@ Note: Image generation requires a billing-enabled Google Cloud project.
|
|
|
69
69
|
| Variable | Required | Description |
|
|
70
70
|
|---|---|---|
|
|
71
71
|
| `GEMINI_API_KEY` | Yes | Your Google Gemini API key |
|
|
72
|
-
| `GEMINI_IMAGE_MODEL` | No | Override the default image model (default: `gemini-
|
|
72
|
+
| `GEMINI_IMAGE_MODEL` | No | Override the default image model (default: `gemini-nano-banana-2.1`) |
|
|
73
73
|
| `GEMINI_OUTPUT_DIR` | No | Default directory for saved images (default: ~/Downloads/gemini-mcp) |
|
|
74
74
|
| `GEMINI_INPUT_DIR` | No | Directory to resolve bare input-image filenames against (e.g. point at Cowork's `uploads/` folder so `images: ["house.jpg"]` works) |
|
|
75
75
|
|
|
@@ -84,7 +84,8 @@ Note: Image generation requires a billing-enabled Google Cloud project.
|
|
|
84
84
|
|
|
85
85
|
| Model | When to use | Reference-image caps (of 14 max) |
|
|
86
86
|
|-------|-------------|----------------------------------|
|
|
87
|
-
| `gemini-
|
|
87
|
+
| `gemini-nano-banana-2.1` (Nano Banana 2.1, **default**) | The versatile generalist workhorse for all tasks — an update to Nano Banana 2 with better visual quality, prompt adherence, character consistency and text rendering; 1K/2K/4K, $0.0336 per 1K image | up to 10 objects + 4 characters |
|
|
88
|
+
| `gemini-3.1-flash-image` (Nano Banana 2, **deprecated** 2026-10-06, no shutdown date yet) | The previous generalist workhorse — balances speed with state-of-the-art 4K generation, world knowledge, and reliable text rendering; excels at multi-reference-image processing and consistency. Only model with video input + image_search grounding | 10 objects + 4 characters + 3 style refs |
|
|
88
89
|
| `gemini-3-pro-image` (Nano Banana Pro) | The premium choice for the most complex visual tasks — highest world knowledge, advanced localization, accurate brand consistency, precision creative control | 6 objects + 5 characters |
|
|
89
90
|
| `gemini-3.1-flash-lite-image` (Nano Banana 2 Lite) | The fastest/cheapest for simple tasks — 1K output only, no Google Search grounding | 14 objects (no character consistency) |
|
|
90
91
|
|