@houtini/gemini-mcp 1.4.5 → 2.2.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.
Files changed (167) hide show
  1. package/README.md +314 -834
  2. package/claude_desktop_config_example.json +1 -0
  3. package/dist/config/index.d.ts.map +1 -1
  4. package/dist/config/index.js +8 -4
  5. package/dist/config/index.js.map +1 -1
  6. package/dist/config/types.d.ts +5 -0
  7. package/dist/config/types.d.ts.map +1 -1
  8. package/dist/image-viewer/image-viewer-app.html +180 -0
  9. package/dist/image-viewer/src/ui/image-viewer.html +324 -0
  10. package/dist/index-new.d.ts +3 -0
  11. package/dist/index-new.d.ts.map +1 -0
  12. package/dist/index-new.js +7 -0
  13. package/dist/index-new.js.map +1 -0
  14. package/dist/index.d.ts +3 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +70 -172
  17. package/dist/index.js.map +1 -1
  18. package/dist/landing-page-viewer/src/ui/landing-page-viewer.html +330 -0
  19. package/dist/services/gemini/export.d.ts +5 -0
  20. package/dist/services/gemini/export.d.ts.map +1 -0
  21. package/dist/services/gemini/export.js +5 -0
  22. package/dist/services/gemini/export.js.map +1 -0
  23. package/dist/services/gemini/image-service.d.ts +45 -0
  24. package/dist/services/gemini/image-service.d.ts.map +1 -0
  25. package/dist/services/gemini/image-service.js +248 -0
  26. package/dist/services/gemini/image-service.js.map +1 -0
  27. package/dist/services/gemini/index.d.ts +7 -2
  28. package/dist/services/gemini/index.d.ts.map +1 -1
  29. package/dist/services/gemini/index.js +132 -56
  30. package/dist/services/gemini/index.js.map +1 -1
  31. package/dist/services/gemini/types.d.ts +32 -0
  32. package/dist/services/gemini/types.d.ts.map +1 -1
  33. package/dist/services/gemini/video-service.d.ts +58 -0
  34. package/dist/services/gemini/video-service.d.ts.map +1 -0
  35. package/dist/services/gemini/video-service.js +325 -0
  36. package/dist/services/gemini/video-service.js.map +1 -0
  37. package/dist/services/media-server.d.ts +28 -0
  38. package/dist/services/media-server.d.ts.map +1 -0
  39. package/dist/services/media-server.js +195 -0
  40. package/dist/services/media-server.js.map +1 -0
  41. package/dist/svg-viewer/src/ui/svg-viewer.html +325 -0
  42. package/dist/tools/gemini-chat.d.ts.map +1 -1
  43. package/dist/tools/gemini-chat.js +7 -1
  44. package/dist/tools/gemini-chat.js.map +1 -1
  45. package/dist/tools/gemini-deep-research.d.ts +1 -2
  46. package/dist/tools/gemini-deep-research.d.ts.map +1 -1
  47. package/dist/tools/gemini-deep-research.js +11 -51
  48. package/dist/tools/gemini-deep-research.js.map +1 -1
  49. package/dist/tools/gemini-help.d.ts +3 -0
  50. package/dist/tools/gemini-help.d.ts.map +1 -0
  51. package/dist/tools/gemini-help.js +534 -0
  52. package/dist/tools/gemini-help.js.map +1 -0
  53. package/dist/tools/gemini-prompt-assistant.d.ts +20 -0
  54. package/dist/tools/gemini-prompt-assistant.d.ts.map +1 -0
  55. package/dist/tools/gemini-prompt-assistant.js +129 -0
  56. package/dist/tools/gemini-prompt-assistant.js.map +1 -0
  57. package/dist/tools/generate-landing-page.d.ts +15 -0
  58. package/dist/tools/generate-landing-page.d.ts.map +1 -0
  59. package/dist/tools/generate-landing-page.js +66 -0
  60. package/dist/tools/generate-landing-page.js.map +1 -0
  61. package/dist/tools/generate-svg.d.ts +14 -0
  62. package/dist/tools/generate-svg.d.ts.map +1 -0
  63. package/dist/tools/generate-svg.js +106 -0
  64. package/dist/tools/generate-svg.js.map +1 -0
  65. package/dist/tools/generate-video.d.ts +24 -0
  66. package/dist/tools/generate-video.d.ts.map +1 -0
  67. package/dist/tools/generate-video.js +163 -0
  68. package/dist/tools/generate-video.js.map +1 -0
  69. package/dist/tools/image-prompt-assistant.d.ts +3 -0
  70. package/dist/tools/image-prompt-assistant.d.ts.map +1 -0
  71. package/dist/tools/image-prompt-assistant.js +790 -0
  72. package/dist/tools/image-prompt-assistant.js.map +1 -0
  73. package/dist/tools/load-image-from-path.d.ts +11 -0
  74. package/dist/tools/load-image-from-path.d.ts.map +1 -0
  75. package/dist/tools/load-image-from-path.js +100 -0
  76. package/dist/tools/load-image-from-path.js.map +1 -0
  77. package/dist/tools/prompt-library/charts.d.ts +325 -0
  78. package/dist/tools/prompt-library/charts.d.ts.map +1 -0
  79. package/dist/tools/prompt-library/charts.js +384 -0
  80. package/dist/tools/prompt-library/charts.js.map +1 -0
  81. package/dist/tools/prompt-library/index.d.ts +8 -0
  82. package/dist/tools/prompt-library/index.d.ts.map +1 -0
  83. package/dist/tools/prompt-library/index.js +10 -0
  84. package/dist/tools/prompt-library/index.js.map +1 -0
  85. package/dist/tools/register-analyze-image.d.ts +3 -0
  86. package/dist/tools/register-analyze-image.d.ts.map +1 -0
  87. package/dist/tools/register-analyze-image.js +67 -0
  88. package/dist/tools/register-analyze-image.js.map +1 -0
  89. package/dist/tools/register-chat.d.ts +3 -0
  90. package/dist/tools/register-chat.d.ts.map +1 -0
  91. package/dist/tools/register-chat.js +71 -0
  92. package/dist/tools/register-chat.js.map +1 -0
  93. package/dist/tools/register-deep-research.d.ts +3 -0
  94. package/dist/tools/register-deep-research.d.ts.map +1 -0
  95. package/dist/tools/register-deep-research.js +59 -0
  96. package/dist/tools/register-deep-research.js.map +1 -0
  97. package/dist/tools/register-describe-image.d.ts +3 -0
  98. package/dist/tools/register-describe-image.d.ts.map +1 -0
  99. package/dist/tools/register-describe-image.js +59 -0
  100. package/dist/tools/register-describe-image.js.map +1 -0
  101. package/dist/tools/register-image-gen.d.ts +3 -0
  102. package/dist/tools/register-image-gen.d.ts.map +1 -0
  103. package/dist/tools/register-image-gen.js +235 -0
  104. package/dist/tools/register-image-gen.js.map +1 -0
  105. package/dist/tools/register-landing-page.d.ts +3 -0
  106. package/dist/tools/register-landing-page.d.ts.map +1 -0
  107. package/dist/tools/register-landing-page.js +79 -0
  108. package/dist/tools/register-landing-page.js.map +1 -0
  109. package/dist/tools/register-list-models.d.ts +3 -0
  110. package/dist/tools/register-list-models.d.ts.map +1 -0
  111. package/dist/tools/register-list-models.js +33 -0
  112. package/dist/tools/register-list-models.js.map +1 -0
  113. package/dist/tools/register-load-image.d.ts +3 -0
  114. package/dist/tools/register-load-image.d.ts.map +1 -0
  115. package/dist/tools/register-load-image.js +66 -0
  116. package/dist/tools/register-load-image.js.map +1 -0
  117. package/dist/tools/register-svg.d.ts +3 -0
  118. package/dist/tools/register-svg.d.ts.map +1 -0
  119. package/dist/tools/register-svg.js +84 -0
  120. package/dist/tools/register-svg.js.map +1 -0
  121. package/dist/tools/register-video.d.ts +3 -0
  122. package/dist/tools/register-video.d.ts.map +1 -0
  123. package/dist/tools/register-video.js +118 -0
  124. package/dist/tools/register-video.js.map +1 -0
  125. package/dist/tools/register-viewers.d.ts +8 -0
  126. package/dist/tools/register-viewers.d.ts.map +1 -0
  127. package/dist/tools/register-viewers.js +89 -0
  128. package/dist/tools/register-viewers.js.map +1 -0
  129. package/dist/tools/schemas.d.ts +33 -0
  130. package/dist/tools/schemas.d.ts.map +1 -0
  131. package/dist/tools/schemas.js +39 -0
  132. package/dist/tools/schemas.js.map +1 -0
  133. package/dist/tools/types.d.ts +12 -0
  134. package/dist/tools/types.d.ts.map +1 -0
  135. package/dist/tools/types.js +2 -0
  136. package/dist/tools/types.js.map +1 -0
  137. package/dist/ui/image-viewer.d.ts +2 -0
  138. package/dist/ui/image-viewer.d.ts.map +1 -0
  139. package/dist/ui/image-viewer.js +42 -0
  140. package/dist/ui/image-viewer.js.map +1 -0
  141. package/dist/utils/chart-design-system.d.ts +92 -0
  142. package/dist/utils/chart-design-system.d.ts.map +1 -0
  143. package/dist/utils/chart-design-system.js +235 -0
  144. package/dist/utils/chart-design-system.js.map +1 -0
  145. package/dist/utils/image-compress.d.ts +9 -0
  146. package/dist/utils/image-compress.d.ts.map +1 -0
  147. package/dist/utils/image-compress.js +43 -0
  148. package/dist/utils/image-compress.js.map +1 -0
  149. package/dist/utils/image-utils.d.ts +9 -0
  150. package/dist/utils/image-utils.d.ts.map +1 -0
  151. package/dist/utils/image-utils.js +257 -0
  152. package/dist/utils/image-utils.js.map +1 -0
  153. package/dist/utils/resolve-images.d.ts +29 -0
  154. package/dist/utils/resolve-images.d.ts.map +1 -0
  155. package/dist/utils/resolve-images.js +56 -0
  156. package/dist/utils/resolve-images.js.map +1 -0
  157. package/dist/utils/tool-wrapper.d.ts +13 -0
  158. package/dist/utils/tool-wrapper.d.ts.map +1 -0
  159. package/dist/utils/tool-wrapper.js +22 -0
  160. package/dist/utils/tool-wrapper.js.map +1 -0
  161. package/dist/utils/video-utils.d.ts +16 -0
  162. package/dist/utils/video-utils.d.ts.map +1 -0
  163. package/dist/utils/video-utils.js +319 -0
  164. package/dist/utils/video-utils.js.map +1 -0
  165. package/dist/video-viewer/src/ui/video-viewer.html +310 -0
  166. package/package.json +21 -7
  167. package/server.json +30 -29
