About color-space
color-space is a JavaScript collection of 221 color spaces with conversion formulas checked against cited sources and conventional ranges. It also provides WASM, shader, LUT, ICC, and OCIO outputs, along with a CLI and MCP tools for agents.
Key features
- 01Converts among 221 interconnected color spaces
- 02Offers standalone spaces and a lite set
- 03Supports JavaScript, WASM, and shaders
- 04Generates LUT, ICC, and OCIO outputs
- 05Includes CSS parsing and color utilities
- 06Provides CLI and MCP tools
Use cases
- 01Convert values between color spaces
- 02Generate conversion code for graphics shaders
- 03Export LUTs or ICC profiles for video software
- 04Let agents query conversions and gamut data
MCP support
The MCP server exposes tools including convert, gamut, css, space, shader, icc, and code to clients. It can run as a command or over Streamable HTTP.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
9Saved tool list · updated 1w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | string | Yes | target space id, e.g. 'rgb', 'oklch', 'lab', 'slog3', 'rec709' (the 'spaces' tool lists all 205) |
| from | string | No | source space id, e.g. 'rgb', 'oklch', 'lab', 'slog3', 'rec709' (the 'spaces' tool lists all 205) |
| color | string | No | a CSS color instead of `from` + `values`: '#ff8000', 'rebeccapurple', 'oklch(0.7 0.1 50)', 'lab(54% 80 67)', 'color(display-p3 1 0.5 0)' |
| colors | array | No | a batch: one tuple (in `from`) or CSS string per color, e.g. [[255, 128, 0], '#00ff80', 'oklch(0.7 0.1 50)'] |
| values | array | No | one color in the source space, e.g. [255, 128, 0] for rgb |
Details
From the project READMEcolor-space

Open collection of color spaces.
- Formulas tested against cited sources
- Conventional ranges
- JS with TypeScript types / WASM / GLSL / LUT / ICC / OCIO
Use
import space from 'color-space';
space.rgb.oklch(255, 128, 0); // → [0.732, 0.186, 53] — modern CSS
space.slog3.rec2020(0.5, 0.5, 0.5); // camera log → UHD wide gamut
space.rgb.xyz(300, -10, 0); // → [59.7, 30.6, 2.8] — out-of-range in, unclamped out
// batch
space.rgb.oklch([255, 128, 0, 0, 255, 128]); // [0.732, 0.186, 53, 0.875, 0.234, 151]
// meta
space.lab.range; // [[0, 100], [-125, 125], [-125, 125]]
Individual spaces:
import oklch from 'color-space/oklch.js';
oklch.rgb(0.65, 0.25, 180); // matches CSS oklch(0.65 0.25 180)
Imports
color-space– All 221 interconnected spaces · 70 kB gzipcolor-space/<name>.js– One standalone spacecolor-space/lite– 54-space working set · 29 kB gzipcolor-space/wasm– lite set as WASM · bare.wasmincludedcolor-space/gl– GLSL/WGSL shader sourcecolor-space/gl/hlsl·color-space/gl/msl– HLSL (DirectX, Unity, Unreal) and Metal, written by naga from the WGSL ·await hlsl('rgb', 'oklch')· needs the optional peernaga-wasm(it declares Node ≥ 24.12; CI runs it on 22, where npm only warns)color-space/lut–.cubeLUTs for Resolve, Premiere, OBS, ffmpeg — verified vs ACEScolor-space/icc– Matrix + TRC or CLUT profilescolor-space/ocio– OpenColorIO colorspaces for Blender, Nuke, Resolve, Houdini:colorspace(space.sgamut3cine), curve and matrix from native transforms, 55 spaces, each checked against the library to 1e-6color-space/util–parse·formatCSS colors,mix,gamut,visible,deltaE,contrast(WCAG),cvd(color-vision simulation) ·deltaE('rgb', [255, 0, 0], [250, 0, 0])color-space/data.json– Channels, ranges, provenance, references, graph, gamutscolor-space/conformance.json– Cited reference conversions, each with its source, to test any color library againstnpx color-space rgb oklch 255 128 0– CLI, no install:convert(default) ·cube·icc·space·spaces·mcp(MCP server for agents)
Agents
MCP tools – convert · gamut · css · space · spaces · cube · shader · icc · code – so agents call verified math instead of guessing it. A color goes in as any CSS string ('#ff8000', 'oklch(0.7 0.1 50)', 'rebeccapurple') or as channel values; shader writes the conversion as GLSL, WGSL, HLSL or MSL, code gives the JS call and its verified colour-science equivalent.
claude mcp add color-space -- npx -y color-space mcp # Claude Code
code --add-mcp '{"name":"color-space","command":"npx","args":["-y","color-space","mcp"]}' # VS Code
Claude Desktop claude_desktop_config.json, any project .mcp.json:
{ "mcpServers": { "color-space": { "command": "npx", "args": ["-y", "color-space", "mcp"] } } }
Claude Code plugin (the server plus a skill): /plugin marketplace add colorjs/color-space, then /plugin install color-space@color-space. Docker: docker build -t color-space-mcp . and run it with docker run -i --rm color-space-mcp.
Over HTTP (Streamable HTTP, stateless): npx -y color-space mcp --http 8787 on localhost, or host fetch from color-space/mcp.js in a Worker, Deno or Bun. Skill for agents that load skills: plugins/claude/skills/color-space.
Spaces
Motivation
A complete collection of color spaces: one minimal API, formulas tested against their sources. While alternatives focus on digital color spaces, this project takes broader perspective, covering historical and cross-disciplinary spaces as well. Side effects: errata in papers, color education, test cases for JS→WASM compilers (porffor, jz).
It is not a color toolbox — gamut mapping, palettes, alpha stay out; the few tools the atlas itself uses (parsing, mixing, ΔE, contrast, color-vision simulation) are color-space/util. Pantone, NCS, RAL Classic, and similar licensed swatch catalogs aren't open and stay out as well.
Contributing
A wrong value or a missing space: open an issue with the document that defines it. How a space is added and checked: CONTRIBUTING.md.
Credits
Thanks to the researchers, theorists, specifiers, implementors and the libraries that helped this one happen.
| Library | Spaces | Ranges | Camera log · CAM · historic | Backends |
|---|---|---|---|---|
| color-space | 221 | Conventional | ✅ | JS · WASM · GLSL/WGSL · LUT · ICC |
| color-space/lite | 54 | Conventional | logs · HDR · CAM16 | JS · 29 kB gzip |
| color-space/wasm | 54 | Conventional | logs · HDR · CAM16 | WASM |
| culori | 30 | 0–1 | ❌ | JS |
| colorjs.io | 51 | 0–1 | some | JS |
| texel/color | ~16 | 0–1 | ❌ | JS |
| chroma-js | 11 | mixed | ❌ | JS |
| d3-color | 6 | mixed | ❌ | JS |
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.