Koskamo

rnv-color-mcp

A color-computation server providing nine deterministic tools for conversion, harmony, mixing, WCAG contrast, and CIEDE2000. It supports mixing up to 12 colors, converting between formats like hex and lab, generating harmonies, checking accessibility contrast, and persisting palettes across restarts.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

rnv-color-mcp logo, by RNVizionCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by RNVizion
MCP endpoint (Streamable HTTP)
https://rnvizion-rnv-color-mcp.hf.space/mcp
Vendor documentation

What its tools do

10 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

10 of 10 have a description · 0 of 10 declare behavior hints · 1 of 9 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Convert between hex, rgb, hsv, hsl, and lab color formats.
  • Generate complementary, analogous, or triadic color harmonies.
  • Check WCAG contrast ratios for accessible text.
  • Mix colors using Kubelka-Munk pigment physics or digital modes.

Source and maintenance

Community listingRegistry 1.3.0
Maintenance checked

Protocol and capabilities

Server
rnv-color 3.4.11
MCP protocol negotiated in check
2025-11-25
Tools
10 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": false,
    "listChanged": true
  },
  "extensions": {
    "io.modelcontextprotocol/ui": {}
  },
  "experimental": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Color workflow for RNVizion: mix colors (digital and physical/paint models), convert formats, set a color's lightness while holding its hue, measure difference and contrast, generate harmonies, transform text case, and remember named palettes. Color inputs accept hex, CSS names, RNV brand names (brand gold, near-black), or saved-palette references. RNV brand names win over CSS names on collision (gold, blue, teal): 'blue' is RNV blue #6f94bc; write css:blue for #0000ff. Unknown color names are refused, and unknown modes, formats, schemes, operations and methods are refused with the valid choices, never guessed.

Tools

10 advertised

mix_colors
Advertised by the server during the last successful anonymous check.

Blend up to 12 colors into one. Each color may be 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 2nd swatch). Optional integer weights bias the blend (defaults to equal). mode selects the model: rgb/hsv/lab are digital blends (lab is perceptual and the default, best for on-screen color); paint mixes pigments via Kubelka-Munk physics (colors darken like real paint, use it for physical-media matching); ryb is the artist's color wheel; cmy is subtractive like printer inks. Returns hex and rgb. Reach for paint when BLENDING brand colors into a new one, and lab when SAMPLING between them: lab returns the point between its ingredients, which is right for finding a midpoint; paint models mixing them as pigments, which makes a different color. RNV's #00b0a0 was blended in paint; the same ingredients at the same weights in lab give #9cc1a5, 15.94 away and far closer to the brand gold it exists to be distinguishable from. paint and cmy work per RGB channel, so an ingredient with an empty channel (pure digital primaries such as #0000ff or #ffff00) dominates that channel: at equal weights yellow + css:blue comes out black in paint and near-black (#070707) in cmy, where ryb gives green. Weight shifts this in cmy and hardly in paint: white + css:blue at 10:1 is #8484ff in cmy and #0202fe in paint. For pigment-like results use pigment-like colors, or ryb for idealized primaries. Brand names win over CSS names on collision: 'blue' is RNV blue, css:blue is #0000ff. Read-only and deterministic: it computes a result and stores nothing, so it is safe to call repeatedly with no side effects. Use to combine multiple colors into a single blend; to convert one color between formats use convert_color, and to measure how far apart two colors are use color_difference.

mix_colors input schema
{
  "type": "object",
  "required": [
    "colors"
  ],
  "properties": {
    "mode": {
      "type": "string",
      "default": "lab"
    },
    "colors": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "weights": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        {
          "type": "null"
        }
      ],
      "default": null
    }
  },
  "additionalProperties": false
}
mix_colors output schema
{
  "type": "object",
  "additionalProperties": true
}
convert_color
Advertised by the server during the last successful anonymous check.

Convert a color between formats. Input accepts a hex, CSS name, RNV brand name, or saved-palette reference. With `to` set to one of hex/rgb/hsv/hsl/lab, returns just that format; leave `to` out to get all of them. hsv and hsl are fractions from 0 to 1, hue included (multiply hue by 360 for degrees). Read-only and deterministic, with no side effects. Use for format conversion of a single color; to blend several colors into one use mix_colors, and to compare two colors use color_difference.