@@ -0,0 +1,534 @@
1
+ import * as z from 'zod';
2
+ const HELP_TOPICS = {
3
+ overview: `# Gemini MCP Server - Overview
4
+
5
+ **Version:** 2.1.0
6
+ **Tools Available:** 10
7
+
8
+ ## Core Features
9
+ • **Chat & Research:** gemini_chat, gemini_deep_research
10
+ • **Image Generation:** generate_image, edit_image
11
+ • **Image Analysis:** describe_image, analyze_image
12
+ • **Utilities:** gemini_list_models, load_image_from_path, generate_landing_page
13
+ • **Help:** gemini_help (this tool)
14
+
15
+ ## Quick Start
16
+ \`gemini_help topic="image_generation"\` - Image generation guide
17
+ \`gemini_help topic="grounding"\` - Search grounding features
18
+ \`gemini_help topic="media_resolution"\` - Token optimization
19
+ \`gemini_help topic="all"\` - Complete documentation
20
+
21
+ ## Key Capabilities
22
+ ✓ Google Search grounding for real-time data
23
+ ✓ Multi-modal image generation with conversational editing
24
+ ✓ Advanced image analysis with token optimization
25
+ ✓ Deep research with iterative multi-step analysis
26
+ ✓ Full-resolution image output (saved to disk)
27
+ ✓ High-quality inline previews (1024px, quality 100)`,
28
+ image_generation: `# Image Generation Guide
29
+
30
+ ## Tool: generate_image
31
+
32
+ ### Basic Usage
33
+ \`\`\`
34
+ generate_image(
35
+ prompt="A photorealistic sunset over mountains",
36
+ aspectRatio="16:9"
37
+ )
38
+ \`\`\`
39
+
40
+ ### Parameters
41
+
42
+ **prompt** (required)
43
+ Description of the image to generate. Be specific and detailed.
44
+
45
+ **model** (optional, default: "gemini-3-pro-image-preview")
46
+ Options:
47
+ • gemini-3-pro-image-preview - Best quality, conversational editing support
48
+ • gemini-2.5-flash-image - Stable, fast generation
49
+ • nano-banana-pro-preview - Alias for gemini-3-pro-image-preview
50
+
51
+ **aspectRatio** (optional, default: "1:1")
52
+ Options: "1:1", "3:4", "4:3", "9:16", "16:9"
53
+ Use 16:9 for landscapes, 9:16 for portraits, 1:1 for squares
54
+
55
+ **imageSize** (optional)
56
+ Options: "1K", "2K", "4K"
57
+ Only works with image-specific models. Higher = more detail but slower.
58
+ Note: Preview is capped at 1024px, but full-res saved to disk
59
+
60
+ **use_search** (optional, default: false)
61
+ Enable Google Search grounding for real-time data.
62
+ Use for: weather forecasts, current events, stock prices, sports scores
63
+ Returns grounding sources as markdown links
64
+
65
+ **global_media_resolution** (optional, default: "HIGH")
66
+ For reference images only. See \`gemini_help topic="media_resolution"\`
67
+
68
+ **outputPath** (optional)
69
+ Custom save location. Otherwise saves to configured output directory.
70
+
71
+ ### Output Resolution
72
+ • Generation: Full resolution (up to 4K depending on settings)
73
+ • Disk: Full resolution saved (always)
74
+ • Preview: 1024px max dimension, quality 100 (for inline display)
75
+
76
+ ### Advanced: Conversational Editing
77
+ Generate an image, then edit it by passing the thoughtSignature:
78
+ \`\`\`
79
+ 1. generate_image(prompt="A logo") → returns thoughtSignature
80
+ 2. edit_image(
81
+ prompt="Make it blue",
82
+ images=[{data, mimeType, thoughtSignature}]
83
+ )
84
+ \`\`\``,
85
+ image_editing: `# Image Editing Guide
86
+
87
+ ## Tool: edit_image
88
+
89
+ ### Basic Usage
90
+ \`\`\`
91
+ edit_image(
92
+ prompt="Change the color scheme to blue and green",
93
+ images=[{data: base64Data, mimeType: "image/png"}]
94
+ )
95
+ \`\`\`
96
+
97
+ ### Parameters
98
+
99
+ **prompt** (required)
100
+ Natural language instructions for how to edit the image(s).
101
+ Examples:
102
+ • "Make the background darker"
103
+ • "Add a red border"
104
+ • "Change to black and white"
105
+ • "Increase contrast and saturation"
106
+
107
+ **images** (required, array)
108
+ One or more images to edit. Each image object:
109
+ • data: Base64 encoded image data
110
+ • mimeType: Image MIME type (e.g., "image/png", "image/jpeg")
111
+ • thoughtSignature: (optional) For conversational editing
112
+ • mediaResolution: (optional) Per-image quality override
113
+
114
+ **model** (optional, default: "gemini-3-pro-image-preview")
115
+ Same options as generate_image
116
+
117
+ **use_search** (optional, default: false)
118
+ Enable Google Search for data-driven edits
119
+ Example: "Add current weather data for London"
120
+
121
+ **global_media_resolution** (optional, default: "HIGH")
122
+ Token cost optimization. See \`gemini_help topic="media_resolution"\`
123
+
124
+ **outputPath** (optional)
125
+ Custom save location for edited image
126
+
127
+ ### Conversational Editing
128
+ For multi-step refinements with gemini-3-pro-image-preview:
129
+ 1. First edit returns thoughtSignature
130
+ 2. Pass thoughtSignature in subsequent edits
131
+ 3. Model maintains visual context across iterations
132
+
133
+ ### Tips
134
+ • Be specific: "Make brighter" vs "Increase brightness by 20%"
135
+ • Reference elements: "The sky in the background" vs "The background"
136
+ • Multiple images: Model can composite or compare them`,
137
+ image_analysis: `# Image Analysis Guide
138
+
139
+ ## Tools: describe_image, analyze_image
140
+
141
+ ### describe_image - Text Descriptions
142
+
143
+ **Purpose:** Generate natural language descriptions of images
144
+
145
+ \`\`\`
146
+ describe_image(
147
+ images=[{data: base64Data, mimeType: "image/jpeg"}],
148
+ prompt="Describe this image in detail"
149
+ )
150
+ \`\`\`
151
+
152
+ Returns plain text description.
153
+
154
+ ### analyze_image - Structured Analysis
155
+
156
+ **Purpose:** Extract specific information from images as structured data
157
+
158
+ \`\`\`
159
+ analyze_image(
160
+ images=[{data: base64Data, mimeType: "image/png"}],
161
+ prompt="Extract all text from this document and count words"
162
+ )
163
+ \`\`\`
164
+
165
+ Returns structured analysis based on prompt.
166
+
167
+ ### Media Resolution (Cost Optimization)
168
+
169
+ **global_media_resolution** parameter:
170
+ • MEDIA_RESOLUTION_LOW (280 tokens, 75% savings)
171
+ Use for: Simple tasks, bulk operations, thumbnails
172
+ • MEDIA_RESOLUTION_MEDIUM (560 tokens, 50% savings)
173
+ Use for: PDFs, documents (OCR quality same as HIGH!)
174
+ • MEDIA_RESOLUTION_HIGH (1120 tokens, default)
175
+ Use for: Detailed analysis, complex images
176
+
177
+ **Per-image override:**
178
+ \`\`\`
179
+ images=[
180
+ {data: icon, mimeType: "image/png",
181
+ mediaResolution: "MEDIA_RESOLUTION_LOW"},
182
+ {data: detailed, mimeType: "image/png",
183
+ mediaResolution: "MEDIA_RESOLUTION_ULTRA_HIGH"}
184
+ ]
185
+ \`\`\`
186
+
187
+ ULTRA_HIGH (2000+ tokens) only available as per-image override.
188
+
189
+ ### PDF Analysis Best Practice
190
+ For PDFs, use MEDIUM resolution:
191
+ • Same OCR quality as HIGH
192
+ • 50% token savings
193
+ • Perfect for multi-page documents`,
194
+ chat: `# Chat & Conversation Guide
195
+
196
+ ## Tool: gemini_chat
197
+
198
+ ### Basic Usage
199
+ \`\`\`
200
+ gemini_chat(
201
+ message="Explain quantum entanglement",
202
+ model="gemini-3-pro-preview"
203
+ )
204
+ \`\`\`
205
+
206
+ ### Parameters
207
+
208
+ **message** (required)
209
+ Your message/question to Gemini
210
+
211
+ **model** (optional)
212
+ Options: See \`gemini_help topic="models"\`
213
+
214
+ **grounding** (optional, default: false)
215
+ Enable Google Search grounding for current information
216
+ Returns grounding metadata with sources
217
+
218
+ **max_tokens** (optional, default: 65536)
219
+ Maximum tokens in response (1-65536)
220
+
221
+ **temperature** (optional, default: 0.7)
222
+ Randomness (0.0-1.0). Lower = more focused, Higher = more creative
223
+
224
+ **thinking_level** (optional)
225
+ For Gemini 3 models only:
226
+ • "LOW" - Minimal reasoning, fast responses
227
+ • "MEDIUM" - Balanced (Flash only)
228
+ • "HIGH" - Deep reasoning, slower (default for Gemini 3)
229
+ • "MINIMAL" - Absolute minimum thinking (Flash only)
230
+
231
+ **system_prompt** (optional)
232
+ System-level instructions for the model
233
+
234
+ ### Grounding Example
235
+ \`\`\`
236
+ gemini_chat(
237
+ message="What are the latest developments in the MCP specification?",
238
+ grounding=true
239
+ )
240
+ \`\`\`
241
+ Returns current information with source citations.`,
242
+ deep_research: `# Deep Research Guide
243
+
244
+ ## Tool: gemini_deep_research
245
+
246
+ ### Purpose
247
+ Conduct comprehensive multi-step research on complex topics using iterative analysis.
248
+
249
+ ### Usage
250
+ \`\`\`
251
+ gemini_deep_research(
252
+ research_question="What are the implications of quantum computing for cryptography?",
253
+ max_iterations=5,
254
+ focus_areas=["RSA encryption", "Post-quantum algorithms"]
255
+ )
256
+ \`\`\`
257
+
258
+ ### Parameters
259
+
260
+ **research_question** (required)
261
+ Complex research question or topic to investigate deeply
262
+
263
+ **max_iterations** (optional, default: 5)
264
+ Number of research iterations (3-10)
265
+ More iterations = deeper research but longer wait time
266
+ • 3-4: Quick overview (4-8 minutes)
267
+ • 5-7: Comprehensive analysis (8-15 minutes)
268
+ • 8-10: Exhaustive research (15-25 minutes)
269
+
270
+ **focus_areas** (optional, array)
271
+ Specific areas to focus the research on
272
+ Example: ["clinical trials", "side effects", "dosage"]
273
+
274
+ **model** (optional)
275
+ Research model to use (defaults to latest available)
276
+
277
+ ### How It Works
278
+ 1. Initial search and information gathering
279
+ 2. Iterative deepening with follow-up queries
280
+ 3. Cross-referencing and validation
281
+ 4. Synthesis into comprehensive report
282
+
283
+ ### Returns
284
+ Comprehensive research report with:
285
+ • Executive summary
286
+ • Key findings organized by theme
287
+ • Source citations
288
+ • Confidence assessments
289
+ • Recommended follow-up questions
290
+
291
+ ### Best For
292
+ • Complex topics requiring multiple sources
293
+ • Academic or technical research
294
+ • Comparative analysis across domains
295
+ • Questions with no single definitive answer`,
296
+ grounding: `# Google Search Grounding Guide
297
+
298
+ ## What is Grounding?
299
+ Grounding connects Gemini to Google Search for real-time, factual information.
300
+
301
+ ## Available in Tools
302
+ • gemini_chat (grounding parameter)
303
+ • generate_image (use_search parameter)
304
+ • edit_image (use_search parameter)
305
+
306
+ ## Chat Grounding
307
+ \`\`\`
308
+ gemini_chat(
309
+ message="What happened in tech news today?",
310
+ grounding=true
311
+ )
312
+ \`\`\`
313
+
314
+ **Returns:**
315
+ • Current information (not training data)
316
+ • Grounding metadata with sources
317
+ • Web search queries used
318
+
319
+ **Best for:**
320
+ • Current events and news
321
+ • Recent developments in any field
322
+ • Fact-checking and verification
323
+ • Topics that change frequently
324
+
325
+ ## Image Grounding
326
+ \`\`\`
327
+ generate_image(
328
+ prompt="Weather forecast for London tomorrow with actual temperatures",
329
+ use_search=true
330
+ )
331
+ \`\`\`
332
+
333
+ **Returns:**
334
+ • Image with real-time data
335
+ • Grounding sources as markdown links
336
+ • Search queries used
337
+
338
+ **Best for:**
339
+ • Weather forecasts
340
+ • Stock prices and financial data
341
+ • Sports scores and statistics
342
+ • Current events infographics
343
+ • Any data-driven visualizations
344
+
345
+ ## Important Notes
346
+ • Grounding adds latency (search takes time)
347
+ • Sources returned as clickable markdown links
348
+ • Not needed for general knowledge or creative tasks
349
+ • Most valuable for factual, current information`,
350
+ media_resolution: `# Media Resolution & Token Optimization
351
+
352
+ ## What is Media Resolution?
353
+ Controls image quality when analyzing images, trading quality for token cost.
354
+
355
+ ## Resolution Levels
356
+
357
+ **MEDIA_RESOLUTION_LOW (280 tokens)**
358
+ • 75% token savings vs HIGH
359
+ • Use for: Simple visual tasks, thumbnails, bulk processing
360
+ • Quality: Sufficient for basic recognition and simple questions
361
+
362
+ **MEDIA_RESOLUTION_MEDIUM (560 tokens)**
363
+ • 50% token savings vs HIGH
364
+ • Use for: PDFs, documents, screenshots
365
+ • Quality: **Same OCR quality as HIGH!** (OCR saturates at medium)
366
+ • **RECOMMENDED for all document analysis**
367
+
368
+ **MEDIA_RESOLUTION_HIGH (1120 tokens)**
369
+ • Default quality level
370
+ • Use for: Complex images, detailed analysis
371
+ • Quality: Full fidelity for most tasks
372
+
373
+ **MEDIA_RESOLUTION_ULTRA_HIGH (2000+ tokens)**
374
+ • Maximum detail, per-image only (not global)
375
+ • Use for: Pixel-perfect analysis, fine details, medical imaging
376
+ • Quality: Highest possible fidelity
377
+
378
+ ## Usage
379
+
380
+ ### Global Setting (All Images)
381
+ \`\`\`
382
+ analyze_image(
383
+ images=[{data1}, {data2}, {data3}],
384
+ prompt="Analyze these images",
385
+ global_media_resolution="MEDIA_RESOLUTION_MEDIUM"
386
+ )
387
+ \`\`\`
388
+
389
+ ### Per-Image Override (Mixed Quality)
390
+ \`\`\`
391
+ analyze_image(
392
+ images=[
393
+ {data: simple, mimeType: "image/png",
394
+ mediaResolution: "MEDIA_RESOLUTION_LOW"},
395
+ {data: detailed, mimeType: "image/png",
396
+ mediaResolution: "MEDIA_RESOLUTION_ULTRA_HIGH"}
397
+ ],
398
+ global_media_resolution="MEDIA_RESOLUTION_MEDIUM"
399
+ )
400
+ \`\`\`
401
+
402
+ Per-image setting overrides global setting.
403
+
404
+ ## Best Practices
405
+
406
+ **For PDFs/Documents:**
407
+ Always use MEDIUM - same OCR quality, 50% cost savings
408
+
409
+ **For Bulk Processing:**
410
+ Use LOW for simple tasks (thumbnails, basic recognition)
411
+
412
+ **For Mixed Batches:**
413
+ Set global to MEDIUM, override specific images to ULTRA_HIGH
414
+
415
+ **For Cost Optimization:**
416
+ Start with MEDIUM, only increase if quality insufficient`,
417
+ models: `# Gemini Models Reference
418
+
419
+ ## Chat Models
420
+
421
+ **Gemini 3 Series (Latest)**
422
+ • gemini-3-pro-preview - Best reasoning, supports thinking levels
423
+ • gemini-3-flash-preview - Fast, supports thinking levels
424
+ • gemini-3.1-pro-preview - Enhanced reasoning
425
+ • gemini-3.1-pro-preview-customtools - Optimized for tool use
426
+
427
+ **Gemini 2.5 Series (Stable)**
428
+ • gemini-2.5-pro - Stable flagship model
429
+ • gemini-2.5-flash - Stable fast model
430
+ • gemini-2.5-flash-lite - Lightweight, efficient
431
+
432
+ **Gemini 2.0 Series**
433
+ • gemini-2.0-flash - Versatile multimodal
434
+ • gemini-2.0-flash-001 - Stable version
435
+ • gemini-2.0-flash-lite - Lightweight variant
436
+
437
+ **Aliases**
438
+ • gemini-flash-latest - Latest Flash release
439
+ • gemini-pro-latest - Latest Pro release
440
+
441
+ ## Image Generation Models
442
+
443
+ **gemini-3-pro-image-preview** (Nano Banana Pro)
444
+ • Best quality image generation
445
+ • Supports conversational editing via thoughtSignatures
446
+ • Default for generate_image and edit_image
447
+
448
+ **gemini-2.5-flash-image**
449
+ • Stable image generation
450
+ • Fast, reliable
451
+ • No conversational editing
452
+
453
+ **nano-banana-pro-preview**
454
+ • Alias for gemini-3-pro-image-preview
455
+
456
+ ## Image Analysis Models
457
+
458
+ All chat models support image analysis via:
459
+ • describe_image
460
+ • analyze_image
461
+
462
+ Recommended:
463
+ • gemini-3-flash-preview (default) - Fast, accurate
464
+ • gemini-3-pro-preview - Best quality analysis
465
+
466
+ ## Specialized Models
467
+
468
+ **gemini-2.5-computer-use-preview-10-2025**
469
+ • Computer interaction tasks
470
+
471
+ **deep-research-pro-preview-12-2025**
472
+ • Deep research iterations
473
+
474
+ **Gemma Models**
475
+ • gemma-3-1b-it through gemma-3-27b-it
476
+ • Open weights models for research
477
+
478
+ ## Model Selection Tips
479
+
480
+ **For Chat:**
481
+ • Quick questions: gemini-3-flash-preview
482
+ • Complex reasoning: gemini-3-pro-preview
483
+ • Stable production: gemini-2.5-pro
484
+
485
+ **For Images:**
486
+ • Generation: gemini-3-pro-image-preview (only one with editing)
487
+ • Analysis: gemini-3-flash-preview (fast, accurate)
488
+
489
+ **For Research:**
490
+ • deep-research-pro-preview-12-2025
491
+
492
+ Use \`gemini_list_models\` to see all available models with descriptions.`,
493
+ };
494
+ export function registerGeminiHelp(server) {
495
+ server.registerTool('gemini_help', {
496
+ title: 'Gemini MCP Help',
497
+ description: 'Get comprehensive help about Gemini MCP features, settings, and best practices',
498
+ inputSchema: {
499
+ topic: z.enum([
500
+ 'overview',
501
+ 'image_generation',
502
+ 'image_editing',
503
+ 'image_analysis',
504
+ 'chat',
505
+ 'deep_research',
506
+ 'grounding',
507
+ 'media_resolution',
508
+ 'models',
509
+ 'all',
510
+ ])
511
+ .optional()
512
+ .default('overview')
513
+ .describe('Help topic to display'),
514
+ },
515
+ }, async ({ topic }) => {
516
+ if (topic === 'all') {
517
+ const allTopics = Object.keys(HELP_TOPICS)
518
+ .map((t) => HELP_TOPICS[t])
519
+ .join('\n\n---\n\n');
520
+ return { content: [{ type: 'text', text: allTopics }] };
521
+ }
522
+ const content = HELP_TOPICS[topic];
523
+ if (!content) {
524
+ return {
525
+ content: [{
526
+ type: 'text',
527
+ text: `Unknown help topic: ${topic}\n\nAvailable topics:\n${Object.keys(HELP_TOPICS).join('\n')}`,
528
+ }],
529
+ };
530
+ }
531
+ return { content: [{ type: 'text', text: content }] };
532
+ });
533
+ }
534
+ //# sourceMappingURL=gemini-help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-help.js","sourceRoot":"","sources":["../../src/tools/gemini-help.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,MAAM,WAAW,GAA2B;IAC1C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;qDAwByC;IAEnD,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwDb;IAEL,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDAmDsC;IAErD,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAwDiB;IAEjC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mDA+C2C;IAEjD,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CAqD4B;IAE3C,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAqDoC;IAE/C,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yDAkEqC;IAEvD,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0EA2EgE;CACzE,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,gFAAgF;QAC7F,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;gBACZ,UAAU;gBACV,kBAAkB;gBAClB,eAAe;gBACf,gBAAgB;gBAChB,MAAM;gBACN,eAAe;gBACf,WAAW;gBACX,kBAAkB;gBAClB,QAAQ;gBACR,KAAK;aACN,CAAC;iBACC,QAAQ,EAAE;iBACV,OAAO,CAAC,UAAU,CAAC;iBACnB,QAAQ,CAAC,uBAAuB,CAAC;SACrC;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;iBACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;iBAC1B,IAAI,CAAC,aAAa,CAAC,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QACnE,CAAC;QAED,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,uBAAuB,KAAK,0BAA0B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAClG,CAAC;aACH,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACjE,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Prompt Assistant Tool - Modular Handler
3
+ *
4
+ * Clean architecture for easy expansion:
5
+ * 1. Domain modules live in ./prompt-library/
6
+ * 2. Each domain exports enhance*, get*, validate* functions
7
+ * 3. Add new domains by importing and adding cases
8
+ */
9
+ export interface PromptAssistantArgs {
10
+ request_type: 'chart_design' | 'optimize_chart' | 'validate_chart' | 'get_palette';
11
+ color_scheme?: 'professional' | 'editorial' | 'scientific' | 'minimal' | 'dark';
12
+ chart_type?: 'line' | 'bar' | 'scatter' | 'area' | 'pie' | 'network' | 'heatmap' | 'treemap';
13
+ emphasis?: 'data-ink' | 'storytelling' | 'exploration' | 'presentation';
14
+ current_prompt?: string;
15
+ }
16
+ /**
17
+ * Main handler - routes to appropriate domain module
18
+ */
19
+ export declare function handlePromptAssistant(args: PromptAssistantArgs): Promise<string>;
20
+ //# sourceMappingURL=gemini-prompt-assistant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-prompt-assistant.d.ts","sourceRoot":"","sources":["../../src/tools/gemini-prompt-assistant.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,cAAc,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,aAAa,CAAC;IAEnF,YAAY,CAAC,EAAE,cAAc,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;IAChF,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC7F,QAAQ,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,aAAa,GAAG,cAAc,CAAC;IAExE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqItF"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Prompt Assistant Tool - Modular Handler
3
+ *
4
+ * Clean architecture for easy expansion:
5
+ * 1. Domain modules live in ./prompt-library/
6
+ * 2. Each domain exports enhance*, get*, validate* functions
7
+ * 3. Add new domains by importing and adding cases
8
+ */
9
+ import { enhanceChartPrompt, getChartColorPalette, validateChartPrompt } from './prompt-library/index.js';
10
+ /**
11
+ * Main handler - routes to appropriate domain module
12
+ */
13
+ export async function handlePromptAssistant(args) {
14
+ const { request_type } = args;
15
+ // CHART DESIGN ENHANCEMENT
16
+ if (request_type === 'chart_design') {
17
+ const basePrompt = args.current_prompt || 'Professional data visualization';
18
+ const enhanced = enhanceChartPrompt(basePrompt, {
19
+ colorScheme: args.color_scheme,
20
+ chartType: args.chart_type,
21
+ emphasis: args.emphasis
22
+ });
23
+ return `# Enhanced Chart Design Prompt
24
+
25
+ ${enhanced}
26
+
27
+ ---
28
+
29
+ **USAGE:**
30
+ \`\`\`javascript
31
+ Use gemini:generate_image with:
32
+ prompt: "${enhanced.slice(0, 200)}..."
33
+ aspectRatio: "16:9"
34
+ \`\`\`
35
+
36
+ **CUSTOMIZE:**
37
+ • Try different \`color_scheme\`: professional, editorial, scientific, minimal, dark
38
+ • Adjust \`chart_type\` for specifics: line, bar, scatter, pie, heatmap
39
+ • Set \`emphasis\` for audience: data-ink, storytelling, exploration, presentation`;
40
+ }
41
+ // OPTIMIZE EXISTING CHART PROMPT
42
+ if (request_type === 'optimize_chart') {
43
+ if (!args.current_prompt) {
44
+ return 'Error: current_prompt required for optimization';
45
+ }
46
+ const validation = validateChartPrompt(args.current_prompt);
47
+ const enhanced = enhanceChartPrompt(args.current_prompt, {
48
+ colorScheme: args.color_scheme,
49
+ chartType: args.chart_type,
50
+ emphasis: args.emphasis
51
+ });
52
+ let response = `# Chart Prompt Optimization
53
+
54
+ **Original Prompt:**
55
+ ${args.current_prompt}
56
+
57
+ `;
58
+ if (validation.warnings.length > 0) {
59
+ response += `**⚠️ Warnings:**\n`;
60
+ validation.warnings.forEach(w => response += `• ${w}\n`);
61
+ response += `\n`;
62
+ }
63
+ if (validation.suggestions.length > 0) {
64
+ response += `**💡 Suggestions:**\n`;
65
+ validation.suggestions.forEach(s => response += `• ${s}\n`);
66
+ response += `\n`;
67
+ }
68
+ response += `**✨ Optimized Prompt:**\n${enhanced}`;
69
+ return response;
70
+ }
71
+ // VALIDATE CHART PROMPT
72
+ if (request_type === 'validate_chart') {
73
+ if (!args.current_prompt) {
74
+ return 'Error: current_prompt required for validation';
75
+ }
76
+ const validation = validateChartPrompt(args.current_prompt);
77
+ let response = `# Chart Prompt Validation
78
+
79
+ **Prompt:** ${args.current_prompt}
80
+
81
+ **Status:** ${validation.valid ? '✅ Looks good' : '⚠️ Issues found'}
82
+
83
+ `;
84
+ if (validation.warnings.length > 0) {
85
+ response += `\n**Warnings:**\n`;
86
+ validation.warnings.forEach(w => response += `• ${w}\n`);
87
+ }
88
+ if (validation.suggestions.length > 0) {
89
+ response += `\n**Suggestions:**\n`;
90
+ validation.suggestions.forEach(s => response += `• ${s}\n`);
91
+ }
92
+ return response;
93
+ }
94
+ // GET COLOR PALETTE
95
+ if (request_type === 'get_palette') {
96
+ const scheme = args.color_scheme || 'professional';
97
+ const palette = getChartColorPalette(scheme);
98
+ return `# ${scheme.charAt(0).toUpperCase() + scheme.slice(1)} Color Palette
99
+
100
+ **Description:** ${palette.description}
101
+
102
+ **Primary Colors:**
103
+ ${palette.primary.map(c => `• ${c}`).join('\n')}
104
+
105
+ **Neutral Grays:**
106
+ ${palette.neutral.map(c => `• ${c}`).join('\n')}
107
+
108
+ **Accent Colors:**
109
+ ${palette.accent.map(c => `• ${c}`).join('\n')}
110
+
111
+ **Usage in Prompt:**
112
+ "Use professional colour palette: primary ${palette.primary.slice(0, 3).join(', ')}; neutral greys ${palette.neutral[0]} to ${palette.neutral[palette.neutral.length - 1]}"
113
+
114
+ **All Available Schemes:**
115
+ • professional - IBM Carbon, Tailwind-inspired
116
+ • editorial - FiveThirtyEight, Economist-inspired
117
+ • scientific - Nature, Science journal-inspired
118
+ • minimal - Edward Tufte data-ink approach
119
+ • dark - Observable, GitHub dark mode`;
120
+ }
121
+ return `Unknown request_type: ${request_type}
122
+
123
+ Available request types:
124
+ • chart_design - Get professional chart design system
125
+ • optimize_chart - Improve existing chart prompt
126
+ • validate_chart - Check prompt for anti-patterns
127
+ • get_palette - View color scheme details`;
128
+ }
129
+ //# sourceMappingURL=gemini-prompt-assistant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-prompt-assistant.js","sourceRoot":"","sources":["../../src/tools/gemini-prompt-assistant.ts"],"names":[],"mappings":"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"}