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-mcpbuild 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.
This server cannot be deployed
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
- AlicenseBqualityDmaintenanceEnables comprehensive color manipulation, conversion between 22+ formats (HEX, RGB, HSL, CMYK, LAB, etc.), palette generation, gradient creation, and accessibility compliance checking. Supports framework-specific outputs for CSS, Swift, Android, Flutter, and Tailwind with high-precision conversions and visualization capabilities.25MIT
- 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.7 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