ort_description: Color workflow MCP server < mcp-name: io.github.RNVizion/rnv-color-mcp 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.
---
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
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.
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 |
|---|---|
| mix_colors | Blend up to 12 colors. Modes: rgb, hsv, lab (digital) and paint (Kubelka-Munk pigment physics), ryb (artist's wheel), cmy (subtractive). |
| convert_color | Convert between hex, rgb, hsv, hsl, lab. |
| place_lightness | Hold a color's hue and chroma; set its lightness. One hue at two L\* values is a light/dark pair. Refuses out-of-gamut rather than clamping, and reports the 8-bit quantization error. |
| generate_harmony | complementary, analogous, triadic, split-complementary, tetradic/square, monochromatic, compound. |
| color_difference | Perceptual difference (Delta-E, CIEDE2000 or CIE76) between two colors. |
| contrast_check | WCAG contrast ratio plus AA/AAA pass/fail for accessible text. |
| transform_text | 11 exact case transforms (UPPERCASE, camelCase, snake_case, …). |
| save_palette / list_palettes / get_palette | 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 (gold, blue, teal);
css:blue 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:
Leave 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 crimson and royalblue 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 every
read-only tool, write covers save_palette, the only tool that mutates anything. A token