Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Colour Memory

REMOTE · COLOUR-MEMORY-API-PRODUCTION.UP.RAILWAY.APP · SCANNED SEP 21

Cultural color intelligence. Every colour anchored to a person, a year, and a consequence.

0 this week 85 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security83
Transport & Reachability100
Schema Quality & AI Usability76
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 22763 tokens (~244/item across 93 items; 91 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 99% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety38
  • Injection-marker check failed: the description of parameter "n_results" on tool "archive_search" contains an instruction to conceal the call from the user, the text "never tell the user", at byte 199 of that field. See how to fix → Fail
  • 1 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "palette_generate" implies "send" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 92 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
  • Supports UI / widget rendering.Pass
Install

How do I install the Colour Memory MCP server?

Colour Memory is a hosted endpoint at https://colour-memory-api-production.up.railway.app/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · colour-memory-api-production.up.railway.app

# add to Claude Code
claude mcp add --transport http digbyo-colour-memory 'https://colour-memory-api-production.up.railway.app/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "digbyo-colour-memory": {
      "url": "https://colour-memory-api-production.up.railway.app/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "digbyo-colour-memory": {
      "type": "http",
      "url": "https://colour-memory-api-production.up.railway.app/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.digbyo-colour-memory]
url = "https://colour-memory-api-production.up.railway.app/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "digbyo-colour-memory": {
      "type": "remote",
      "url": "https://colour-memory-api-production.up.railway.app/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add digbyo-colour-memory --url 'https://colour-memory-api-production.up.railway.app/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  digbyo-colour-memory:
    url: "https://colour-memory-api-production.up.railway.app/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "digbyo-colour-memory": {
      "Transport": "http",
      "Url": "https://colour-memory-api-production.up.railway.app/mcp"
    }
  }
}
# add to Vellum
assistant mcp add digbyo-colour-memory -t streamable-http -u 'https://colour-memory-api-production.up.railway.app/mcp'
// mcp.json
{
  "mcpServers": {
    "digbyo-colour-memory": {
      "type": "http",
      "url": "https://colour-memory-api-production.up.railway.app/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 16 Sept 26 0
    • Tool “accessibility_simulate” rewrote its description, which is the text the model reads security
    • Tool “colour_metrics” rewrote its description, which is the text the model reads security
    • Tool “image_palette” rewrote its description, which is the text the model reads security
  • 14 Sept 26 0
    • “house_specify” added an optional parameter “guidance_level” cosmetic
    • “interior_specify” added an optional parameter “role_plan” cosmetic

    2 cosmetic changes on this day. Switch on “Show cosmetic changes” to see them.

  • 1 Sept 26 0
    • New tool “vanderpoel_pairing” functional
  • 31 Aug 26 0
    • Tool “colour_harmonies” rewrote its description, which is the text the model reads security
    • New tool “colour_relationships” functional
    • New tool “why_connected” functional
    • “colour_harmonies” reworded the description of “harmony_types” cosmetic
  • 30 Aug 26 0
    • “house_specify” reworded the description of “minimum_claim_strength” cosmetic

    1 cosmetic change on this day. Switch on “Show cosmetic changes” to see it.

  • 29 Aug 26 −4
    • Injection markers: pass → fail security
    • Tool “brand_audit” rewrote its description, which is the text the model reads security
    • Tool “brand_guideline_specify” rewrote its description, which is the text the model reads security
    • Tool “brand_system” rewrote its description, which is the text the model reads security
    • Tool “colour_dna” rewrote its description, which is the text the model reads security
    • Tool “colour_harmonies” rewrote its description, which is the text the model reads security
    • Tool “colour_variants” rewrote its description, which is the text the model reads security
    • Tool “design_session” rewrote its description, which is the text the model reads security
    • Tool “house_specify” rewrote its description, which is the text the model reads security
    • Tool “image_brief” rewrote its description, which is the text the model reads security
    • Tool “image_palette” rewrote its description, which is the text the model reads security
    • Tool “interior_specify” rewrote its description, which is the text the model reads security
    • Tool “palette_analyse” rewrote its description, which is the text the model reads security
    • Tool “palette_audit” rewrote its description, which is the text the model reads security
    • Tool “palette_compare” rewrote its description, which is the text the model reads security
    • Tool “palette_concept” rewrote its description, which is the text the model reads security
    • Tool “palette_extract” rewrote its description, which is the text the model reads security
    • Tool “palette_generate” rewrote its description, which is the text the model reads security
    • Tool “palette_gradient” rewrote its description, which is the text the model reads security
    • Tool “palette_heritage” rewrote its description, which is the text the model reads security
    • Tool “palette_iterate” rewrote its description, which is the text the model reads security
    • Tool “palette_light_dark” rewrote its description, which is the text the model reads security
    • Tool “palette_specify” rewrote its description, which is the text the model reads security
    • Tool “palette_strict” rewrote its description, which is the text the model reads security
    • Tool “palette_translate” rewrote its description, which is the text the model reads security
    • Tool “palette_verdict” rewrote its description, which is the text the model reads security
    • Tool “style_match” rewrote its description, which is the text the model reads security
    • Schema quality: 210 → 238 functional
    • New resource “Colour Memory palette” functional
    • New tool “palette_finalize” functional
    • “archive_search” added an optional parameter “offset” cosmetic
    • “brand_audit” added an optional parameter “site_evidence” cosmetic
    • “brand_collision” added an optional parameter “competitor_provenance” cosmetic
    • “brand_guideline_select” added an optional parameter “project_id” cosmetic
    • “brand_guideline_specify” added an optional parameter “continue_project_id” cosmetic
    • “archive_search” reworded the description of “n_results” cosmetic
    • “brand_guideline_select” reworded the description of “brand_ref” cosmetic
    • “palette_generate” reworded the description of “size” cosmetic
    • “palette_generate” reworded the description of “slots” cosmetic
    • “brand_guideline_select” made “brand_ref” optional cosmetic
  • 28 Aug 26 +2
    • The server now declares the “resources” capability functional
    • First check of Capabilities: pass functional
    • First check of Schema quality: 100 functional
    • New resource “Colour Memory result” functional
    • New tool “render_colour_result” functional
  • 26 Aug 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Probed https://colour-memory-api-production.up.railway.app/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=*.up.railway.app CN=YE1,O=Let's Encrypt,C=US 29 Jul 2026 27 Oct 2026 ECDSA 256 ECDSA-SHA384 6da79bb561da3efeb0e751ca21abd3999fe
SANs: *.up.railway.app, up.railway.app
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of colour-memory-api-production.up.railway.app. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
app. present 23684 8 Verified
railway.app. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Challenged, unverified

The endpoint asked for a token, but we could not retrieve and validate the RFC 9728 metadata that tells a client how to obtain one.

Result Challenged, unverified
Enforced On tool calls
HTTP status 200

Protected resource metadata

Retrieved No
Problem no_resource_metadata

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://colour-memory-api-production.up.railway.app/mcp Verified 200
http (plaintext) http://colour-memory-api-production.up.railway.app/mcp HTTPS enforced 301 https://colour-memory-api-production.up.railway.app/mcp
MCP tools · 91 exposed · ~22,733 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
house_specify ~774

Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance (same object, same pattern colourway, same source citation, same designer, same period+institution); where it does not, they are grouped by perceptual similarity and the response says so -- grouping_basis reports which, and provenance_credit reports how many delivered colours are individually evidenced versus documented as a GROUP (often zero). Every colour is a real archive record either way. Each room gets a full colour card set (dominant/secondary/joinery/textile/accent roles) with paint matches, LRV, illuminant behaviour, and WCAG data. A documentary grouping states exactly which documented fact ties its colours together (e.g. 'documented on the same Fitzwilliam Museum record for the Artichoke hanging, accession T.1-1979') and its weighted grouping_strength score -- historical claims are templated only from fields the archive record actually states; room/surface assignment is disclosed as editorial, never as historical fact. Orientation (north/south/east/west) is recorded as room context and surfaced in each room's light_context; in the current model it does not alter palette selection. Example: concept='Arts and Crafts movement family house', archive='ArtsAndCrafts', rooms=[{label:'Entrance Hall', room_type:'hallway', orientation:'north'}, {label:'Living Room', room_type:'living', orientation:'south'}]. Use interior_specify instead for a single room without cross-room grouping. The response includes house_ref -- pass that (not the full response) to palette_pdf's house_ref input to render the flagship document; the full response is often 60-100KB+, too large to safely resend as another tool call's input. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you a…

NameTypeReqDescription
archivestringyesSingle archive to draw every room's colours from, e.g. 'ArtsAndCrafts'. Required -- invalid names return a clear error listing valid archives.
avoidarrayTerms to exclude from retrieval.
colours_per_roomintegerDefault 5.
conceptstringyesHouse-level concept or brief, e.g. 'Arts and Crafts movement family house'
guidance_levelstringWho the guidance notes are written for. 'client' (default) for a homeowner; 'decorator' for a trade reader. The specification decisions are identical either way -- only the wording differs.
minimum_claim_strengthstringEvidence-grade floor, default 'B'. Explicitly supplied: a hard admission filter, never relaxed -- too few qualifying records fails closed with a per-grade availability map (ARCHIVE_EVIDENCE_POOL_DEPL…
narrative_modestringDefault 'evidence_only'.
roomsarrayyesOne entry per room, e.g. [{label:'Entrance Hall', room_type:'hallway', orientation:'north'}]
shared_house_coloursintegerDefault 2.
strict_semantic_colourbooleanDefault true -- excludes entries whose quoted colour language contradicts their stored hex.

Structured output declared, but exposes no named fields.

No examples provided.

image_brief ~372

Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, understands the scene, identifies the style period, suggests product directions by category (textiles, interiors, fashion), generates an image generation prompt, and returns a swatch URL. Use instead of chaining palette_extract + palette_analyse + agent_brief separately. Pass style_context for coherent archive matching e.g. 'English cottage garden', 'Victorian', 'MarsColour'. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
archivestringExplicit archive name override e.g. 'MarsColour', 'Japan'
grey_card_hexstringHex value from a grey/white card for white balance correction
image_base64stringBase64-encoded image data
image_urlstringPublic URL of the image
kintegerNumber of colours to extract (3-12, default 6)
modelstringImage model: midjourney | flux | dalle | stable_diffusion (default midjourney)
product_typestringProduct focus e.g. 'tea towel', 'wallpaper', 'ceramic', 'textile'
style_contextstringPlain English style e.g. 'English cottage garden', 'Victorian', 'Japanese', 'MarsColour'. Restricts archive matching to coherent cultural set.

Structured output declared, but exposes no named fields.

No examples provided.

image_palette ~269

Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provenance. Uses K-means++ extraction; sRGB pixels are read as D65 CIELAB for matching. Returns up to 5 dominant colours, each with archive name, cultural story, nearest RAL standard, and WCAG accessibility data. Works for product photography, interior photos, artwork, brand assets, and mood boards. The image is never stored — processed in memory only. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
archivestringOptional: restrict archive matching to a specific archive
image_base64stringyesBase64 encoded image (JPEG, PNG, WebP)
media_typestringImage MIME type e.g. 'image/jpeg'
n_coloursintegerNumber of dominant colours to extract (default 5, max 5)

Structured output declared, but exposes no named fields.

No examples provided.

image_personal ~239

Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, medium, or deep), and undertone (warm, cool, or neutral). Returns a curated palette of archive colours that genuinely suit you — each with full historical provenance and cultural context — plus colours to avoid. Uses Claude Vision for skin, hair, and eye analysis, then matches to the archive by CIEDE2000 perceptual distance. The photo is never stored. Example: a Deep Winter might wear Ottoman Carbon Ink while a True Spring suits Kogi Mango.

NameTypeReqDescription
image_base64stringBase64 encoded portrait photo (JPEG or PNG). Face should be clearly visible in natural light. Either image_base64 or image_url required.
image_urlstringURL of a portrait photo hosted online. Easier than base64 for MCP use. Either image_url or image_base64 required.
media_typestringImage MIME type e.g. 'image/jpeg'
namestringOptional: person's name for the report e.g. 'Sarah'

Structured output declared, but exposes no named fields.

No examples provided.

index_resonance ~178

Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequence are indistinguishable (blood as prognosis, ash as finality). 0.80 = institution mediates the colour (paint as deterrence, flag as authority). 0.50 = symbolic or associative only. Input: list of colour entries with name, hex, archive, source, notes. Output: resonance score, material origin, social function, alignment reason, confidence. Use for investigative reports, forensic briefs, museum content, editorial PDFs. This is the metric that separates Colour Memory from palette generators.

NameTypeReqDescription
entriesarrayyesList of colour entries to score for resonance
score_basisstringScoring basis (default: material_origin_to_social_consequence)

Structured output declared, but exposes no named fields.

No examples provided.

ingest_image ~118

Upload an image to Colour Memory for ephemeral processing. Returns image_id valid 5 minutes. Pass image_id to palette_extract or image_brief. Use for any image over 50 KB.

NameTypeReqDescription
imageobjectMCP file reference {download_url, mime_type, file_name}
image_base64stringBase64-encoded image data. Use this for locally uploaded files with no public URL. No size limit here (unlike palette_extract's image_base64).
source_urlstringHTTPS URL of the image

Structured output declared, but exposes no named fields.

No examples provided.

interior_specify ~647

Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour scheme with 60/30/10 surface assignments, archive colour names with full cultural provenance, Farrow and Ball and Little Greene paint matches, three-illuminant light behaviour (D65 daylight, F11 atrium, Illuminant A incandescent), WCAG accessibility for digital use, and a written cultural rationale explaining why each colour belongs in this room. Examples: 'bold maximalist living room', 'calm Scandi bedroom', 'Victorian study', 'coastal kitchen', 'gallery hallway'. Pass `archive` to lock the whole scheme to one named archive (e.g. 'ArtsAndCrafts', 'GeorgianPleasures') -- every returned colour will belong to it, or you get a clear error listing valid archive names rather than a silent unrestricted search. Use /interior-specification/pdf for a downloadable branded PDF version. Use house_specify instead for a multi-room scheme with cross-room provenance grouping. This is the tool that replaces a colour consultation. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
archivestringOptional: restrict the candidate pool to this single archive before scoring, e.g. 'ArtsAndCrafts' or 'GeorgianPleasures'. Invalid names return a clear error listing valid archives rather than silentl…
avoidarrayColours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection.
conceptstringyesRoom concept or brief e.g. 'bold maximalist living room' or 'calm Scandi bedroom'
n_coloursintegerNumber of colours in scheme (default 5, max 7)
orientationstringRoom orientation e.g. 'north', 'south', 'east', 'west' — affects light advice
role_planarrayOptional: the room's spatial hierarchy, decided BEFORE colours are retrieved, so retrieval can be asked for candidates that suit a named job on a named surface. The role vocabulary is open -- field,…
room_typestringRoom type e.g. 'living', 'bedroom', 'kitchen', 'study', 'bathroom', 'hallway', 'dining'
stylestringStyle direction e.g. 'heritage', 'contemporary', 'maximalist', 'minimal', 'scandi', 'industrial', 'coastal'

Structured output declared, but exposes no named fields.

No examples provided.

meta_capabilities ~60

Return a live inventory of all active endpoints and MCP tools. Use this first to discover what the API can do before making calls. Returns tool count, endpoint list, MCP-exposed tools, and usage notes. Deterministic -- no LLM cost.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

palette_analyse ~222

Analyse a palette of hex colours against the Colour Memory archive. For each colour returns the nearest named archive entry with cultural name, source, claim_strength (A-E), do_not_say guardrails, and alternatives when confidence is low. Palette-level deduplication ensures no two colours map to the same archive entry. Use after extracting colours from a photo or generating a palette. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
archivestringOptional: restrict to one archive e.g. China, Pigment, ArtsAndCrafts
coloursarrayyesArray of colour objects
nintegerMax alternatives per colour when confidence is low (1-3, default 1)

Structured output declared, but exposes no named fields.

No examples provided.

palette_audit ~189

Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, grade, and prioritised fix list. Enterprise quality gate -- use before shipping any palette. Deterministic, no LLM cost. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
marketstringTarget market
mediumstringdigital | print | both
palettearrayyesHex values to audit
use_casestringUse case context

Structured output declared, but exposes no named fields.

No examples provided.

palette_compare ~173

Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional difference, and a winner verdict for the stated use case. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
marketsarrayTarget markets
palette_aarrayyesFirst palette hex values
palette_barrayyesSecond palette hex values
use_casestringContext for comparison e.g. luxury packaging

Structured output declared, but exposes no named fields.

No examples provided.

palette_concept ~252

Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and provenance. Examples: 'Victorian mourning', 'Ottoman court', 'Japanese wabi-sabi', 'Scandinavian winter', 'West African kente', 'Renaissance Florence'. Every colour returned is sourced from the archive with documented history. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
avoidarrayColours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection.
conceptstringyesCultural theme or historical period e.g. 'Victorian mourning' or 'Ottoman court'
include_neutralsbooleanInclude neutral/background colours
n_coloursintegerNumber of colours to return (default 5, max 8)

Structured output declared, but exposes no named fields.

No examples provided.

palette_export ~109

Export a palette to CSS custom properties, Figma design tokens, Tailwind config, ASE hex list, or JSON. Each colour is automatically named from the archive. Embeds Colour Memory directly into design workflows.

NameTypeReqDescription
formatstringcss | figma | ase_hex | tailwind | json
namesarrayOptional custom names
palettearrayyesHex values to export
prefixstringToken prefix e.g. cm, brand (default: cm)

Structured output declared, but exposes no named fields.

No examples provided.

palette_extract ~381

Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weights sorted by luminance. Optionally runs palette_analyse on the results. Use this instead of image_palette when you need hex values with proportions for palette_analyse or palette_swatch. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
analysebooleanIf true, also run palette_analyse on the extracted colours and return archive names
archivestringExplicit single archive name to restrict matching to e.g. 'MarsColour', 'Japan', 'Victorian'.
grey_card_hexstringHex value sampled from a grey or white card in the image for white balance correction e.g. #C8C8C8
image_base64stringBase64-encoded image data (small images only, under 50 KB)
image_idstringEphemeral image_id from ingest_image (preferred for images over 50 KB)
image_urlstringPublic URL of the image to extract colours from
kintegerNumber of colours to extract (3-12, default 6)
style_contextstringPlain English style description that restricts archive matching to a coherent set e.g. 'English cottage garden', 'Victorian', 'Japanese', 'MarsColour', 'Arts and Crafts'. Prevents palette colours fro…

Structured output declared, but exposes no named fields.

No examples provided.

palette_finalize ~227

Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for the customer -- it verifies and packages your decision and returns the palette image plus PNG, SVG, PDF, ASE, JSON and CSS. It does not search, select, replace or improve anything: the colours you send are the colours that come back, in your order. Send every final colour with its name, and mark a colour source-backed only if it really is a Colour Memory archive record -- anything unverified is presented as your recommendation, which is the honest description of it.

NameTypeReqDescription
briefstringThe customer's request, in their words.
coloursarrayyesThe final palette, in the order you want it shown.
notesarrayShort usage guidance, in your words.
source_anchorsarrayArchive records that informed the palette but are not in it. Give the record's name so it can be verified.
titlestringWhat you are calling this palette.

Structured output declared, but exposes no named fields.

No examples provided.

palette_generate ~280

Send a palette of up to 12 slots, locking some with hex values and leaving others empty. Empty slots are filled with the nearest CIEDE2000 archive match, interpolated from the locked anchors. Optional archive filter restricts fills to one archive. Returns full citation — name, archive, primary source, colour notes — for every filled slot. Example: lock a client's existing wall colour and fill a 5-colour scheme from Oxfordshire. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
archivestringOptional: restrict fills to one archive e.g. 'Oxfordshire', 'Shakespeare', 'Japan'
sizeintegerTotal CURATED palette size 2-12 (default 5). This is the designed-palette ceiling, not a product limit on how many colours exist: for a large colour COLLECTION, page archive_search instead.
slotsarrayyesList of palette slots. Each has index (0-11), optional hex, and locked flag.

Structured output declared, but exposes no named fields.

No examples provided.

palette_gradient ~326

Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor stops are kept true to their source. Choose linear (physically accurate Lab interpolation) or chroma_preserved (LCh interpolation, short-arc hue, avoids desaturated midpoints). Returns stop array, CSS linear-gradient string, or SVG swatch bar. Use for design briefs, colour journey visualisations, and gradient systems. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
anchorsarrayyes2-5 hex values (#RRGGBB) or exact archive colour names
archivestringRestrict snapping to this archive name e.g. Victorian
output_formatstringstops: array of colour objects. css: linear-gradient string. svg: swatch bar.
pathstringlinear: straight Lab lerp (may have neutral midpoint). chroma_preserved: LCh short-arc, saturation maintained.
snap_to_archivebooleanSnap each stop to nearest archive colour (default true)
stepsintegerTotal stops including anchors (default 7, max 20)

Structured output declared, but exposes no named fields.

No examples provided.

palette_heritage ~216

Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and scores its provenance confidence. Detects palette gaps and fills them from the archive. Returns full palette with roles, confidence scores, CSS tokens, and production notes. Every addition has a named historical origin. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
brand_namestringBrand name for CSS tokens
contextstringBrand context
marketstringTarget market
n_additionsintegerArchive colours to add (default 3)
palettearrayyesExisting hex values

Structured output declared, but exposes no named fields.

No examples provided.

palette_iterate ~228

Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or better for Gen Z luxury. Returns a refined palette with archive grounding and change rationale. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
directionstringAlias for feedback — natural language direction e.g. more dangerous, more historical, warmer
feedbackstringyesNatural language refinement e.g. more melancholic
marketsarrayTarget markets
n_resultsintegerNumber of variants to return (default 1)
palettearrayyesCurrent hex palette to refine
use_casestringUse case context e.g. luxury homewares

Structured output declared, but exposes no named fields.

No examples provided.

palette_light_dark ~159

Generate light-mode and dark-mode role maps from a palette. Analyses LRV, assigns background/surface/text/accent roles for each mode, checks body text contrast safety, and flags missing neutrals. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
palettearrayyesArray of hex values
use_casestringUse case context e.g. UI, dashboard, report

Structured output declared, but exposes no named fields.

No examples provided.

palette_pdf ~1,153

Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, provenance notes, RAL nearest match, LRV, chroma, WCAG contrast data, and Colour Memory branding. Use this to create client deliverables, specification sheets, and print assets. Two supported entry sources: (1) the flat entries array from query_hex or palette_from_concept -- each item needs name, hex, archive_source, colour_notes, primary_source, zone; or (2) archive_report_brief's output -- pass report['presented_cards'] as entries, NOT report['colour_cards'] (the legacy field is kept only for backward compatibility and does not carry family-card presentation). presented_cards may mix three card shapes, all rendered as exactly one page each regardless of how many underlying records they represent: single_cultivar (a normal flat card), colour_family (card_type='colour_family', many near-identical records summarised as one card with member_count/supported_by/family_delta_e_max), and conservative-mode hero cards (a single_cultivar card carrying family_grouping_suppressed=true and also_supported_by, representing a larger natural family that was folded into one promoted cultivar instead of shown as a group). delivery controls how the PDF is returned: 'url' (default) gives a signed, time-limited R2 download link; 'base64' returns the PDF bytes inline in the response for callers that need the file directly rather than a link. Alternative input mode: pass `sections` instead of `entries` for a grouped, multi-section document (e.g. house_specify's rooms) instead of one page per flat colour card. Each section has a title, rationale, and its own entries. `presentation.template` picks the layout: 'sectioned_specification' (clean grid-per-section spec sheet) or 'colour_drenched_lookbook' (hero colour fills the page, swatches cover most of it, citations collected into a final appendix rather than shrunk onto every page). T…

NameTypeReqDescription
deliverystring'url' (default): signed, time-limited R2 download link. 'base64': PDF bytes returned inline as pdf_base64 for callers that need the file directly.
entriesarrayArray of colour cards. Either the flat entries array from query_hex/palette_concept, or report['presented_cards'] from archive_report_brief (single_cultivar, colour_family, and conservative-mode hero…
houseobjectAlternative to `entries`/`sections` -- pass house_specify's full response object unmodified (house_title, house_thesis, progression, shared_house_palette, rooms) to render the complete flagship docum…
house_refstringPreferred alternative to `house` -- the house_ref string house_specify returns in its own response (valid for 30 minutes after that call, or per project_persistence for a durable/temporary project).…
presentationobjectUsed with `sections` or `house`. {template: 'sectioned_specification'|'colour_drenched_lookbook' (sections only), page_size?: 'A4-portrait'|'A4-landscape'|'16:9', minimum_colour_coverage?: number (de…
project_idstringAlternative to house_ref for an authenticated (keyed) caller's own durable project -- the project_id house_specify returned. Requires the same API key that created the project.
project_versionintegerUsed with either house_ref or project_id -- render this specific immutable version instead of the project's current version. Omit to render the current version.
querystringOptional title for the palette e.g. Ottoman imperial luxury
sectionsarrayAlternative to `entries` -- one entry per document section, e.g. house_specify's rooms. Each: {title, subtitle?, rationale, grouping_basis?, hero_hex?, entries: [...colour cards...], application_note…
sourcestringOptional source label e.g. brand, conceptual

Structured output declared, but exposes no named fields.

No examples provided.

palette_specify ~180

Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
coloursarrayyesList of 2-8 hex values
room_typestringe.g. 'living', 'bedroom', 'kitchen', 'study'
stylestringe.g. 'heritage', 'contemporary', 'minimal'

Structured output declared, but exposes no named fields.

No examples provided.

palette_strict ~235

Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] for Japanese only. Use min_relevance to filter weak concept matches. Fixes cross-archive drift when cultural specificity matters. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
allowed_archivesarrayArchive names to restrict results e.g. ['Japan', 'China']
conceptstringyesCultural concept e.g. Japanese wabi-sabi
include_neutralsbooleanInclude neutral tones (default true)
min_relevancenumberMinimum relevance score 0-1 (default 0.3)
n_coloursintegerNumber of colours (default 5)

Structured output declared, but exposes no named fields.

No examples provided.

palette_swatch ~305

Generate a clean, text-free PNG swatch image from hex colours. Returns a URL to the PNG. Use for Midjourney --sref style references or design mood boards. Supports photo-proportional weights from palette extraction, equal distribution, grid layout, a true smooth LCh-interpolated gradient (no hard colour edges, best for mood/atmosphere/colour-grade references rather than literal composition), and 13 fixed design ratios (6310, 7020, triptych, quad, filmstrip, etc.).

NameTypeReqDescription
hintegerOutput height in pixels (default 630)
hexesstringyesComma-separated hex values e.g. #d4a829,#1a5c6e,#0a0a0b
layoutstringphoto | equal | grid | gradient | filmstrip | 6310 | 7020 | 5030 | 8010 | 5050 | 6040 | triptych | quad | 55-25-20 | quint | 70-10-20 | 40-30-20-10 | 33-33-24-10. gradient is a true smooth perceptual…
wintegerOutput width in pixels (default 1200)
weightsstringComma-separated proportional weights from k-means extraction. Used only when layout=photo.

Structured output declared, but exposes no named fields.

No examples provided.

palette_translate ~261

Map any list of hex values into a target archive using CIEDE2000 nearest-neighbour matching. Each input hex is matched to the closest named colour in the chosen archive, with a delta-e relevance band (exact / close / approximate / loose) and full provenance. Use to translate a client's paint colours into Shakespeare language, map a brand palette into historical Japanese pigments, or find the nearest Oxfordshire equivalents to a French scheme. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
max_delta_enumberMax acceptable CIEDE2000 distance — above this is flagged out-of-threshold (default 40)
palettearrayyesList of hex values to translate e.g. ['#F5F0E8', '#8B6B3D']
target_archivestringyesArchive to translate into e.g. 'Shakespeare', 'Japan', 'Oxfordshire'

Structured output declared, but exposes no named fields.

No examples provided.

palette_verdict ~298

Evaluate a palette of 2-8 hex values for a use case, market, and medium. Returns a verdict (strong / strong_with_adjustment / weak / avoid), a score 0-100, the role of each colour, the single biggest weakness, and a concrete suggestion for what to add to fix it. Each colour is matched to the nearest archive entry for cultural grounding. Examples: 'premium cushion collection UK ecommerce', 'hotel lobby interior', 'SaaS brand identity global digital'. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
marketstringOptional: target market e.g. 'UK', 'Japan', 'global'
mediumstringApplication medium e.g. 'interior', 'digital', 'fashion', 'print'
palettearrayyesList of 2-8 hex values e.g. ['#31559B', '#E8D898', '#4A2A50']
use_casestringyesWhat the palette will be used for e.g. 'luxury cushion collection', 'brand identity'

Structured output declared, but exposes no named fields.

No examples provided.

project_delete ~100

Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped response either way, and never discloses which case occurred. Version rows are never physically erased. Once deleted, a project can no longer be resolved by project_id or house_ref.

NameTypeReqDescription
project_idstringyesThe project_id returned by house_specify for an authenticated (keyed) call.

Structured output declared, but exposes no named fields.

No examples provided.

project_export ~513

Export the same house-flagship content palette_pdf renders as a genuinely editable Word document or Excel workbook -- for a client who needs to annotate the scheme, or a contractor building a materials/procurement schedule from it. Accepts exactly one of house, house_ref, or project_id (same resolution and ownership rules as palette_pdf: an authenticated project_id or house_ref requires its owner; an anonymous temporary house_ref works bearer-only). Never calls house_specify, never re-runs reasoning or re-matches archives -- it renders exactly what was already resolved and stored. DOCX mirrors the PDF flagship's structure (title page, house thesis, whole-house progression, one section per room, implementation details with the same historical/digital-estimate/commercial-candidate distinction, and a deduplicated source appendix) as real editable paragraphs and tables, never images. XLSX produces three sheets: Finishes Schedule (one row per room-surface-colour assignment), Evidence Register (one row per unique colour, the full citation/claim-strength/do_not_say trail), and Paint Procurement (one row per unique paint product, deduplicated for ordering). Every field left blank where the underlying stored data doesn't have it -- nothing is invented. delivery="url" (default) gives a signed R2 download link; delivery="base64" returns the file inline unless the encoded result is too large, in which case it fails closed with OUTPUT_TOO_LARGE_FOR_INLINE_DELIVERY and a repair instruction to use delivery="url" instead.

NameTypeReqDescription
deliverystring'url' (default): signed, time-limited R2 download link. 'base64': file bytes returned inline as file_base64, unless too large -- see OUTPUT_TOO_LARGE_FOR_INLINE_DELIVERY.
formatstringyesWhich editable format to produce.
houseobjecthouse_specify's full response object, unmodified -- alternative to house_ref/project_id. PREFER house_ref or project_id when available.
house_refstringThe house_ref string house_specify returns. For a durable (authenticated) project this also requires the same API key that created it.
project_idstringThe project_id returned by house_specify for an authenticated (keyed) call. Requires the same API key that created the project.
project_versionintegerUsed with either house_ref or project_id -- export this specific immutable version instead of the project's current version. Omit to export the current version.

Structured output declared, but exposes no named fields.

No examples provided.

project_get ~166

Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamps, and the content hash of the requested version. Requires an API key; the project must belong to the calling key. Does NOT return the full house specification (rooms, colours, sources) -- use house_ref with palette_pdf to render a document from a project, or project_versions to see its version history. An unknown, deleted, expired, or not-owned project_id all return the same generic not-found response, by design.

NameTypeReqDescription
project_idstringyesThe project_id returned by house_specify for an authenticated (keyed) call.
versionintegerSpecific version number to describe. Omit for the project's current version.

Structured output declared, but exposes no named fields.

No examples provided.

project_list ~169

List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonymous projects are never listable, only resolvable directly by their house_ref. Requires an API key.

NameTypeReqDescription
cursorstringOpaque pagination cursor -- pass the previous response's next_cursor to get the next page.
include_deletedbooleanInclude soft-deleted projects (still owner-scoped). Default false.
limitintegerMax projects to return, default 50, capped at 200.
project_typestringFilter by project type, e.g. 'house'. Omit for all types.
updated_sincestringISO 8601 timestamp -- only return projects updated after this time.

Structured output declared, but exposes no named fields.

No examples provided.

project_versions ~99

List every stored version of a durable house project you own, oldest first, with each version's content hash, build/schema/archive revision, and creation time. Version 1 is always immutable and always present. Earlier versions remain renderable via palette_pdf's project_version input even after a newer version exists. Requires an API key and ownership.

NameTypeReqDescription
project_idstringyesThe project_id returned by house_specify for an authenticated (keyed) call.

Structured output declared, but exposes no named fields.

No examples provided.

query_conceptual ~214

Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'grief' (returns Ophelia Violet, Titan's Grief), 'toxic Victorian pigments' (returns Nightshade Poison Berry Purple, Victorian Arsenic Mirror Silver), or 'the sea at dusk' (returns Evening Sea, Thames Blue Dusk). Even a vague or personal-sounding query never comes back empty -- result_path in the response tells you honestly whether this was a 'direct' hit, a 'broadened' retry (relaxed match threshold), or a 'redirected' fallback (dropped an archive restriction or switched to full-corpus semantic search).

NameTypeReqDescription
archivestringOptional: restrict to a named archive e.g. 'Japan', 'Pigment', 'OttomanEmpire'
n_resultsintegerNumber of results (default 5)
querystringyesThe colour concept or cultural question to search for

Structured output declared, but exposes no named fields.

No examples provided.

query_hex ~78

Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance.

NameTypeReqDescription
archivestringOptional: restrict to a named archive
hexstringyesHex value with or without # e.g. '#8B4513'
n_resultsintegerNumber of results (default 5)

Structured output declared, but exposes no named fields.

No examples provided.

render_colour_result ~493

Show a finished colour result to the customer AS COLOUR. Call this last, once the palette, house scheme, brand system or audit you are going to hand over has been decided -- it presents what you already have and chooses nothing. Do not call it for a single contrast figure, a colour history question with no palette, or tool guidance. Send the story with it: one sentence on what the scheme IS, the design decision you made, and the one rule worth remembering. The colours cannot carry those on their own.

NameTypeReqDescription
bridgeobjectWhere the evidence started and where you took it. Include `colours` on a side ONLY if you have real colour values for it -- an invented source swatch beside a real archive one reads as evidence and i…
checksarray
coloursarrayyesThe colours you are handing over, in order.
design_movestringAt most two sentences on the decision you made -- what the evidence offered and what you did with it. This is usually the most interesting thing in your answer and the part a list of colours cannot c…
evidence_boundarystringWhat is source-backed and what is your interpretation. Say it plainly: 'Designed contemporary interpretation, not a measured historical paint specification.'
evidence_summarystring
evidence_threadarrayThree to five short sources or references that shaped this. Orientation, not a bibliography.
key_rulestringThe one rule worth remembering, short enough to repeat to a decorator. 'Boathouse Clay stays tiny. Never a wall.'
kindstringpalette, house, brand or audit.
proportionsarrayOnly where a real share was decided. Every colour gets one and they total 100, or leave this out entirely -- a share nobody decided reads as a measurement nobody took.
roomsarrayFor a multi-room scheme: one short line per room, in your own words. What that room is doing with the palette.
story_thesisstringONE sentence: what this scheme IS. 'Danish coastal colour, domesticated for a summer house.' Shown above the palette, so it must earn its line.
titlestringWhat this result is, in the customer's terms.
verdictstringOne sentence, shown under the colour.

Structured output declared, but exposes no named fields.

No examples provided.

session_brief ~351

Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support/analogue/provocation/reject), auto-rejects stubs, generates editorial argument, act structure, pull quote, closing line, and image prompt via Claude. This replaces chaining coverage_gap + archive_report_brief + anachronism_guard + resonance_index + evidence_gap separately. Input: title, audience, themes, archives, period, tone. Output: complete deliverable package ready for PDF or editorial use. Tone options: forensic (default), editorial, clinical, narrative.

NameTypeReqDescription
archivesarrayArchives to draw from
audiencestringTarget audience e.g. 'serious collector'
avoidarrayThemes to suppress
confidence_thresholdnumberMin confidence 0-1 (default 0.6)
minimum_claim_strengthstringHard evidence-grade floor: A, B, C, D, or E. Never silently relaxed.
n_coloursintegerNumber of colour cards (default 8)
period_endintegerEnd year e.g. 1830
period_startintegerStart year e.g. 1714
strict_sourcesbooleanOnly include entries with named primary sources
target_periodstringHistorical period e.g. 'Georgian England 1714-1830'
themesarrayyesResearch themes
titlestringBrief title e.g. 'The Colours of Pleasure'
tonestringforensic | editorial | clinical | narrative

Structured output declared, but exposes no named fields.

No examples provided.

style_match ~300

The colour question every stylist gets asked: does this bag go with this outfit? Submit your outfit items as hex values with labels (dress, bag, shoes, coat, belt, scarf, etc.) and receive a verdict on what works, what clashes, what is missing, and what to add. Every recommendation is backed by archive colour names and historical context — not generic colour theory, but documented cultural combinations. Also suggests one missing archive colour that would complete the look. Examples: 'I have a navy dress (#1C3A6E) and a tan bag (#C8A87A) — what shoes?' or 'Does this burgundy coat work with olive trousers?' The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.

NameTypeReqDescription
askstringOptional: specific question e.g. 'what bag colour works?' or 'do the shoes work?'
itemsarrayyesList of outfit items with label and hex colour
occasionstringOptional: occasion context e.g. 'daytime', 'evening', 'office', 'casual', 'wedding guest'

Structured output declared, but exposes no named fields.

No examples provided.

system_status ~110

Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at, server_environment). Use this to confirm you're seeing the current deployed schema -- e.g. if a tool you expect (like house_specify) seems to be missing, call this first and compare schema_hash against another connection before assuming the server is wrong; a mismatch usually means one connection is holding a stale cached manifest, not a real deployment gap.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

tool_guide ~159

Deterministic tool-routing lookup -- not an LLM call, always instant, never consumes archive or LLM credit. Give it a goal in plain words (e.g. 'I have a brand colour and want to check it against competitors', 'I want to paint a whole house', 'I have a photo and want the colours from it') and it returns exactly which tool to call first, what to call next, and which superficially-similar tools NOT to start with and why. Use this before guessing between similarly-named tools (e.g. palette_specify vs interior_specify vs house_specify, or colour_passport vs colour_dna).

NameTypeReqDescription
goalstringyesPlain-English description of what you're trying to do.
NameTypeReqDescription
do_not_start_witharray
reasonstring
start_withstring
thenarray

No examples provided.

ui_states ~149

Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, info, surface subtle, surface strong. All states computed for contrast against your background colour. Returns hex, contrast ratio, WCAG grade, and usage note for each state. Includes CSS custom properties ready to paste. Supports light and dark mode. Use before building any UI component system.

NameTypeReqDescription
background_hexstringBackground hex (default #FFFFFF)
brand_hexstringyesBrand colour hex e.g. '#D4A829'
dark_modebooleanGenerate for dark mode (default false)

Structured output declared, but exposes no named fields.

No examples provided.

vanderpoel_pairing ~361

Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), served from the build artefacts vanderpoel_dyads.json and vanderpoel_triads.json. Snaps an input hex to the nearest of Vanderpoel's eleven real hue-family labels, resolves that hex against the archive, and returns every documented dyad or triad the label belongs to -- each OTHER member carrying its own nearest real archive match (CIEDE2000), with hex_collision disclosed when the match is tied. Unlike hay_contrast, this carries NO proportional ratio -- only Vanderpoel's own categorical 'good' editorial judgement, printed verbatim on the plates. Returns groupings: null for a near-neutral input, where hue is not meaningfully defined, or when the nearest hue-family label is a member of no dyad or triad -- silence is the honest answer, not a forced match. Member names come from a transcriber's digitisation_alt_text (an accessibility description of the plate image), not verified printed captions; every response states this caveat explicitly (member_source_caveat), not just a code comment. The hue positions used to snap an input to a label are a modern matching convention, not a number Vanderpoel printed -- disclosed per response as label_placement_basis.

NameTypeReqDescription
hexstringyesHex colour, e.g. '#CC1A14'.
n_per_memberintegerArchive candidates per partner member (1-5). Default 1, which returns a single archive_match object rather than a list.
NameTypeReqDescription
coveredboolean
degrees_from_nearest_named_huenumber|null
groupingsarray|nullDocumented dyads/triads containing the snapped label. Each carries other_member_labels (Vanderpoel's own words), other_members (each with archive_match and hex_collision), judgement, judgement_basis_…
input_archive_matchobject|nullNearest real archive colour to the input itself, or null if nothing is near enough.
input_hexstring
input_snapped_tostring|nullVanderpoel hue-family label the input snapped to.
label_placement_basisstringStates that the snap angles are a modern convention, not a number Vanderpoel printed.
member_source_caveatstring
reasonstring

No examples provided.

why_connected ~146

Are these two specific archive records connected -- and if so, exactly why? Traces the real path between them through Colour Memory's stored relationship graph (e.g. two Wada colours that share membership in the same published combination) and returns the actual path, not just a yes/no. States plainly when two records are NOT connected, and always states what a shared connection does not prove -- e.g. that two colours sharing a Wada combination were independently asserted as a pair, not just co-published in the same numbered plate. Get record_id values from archive_search or colour_card.

NameTypeReqDescription
astringyesFirst record id.
bstringyesSecond record id.
NameTypeReqDescription
connectedboolean
does_not_meanarray
explanationstring
hopsinteger|null
patharray

No examples provided.

Common questions

What is the Colour Memory MCP server?

Colour Memory is an MCP server listed in the public MCP registry as io.github.DigbyO/colour-memory. Cultural color intelligence. Every colour anchored to a person, a year, and a consequence. This page covers its hosted endpoint (https://colour-memory-api-production.up.railway.app/mcp).

Is the Colour Memory MCP server safe to use?

Colour Memory scores 85 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Colour Memory MCP server expose?

Colour Memory exposes 91 tools: query_conceptual, extract_image_colours, query_hex, palette_specify, colour_metrics, and 86 more. Their descriptions and schemas cost roughly 22,733 tokens of context every time the server is loaded.

Does the Colour Memory MCP server require authentication?

Yes. Colour Memory asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the Colour Memory MCP server still maintained?

Colour Memory is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.