Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "convert_color" and "mix_colors"
⟨21 unchanged words⟩ one of hex/rgb/hsv/hsl/lab, returns just that format;otherwiseleavereturns`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. ⟨23 unchanged words⟩
⟨113 unchanged words⟩ and lab when SAMPLING between them: labaverages chroma towardreturns thecentroidpointofbetween its ingredients, which is right for finding amidpointmidpoint;andpaintwrongmodelsformixingmakingthem as pigments, which makes anewdifferent color. RNV's #00b0a0 was blended in paint; the ⟨18 unchanged words⟩ gold it exists to be distinguishable from. paintworksand cmy work per RGB channel, so an ingredient with an
Certificate changed, valid to 2027-04-12
Changed the definition of "mix_colors" and "save_palette"
⟨166 unchanged words⟩ brand gold it exists to be distinguishable from. paint works per RGB channel, so an ingredient with an empty channel (pure digital primaries such as #0000ff or #ffff00) dominates that channel: yellow + css:blue comes out black in paint, where ryb gives green. 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 ⟨41 unchanged words⟩
Persist a named color palette for later retrieval with get_palette or list_palettes. Each entry in colorsisaccepts
Added "place_lightness" (9 tools before, 10 now)
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…
Changed the definition of "mix_colors"
⟨94 unchanged words⟩ 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 averages chroma toward the centroid of its ingredients, which is right for finding a midpoint and wrong for making a new 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. Read-only and deterministic: it computes a result and ⟨41 unchanged words⟩
Certificate recorded, valid to 2026-11-25
Authorization not required
First tool surface recorded: 9 tools (server version 3.4.7)
Showing the latest 8 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨3 unchanged words⟩ "colors":{"description":"Ordered list of colors. Each accepts what every other tool accepts: a hexcolors('#d2bc93'),eacha'#RRGGBB'CSS name (e.g.'red'),'#d2bc93'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."," ⟨29 unchanged words⟩ 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 ':'.","type":"string"},"notes":{ ⟨17 unchanged words⟩
⟨13 unchanged words⟩ "description":"The hex colors saved, inorder.order, normalized to '#rrggbb'.","items":{"type":"string"}, ⟨49 unchanged words⟩ next restart.","type":"boolean"},"durable_reason":{"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.","type":"string"},"name":{"description":"Name the palette was ⟨40 unchanged words⟩ ","notes","color_count","overwritten","durable","durable_reason"],"type":"object"}