convert_color input schema
{
  "type": "object",
  "required": [
    "color"
  ],
  "properties": {
    "to": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "color": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
convert_color output schema
{
  "type": "object",
  "additionalProperties": true
}
place_lightness
Advertised by the server during the last successful anonymous check.

Hold a color's hue and chroma and set its lightness, returning one result per requested L*. color accepts a hex, CSS name, RNV brand name, or saved-palette reference; lightness is a list of L* values in 0-100. This is the operation behind a LIGHT/DARK PAIR: one hue at two lightnesses, with a and b held exactly, which is how a color that works on a dark ground gets a partner that works on a light one. Use it when you need the same color at a different lightness; use mix_colors when you need a different color. Returns the source color's LAB, and for each placement the hex, the achieved LAB, and the quantization error per axis -- 8-bit hex cannot store a and b to the precision LAB expresses, so two placements of one hue differ by a few hundredths on both axes however exactly the input held them. That is the storage format, not the operation, and it is reported rather than hidden. Read-only and deterministic. Refuses rather than clamps: not every (L*, a, b) exists in sRGB, and a lightness too far from a chromatic color's range is rejected with the reason instead of being silently moved to the nearest color that fits.

place_lightness input schema
{
  "type": "object",
  "required": [
    "color",
    "lightness"
  ],
  "properties": {
    "color": {
      "type": "string"
    },
    "lightness": {
      "type": "array",
      "items": {
        "type": "number"
      }
    }
  },
  "additionalProperties": false
}
place_lightness output schema
{
  "type": "object",
  "additionalProperties": true
}
generate_harmony
Advertised by the server during the last successful anonymous check.

Generate a color harmony from a base color. base accepts a hex, CSS name, RNV brand name, or saved-palette reference (e.g. 'Spring line:2'). scheme is one of: complementary, analogous, triadic, split-complementary, tetradic (a.k.a. square), monochromatic, compound. Returns a list of hex colors. Read-only and deterministic: it derives the colors from the base and stores nothing, so it has no side effects and is safe to call repeatedly. Use to expand one base color into a related set; to blend existing colors into a single color use mix_colors, and to persist a set you like use save_palette.

generate_harmony input schema
{
  "type": "object",
  "required": [
    "base",
    "scheme"
  ],
  "properties": {
    "base": {
      "type": "string"
    },
    "scheme": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
generate_harmony output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "x-fastmcp-wrap-result": true
}
color_difference
Advertised by the server during the last successful anonymous check.

Perceptual difference (Delta-E) between two colors. color1 and color2 accept a hex, CSS name, RNV brand name, or saved-palette reference. method is 'ciede2000' (default, modern standard) or 'cie76'. A value near 1.0 is the threshold the eye can just notice; larger means more different. Returns the value and a plain-language interpretation. Read-only and deterministic, with no side effects. Use ciede2000 for accuracy and pick cie76 only to match a legacy system; to test whether text is legible on a background (not raw difference) use contrast_check instead.

color_difference input schema
{
  "type": "object",
  "required": [
    "color1",
    "color2"
  ],
  "properties": {
    "color1": {
      "type": "string"
    },
    "color2": {
      "type": "string"
    },
    "method": {
      "type": "string",
      "default": "ciede2000"
    }
  },
  "additionalProperties": false
}
color_difference output schema
{
  "type": "object",
  "additionalProperties": true
}
contrast_check
Advertised by the server during the last successful anonymous check.

WCAG contrast ratio between a foreground and background color, for accessibility. Both accept a hex, CSS name, RNV brand name, or saved-palette reference. Returns the ratio (1.0-21.0) plus pass/fail for AA and AAA at normal and large text sizes and for UI components. Read-only and deterministic, with no side effects. Use this for legibility and accessibility checks; to measure raw perceptual difference between two colors rather than readability use color_difference instead.

contrast_check input schema
{
  "type": "object",
  "required": [
    "foreground",
    "background"
  ],
  "properties": {
    "background": {
      "type": "string"
    },
    "foreground": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
contrast_check output schema
{
  "type": "object",
  "additionalProperties": true
}
transform_text
Advertised by the server during the last successful anonymous check.

Apply an exact, deterministic text transformation. operation is one of: UPPERCASE, lowercase, 'Title Case', 'Sentence case', camelCase, PascalCase, snake_case, CONSTANT_CASE, kebab-case, dot.case, 'iNVERTED cASE'. Read-only and deterministic: it returns the transformed string and changes nothing, safe to call repeatedly. Use whenever exact, reproducible case formatting matters rather than rewriting the text by hand or guessing the casing.

transform_text input schema
{
  "type": "object",
  "required": [
    "text",
    "operation"
  ],
  "properties": {
    "text": {
      "type": "string"
    },
    "operation": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
transform_text output schema
{
  "type": "object",
  "additionalProperties": {
    "type": "string"
  }
}
save_palette
Advertised by the server during the last successful anonymous check.

Persist a named color palette for later retrieval with get_palette or list_palettes. Each entry in colors accepts what every other tool accepts: a hex (#d2bc93), a CSS name (red), an RNV brand name (brand gold), or a saved-palette reference ('Spring line:2'); each is resolved and stored as normalized hex, and an unknown token refuses the whole save naming its position. Optional notes are stored as the palette's description. Author is recorded as RNVizion. The name is refused, with the reason, if it is an RNV brand name, a CSS color name, a 'css:' form, a hex literal, or contains ':' -- a palette resolves ahead of brand and CSS names, so such a name would redefine a color for every caller. This WRITES to the palette store and is the only tool here that does. Reusing an existing name overwrites that palette: save and update are the same call (an upsert), there is no separate update operation. Returns a `durable` flag: true if the palette reached durable storage (the HF Dataset) and will survive a restart, false if it saved to the local working copy only (which is lost on rebuild), with `durable_reason` naming the step that stopped it. Use when the user wants to keep a set of colors under a name for reuse across sessions, such as a brand or launch palette; to read a palette back use get_palette, and to see what already exists use list_palettes. The saved name can then be passed to mix_colors, convert_color, and generate_harmony as a palette reference.

save_palette input schema
{
  "type": "object",
  "required": [
    "name",
    "colors"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Unique key the palette is stored under. Reusing an existing name overwrites that palette (upsert). Can be referenced later by other tools as 'name:index', e.g. 'Spring line:2'. Refused, with the reason, if it is an RNV brand name, a CSS color name, a 'css:' form, a hex literal, or contains ':'."
    },
    "notes": {
      "type": "string",
      "default": "",
      "description": "Optional human-readable description stored as the palette's notes."
    },
    "colors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Ordered list of colors. Each accepts what every other tool accepts: a hex ('#d2bc93'), a CSS name ('red'), an RNV brand name ('brand gold'), or a saved-palette reference ('Spring line:2'); each is resolved and stored as normalized '#rrggbb'. An unknown token refuses the whole save, naming the position. Order is preserved; at least one required."
    }
  },
  "additionalProperties": false
}
save_palette output schema
{
  "type": "object",
  "required": [
    "name",
    "colors",
    "notes",
    "color_count",
    "overwritten",
    "durable",
    "durable_reason"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Name the palette was stored under."
    },
    "notes": {
      "type": "string",
      "description": "Description stored on the palette; empty if none given."
    },
    "colors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The hex colors saved, in order, normalized to '#rrggbb'."
    },
    "durable": {
      "type": "boolean",
      "description": "True if the palette was written through to the durable HF Dataset and will survive a Space rebuild; False if it saved to the local working copy only (e.g. the Space HF_TOKEN is missing or lacks write scope), meaning it will be lost on the next restart."
    },
    "color_count": {
      "type": "integer",
      "description": "Number of colors in the saved palette."
    },
    "overwritten": {
      "type": "boolean",
      "description": "True if a palette with this name already existed and was replaced; False if newly created."
    },
    "durable_reason": {
      "type": "string",
      "description": "Empty when durable is true. Otherwise names the step that stopped durability: no token, the Dataset could not be reached or hydrated at startup, or the push failed. A false flag with no reason is a shrug; this is the reason."
    }
  }
}
list_palettes
Advertised by the server during the last successful anonymous check.

List every saved palette as name + colors. Read-only; no side effects. Use to discover what palettes exist or to find a name before calling get_palette; to fetch one palette's full detail use get_palette, and to create or overwrite one use save_palette.

list_palettes input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_palettes output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      }
    }
  },
  "x-fastmcp-wrap-result": true
}
get_palette
Advertised by the server during the last successful anonymous check.

