Skip to main content
Glama
deepakkumardewani

Color Scheme Generator MCP Server

generate_analogic_scheme

Generate harmonious color schemes by creating adjacent colors on the color wheel from a seed color for design projects.

Instructions

Generates an analogic color scheme with adjacent colors on the color wheel

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
colorYesThe seed color in hex (098765), RGB (0,71,171), or HSL (215,100%,34%) format
countNoNumber of colors to generate (3-10, default: 5)

Implementation Reference

  • The handler function that executes the generate_analogic_scheme tool logic. It extracts color and count from args, calls the generateColorScheme helper with 'analogic' mode, and returns the result as JSON text content.
    async (args) => { const { color, count } = args; const result = await generateColorScheme(color, "analogic", count); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; }
  • Shared Zod schema for input validation of all color scheme tools, including color (string) and optional count (number). Used by generate_analogic_scheme.
    const colorSchemeInputShape = { color: z .string() .describe( "The seed color in hex (098765), RGB (0,71,171), or HSL (215,100%,34%) format" ), count: z .number() .int() .min(3) .max(10) .default(5) .optional() .describe("Number of colors to generate (3-10, default: 5)"), };
  • Registration of the generate_analogic_scheme tool via server.tool, including name, description, schema reference, and inline handler. Called from registerTools().
    function registerAnalogicScheme() { server.tool( "generate_analogic_scheme", "Generates an analogic color scheme with adjacent colors on the color wheel", colorSchemeInputShape, async (args) => { const { color, count } = args; const result = await generateColorScheme(color, "analogic", count); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; } ); }
  • Primary helper function implementing the core logic: parses color, constructs URL for TheColorAPI with given mode ('analogic'), fetches and formats the color scheme response.
    async function generateColorScheme( color: string, mode: string, count: number = 5 ) { const { param, value } = parseColorInput(color); const url = `https://www.thecolorapi.com/scheme?${param}=${value}&mode=${mode}&count=${count}&format=json`; try { const response = await fetch(url); if (!response.ok) { throw new Error( `Color API request failed: ${response.status} ${response.statusText}` ); } const data: any = await response.json(); if (!data.colors || !Array.isArray(data.colors)) { throw new Error("Invalid response from Color API"); } // Format the response for better readability const colors = data.colors.map((color: any, index: number) => ({ position: index + 1, hex: color.hex?.value || "N/A", rgb: color.rgb ? `rgb(${color.rgb.r}, ${color.rgb.g}, ${color.rgb.b})` : "N/A", hsl: color.hsl ? `hsl(${color.hsl.h}, ${color.hsl.s}%, ${color.hsl.l}%)` : "N/A", name: color.name?.value || "Unknown", })); return { scheme_mode: mode, seed_color: data.seed?.hex?.value || value, color_count: colors.length, colors: colors, }; } catch (error) { console.error(`Error generating ${mode} color scheme:`, error); throw error; } }
  • Supporting helper to detect and normalize color input format (hex, rgb, hsl) for the API request.
    function parseColorInput(color: string): { param: string; value: string } { const cleanColor = color.trim(); // Check for hex format if (cleanColor.startsWith("#")) { return { param: "hex", value: cleanColor.substring(1) }; } else if (/^[0-9A-Fa-f]{6}$/.test(cleanColor)) { return { param: "hex", value: cleanColor }; } // Check for RGB format if ( cleanColor.toLowerCase().includes("rgb") || /^\d+,\d+,\d+$/.test(cleanColor) ) { const rgbMatch = cleanColor.match(/(\d+),\s*(\d+),\s*(\d+)/); if (rgbMatch) { return { param: "rgb", value: `${rgbMatch[1]},${rgbMatch[2]},${rgbMatch[3]}`, }; } } // Check for HSL format if (cleanColor.toLowerCase().includes("hsl") || cleanColor.includes("%")) { const hslMatch = cleanColor.match(/(\d+),\s*(\d+)%,\s*(\d+)%/); if (hslMatch) { return { param: "hsl", value: `${hslMatch[1]},${hslMatch[2]}%,${hslMatch[3]}%`, }; } } // Default to hex if format is unclear return { param: "hex", value: cleanColor.replace("#", "") }; }
  • Invocation of registerAnalogicScheme within the main registerTools function.
    registerAnalogicScheme();

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/deepakkumardewani/color-scheme-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server