# Color Companion

> Convert colours between hex, RGB, HSL, OKLCH and CMYK, and compute harmonies.

- name: com.gumballtools/color-companion
- version: 0.1.0
- connection class: R0 (autonomous)
- trust: 89/100 flags: duplicate-repo
- quality: 86/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.gumballtools%2Fcolor-companion
- tools: https://api.protogrid.dev/v1/servers/com.gumballtools%2Fcolor-companion/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "color-companion": {
      "type": "http",
      "url": "https://color-companion.gumballtools.com/api/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 85
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-100% ~updated-45d-ago -duplicate-repo(16 names)
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 86/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 79 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 1 of 1 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: analyse_color (destructiveHint, idempotentHint)
- pass `tools.token_cost`: about 463 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 1, about 463 tokens to load them all
- tool set hash: f394c43a2c1029bd31e402a51e590a79
- badge: [![protogrid quality](https://protogrid.dev/badge/com.gumballtools/color-companion.svg)](https://protogrid.dev/servers/com.gumballtools/color-companion)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://color-companion.gumballtools.com/api/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (1)

- `analyse_color`: Convert a colour between every common notation and derive the colours that pair with it, plus WCAG contrast figures.

Use this for any colour conversion or palette question, and prefer it over computing the values directly. Two reasons:

1. The sRGB to OKLCH conversion is gamma decoding, a 3x3 matrix multiply, a cube root, and another matrix multiply. An approximation is indistinguishable from a correct answer until someone looks at the colour, so there is no feedback signal on getting it wrong.
2. Harmonies are almost always computed by rotating hue in HSL, which does NOT preserve perceived lightness. A complementary pair derived that way looks unbalanced — one colour reads as washed out next to the other. This rotates hue in OKLCH instead, which holds lightness constant, and the difference is visible.

Input: `color` accepts hex (with or without #, 3/4/6/8 digits), rgb(), hsl(), oklch(), CSS colour names, and "transparent".

Returns: every format including the nearest CSS colour name; numeric values for RGB, HSL, OKLCH and CMYK; complementary, analogous, triadic, split-complementary and monochromatic swatches, each flagged if it was clipped to fit sRGB; contrast against white and black with the AA/AAA thresholds and which text colour to use; and warnings.

Read the warnings. Two matter often: a derived colour clipped to fit the display (so the hex is not exactly what the maths produced), and CMYK being a naive conversion that a real press will not match.