Retrieve one saved palette by name, returning its colors and metadata. Returns null if no palette by that name exists. Read-only; no side effects. Use when you already know the palette name; to list available names first use list_palettes, and to create or update a palette use save_palette.

get_palette input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_palette output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "x-fastmcp-wrap-result": true
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
651 ms
95th percentile latency
651 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 651 ms · metadata changed · 10 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http rnv-color-mcp https://rnvizion-rnv-color-mcp.hf.space/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add rnv-color-mcp --url https://rnvizion-rnv-color-mcp.hf.space/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable rnv-color-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "rnv-color-mcp": {
      "url": "https://rnvizion-rnv-color-mcp.hf.space/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "rnv-color-mcp": {
      "type": "streamableHttp",
      "url": "https://rnvizion-rnv-color-mcp.hf.space/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start rnv-color-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "rnv-color-mcp": {
      "type": "http",
      "url": "https://rnvizion-rnv-color-mcp.hf.space/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http rnv-color-mcp https://rnvizion-rnv-color-mcp.hf.space/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://rnvizion-rnv-color-mcp.hf.space/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "rnv-color-mcp": {
      "serverUrl": "https://rnvizion-rnv-color-mcp.hf.space/mcp"
    }
  }
}

Let your agent find its tools

Find servers like rnv-color-mcp from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.