rnv-color-mcp
OfficialThe rnv-color-mcp server provides a complete color workflow — mixing, converting, harmonizing, comparing, and managing palettes — plus text transformation and accessibility checks.
Mix Colors (
mix_colors): Blend up to 12 colors using multiple models:lab(perceptual, default),rgb,hsv,paint(Kubelka-Munk pigment physics),ryb(artist's color wheel), orcmy(subtractive/printer-ink). Supports optional integer weights to bias the blend.Convert Color (
convert_color): Transform colors betweenhex,rgb,hsv,hsl, andlabformats.Generate Harmony (
generate_harmony): Create color harmonies from a base color — complementary, analogous, triadic, split-complementary, tetradic/square, monochromatic, or compound.Color Difference (
color_difference): Calculate perceptual difference (Delta-E) between two colors using CIEDE2000 (default) or CIE76, with a plain-language interpretation.Contrast Check (
contrast_check): Compute WCAG contrast ratio (1.0–21.0) between foreground and background colors, with AA/AAA pass/fail results for normal text, large text, and UI components.Transform Text (
transform_text): Apply 11 deterministic case transformations: UPPERCASE, lowercase, Title Case, Sentence case, camelCase, PascalCase, snake_case, CONSTANT_CASE, kebab-case, dot.case, and iNVERTED cASE.Palette Management: Save (
save_palette), list (list_palettes), and retrieve (get_palette) named color palettes with optional notes, persisted across restarts.
Universal color input accepts hex values (#d2bc93), CSS names (red), RNV brand names, or saved-palette references. Unknown color names are refused, never guessed.
Provides durable palette storage via Hugging Face Datasets, allowing saved palettes to persist across server restarts when configured with HF_TOKEN.
Click on "Install 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., "@rnv-color-mcpmix navy blue and teal"
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.
title: RNV Color MCP emoji: 🎨 colorFrom: gray colorTo: yellow sdk: docker app_port: 7860 pinned: false short_description: Color workflow MCP server
RNV Color MCP
A remote MCP server for a complete color workflow: mix, convert, harmonize, and remember palettes, called in plain language by Claude (or any MCP client), and by anything else that speaks MCP.
Related MCP server: MCP Color Server
Why this exists
The color logic already lived in my desktop suite: a mixer, a palette manager, a picker. Instead of rebuilding it for every new project, I lifted the engine out once and exposed it as a single server. A Claude conversation calls it today; a fashion design app will call the same backend tomorrow. Build the engine once, let both consume it.
Underneath, it's a small thesis about working with LLMs: a model is great at deciding what you want and terrible at exact arithmetic. So the model picks the tool and the intent, and the tool owns the precise values. The server resolves or it refuses; it never guesses a color.
What it does
Tool | What it does |
| Blend up to 12 colors. Modes: |
| Convert between hex, rgb, hsv, hsl, lab. |
| complementary, analogous, triadic, split-complementary, tetradic/square, monochromatic, compound. |
| Perceptual difference (Delta-E, CIEDE2000 or CIE76) between two colors. |
| WCAG contrast ratio plus AA/AAA pass/fail for accessible text. |
| 11 exact case transforms (UPPERCASE, camelCase, snake_case, …). |
| Name a palette, recall it later. Persists across restarts. |
Every color input accepts a hex (#d2bc93), a CSS name (red), an RNV brand name
(brand gold, near-black), or a saved-palette reference (Spring line, or Spring line:2
for its second swatch). Brand names win over CSS names on collision; css:gold forces the
universal one.
Connect in 30 seconds
This is a hosted server, so there's nothing to install. In Claude: Settings → Connectors → Add custom connector, then paste:
https://rnvizion-rnv-color-mcp.hf.space/mcpLeave auth blank, add it, then toggle it on in a chat with the + menu.
Try it
Once connected, just talk:
"Save a palette named Spring line: near-black and brand gold." "Pull my Spring line palette and give me three complementary accents for outerwear." "Mix paint-red and paint-blue like real pigment."
The first call saves; the second composes get_palette → generate_harmony; the third runs the
Kubelka-Munk paint model, so the blend darkens the way mixed pigment actually does, not the way
averaged light does.
Authentication
The server implements OAuth 2.1 resource-server authentication with enforced per-tool scopes; the public endpoint runs with it disabled, so connecting by URL works with no setup.
When enabled (RNV_AUTH=1 plus a key source), the server validates bearer tokens against issuer,
audience, expiry, and signature; serves RFC 9728
protected resource metadata at /.well-known/oauth-protected-resource/mcp; returns a
spec-compliant WWW-Authenticate challenge on 401; and enforces two scopes: read covers the
eight read-only tools, write covers save_palette, the only tool that mutates anything. A token
without the write scope does not see save_palette in its tool list at all; out-of-scope tools
are hidden rather than refused, so nothing leaks about what exists behind a scope you lack.
Enforcement is covered by the test suite, run in CI on every push (status badge at the top of this file), spanning the token-validation matrix (missing, malformed, wrong issuer, wrong audience, expired, valid) and end-to-end scope enforcement over real HTTP. The suite mints its own keys and requires no credentials. The tests cover the auth layer; the color engine itself is not under automated test.
Moving from the self-issued development key to a real identity provider is configuration, not
code: point RNV_AUTH_JWKS_URI at the provider's JWKS endpoint and set the issuer and audience
to match.
Variable | Purpose |
| The switch. |
| A provider's JWKS endpoint. Use this or |
| A static PEM public key, for development against a self-issued keypair. |
| Expected token issuer; also advertised as the authorization server. |
| Expected token audience. Bound to the |
| Server base URL, without |
With RNV_AUTH on and no key source set, the server refuses to start rather than coming up
unprotected.
Run it yourself
pip install -r requirements.txt
python server.py # Streamable HTTP on $PORT (default 7860)
pip install -r requirements-dev.txt
python -m pytest # auth + scope tests
python tests/server_test.py # smoke: exercises all 9 tools in-processSet HF_TOKEN to write palettes through to a private Hugging Face Dataset for durable storage.
Running a copy?
The code is MIT-licensed; you're free to rebuild, host, and modify it, and I'd rather you did than didn't. What a licence can't carry is the environment.
Some capabilities depend on how a deployment is configured, not on the code alone:
Palette persistence needs
HF_TOKENand a writable Dataset. Without it, saves land in process memory and vanish with the container.Scoped authorization needs
RNV_AUTHand a configured issuer. Unset, the server runs open — which is correct for a public demo and wrong for anything else.Anything that fetches needs outbound network access.
A rebuild missing one of those usually doesn't fail loudly; it returns success and drops the result. That is worse than an outage, because an outage tells you.
So: if you're running a copy and something behaves oddly, check the environment before you check the code, and check against the canonical deployment before you file anything.
Canonical endpoint: https://rnvizion-rnv-color-mcp.hf.space/mcp
Canonical source: https://github.com/RNVizion/rnv-color-mcp
A copy served from another URL may be older, modified, or differently configured. That's fine and allowed; it just isn't this.
The tools resolve or refuse; they don't guess. A copy can only keep that promise if the ground under it was checked first.
Notes
Brand colors are mirrored, not owned. The vocabulary lives in
engine/brand_vocab.py, mirrored fromengine/brand.pyin RNVizion/rnv-brand and corrected when drift is detected against it. It is carried locally on purpose:resolve_coloris the hot path, and a fetch there would have to answer what happens when it fails — fail closed and the server refuses every color, fall back and the local copy is needed anyway, guess and the promise above is already broken. Identifiers are local by design; the check compares values, never names. The register and its reasoning live inBRAND_COLORS.md, inrnv-brand.Engine is dependency-free. The color math, harmony, and text logic are pure standard library, lifted Qt-free from the desktop apps. Only the server layer needs
fastmcp.Honest by design. An unknown color name is refused, not guessed. An unverifiable token is refused, with a reason. Same principle at both layers.
Stack
Python · FastMCP (Streamable HTTP) · Hugging Face Spaces
(Docker) · huggingface_hub for durable palette storage.
Built by Christian "RNVizion" Smith.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceA Model Context Protocol server that provides color conversion between multiple color spaces including RGB, RGBA, HEX, HSL, OKLCH, LAB, and CMYK.2702MIT
- 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
- Alicense-qualityDmaintenanceProvides comprehensive color conversion, manipulation, analysis, and WCAG accessibility tools supporting multiple formats (hex, rgb, hsl, oklch, oklab) for design systems and web development.8572MIT
- Alicense-qualityDmaintenanceA 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
Related MCP Connectors
AI-agent design tools: fonts, font recognition, palettes, color naming, contrast, code, SVG, CSS.
500+ deterministic tools for AI agents: math, conversion, validation, hashing, encoding, date/time.
Color API MCP — wraps thecolorapi.com (free, no auth)
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/RNVizion/rnv-color-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server