gemini-design-mcp 2.0.0 → 2.1.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/build/index.js CHANGED
@@ -39,25 +39,41 @@ STEP 2: VIBE SELECTION (required for new designs)
39
39
 
40
40
  If the project has no existing design system, you MUST:
41
41
 
42
- 1. Generate 5 vibe options based on the user's request, e.g.:
43
- 💼 "Corporate & Clean" - Professional, trustworthy, minimal
44
- • 🎨 "Playful & Vibrant" - Fun, colorful, energetic
45
- • 🌙 "Dark & Techy" - Dark mode, neon accents, developer aesthetic
46
- • 🌿 "Calm & Minimal" - Zen, whitespace, soft tones
47
- • 🚀 "Bold & Modern" - Gradients, geometric shapes, striking
42
+ 1. Generate 5 vibe options with RICH, EVOCATIVE descriptions (2-3 sentences each).
43
+ Each vibe should paint a vivid picture of the aesthetic. Examples:
48
44
 
49
- 2. Generate 5 font suggestions (real Google Fonts names)
45
+ 🏛️ "Pristine Museum" - An ultra-clean, 'white-cube' aesthetic focused on
46
+ vast negative space and absolute stillness. The focus is entirely on the
47
+ content as if it were hanging in a modern gallery. Minimal chrome,
48
+ maximum breathing room.
50
49
 
51
- 3. Present options to user and wait for selection
50
+ "Technical Precision" - A layout-driven vibe that emphasizes the grid.
51
+ It feels intentional, structured, and slightly 'under construction' in a
52
+ cool, architectural way. Sharp edges, monospace accents, blueprint energy.
52
53
 
53
- 4. Only THEN call this tool with the designSystem parameter filled
54
+ 🌊 "Fluid & Organic" - Soft curves, flowing gradients, and a sense of
55
+ natural movement. Like water or silk, everything feels smooth and
56
+ interconnected. Calming yet sophisticated.
57
+
58
+ • 🔥 "Bold & Unapologetic" - High contrast, oversized typography, and
59
+ dramatic color blocks. It demands attention and makes a statement.
60
+ Not for the faint of heart.
61
+
62
+ • 🌙 "Dark Luxe" - Deep, rich darks with subtle metallic or jewel-tone
63
+ accents. Premium feel, like a high-end app at night. Sophisticated
64
+ shadows and glowing highlights.
65
+
66
+ 2. Present the 5 vibes to the user and wait for their selection
67
+
68
+ 3. Only THEN call this tool with the designSystem.vibe parameter filled
69
+ (Gemini will choose the best font to match the vibe automatically)
54
70
 
55
71
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
56
72
  STEP 3: CALL THIS TOOL
57
73
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
58
74
 
59
75
  Only after completing the above steps:
60
- - New project: context=null, designSystem={font, vibe}, techStack specified
76
+ - New project: context=null, designSystem={vibe}, techStack specified
61
77
  - Existing project: context=<relevant files>, techStack from analysis
62
78
 
63
79
  CAPABILITIES:
@@ -4,8 +4,7 @@ export declare const generateFrontendSchema: {
4
4
  context: z.ZodNullable<z.ZodString>;
5
5
  techStack: z.ZodOptional<z.ZodString>;
6
6
  designSystem: z.ZodOptional<z.ZodObject<{
7
- font: z.ZodOptional<z.ZodString>;
8
- vibe: z.ZodOptional<z.ZodObject<{
7
+ vibe: z.ZodObject<{
9
8
  name: z.ZodString;
10
9
  description: z.ZodString;
11
10
  keywords: z.ZodArray<z.ZodString, "many">;
@@ -17,21 +16,19 @@ export declare const generateFrontendSchema: {
17
16
  name: string;
18
17
  description: string;
19
18
  keywords: string[];
20
- }>>;
19
+ }>;
21
20
  }, "strip", z.ZodTypeAny, {
22
- font?: string | undefined;
23
- vibe?: {
21
+ vibe: {
24
22
  name: string;
25
23
  description: string;
26
24
  keywords: string[];
27
- } | undefined;
25
+ };
28
26
  }, {
29
- font?: string | undefined;
30
- vibe?: {
27
+ vibe: {
31
28
  name: string;
32
29
  description: string;
33
30
  keywords: string[];
34
- } | undefined;
31
+ };
35
32
  }>>;
36
33
  };
37
34
  export declare function generateFrontend(params: {
@@ -39,8 +36,7 @@ export declare function generateFrontend(params: {
39
36
  context: string | null;
40
37
  techStack?: string;
41
38
  designSystem?: {
42
- font?: string;
43
- vibe?: {
39
+ vibe: {
44
40
  name: string;
45
41
  description: string;
46
42
  keywords: string[];
@@ -9,37 +9,32 @@ export const generateFrontendSchema = {
9
9
  techStack: z.string().optional().describe("Tech stack (e.g., 'React + Tailwind', 'Vue + CSS', 'HTML/CSS vanilla', 'Next.js + shadcn'). " +
10
10
  "If not specified, Gemini will choose based on context."),
11
11
  designSystem: z.object({
12
- font: z.string().optional().describe("Google Font name to use as primary font"),
13
12
  vibe: z.object({
14
- name: z.string().describe("Vibe name (e.g., 'Corporate & Professional')"),
15
- description: z.string().describe("Mood description (e.g., 'Clean lines, trustworthy feel')"),
16
- keywords: z.array(z.string()).describe("Style keywords (e.g., ['minimal', 'corporate'])"),
17
- }).optional().describe("Selected design vibe"),
18
- }).optional().describe("Design system selection. The calling agent generates vibe options, " +
19
- "user selects, then pass the selection here for consistent styling."),
13
+ name: z.string().describe("Vibe name (e.g., 'Pristine Museum', 'Dark Luxe')"),
14
+ description: z.string().describe("Rich, evocative description of the mood and aesthetic (2-3 sentences)"),
15
+ keywords: z.array(z.string()).describe("Style keywords (e.g., ['minimal', 'whitespace', 'gallery'])"),
16
+ }).describe("Selected design vibe from the vibe selection step"),
17
+ }).optional().describe("Design system with selected vibe. The calling agent generates vibe options, " +
18
+ "user selects, then pass the selection here. Gemini chooses the best font automatically."),
20
19
  };
21
20
  export async function generateFrontend(params) {
22
21
  const { request, context, techStack, designSystem } = params;
23
22
  // Build design system instructions if provided
24
23
  let designSystemInstructions = '';
25
- if (designSystem?.font || designSystem?.vibe) {
26
- const { font, vibe } = designSystem;
27
- const fontInstructions = font
28
- ? `- **Font**: Use "${font}" from Google Fonts as the primary font family. Import it in the <head> or via CSS.`
29
- : '';
30
- const vibeInstructions = vibe
31
- ? `- **Design Vibe** "${vibe.name}":
32
- Mood: ${vibe.description}
33
- Keywords: ${vibe.keywords.join(', ')}
34
-
35
- Interpret this vibe creatively - choose colors, gradients, and visual styling that embody this atmosphere. You have freedom in the specific colors, but the overall feel must match this vibe.`
36
- : '';
24
+ if (designSystem?.vibe) {
25
+ const { vibe } = designSystem;
37
26
  designSystemInstructions = `
38
- MANDATORY DESIGN SYSTEM (User Selected):
39
- ${fontInstructions}
40
- ${vibeInstructions}
27
+ MANDATORY DESIGN SYSTEM (User Selected Vibe):
28
+
29
+ **Design Vibe: "${vibe.name}"**
30
+ ${vibe.description}
31
+ Keywords: ${vibe.keywords.join(', ')}
41
32
 
42
- Apply this design system consistently throughout the entire interface.
33
+ Interpret this vibe creatively:
34
+ - Choose colors, gradients, and visual styling that embody this atmosphere
35
+ - Select a font from Google Fonts that perfectly matches this vibe
36
+ - Apply consistent visual language throughout the entire interface
37
+ - You have freedom in the specific implementation, but the overall feel MUST match this vibe
43
38
  `;
44
39
  }
45
40
  const systemPrompt = `${GENERATE_FRONTEND_PROMPT}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gemini-design-mcp",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "MCP server that uses Gemini 3 Pro for frontend/design code generation",
5
5
  "main": "build/index.js",
6
6
  "bin": {