ultimate-gemini-mcp 1.0.16__tar.gz → 1.0.18__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/.genkit/traces_idx/genkit.metadata +1 -0
- ultimate_gemini_mcp-1.0.18/FIX_VERIFICATION_TEST_PLAN.md +601 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/PKG-INFO +1 -1
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/pyproject.toml +1 -1
- ultimate_gemini_mcp-1.0.18/raw_response.json +8 -0
- ultimate_gemini_mcp-1.0.18/request.json +14 -0
- ultimate_gemini_mcp-1.0.18/request_exact.json +14 -0
- ultimate_gemini_mcp-1.0.18/response_exact.json +8 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/__init__.py +1 -1
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/server.py +29 -42
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/tools/__init__.py +6 -1
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/tools/generate_image.py +41 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/.env.example +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/.github/workflows/README.md +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/.github/workflows/claude-code-review.yml +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/.github/workflows/claude.yml +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/.github/workflows/publish.yml +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/.github/workflows/test.yml +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/.gitignore +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/CLAUDE.md +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/LICENSE +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/MANIFEST.in +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/PUBLISHING.md +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/README.md +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/TEST_RESULTS.md +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/app.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/config/__init__.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/config/constants.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/config/settings.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/core/__init__.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/core/exceptions.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/core/validation.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/prompts/__init__.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/resources/__init__.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/services/__init__.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/services/gemini_client.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/services/image_service.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/services/imagen_client.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/services/prompt_enhancer.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/tools/batch_generate.py +0 -0
- {ultimate_gemini_mcp-1.0.16 → ultimate_gemini_mcp-1.0.18}/src/utils/__init__.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"1.21.0"}
|
|
@@ -0,0 +1,601 @@
|
|
|
1
|
+
# Fix Verification Test Plan
|
|
2
|
+
|
|
3
|
+
**Purpose:** Verify that all critical fixes from commit `efa6a4d` are working correctly
|
|
4
|
+
**Date Created:** October 25, 2025
|
|
5
|
+
**Prerequisites:** MCP client must be restarted to load updated code
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Test Categories
|
|
10
|
+
|
|
11
|
+
1. [Gemini Image Generation](#1-gemini-image-generation-critical)
|
|
12
|
+
2. [Seed Parameter Handling](#2-seed-parameter-handling)
|
|
13
|
+
3. [Person Generation Policy Warnings](#3-person-generation-policy-warnings)
|
|
14
|
+
4. [Aspect Ratio Support (Gemini)](#4-aspect-ratio-support-gemini)
|
|
15
|
+
5. [Regression Tests](#5-regression-tests)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 1. Gemini Image Generation (CRITICAL)
|
|
20
|
+
|
|
21
|
+
**Issue Fixed:** Gemini API was returning no image data due to missing `responseModalities` config
|
|
22
|
+
|
|
23
|
+
### Test 1.1: Basic Gemini Generation
|
|
24
|
+
|
|
25
|
+
**Objective:** Verify basic image generation works with default settings
|
|
26
|
+
|
|
27
|
+
**Steps:**
|
|
28
|
+
```python
|
|
29
|
+
generate_image(
|
|
30
|
+
prompt="a red apple on a wooden table",
|
|
31
|
+
model="gemini-2.5-flash-image",
|
|
32
|
+
enhance_prompt=False
|
|
33
|
+
)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Expected Result:**
|
|
37
|
+
- ✅ `success: true`
|
|
38
|
+
- ✅ Image file created in `generated_images/`
|
|
39
|
+
- ✅ File size > 0 bytes
|
|
40
|
+
- ✅ Response includes `path` and `filename`
|
|
41
|
+
- ✅ No error messages
|
|
42
|
+
|
|
43
|
+
**Failure Criteria:**
|
|
44
|
+
- ❌ Error: "No image data found in Gemini API response"
|
|
45
|
+
- ❌ `success: false`
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### Test 1.2: Gemini with Prompt Enhancement
|
|
50
|
+
|
|
51
|
+
**Objective:** Verify prompt enhancement doesn't break generation
|
|
52
|
+
|
|
53
|
+
**Steps:**
|
|
54
|
+
```python
|
|
55
|
+
generate_image(
|
|
56
|
+
prompt="a futuristic robot in a neon city",
|
|
57
|
+
model="gemini-2.5-flash-image",
|
|
58
|
+
enhance_prompt=True
|
|
59
|
+
)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Expected Result:**
|
|
63
|
+
- ✅ `success: true`
|
|
64
|
+
- ✅ Image generated successfully
|
|
65
|
+
- ✅ Response includes `enhanced_prompt` in metadata
|
|
66
|
+
- ✅ Enhanced prompt is significantly longer than original
|
|
67
|
+
|
|
68
|
+
**Failure Criteria:**
|
|
69
|
+
- ❌ Enhancement breaks image generation
|
|
70
|
+
- ❌ No enhanced_prompt in response
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
### Test 1.3: Gemini Image Editing
|
|
75
|
+
|
|
76
|
+
**Objective:** Verify image editing with input image works
|
|
77
|
+
|
|
78
|
+
**Prerequisites:** Input image file exists at root directory
|
|
79
|
+
|
|
80
|
+
**Steps:**
|
|
81
|
+
```python
|
|
82
|
+
generate_image(
|
|
83
|
+
prompt="add a red border around this image",
|
|
84
|
+
model="gemini-2.5-flash-image",
|
|
85
|
+
input_image_path="/Users/nikhilanand/Desktop/ultimate gemini mcp/ultimate-gemini-mcp/thisimage.png"
|
|
86
|
+
)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Expected Result:**
|
|
90
|
+
- ✅ `success: true`
|
|
91
|
+
- ✅ Output image is modified version of input
|
|
92
|
+
- ✅ Red border visible in output
|
|
93
|
+
|
|
94
|
+
**Failure Criteria:**
|
|
95
|
+
- ❌ Error: "No image data found"
|
|
96
|
+
- ❌ Original image unchanged
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
### Test 1.4: Gemini Complex Prompt
|
|
101
|
+
|
|
102
|
+
**Objective:** Verify Gemini handles complex, detailed prompts
|
|
103
|
+
|
|
104
|
+
**Steps:**
|
|
105
|
+
```python
|
|
106
|
+
generate_image(
|
|
107
|
+
prompt="A photorealistic portrait of a wise old wizard with a long white beard, wearing a purple robe with gold embroidery, holding a crystal staff, dramatic lighting from the left side, mystical atmosphere, high detail",
|
|
108
|
+
model="gemini-2.5-flash-image",
|
|
109
|
+
enhance_prompt=True
|
|
110
|
+
)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Expected Result:**
|
|
114
|
+
- ✅ `success: true`
|
|
115
|
+
- ✅ Image reflects detailed prompt elements
|
|
116
|
+
- ✅ Enhancement adds cinematic/photographic terms
|
|
117
|
+
|
|
118
|
+
**Failure Criteria:**
|
|
119
|
+
- ❌ Generic or low-quality output
|
|
120
|
+
- ❌ Generation fails
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 2. Seed Parameter Handling
|
|
125
|
+
|
|
126
|
+
**Issue Fixed:** Imagen API returns 400 error when seed is provided; now handled gracefully
|
|
127
|
+
|
|
128
|
+
### Test 2.1: Seed Parameter with Warning
|
|
129
|
+
|
|
130
|
+
**Objective:** Verify seed parameter triggers warning but doesn't fail
|
|
131
|
+
|
|
132
|
+
**Steps:**
|
|
133
|
+
```python
|
|
134
|
+
generate_image(
|
|
135
|
+
prompt="a colorful abstract pattern",
|
|
136
|
+
model="imagen-4",
|
|
137
|
+
seed=12345
|
|
138
|
+
)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Expected Result:**
|
|
142
|
+
- ✅ `success: true`
|
|
143
|
+
- ✅ Image generated successfully
|
|
144
|
+
- ✅ Warning logged: "seed parameter is not currently supported"
|
|
145
|
+
- ✅ Seed is NOT sent to API (no 400 error)
|
|
146
|
+
|
|
147
|
+
**Failure Criteria:**
|
|
148
|
+
- ❌ Error: "Setting seed is not supported" (400 from API)
|
|
149
|
+
- ❌ Generation fails
|
|
150
|
+
- ❌ No warning message
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
### Test 2.2: Same Prompt Without Seed
|
|
155
|
+
|
|
156
|
+
**Objective:** Verify removal of seed doesn't affect normal operation
|
|
157
|
+
|
|
158
|
+
**Steps:**
|
|
159
|
+
```python
|
|
160
|
+
generate_image(
|
|
161
|
+
prompt="a colorful abstract pattern",
|
|
162
|
+
model="imagen-4",
|
|
163
|
+
seed=None # or omit parameter
|
|
164
|
+
)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Expected Result:**
|
|
168
|
+
- ✅ `success: true`
|
|
169
|
+
- ✅ Image generated successfully
|
|
170
|
+
- ✅ No warning about seed
|
|
171
|
+
|
|
172
|
+
**Failure Criteria:**
|
|
173
|
+
- ❌ Any errors
|
|
174
|
+
- ❌ Unexpected warnings
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### Test 2.3: Seed Documentation Check
|
|
179
|
+
|
|
180
|
+
**Objective:** Verify tool documentation reflects seed limitation
|
|
181
|
+
|
|
182
|
+
**Steps:**
|
|
183
|
+
- Inspect the tool's docstring/help text
|
|
184
|
+
|
|
185
|
+
**Expected Result:**
|
|
186
|
+
- ✅ Seed parameter description includes: "NOT SUPPORTED - will be ignored"
|
|
187
|
+
- ✅ Clear indication that seed won't work
|
|
188
|
+
|
|
189
|
+
**Failure Criteria:**
|
|
190
|
+
- ❌ Documentation claims seed works for reproducibility
|
|
191
|
+
- ❌ No warning about limitation
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 3. Person Generation Policy Warnings
|
|
196
|
+
|
|
197
|
+
**Issue Fixed:** Added validation to warn when prompt conflicts with person_generation policy
|
|
198
|
+
|
|
199
|
+
### Test 3.1: Conflict Detection - "dont_allow" with Person Keywords
|
|
200
|
+
|
|
201
|
+
**Objective:** Verify warning when prompt mentions people with restrictive policy
|
|
202
|
+
|
|
203
|
+
**Steps:**
|
|
204
|
+
```python
|
|
205
|
+
generate_image(
|
|
206
|
+
prompt="a crowd of people walking in a busy street",
|
|
207
|
+
model="imagen-4",
|
|
208
|
+
person_generation="dont_allow"
|
|
209
|
+
)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Expected Result:**
|
|
213
|
+
- ✅ Warning logged: "Prompt contains person-related keywords but person_generation is set to 'dont_allow'"
|
|
214
|
+
- ✅ Warning mentions: "may result in the API blocking image generation"
|
|
215
|
+
- ⚠️ May succeed or fail depending on API behavior
|
|
216
|
+
- ✅ User is warned BEFORE API call
|
|
217
|
+
|
|
218
|
+
**Failure Criteria:**
|
|
219
|
+
- ❌ No warning issued
|
|
220
|
+
- ❌ Silent failure without explanation
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### Test 3.2: Conflict Detection - Multiple Person Keywords
|
|
225
|
+
|
|
226
|
+
**Objective:** Verify detection of various person-related terms
|
|
227
|
+
|
|
228
|
+
**Test Cases:**
|
|
229
|
+
| Prompt | Should Warn |
|
|
230
|
+
|--------|-------------|
|
|
231
|
+
| "a portrait of a woman" | ✅ Yes |
|
|
232
|
+
| "human face close-up" | ✅ Yes |
|
|
233
|
+
| "child playing in park" | ✅ Yes |
|
|
234
|
+
| "man standing alone" | ✅ Yes |
|
|
235
|
+
| "a landscape with trees" | ❌ No |
|
|
236
|
+
| "abstract geometric shapes" | ❌ No |
|
|
237
|
+
|
|
238
|
+
**Steps:**
|
|
239
|
+
Test each prompt with `person_generation="dont_allow"`
|
|
240
|
+
|
|
241
|
+
**Expected Result:**
|
|
242
|
+
- ✅ Warnings issued only for prompts with person keywords
|
|
243
|
+
- ✅ No false positives on landscape/abstract prompts
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
### Test 3.3: No Warning with "allow_adult"
|
|
248
|
+
|
|
249
|
+
**Objective:** Verify no warning when policy allows people
|
|
250
|
+
|
|
251
|
+
**Steps:**
|
|
252
|
+
```python
|
|
253
|
+
generate_image(
|
|
254
|
+
prompt="a person walking in a park",
|
|
255
|
+
model="imagen-4",
|
|
256
|
+
person_generation="allow_adult" # default
|
|
257
|
+
)
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Expected Result:**
|
|
261
|
+
- ✅ `success: true`
|
|
262
|
+
- ✅ Image generated with person
|
|
263
|
+
- ✅ No conflict warning (policy allows people)
|
|
264
|
+
|
|
265
|
+
**Failure Criteria:**
|
|
266
|
+
- ❌ Warning issued despite permissive policy
|
|
267
|
+
- ❌ Generation blocked
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## 4. Aspect Ratio Support (Gemini)
|
|
272
|
+
|
|
273
|
+
**Issue Fixed:** Added `imageConfig` with `aspectRatio` to Gemini requests
|
|
274
|
+
|
|
275
|
+
### Test 4.1: Gemini 1:1 (Default)
|
|
276
|
+
|
|
277
|
+
**Steps:**
|
|
278
|
+
```python
|
|
279
|
+
generate_image(
|
|
280
|
+
prompt="a simple geometric shape",
|
|
281
|
+
model="gemini-2.5-flash-image",
|
|
282
|
+
aspect_ratio="1:1"
|
|
283
|
+
)
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**Expected Result:**
|
|
287
|
+
- ✅ Image is square (1:1 ratio)
|
|
288
|
+
- ✅ `imageConfig.aspectRatio: "1:1"` sent to API
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
### Test 4.2: Gemini 16:9 (Wide)
|
|
293
|
+
|
|
294
|
+
**Steps:**
|
|
295
|
+
```python
|
|
296
|
+
generate_image(
|
|
297
|
+
prompt="a panoramic mountain landscape",
|
|
298
|
+
model="gemini-2.5-flash-image",
|
|
299
|
+
aspect_ratio="16:9"
|
|
300
|
+
)
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
**Expected Result:**
|
|
304
|
+
- ✅ Image is wide (16:9 ratio)
|
|
305
|
+
- ✅ Landscape composition utilized
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
### Test 4.3: Gemini 9:16 (Tall)
|
|
310
|
+
|
|
311
|
+
**Steps:**
|
|
312
|
+
```python
|
|
313
|
+
generate_image(
|
|
314
|
+
prompt="a tall skyscraper reaching into clouds",
|
|
315
|
+
model="gemini-2.5-flash-image",
|
|
316
|
+
aspect_ratio="9:16"
|
|
317
|
+
)
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**Expected Result:**
|
|
321
|
+
- ✅ Image is tall/vertical (9:16 ratio)
|
|
322
|
+
- ✅ Composition emphasizes height
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
### Test 4.4: Gemini Multiple Aspect Ratios
|
|
327
|
+
|
|
328
|
+
**Objective:** Test all supported aspect ratios
|
|
329
|
+
|
|
330
|
+
**Test Matrix:**
|
|
331
|
+
| Aspect Ratio | Expected Orientation | Test Prompt |
|
|
332
|
+
|--------------|---------------------|-------------|
|
|
333
|
+
| 1:1 | Square | "a perfect circle" |
|
|
334
|
+
| 2:3 | Portrait | "a vertical portrait" |
|
|
335
|
+
| 3:2 | Landscape | "a wide landscape" |
|
|
336
|
+
| 4:3 | Classic horizontal | "a classic photo" |
|
|
337
|
+
| 16:9 | Widescreen | "an ultra-wide panorama" |
|
|
338
|
+
| 9:16 | Mobile portrait | "a tall mobile wallpaper" |
|
|
339
|
+
|
|
340
|
+
**Expected Result:**
|
|
341
|
+
- ✅ All ratios generate successfully
|
|
342
|
+
- ✅ Output images match requested ratios
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## 5. Regression Tests
|
|
347
|
+
|
|
348
|
+
**Objective:** Ensure fixes didn't break existing functionality
|
|
349
|
+
|
|
350
|
+
### Test 5.1: Imagen Still Works
|
|
351
|
+
|
|
352
|
+
**Steps:**
|
|
353
|
+
```python
|
|
354
|
+
generate_image(
|
|
355
|
+
prompt="a beautiful sunset",
|
|
356
|
+
model="imagen-4"
|
|
357
|
+
)
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**Expected Result:**
|
|
361
|
+
- ✅ Imagen generation still works perfectly
|
|
362
|
+
- ✅ No changes to Imagen behavior
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
### Test 5.2: Negative Prompt Still Works
|
|
367
|
+
|
|
368
|
+
**Steps:**
|
|
369
|
+
```python
|
|
370
|
+
generate_image(
|
|
371
|
+
prompt="a forest landscape",
|
|
372
|
+
model="imagen-4",
|
|
373
|
+
negative_prompt="people, buildings, cars"
|
|
374
|
+
)
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
**Expected Result:**
|
|
378
|
+
- ✅ Negative prompts still applied correctly
|
|
379
|
+
- ✅ Excluded elements don't appear
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
### Test 5.3: Prompt Enhancement Still Works
|
|
384
|
+
|
|
385
|
+
**Steps:**
|
|
386
|
+
```python
|
|
387
|
+
generate_image(
|
|
388
|
+
prompt="a simple scene",
|
|
389
|
+
model="imagen-4",
|
|
390
|
+
enhance_prompt=True
|
|
391
|
+
)
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
**Expected Result:**
|
|
395
|
+
- ✅ Enhancement still adds detailed photography terms
|
|
396
|
+
- ✅ Enhanced prompt visible in response metadata
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
### Test 5.4: Input Validation Still Works
|
|
401
|
+
|
|
402
|
+
**Steps:**
|
|
403
|
+
```python
|
|
404
|
+
# Test invalid model
|
|
405
|
+
generate_image(
|
|
406
|
+
prompt="test",
|
|
407
|
+
model="invalid-model-999"
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
# Test invalid aspect ratio
|
|
411
|
+
generate_image(
|
|
412
|
+
prompt="test",
|
|
413
|
+
model="imagen-4",
|
|
414
|
+
aspect_ratio="999:1"
|
|
415
|
+
)
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
**Expected Result:**
|
|
419
|
+
- ✅ Validation errors for invalid inputs
|
|
420
|
+
- ✅ Clear error messages with available options
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Debug Logging Verification
|
|
425
|
+
|
|
426
|
+
**Issue Fixed:** Added comprehensive debug logging
|
|
427
|
+
|
|
428
|
+
### Test 6.1: Debug Logs Present (if LOG_LEVEL=DEBUG)
|
|
429
|
+
|
|
430
|
+
**Steps:**
|
|
431
|
+
1. Set environment variable: `LOG_LEVEL=DEBUG`
|
|
432
|
+
2. Run any Gemini generation
|
|
433
|
+
3. Check logs
|
|
434
|
+
|
|
435
|
+
**Expected Log Entries:**
|
|
436
|
+
- ✅ "Sending request to [url]"
|
|
437
|
+
- ✅ "Request body: {...}"
|
|
438
|
+
- ✅ "Response status: 200"
|
|
439
|
+
- ✅ "Response data: {...}"
|
|
440
|
+
- ✅ "Extracted image data of length: [bytes]"
|
|
441
|
+
|
|
442
|
+
**Failure Criteria:**
|
|
443
|
+
- ❌ No debug logs visible
|
|
444
|
+
- ❌ Missing request/response details
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
### Test 6.2: Error Logging Improvements
|
|
449
|
+
|
|
450
|
+
**Steps:**
|
|
451
|
+
Force an error (e.g., invalid API key) and check logs
|
|
452
|
+
|
|
453
|
+
**Expected Log Entries:**
|
|
454
|
+
- ✅ "No images extracted from response. Response structure: [keys]"
|
|
455
|
+
- ✅ "Candidates: [candidate data]" (if candidates present)
|
|
456
|
+
- ✅ Detailed error context
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
## Test Execution Checklist
|
|
461
|
+
|
|
462
|
+
### Pre-Test Setup
|
|
463
|
+
- [ ] MCP client restarted (to load new code)
|
|
464
|
+
- [ ] `GEMINI_API_KEY` environment variable set
|
|
465
|
+
- [ ] Input images available at root directory (`thisimage.png`, `thisOnetoo.png`)
|
|
466
|
+
- [ ] `generated_images/` directory exists
|
|
467
|
+
|
|
468
|
+
### Critical Tests (Must Pass)
|
|
469
|
+
- [ ] Test 1.1: Basic Gemini Generation ⭐
|
|
470
|
+
- [ ] Test 1.2: Gemini with Prompt Enhancement ⭐
|
|
471
|
+
- [ ] Test 1.3: Gemini Image Editing ⭐
|
|
472
|
+
- [ ] Test 2.1: Seed Parameter with Warning ⭐
|
|
473
|
+
- [ ] Test 3.1: Person Policy Conflict Warning ⭐
|
|
474
|
+
- [ ] Test 4.2: Gemini 16:9 Aspect Ratio ⭐
|
|
475
|
+
|
|
476
|
+
### Important Tests (Should Pass)
|
|
477
|
+
- [ ] Test 1.4: Complex Prompt
|
|
478
|
+
- [ ] Test 2.3: Seed Documentation Check
|
|
479
|
+
- [ ] Test 3.2: Multiple Person Keywords
|
|
480
|
+
- [ ] Test 4.4: All Aspect Ratios
|
|
481
|
+
|
|
482
|
+
### Regression Tests (Must Pass)
|
|
483
|
+
- [ ] Test 5.1: Imagen Still Works
|
|
484
|
+
- [ ] Test 5.2: Negative Prompt Still Works
|
|
485
|
+
- [ ] Test 5.3: Prompt Enhancement Still Works
|
|
486
|
+
- [ ] Test 5.4: Input Validation Still Works
|
|
487
|
+
|
|
488
|
+
### Optional Tests
|
|
489
|
+
- [ ] Test 6.1: Debug Logging
|
|
490
|
+
- [ ] Test 6.2: Error Logging
|
|
491
|
+
|
|
492
|
+
---
|
|
493
|
+
|
|
494
|
+
## Success Criteria
|
|
495
|
+
|
|
496
|
+
### Minimum Acceptable (MVP)
|
|
497
|
+
- ✅ All 6 Critical Tests pass
|
|
498
|
+
- ✅ At least 3 out of 4 Important Tests pass
|
|
499
|
+
- ✅ All 4 Regression Tests pass
|
|
500
|
+
- ✅ Zero P0 (critical) bugs found
|
|
501
|
+
|
|
502
|
+
### Full Success
|
|
503
|
+
- ✅ All Critical Tests pass (100%)
|
|
504
|
+
- ✅ All Important Tests pass (100%)
|
|
505
|
+
- ✅ All Regression Tests pass (100%)
|
|
506
|
+
- ✅ Optional Tests pass (bonus)
|
|
507
|
+
- ✅ No bugs found
|
|
508
|
+
|
|
509
|
+
### Partial Success
|
|
510
|
+
- ⚠️ 4-5 Critical Tests pass (80%+)
|
|
511
|
+
- ⚠️ Most Regression Tests pass
|
|
512
|
+
- ⚠️ New issues documented for follow-up
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
## Issue Tracking Template
|
|
517
|
+
|
|
518
|
+
If tests fail, document using this template:
|
|
519
|
+
|
|
520
|
+
```markdown
|
|
521
|
+
### Issue: [Brief Description]
|
|
522
|
+
|
|
523
|
+
**Test Failed:** [Test Number and Name]
|
|
524
|
+
**Severity:** Critical | High | Medium | Low
|
|
525
|
+
**Status:** New | In Progress | Fixed
|
|
526
|
+
|
|
527
|
+
**Steps to Reproduce:**
|
|
528
|
+
1.
|
|
529
|
+
2.
|
|
530
|
+
3.
|
|
531
|
+
|
|
532
|
+
**Expected Behavior:**
|
|
533
|
+
[What should happen]
|
|
534
|
+
|
|
535
|
+
**Actual Behavior:**
|
|
536
|
+
[What actually happened]
|
|
537
|
+
|
|
538
|
+
**Error Messages:**
|
|
539
|
+
```
|
|
540
|
+
[Paste error output]
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
**Additional Context:**
|
|
544
|
+
[Logs, screenshots, etc.]
|
|
545
|
+
|
|
546
|
+
**Proposed Fix:**
|
|
547
|
+
[If known]
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
## Post-Test Actions
|
|
553
|
+
|
|
554
|
+
### If All Tests Pass ✅
|
|
555
|
+
1. Update `TEST_RESULTS.md` with verification results
|
|
556
|
+
2. Mark issues as "FIXED" in documentation
|
|
557
|
+
3. Update project status to "Stable"
|
|
558
|
+
4. Consider bumping version to v1.1.0
|
|
559
|
+
|
|
560
|
+
### If Tests Fail ❌
|
|
561
|
+
1. Document failures using Issue Tracking Template
|
|
562
|
+
2. Prioritize by severity
|
|
563
|
+
3. Create fix plan for critical issues
|
|
564
|
+
4. Re-run tests after fixes
|
|
565
|
+
|
|
566
|
+
### Partial Success ⚠️
|
|
567
|
+
1. Document which tests passed/failed
|
|
568
|
+
2. Assess if partial fix is better than no fix
|
|
569
|
+
3. Decide: rollback or proceed with known issues
|
|
570
|
+
4. Update documentation with limitations
|
|
571
|
+
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
## Notes
|
|
575
|
+
|
|
576
|
+
- **Test Execution Order:** Run Critical tests first, then Regression, then Important
|
|
577
|
+
- **Parallel Testing:** Regression tests can run in parallel with fix verification
|
|
578
|
+
- **Time Estimate:** ~20-30 minutes for full test suite
|
|
579
|
+
- **Quick Verification:** Run Critical Tests only (~5 minutes)
|
|
580
|
+
|
|
581
|
+
---
|
|
582
|
+
|
|
583
|
+
## Appendix: Quick Test Commands
|
|
584
|
+
|
|
585
|
+
### Minimal Verification (2 minutes)
|
|
586
|
+
```python
|
|
587
|
+
# Test 1: Gemini works
|
|
588
|
+
generate_image(prompt="a red apple", model="gemini-2.5-flash-image", enhance_prompt=False)
|
|
589
|
+
|
|
590
|
+
# Test 2: Seed handled gracefully
|
|
591
|
+
generate_image(prompt="abstract art", model="imagen-4", seed=123)
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
### Full Verification Script
|
|
595
|
+
See `run_verification_tests.py` (to be created) for automated testing.
|
|
596
|
+
|
|
597
|
+
---
|
|
598
|
+
|
|
599
|
+
**Document Version:** 1.0
|
|
600
|
+
**Last Updated:** October 25, 2025
|
|
601
|
+
**Next Review:** After test execution
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ultimate-gemini-mcp
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.18
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "ultimate-gemini-mcp"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.18"
|
|
4
4
|
description = "Ultimate image generation MCP server unifying Gemini 2.5 Flash Image and Imagen 4/Fast/Ultra with advanced features"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|