grayscale-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@grayscale-mcp build a 10-shade palette from #3b82f6 and export it as tailwind"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
grayscale-mcp
An MCP server for grayscale.design. Agents can build luminance-based color palettes from base colors and export them the same way the site does.
The math is the site's own code. src/site/color.js is an unedited copy of the site's resources/js/utils/color.js, and the palette, naming, lock, share-link and export logic is ported line for line from App.vue, PaletteRow.vue and ExportController.php. Every palette and export was checked against the live site (see Verification).
The server is read-only. It needs no account and no secrets, stores nothing, and never calls grayscale.design.
Remote endpoint: https://mcp.grayscale.design/mcp (Streamable HTTP, stateless, no auth, 120 requests a minute per IP). https://grayscale-mcp.fly.dev/mcp serves the same app. Use of the hosted endpoint is covered by Hosted service.
Install
Claude Code
# remote (nothing to install)
claude mcp add --transport http grayscale-design https://mcp.grayscale.design/mcp
# or local stdio
git clone https://github.com/truefrontier/grayscale-mcp && cd grayscale-mcp && npm install && npm run build
claude mcp add grayscale-design -- node "$PWD/dist/stdio.js"Cursor / Grok Bot
Add this to ~/.cursor/mcp.json (or a project's .cursor/mcp.json):
{
"mcpServers": {
"grayscale-design": { "url": "https://mcp.grayscale.design/mcp" }
}
}For local stdio, use { "command": "node", "args": ["/absolute/path/to/grayscale-mcp/dist/stdio.js"] }.
Grok Bot uses the same thing. Add a custom MCP connector with the URL https://mcp.grayscale.design/mcp and no auth.
Any other MCP client
Streamable HTTP:
POST https://mcp.grayscale.design/mcp. No auth; sendAccept: application/json, text/event-stream.stdio:
node dist/stdio.js.Clients that only support stdio:
npx -y mcp-remote https://mcp.grayscale.design/mcp.
Related MCP server: MCP Color Converter
Tools
Tool | What it does | Site feature |
| Builds the grayscale scale plus one palette per base color. Each base color can have a name, a hue/saturation tweak and a lock. Takes a preset, a shade count (3–20), custom luminance targets, or a grayscale.design share link. Returns every swatch, auto names, suggested colors and a share link that opens the same palette on the site. | Steps 1–2, Hue/Sat Tweak, Lock, auto naming, share URL |
| Same inputs, plus | Export Your Colors, Tailwind Auto-Dark Mode, Export Svgs |
| The luminance targets, labels and grays for a preset ( | Step 1 presets, shade count, sliders |
| Parses hex, rgb or hsl the way the site's paste box does. Returns hex/rgb/hsl/oklch, luminance, the site's color name, and WCAG contrast. | Paste parsing, color naming, Text Overlay |
| Keeps a color's hue and saturation and solves for a target luminance. | The per-shade solver |
| Analogous, triadic and complementary suggestions at luminance 40. | Suggested colors |
| A gray (0–255) or luminance → a color of any hue and saturation with the same luminance. |
|
Not covered
Image upload → palette. The site posts the image to its own server (CSRF-protected) and reads the colors back from imgix. An MCP would be writing files to that server, so this tool leaves it out. Pass the colors directly instead.
Saved palettes / accounts. The site has neither. Its only users are Statamic admins, and the share URL is how a palette gets saved, so
generate_palettereturns that URL and accepts it back as input.Demo videos and the feedback link.
Site quirks kept on purpose
These are replicated so the output matches the site exactly:
With Radix + OKLCH, the export stops after the header (the site throws inside a try/catch).
Stylus shade labels are 100, 200, 300… whatever the count (the site passes a boolean as the count).
When a share link has an unnamed palette before a named one, the site moves the name onto the wrong palette on load.
generate_palette({ share_url })does the same.
Hosted service
The endpoint at https://mcp.grayscale.design/mcp (and https://grayscale-mcp.fly.dev/mcp) is provided free and as-is, with no guarantee of uptime or accuracy. It may change, be rate-limited, or shut down at any time without notice.
Acceptable use. Don't abuse or overload the service, don't try to get around the rate limit, and don't use it for anything illegal. We may block traffic that does.
Data. The server doesn't need an account, stores nothing you send, and doesn't write request or IP logs. To enforce the rate limit it keeps each client IP address in memory for about a minute, then drops it. The service is hosted on Fly.io, which routes the traffic and handles it under its own privacy policy. We don't sell any data.
License
MIT, Copyright (c) 2026 Brandname Maker LLC d/b/a True Frontier. Credits for the color formulas are in THIRD_PARTY.md.
The grayscale.design and True Frontier names and logos aren't covered by this license.
Develop
npm install
npm run build
npm test # stdio: calls every tool through an MCP client
node scripts/smoke.mjs http://localhost:8080/mcp # HTTP, after `npm run start:http`
fly deploy # remote (app: grayscale-mcp)Verification
Seven palettes (one color, three colors, presets, hue/sat tweaks, lock, 7 custom shades) were loaded in headless Chrome from the live grayscale.design share links. The site's own export computeds were compared with this server's output: 8 export tabs × 4 color types, plus /export-svgs.
In the six cases compared swatch by swatch, all 163 swatches matched exactly in hex, rgb and hsl.
222 of 224 export texts matched byte for byte. The two that differ are only the share link in the header comment: the site's first render still has the URL from before its name-shift quirk ran.
All 7 SVG files matched.
Presets, the 15-shade resize, suggested colors and
/false-coloralso matched.
Available Tools
7 toolsadjust_shadeMove a color to a target luminanceARead-onlyIdempotent
Keep a color's hue and saturation and find the lightness that hits a target luminance, using the site's solver. This is how every palette shade is made.
Inputs: lum (required), color (required).
color_infoColor luminance and contrastARead-onlyIdempotent
Parse a color the way the site does and return hex, rgb, hsl, oklch, its luminance (the site's color value, 0-100), the site's auto name, and WCAG contrast ratios against white, black and an optional second color.
Inputs: color (required), against.
export_paletteExport palette codeARead-onlyIdempotent
Export palettes as the code the site's "Export Your Colors" and "Tailwind Auto-Dark Mode" sections produce: tailwind (theme colors object), radix (light + dark scales), css-vars, scss, less, stylus, auto-dark-css (CSS variables that flip in dark mode), auto-dark-tailwind (tailwind.config.js for those variables), svg (the "Export Svgs" swatch sheet) or json (raw swatch data).
Inputs: format (required), lums, count, colors, +3 more.
false_colorFalse color from a grayARead-onlyIdempotent
The site's /false-color tool: pick a gray (0-255) or a luminance, then get a color of any hue and saturation with that same luminance.
Inputs: hue, lum, sat, gray.
generate_paletteGenerate luminance-based palettesARead-onlyIdempotent
Generate a grayscale luminance scale plus one palette per base color, exactly as grayscale.design/app does. Each shade matches the grayscale shade's luminance while keeping the base hue and saturation. Returns every swatch (label, hex, rgb, hsl, oklch, luminance) and a share link that opens the same palette on the site.
Inputs: lums, count, colors, preset, +1 more.
luminance_scaleBuild a luminance scaleARead-onlyIdempotent
Return the grayscale luminance scale (step 1 on the site): luminance targets, shade labels and the gray for each shade. Use a preset, change the shade count, or pass custom targets.
Inputs: lums, count, preset.
suggest_colorsSuggest companion colorsARead-onlyIdempotent
The site's suggested-color swatches: analogous (+-60), triadic (+-120) and complementary hues of a base color, all at luminance 40.
Inputs: color (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Most tools target clearly distinct operations: palette generation, exporting, color parsing, shade adjustment, suggestions, and false-color mapping. The closest overlaps are generate_palette vs. luminance_scale and adjust_shade vs. false_color, but their descriptions make the boundaries reasonably clear.
The set mixes verb_noun names such as export_palette, generate_palette, adjust_shade, and suggest_colors with noun-based names like luminance_scale, color_info, and false_color. The pattern is still readable, but it is not a single consistent convention.
Seven tools is well-scoped for a grayscale palette and color utility server. Each tool corresponds to a distinct site capability, and none feels redundant or extraneous.
The surface covers the apparent domain well: scale generation, palette generation, multiple export formats, color parsing, luminance adjustment, suggestions, and false-color exploration. There are no obvious dead ends for core palette workflows.
Maintenance
Related MCP Connectors
Contrast checks with fixes, OKLCH harmonies, palettes, color-blind previews and code export.
WCAG color contrast checks, nearest accessible color, CSS color conversion and palette pair checks.
Convert colours between hex, RGB, HSL, OKLCH and CMYK, and compute harmonies.
18 color tools: OKLCH, WCAG and APCA contrast fixes, palettes, gradients, color blindness, tokens.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides comprehensive color conversion, manipulation, analysis, and WCAG accessibility tools supporting multiple formats (hex, rgb, hsl, oklch, oklab) for design systems and web development.19 npm2MIT
- AlicenseNot gradedqualityDmaintenanceA comprehensive toolkit for color conversion, manipulation, and accessibility analysis supporting formats like OkLCH and WCAG compliance. It enables AI agents to manage design systems by generating harmonious palettes, transforming color spaces, and performing contrast checks.2MIT
- AlicenseNot gradedqualityBmaintenanceExtract palettes from images, generate harmonies, gradients, random palettes; Check WCAG and APCA contrast; Suggest nearest passing OkLCH lightness; Simulate color-blindness; Convert and sort colors across formats (hex / RGB / HSL / OkLCH / …)MIT
- AlicenseAqualityDmaintenanceEnables color conversion between HEX/RGB/HSL/HSV/CMYK, palette generation, WCAG contrast checking, color mixing/adjustment, and CSS gradient creation for AI agents.553 npmMIT