ultimate-gemini-mcp 1.0.18__tar.gz → 1.5.1__tar.gz
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.
Potentially problematic release.
This version of ultimate-gemini-mcp might be problematic. Click here for more details.
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/PKG-INFO +1 -1
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/pyproject.toml +1 -1
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/__init__.py +1 -1
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/config/constants.py +1 -1
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/server.py +2 -30
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/tools/__init__.py +1 -6
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/tools/batch_generate.py +1 -7
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/tools/generate_image.py +5 -61
- ultimate_gemini_mcp-1.0.18/.genkit/traces_idx/genkit.metadata +0 -1
- ultimate_gemini_mcp-1.0.18/FIX_VERIFICATION_TEST_PLAN.md +0 -601
- ultimate_gemini_mcp-1.0.18/app.py +0 -17
- ultimate_gemini_mcp-1.0.18/raw_response.json +0 -8
- ultimate_gemini_mcp-1.0.18/request.json +0 -14
- ultimate_gemini_mcp-1.0.18/request_exact.json +0 -14
- ultimate_gemini_mcp-1.0.18/response_exact.json +0 -8
- ultimate_gemini_mcp-1.0.18/src/prompts/__init__.py +0 -1
- ultimate_gemini_mcp-1.0.18/src/resources/__init__.py +0 -1
- ultimate_gemini_mcp-1.0.18/src/utils/__init__.py +0 -1
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/.env.example +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/.github/workflows/README.md +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/.github/workflows/claude-code-review.yml +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/.github/workflows/claude.yml +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/.github/workflows/publish.yml +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/.github/workflows/test.yml +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/.gitignore +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/CLAUDE.md +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/LICENSE +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/MANIFEST.in +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/PUBLISHING.md +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/README.md +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/TEST_RESULTS.md +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/config/__init__.py +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/config/settings.py +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/core/__init__.py +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/core/exceptions.py +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/core/validation.py +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/services/__init__.py +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/services/gemini_client.py +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/services/image_service.py +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/services/imagen_client.py +0 -0
- {ultimate_gemini_mcp-1.0.18 → ultimate_gemini_mcp-1.5.1}/src/services/prompt_enhancer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ultimate-gemini-mcp
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.1
|
|
4
4
|
Summary: Ultimate image generation MCP server unifying Gemini 2.5 Flash Image and Imagen 4/Fast/Ultra with advanced features
|
|
5
5
|
Project-URL: Homepage, https://github.com/anand-92/ultimate-image-gen-mcp
|
|
6
6
|
Project-URL: Repository, https://github.com/anand-92/ultimate-image-gen-mcp
|
|
@@ -14,11 +14,7 @@ import sys
|
|
|
14
14
|
from fastmcp import FastMCP
|
|
15
15
|
|
|
16
16
|
from .config import ALL_MODELS, get_settings
|
|
17
|
-
from .tools import
|
|
18
|
-
register_batch_generate_tool,
|
|
19
|
-
register_generate_image_tool,
|
|
20
|
-
register_get_image_tool,
|
|
21
|
-
)
|
|
17
|
+
from .tools import register_batch_generate_tool, register_generate_image_tool
|
|
22
18
|
|
|
23
19
|
# Set up logging
|
|
24
20
|
logging.basicConfig(
|
|
@@ -49,38 +45,14 @@ def create_app() -> FastMCP:
|
|
|
49
45
|
# Create FastMCP server
|
|
50
46
|
mcp = FastMCP(
|
|
51
47
|
"Ultimate Gemini MCP",
|
|
52
|
-
version="1.
|
|
48
|
+
version="1.5.0",
|
|
53
49
|
)
|
|
54
50
|
|
|
55
51
|
# Register tools
|
|
56
52
|
register_generate_image_tool(mcp)
|
|
57
53
|
register_batch_generate_tool(mcp)
|
|
58
|
-
register_get_image_tool(mcp)
|
|
59
54
|
|
|
60
55
|
# Add resources
|
|
61
|
-
@mcp.resource("image://latest", mime_type="image/png")
|
|
62
|
-
def get_latest_image() -> bytes:
|
|
63
|
-
"""
|
|
64
|
-
Get the most recently generated image.
|
|
65
|
-
|
|
66
|
-
Returns:
|
|
67
|
-
Binary PNG image data
|
|
68
|
-
"""
|
|
69
|
-
if not settings.output_dir.exists():
|
|
70
|
-
raise FileNotFoundError("No images have been generated yet")
|
|
71
|
-
|
|
72
|
-
# Find most recent PNG file
|
|
73
|
-
images = sorted(
|
|
74
|
-
settings.output_dir.glob("*.png"),
|
|
75
|
-
key=lambda p: p.stat().st_mtime,
|
|
76
|
-
reverse=True
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
if not images:
|
|
80
|
-
raise FileNotFoundError("No images found in output directory")
|
|
81
|
-
|
|
82
|
-
return images[0].read_bytes()
|
|
83
|
-
|
|
84
56
|
@mcp.resource("models://list")
|
|
85
57
|
def list_models() -> str:
|
|
86
58
|
"""List all available image generation models."""
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
"""Tools module for Ultimate Gemini MCP."""
|
|
2
2
|
|
|
3
3
|
from .batch_generate import batch_generate_images, register_batch_generate_tool
|
|
4
|
-
from .generate_image import
|
|
5
|
-
generate_image_tool,
|
|
6
|
-
register_generate_image_tool,
|
|
7
|
-
register_get_image_tool,
|
|
8
|
-
)
|
|
4
|
+
from .generate_image import generate_image_tool, register_generate_image_tool
|
|
9
5
|
|
|
10
6
|
__all__ = [
|
|
11
7
|
"generate_image_tool",
|
|
12
8
|
"register_generate_image_tool",
|
|
13
|
-
"register_get_image_tool",
|
|
14
9
|
"batch_generate_images",
|
|
15
10
|
"register_batch_generate_tool",
|
|
16
11
|
]
|
|
@@ -115,7 +115,6 @@ def register_batch_generate_tool(mcp_server: Any) -> None:
|
|
|
115
115
|
output_format: str = "png",
|
|
116
116
|
batch_size: int | None = None,
|
|
117
117
|
negative_prompt: str | None = None,
|
|
118
|
-
save_to_disk: bool = True,
|
|
119
118
|
) -> str:
|
|
120
119
|
"""
|
|
121
120
|
Generate multiple images from a list of prompts efficiently.
|
|
@@ -131,13 +130,9 @@ def register_batch_generate_tool(mcp_server: Any) -> None:
|
|
|
131
130
|
output_format: Image format for all images (default: png)
|
|
132
131
|
batch_size: Parallel batch size (default: from config)
|
|
133
132
|
negative_prompt: Negative prompt for Imagen models (optional)
|
|
134
|
-
save_to_disk: Save images to disk and return file paths (default: True).
|
|
135
|
-
When True: Returns file paths only (efficient for MCP clients).
|
|
136
|
-
When False: Returns base64 image data (for cloud/serverless).
|
|
137
133
|
|
|
138
134
|
Returns:
|
|
139
|
-
JSON string with batch results
|
|
140
|
-
or base64 image data (save_to_disk=False)
|
|
135
|
+
JSON string with batch results including individual image paths
|
|
141
136
|
"""
|
|
142
137
|
try:
|
|
143
138
|
result = await batch_generate_images(
|
|
@@ -148,7 +143,6 @@ def register_batch_generate_tool(mcp_server: Any) -> None:
|
|
|
148
143
|
output_format=output_format,
|
|
149
144
|
batch_size=batch_size,
|
|
150
145
|
negative_prompt=negative_prompt,
|
|
151
|
-
save_to_disk=save_to_disk,
|
|
152
146
|
)
|
|
153
147
|
|
|
154
148
|
return json.dumps(result, indent=2)
|
|
@@ -153,19 +153,10 @@ async def generate_image_tool(
|
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
if save_to_disk:
|
|
156
|
-
#
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
image_info["filename"] = file_path.name
|
|
161
|
-
logger.info(f"Saved image to {file_path}")
|
|
162
|
-
except Exception as e:
|
|
163
|
-
logger.warning(f"Failed to save image to disk: {e}")
|
|
164
|
-
image_info["save_error"] = str(e)
|
|
165
|
-
else:
|
|
166
|
-
# Only include base64 data when not saving to disk (cloud/serverless scenarios)
|
|
167
|
-
# This prevents token overflow for MCP clients with file system access
|
|
168
|
-
image_info["image_base64"] = result.image_data
|
|
156
|
+
# Save to output directory
|
|
157
|
+
file_path = result.save(settings.output_dir)
|
|
158
|
+
image_info["path"] = str(file_path)
|
|
159
|
+
image_info["filename"] = file_path.name
|
|
169
160
|
|
|
170
161
|
# Add enhanced prompt info
|
|
171
162
|
if "enhanced_prompt" in result.metadata:
|
|
@@ -179,47 +170,6 @@ async def generate_image_tool(
|
|
|
179
170
|
await image_service.close()
|
|
180
171
|
|
|
181
172
|
|
|
182
|
-
def register_get_image_tool(mcp_server: Any) -> None:
|
|
183
|
-
"""Register get_image tool with MCP server."""
|
|
184
|
-
|
|
185
|
-
@mcp_server.tool()
|
|
186
|
-
async def get_image(filename: str) -> str:
|
|
187
|
-
"""
|
|
188
|
-
Retrieve a generated image by filename and return as base64.
|
|
189
|
-
|
|
190
|
-
Args:
|
|
191
|
-
filename: The filename of the image (e.g., "gemini-2.5-flash-image_20251026_055415_a cute orange cat sleeping on a sunny windowsill.png")
|
|
192
|
-
|
|
193
|
-
Returns:
|
|
194
|
-
JSON string with base64-encoded image data
|
|
195
|
-
"""
|
|
196
|
-
import base64
|
|
197
|
-
import json
|
|
198
|
-
|
|
199
|
-
from ..config import get_settings
|
|
200
|
-
|
|
201
|
-
settings = get_settings()
|
|
202
|
-
image_path = settings.output_dir / filename
|
|
203
|
-
|
|
204
|
-
if not image_path.exists():
|
|
205
|
-
return json.dumps({"success": False, "error": f"Image not found: {filename}"})
|
|
206
|
-
|
|
207
|
-
try:
|
|
208
|
-
image_data = base64.b64encode(image_path.read_bytes()).decode()
|
|
209
|
-
|
|
210
|
-
return json.dumps(
|
|
211
|
-
{
|
|
212
|
-
"success": True,
|
|
213
|
-
"filename": filename,
|
|
214
|
-
"image_base64": image_data,
|
|
215
|
-
"size": image_path.stat().st_size,
|
|
216
|
-
},
|
|
217
|
-
indent=2,
|
|
218
|
-
)
|
|
219
|
-
except Exception as e:
|
|
220
|
-
return json.dumps({"success": False, "error": str(e)})
|
|
221
|
-
|
|
222
|
-
|
|
223
173
|
def register_generate_image_tool(mcp_server: Any) -> None:
|
|
224
174
|
"""Register generate_image tool with MCP server."""
|
|
225
175
|
|
|
@@ -237,7 +187,6 @@ def register_generate_image_tool(mcp_server: Any) -> None:
|
|
|
237
187
|
use_world_knowledge: bool = False,
|
|
238
188
|
negative_prompt: str | None = None,
|
|
239
189
|
seed: int | None = None,
|
|
240
|
-
save_to_disk: bool = True,
|
|
241
190
|
) -> str:
|
|
242
191
|
"""
|
|
243
192
|
Generate images using Google's Gemini or Imagen models.
|
|
@@ -259,9 +208,6 @@ def register_generate_image_tool(mcp_server: Any) -> None:
|
|
|
259
208
|
use_world_knowledge: Use real-world knowledge (Gemini only)
|
|
260
209
|
negative_prompt: What to avoid in the image (Imagen only)
|
|
261
210
|
seed: Random seed for reproducibility (NOT SUPPORTED - will be ignored)
|
|
262
|
-
save_to_disk: Save images to disk and return file paths (default: True).
|
|
263
|
-
When True: Returns file paths only (efficient for MCP clients).
|
|
264
|
-
When False: Returns base64 image data (for cloud/serverless).
|
|
265
211
|
|
|
266
212
|
Available models:
|
|
267
213
|
- gemini-2.5-flash-image (default)
|
|
@@ -270,8 +216,7 @@ def register_generate_image_tool(mcp_server: Any) -> None:
|
|
|
270
216
|
- imagen-4-ultra
|
|
271
217
|
|
|
272
218
|
Returns:
|
|
273
|
-
JSON string with generation results and
|
|
274
|
-
or base64 image data (save_to_disk=False)
|
|
219
|
+
JSON string with generation results and file paths
|
|
275
220
|
"""
|
|
276
221
|
try:
|
|
277
222
|
result = await generate_image_tool(
|
|
@@ -287,7 +232,6 @@ def register_generate_image_tool(mcp_server: Any) -> None:
|
|
|
287
232
|
use_world_knowledge=use_world_knowledge,
|
|
288
233
|
negative_prompt=negative_prompt,
|
|
289
234
|
seed=seed,
|
|
290
|
-
save_to_disk=save_to_disk,
|
|
291
235
|
)
|
|
292
236
|
|
|
293
237
|
return json.dumps(result, indent=2)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":"1.21.0"}
|