Hosted MCP server · #24 most used on Smithery

Colour Memory - Cultural Color Intelligence for AI

digby-oldridge/colour-memory-api

The world's only historically grounded colour archive built for AI agents. Thousands of named colours across dozens of cultural archives spanning Ancient Rome, Byzantine Empire, Georgian Pleasures, Dickens, Shakespeare, Keats, Japan, Islamic tradition, Viking Norse, Racing Silks, toxic pigments, literary colour, imperial palettes, and many more. Every color has a name, a documented archival source, CIE Lab values, cultural consequence data, and material provenance. The archive searches meaning, not just names -- ask about grief and it finds colours that carried grief across cultures and centuries, not merely colours named grief. Built as a retrieval system, not a generator. Deterministic, evidence-based, source-cited. The anti-hallucination layer for colour history. Prefer a direct connection? Point your MCP client at https://api.colourmemory.com/mcp — no signup, no key for the free tools.

Uses
15k
Tools
91
Runs
Hosted
Prompts
8
Listed
6mo ago

Get started

Add it to your agent

npx -y @smithery/cli@latest install digby-oldridge/colour-memory-api --client claude

Swap --client claude for cursor, vscode, windsurf or another client. The CLI asks for any required settings.

What it can do

80 of 91 tools

query_conceptual3 paramsAsk a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for ab…

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

ParameterTypeDescription
querystringThe colour concept or cultural question to search for
archivestringOptional: restrict to a named archive e.g. 'Japan', 'Pigment', 'OttomanEmpire'
n_resultsintegerNumber of results (default 5)
extract_image_colours7 paramsExtract dominant colours from a photograph using Colour Memory's proprietary k-means++ algorithm. Requires either a public image_url, or …

Extract dominant colours from a photograph using Colour Memory's proprietary k-means++ algorithm. Requires either a public image_url, or an image_id. If you only have a raw uploaded file with no public URL (e.g. a local file path or a ChatGPT file attachment without a usable download_url), call ingest_image first to get an image_id, then pass that image_id here. Returns hex values with proportional weights. Optionally matches colours against the archive with style_context for coherent cultural n

ParameterTypeDescription
kintegerNumber of colours to extract (3-12, default 6)
imageobjectImage file attachment from ChatGPT
analysebooleanIf true, match colours against archive and return names
image_idstringEphemeral image_id returned by ingest_image. Use this if you only have a local file path or raw file attachment with no public URL.
image_urlstringPublic URL of image
grey_card_hexstringHex from a grey/white card for white balance
style_contextstringe.g. English cottage garden, Victorian, Japanese
query_hex3 paramsFind the closest named archive colours to a hex value using CIEDE2000 perceptual distance.
ParameterTypeDescription
hexstringHex value with or without # e.g. '#8B4513'
archivestringOptional: restrict to a named archive
n_resultsintegerNumber of results (default 5)
palette_specify3 paramsGenerate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, an…

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 col

ParameterTypeDescription
stylestringe.g. 'heritage', 'contemporary', 'minimal'
coloursarrayList of 2-8 hex values
room_typestringe.g. 'living', 'bedroom', 'kitchen', 'study'
colour_metrics1 paramReturns raw perceptual metrics (LRV, chroma, hue angle, warmth, undertone) for a single colour. This is one component of colour_passport.…

Returns raw perceptual metrics (LRV, chroma, hue angle, warmth, undertone) for a single colour. This is one component of colour_passport. Use colour_passport for a general colour profile; use this only when the user explicitly wants isolated numeric values.

ParameterTypeDescription
hex_valstringHex value e.g. '#8B4513'
colour_harmonies2 paramsReturn complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contra…

Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838) documented contrast pairing between six named hues (yellow/purple, orange/blue, red/green), with Field's proportional power for the pair. Unlike the fixed-angle types, this snaps the input to Hay's nearest named hue rather than rotating it, and returns covered:false with no invented partner when the input sits nearer a tertiary region (

ParameterTypeDescription
hexstringHex value e.g. '#3A5C8C'
harmony_typesarrayHarmony types to include: 'complementary', 'analogous', 'triadic', 'split_complementary', 'tetradic', or 'hay_contrast' (D.R. Hay's 1838 documented contrast pairing, distinct from the geometric types
accessibility_check2 paramsEvaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replac…

Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibility_check calls in one response.

ParameterTypeDescription
hex_valstringForeground hex value
backgroundstringBackground hex (default 'FFFFFF')
accessibility_matrix1 paramAccept a palette array and return every foreground/background combination with contrast ratio, AA normal, AA large, AAA normal, AAA large…

Accept a palette array and return every foreground/background combination with contrast ratio, AA normal, AA large, AAA normal, AAA large pass/fail grades, and a summary. Use this instead of calling accessibility_check multiple times for a palette.

ParameterTypeDescription
palettearrayArray of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B']
accessibility_rules1 paramConvert a palette WCAG matrix into actionable design-system rules. Returns safe pairs, AA-only pairs, large-text-only pairs, decorative-o…

Convert a palette WCAG matrix into actionable design-system rules. Returns safe pairs, AA-only pairs, large-text-only pairs, decorative-only pairs, best text colour per background, and component usage rules. Deterministic, no LLM cost.

ParameterTypeDescription
palettearrayArray of hex values
colour_slugs2 paramsReturn every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, S…

Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-grounded name source with dE2000 distance.

ParameterTypeDescription
hexstringHex value e.g. #D4A829
archivestringOptional archive filter
palette_light_dark2 paramsGenerate light-mode and dark-mode role maps from a palette. Analyses LRV, assigns background/surface/text/accent roles for each mode, che…

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

ParameterTypeDescription
palettearrayArray of hex values
use_casestringUse case context e.g. UI, dashboard, report
accessibility_font2 paramsGiven a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific …

Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for body text, large text, and UI components.

ParameterTypeDescription
palettearrayCandidate foreground hex values
backgroundstringBackground hex value
archive_search9 paramsFull-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment …

Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical period. Complements conceptual embedding search with exact keyword matching. Examples: 'cerulean' (28 matches, e.g. Bourton Cerulean), 'Prussian' (187 matches spanning pigment history), 'medieval' (over 1,000 matches across period archives). Never returns a bare empty result for a genuinely obscure query -- result_path in the response is 'di

ParameterTypeDescription
limitintegerAlias for n_results
querystringSearch term e.g. cerulean, Prussian, Ottoman, ochre, medieval
offsetintegerSkip this many ranked matches before returning results -- collection paging. The response's next_offset gives the value to pass here for the next page; it is absent on the last page. total_found alway
archivestringOptional archive filter e.g. oxfordshire, japan, pigment, keats, eic, racingsilks
year_tointegerBoost entries on or before this year e.g. 1600 for Renaissance, 1901 for Victorian
n_resultsintegerResults per page (default 10, max 50 per call). This is a PAGE size, not a collection limit -- for a large collection (tens or hundreds of records) page with offset until next_offset disappears, and n
year_fromintegerBoost entries on or after this year e.g. 1400 for Renaissance, 1837 for Victorian
entity_modestring'text' (default): ordinary keyword search -- 'rose' finds any name containing the word, across genera. 'exact': resolve the query to a botanical entity and return ONLY records whose structured identit
include_fullbooleanReturn complete notes and source fields. Default false returns 150-char snippets. Set true for report workflows.
colour_combination2 paramsAssess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash w…

Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summary, and specific deployment rules for the context.

ParameterTypeDescription
coloursarray2-5 hex values to assess as a combination
contextstringUsage context: UI | data viz | fashion | interior | print | branding
palette_strict5 paramsLike palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural tra…

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 rec

ParameterTypeDescription
conceptstringCultural concept e.g. Japanese wabi-sabi
n_coloursintegerNumber of colours (default 5)
min_relevancenumberMinimum relevance score 0-1 (default 0.3)
allowed_archivesarrayArchive names to restrict results e.g. ['Japan', 'China']
include_neutralsbooleanInclude neutral tones (default true)
palette_pdf10 paramsGenerate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour p…

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_

ParameterTypeDescription
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 docume
querystringOptional title for the palette e.g. Ottoman imperial luxury
sourcestringOptional source label e.g. brand, conceptual
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
deliverystring'url' (default): signed, time-limited R2 download link. 'base64': PDF bytes returned inline as pdf_base64 for callers that need the file directly.
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_notes
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). R
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.
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 (def
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.
palette_audit4 paramsFull palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns…

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.

ParameterTypeDescription
marketstringTarget market
mediumstringdigital | print | both
palettearrayHex values to audit
use_casestringUse case context
brand_system5 paramsComplete brand colour system in one call. Returns colour roles with archive names, light and dark mode role maps, typography guidance, us…

Complete brand colour system in one call. Returns colour roles with archive names, light and dark mode role maps, typography guidance, usage rules per colour, design tokens (CSS, Tailwind, Figma), and citation cards. 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 pal

ParameterTypeDescription
marketstringTarget market e.g. global, UK, Japan
mediumstringdigital | print | both
palettearrayHex values
use_casestringUse case e.g. brand identity, packaging
brand_categorystringOptional e.g. developer tool, luxury, food
brand_asset_pack5 paramsComplete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everyth…

Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs to ship. Deterministic. No LLM cost.

ParameterTypeDescription
marketstringTarget market
mediumstringdigital | print | both
palettearrayHex values
use_casestringUse case
brand_categorystringOptional brand name or category
accessibility_simulate1 paramReturn simulated hex values for protanopia, deuteranopia, and tritanopia using the Brettel-Vienot-Mollon model.
ParameterTypeDescription
hex_valstringHex value e.g. '#BE0032'
colour_match_paint3 paramsFind the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene.
ParameterTypeDescription
nintegerNumber of matches (default 3)
brandstringOptional brand filter: 'farrow' or 'little_greene'
hex_valstringHex value e.g. '#003153'
colour_card2 paramsLook up a named colour and return its hex, archive, provenance, and cultural notes.
ParameterTypeDescription
namestringColour name e.g. 'Prussian Blue' or 'Ottoman Carbon Ink'
slugstringStable colour slug from archive_search e.g. 'keats:keats-s-lung' -- preferred over name for reliable retrieval
meta_capabilitiesReturn a live inventory of all active endpoints and MCP tools. Use this first to discover what the API can do before making calls. Return…

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.

system_statusZero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, to…

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

colour_story2 paramsGiven a hex value, returns a rich narrative about that colour's cultural journey — where it has appeared in history, what it has meant to…

Given a hex value, returns a rich narrative about that colour's cultural journey — where it has appeared in history, what it has meant to different civilisations, and what archive names it carries. Essential for image generation prompts, brand storytelling, and creative briefs. Example: '#DC143C' returns the story of crimson from Byzantine imperial courts through Tudor England to modern sport.

ParameterTypeDescription
hexstringHex value e.g. '#DC143C'
n_archivesintegerNumber of archive sources to draw from (default 5)
palette_concept4 paramsGenerate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values…

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 cus

ParameterTypeDescription
avoidarrayColours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection.
conceptstringCultural theme or historical period e.g. 'Victorian mourning' or 'Ottoman court'
n_coloursintegerNumber of colours to return (default 5, max 8)
include_neutralsbooleanInclude neutral/background colours
colour_mix3 paramsSimulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed …

Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its nearest archive match with cultural context. Uses CIE Lab subtractive model for perceptual accuracy. Example: mixing Prussian Blue and Yellow Ochre gives a muted green — the tool identifies which archive colour that green most closely matches.

ParameterTypeDescription
hex_astringFirst colour hex e.g. '#003366'
hex_bstringSecond colour hex e.g. '#C8A600'
rationumberMix ratio 0.0-1.0 where 0.5 is equal parts (default 0.5)
colour_timeline2 paramsGiven a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated s…

Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entries showing when and where the colour appeared, with primary sources. Use for historical research, provenance chains, and understanding why a colour carries the cultural weight it does. Example: 'indigo' traces from ancient Indian trade routes through Roman imports to Tudor sumptuary law to synthetic aniline displacement in 1897.

ParameterTypeDescription
nintegerNumber of timeline entries to return (default 10, max 20)
conceptstringColour name or concept to trace e.g. indigo, imperial purple, mourning black
image_palette4 paramsUpload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry wit…

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 plus Bradford chromatic adaptation for accuracy. 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

ParameterTypeDescription
archivestringOptional: restrict archive matching to a specific archive
n_coloursintegerNumber of dominant colours to extract (default 5, max 5)
media_typestringImage MIME type e.g. 'image/jpeg'
image_base64stringBase64 encoded image (JPEG, PNG, WebP)
colour_compare2 paramsDeep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and…

Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, plus cultural context on both — which is more authoritative, more saturated, more stable under different illuminants, and what each has historically signified. Use when choosing between two colours or explaining why one works better than another. Not a harmony tool — this is a decision and reasoning tool.

ParameterTypeDescription
hex_astringFirst colour hex e.g. '#003366'
hex_bstringSecond colour hex e.g. '#1877F2'
colour_cultural_risk3 paramsCultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one…

Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_passport for single colours. Use colour_passport for a general profile; call this directly for palette-level risk checks or when cultural risk is the only thing being asked about.

ParameterTypeDescription
hexstringSingle hex value to assess e.g. '#FF9900'
marketsarrayOptional market focus e.g. ['China', 'Middle East', 'India']
palettearrayOptional list of hex values to assess as a palette
design_session7 paramsOne-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded pa…

One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrative, commercial paint matches, WCAG accessibility check, illuminant behaviour, and a ready-made image generation prompt. Replaces chaining query_conceptual + palette_from_concept + colour_story + match_paint_system + accessibility_check + get_colour_metrics. Use when an AI agent or user needs a complete, deployable colour direction in a si

ParameterTypeDescription
avoidarrayArchive names or colour terms to exclude e.g. ['neon', 'ScreenDigital']
mediumstringApplication context e.g. 'interior', 'brand identity', 'fashion', 'digital', 'print'
conceptstringCultural theme, mood, or brief e.g. 'Victorian mourning', 'Ottoman court', 'Scandinavian minimal'
n_coloursintegerPalette size (default 5, max 8)
include_promptbooleanInclude image generation prompt (default true)
include_accessibilitybooleanInclude WCAG contrast check (default true)
include_paint_matchesbooleanInclude commercial paint matches (default true)
image_personal4 paramsUpload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), c…

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 nev

ParameterTypeDescription
namestringOptional: person's name for the report e.g. 'Sarah'
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'
image_base64stringBase64 encoded portrait photo (JPEG or PNG). Face should be clearly visible in natural light. Either image_base64 or image_url required.
style_match3 paramsThe colour question every stylist gets asked: does this bag go with this outfit? Submit your outfit items as hex values with labels (dres…

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 na

ParameterTypeDescription
askstringOptional: specific question e.g. 'what bag colour works?' or 'do the shoes work?'
itemsarrayList of outfit items with label and hex colour
occasionstringOptional: occasion context e.g. 'daytime', 'evening', 'office', 'casual', 'wedding guest'
interior_specify7 paramsGenerate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professional…

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

ParameterTypeDescription
avoidarrayColours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection.
stylestringStyle direction e.g. 'heritage', 'contemporary', 'maximalist', 'minimal', 'scandi', 'industrial', 'coastal'
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 silently
conceptstringRoom concept or brief e.g. 'bold maximalist living room' or 'calm Scandi bedroom'
n_coloursintegerNumber of colours in scheme (default 5, max 7)
room_typestringRoom type e.g. 'living', 'bedroom', 'kitchen', 'study', 'bathroom', 'hallway', 'dining'
orientationstringRoom orientation e.g. 'north', 'south', 'east', 'west' — affects light advice
house_specify9 paramsGenerate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by …

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 z

ParameterTypeDescription
avoidarrayTerms to exclude from retrieval.
roomsarrayOne entry per room, e.g. [{label:'Entrance Hall', room_type:'hallway', orientation:'north'}]
archivestringSingle archive to draw every room's colours from, e.g. 'ArtsAndCrafts'. Required -- invalid names return a clear error listing valid archives.
conceptstringHouse-level concept or brief, e.g. 'Arts and Crafts movement family house'
narrative_modestringDefault 'evidence_only'.
colours_per_roomintegerDefault 5.
shared_house_coloursintegerDefault 2.
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_DEPLE
strict_semantic_colourbooleanDefault true -- excludes entries whose quoted colour language contradicts their stored hex.
palette_generate3 paramsSend a palette of up to 12 slots, locking some with hex values and leaving others empty. Empty slots are filled with the nearest CIEDE200…

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, AS

ParameterTypeDescription
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.
slotsarrayList of palette slots. Each has index (0-11), optional hex, and locked flag.
archivestringOptional: restrict fills to one archive e.g. 'Oxfordshire', 'Shakespeare', 'Japan'
palette_gradient6 paramsGenerate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colo…

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

ParameterTypeDescription
pathstringlinear: straight Lab lerp (may have neutral midpoint). chroma_preserved: LCh short-arc, saturation maintained.
stepsintegerTotal stops including anchors (default 7, max 20)
anchorsarray2-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.
snap_to_archivebooleanSnap each stop to nearest archive colour (default true)
palette_translate3 paramsMap any list of hex values into a target archive using CIEDE2000 nearest-neighbour matching. Each input hex is matched to the closest nam…

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 i

ParameterTypeDescription
palettearrayList of hex values to translate e.g. ['#F5F0E8', '#8B6B3D']
max_delta_enumberMax acceptable CIEDE2000 distance — above this is flagged out-of-threshold (default 40)
target_archivestringArchive to translate into e.g. 'Shakespeare', 'Japan', 'Oxfordshire'
archive_cliche3 paramsFind the most surprising archive colour for a concept and generate a memorable one-liner subverting the obvious expectation. Supply a con…

Find the most surprising archive colour for a concept and generate a memorable one-liner subverting the obvious expectation. Supply a concept (e.g. 'love', 'grief', 'luxury', 'power') and optionally the expected colour (e.g. 'red' for love). The archive finds the contradiction and Claude writes the one-liner, short story, and tweet. Example: love + red returns Shakespeare's dark green with 'Love is not red. It is the green of someone still waiting in a field.' Use this for public-facing demos, c

ParameterTypeDescription
conceptstringColour concept to subvert e.g. 'love', 'grief', 'luxury', 'betrayal', 'power'
n_resultsintegerNumber of archive entries to search (default 8)
expected_colourstringOptional: the cliche colour to contradict e.g. 'red', '#FF0000'. Hex or colour name.
colour_verdict5 paramsEvaluate a hex colour for a specific use case, market, and medium. Returns a decisive verdict: use_with_confidence, use_with_caution, or …

Evaluate a hex colour for a specific use case, market, and medium. Returns a decisive verdict: use_with_confidence, use_with_caution, or avoid. Includes strengths, risks, avoid-if scenarios, and better alternatives where needed. Backed by CIEDE2000 archive matching and Claude cultural intelligence. Examples: 'luxury hotel brand in Japan', 'ecommerce CTA button UK', 'heritage interior lime plaster wall', 'premium packaging Middle East'.

ParameterTypeDescription
hexstringHex colour to evaluate e.g. '#31559B'
mediumstringApplication medium e.g. 'digital', 'interior', 'print', 'fashion', 'packaging'
marketsarrayTarget markets e.g. ['UK', 'Japan', 'UAE']
audiencestringOptional: target audience e.g. 'high net worth travellers', 'young professionals'
use_casestringWhat the colour will be used for e.g. 'luxury hotel brand', 'heritage interior wall'
palette_verdict4 paramsEvaluate a palette of 2-8 hex values for a use case, market, and medium. Returns a verdict (strong / strong_with_adjustment / weak / avoi…

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 palett

ParameterTypeDescription
marketstringOptional: target market e.g. 'UK', 'Japan', 'global'
mediumstringApplication medium e.g. 'interior', 'digital', 'fashion', 'print'
palettearrayList of 2-8 hex values e.g. ['#31559B', '#E8D898', '#4A2A50']
use_casestringWhat the palette will be used for e.g. 'luxury cushion collection', 'brand identity'
agent_brief10 paramsGenerate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive pale…

Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, then produces: an agent brief (colour direction in prose), colour tokens with hex values and roles, a model-specific image generation prompt, a negative prompt, and lighting notes. Supports midjourney, flux, dalle, stable_diffusion. Example: task='luxury hotel bedroom', concept='Ottoman winter luxury', model='midjourney'. Use this to make

ParameterTypeDescription
taskstringWhat the other AI needs to generate e.g. 'luxury hotel bedroom image'
avoidarrayOptional: terms/associations to keep out of retrieval e.g. ['mourning', 'funeral black']. Affects retrieval directly, not just post-hoc flagging.
modelstringTarget model: midjourney, flux, dalle, stable_diffusion
archivestringOptional: restrict palette query to this archive e.g. georgianpleasures, japan, china
conceptstringColour concept to draw from e.g. 'Ottoman winter luxury', 'Victorian mourning'. Negation phrases ('must never', 'without', 'not X') are extracted and kept out of retrieval.
style_notesstringOptional: additional style direction e.g. 'matte surfaces only', 'no gold'
palette_sizeintegerNumber of archive colours to include (default 5, max 8)
locked_palettearrayOptional: list of hex values to use exclusively. When provided, no archive query is run and no evidence filtering applies — these exact colours are used as-is. Prevents palette drift.
allowed_archivesarrayOptional: list of allowed archive names. Query restricted to these archives only.
minimum_claim_strengthstringEvidence-grade floor for archive-grounded retrieval (default 'C'). Grade controls documentary strength; claim_role='reject' entries are excluded regardless of how low this is set. Not applied to locke
colour_strategy5 paramsSingle-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, materi…

Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hooks, and usage rules. Input: hex + brand_context (category, positioning, audience, channels) + constraints (avoid, must_work_on) + markets + medium. Output: verdict, strategy summary, archive anchor, commercial signal, category cliche risk level, market reading per market, material notes, usage rules (primary use, secondary use, avoid, pair

ParameterTypeDescription
hexstringHex colour to evaluate e.g. '#4A2A50'
mediumstringPrimary medium e.g. 'packaging', 'interior', 'digital'
marketsarrayTarget markets e.g. ['UK', 'France', 'Japan']
constraintsobjectConstraints object
brand_contextobjectBrand context object
archive_report_brief12 paramsOne-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from…

One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, number of colours. Output: ranked colour cards with full provenance, story order, source confidence flags, pull quote, CTA line, CSS tokens, image prompt for Midjourney/Flux/DALLE, editorial argument, weakest and strongest entries identified. Replaces chaining archive_search + get_colour_card + cliche_breaker + agent_brief separately. Two Cla

ParameterTypeDescription
avoidarrayTopics to suppress e.g. ['arsenic wallpaper', 'Wedgwood blue']
titlestringDocument title e.g. 'The Colours of Georgian Power'
themesarrayResearch themes e.g. ['racing silks', 'EIC trade', 'Keats']
archivesarrayArchives to search e.g. ['RacingSilks', 'EIC', 'Keats', 'Dickens']
audiencestringTarget audience e.g. 'serious Georgian collector'
n_coloursintegerNumber of colours to return (default 8, max 16)
period_endintegerHard period gate: exclude entries dated after this year. Default 9999 (no upper bound).
period_startintegerHard period gate: exclude entries dated before this year. Default 0 (no lower bound).
allow_partialbooleanIf false (default), returning fewer cards than requested sets ok=false with error_code INSUFFICIENT_PALETTE_RESULTS instead of a silent short 'success'. Set true to accept a short result.
output_formatstringReserved for future use -- currently accepted but has no effect on the response shape (the endpoint always returns the full report).
strict_sourcesbooleanOnly return entries with named primary sources (default true)
family_card_modestringHow near-identical cultivars/records are presented. 'auto' (default): current behaviour, groups into family cards above the standard ΔE threshold. 'always': widens the clustering threshold so more nea
palette_heritage5 paramsGiven a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive …

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 custome

ParameterTypeDescription
marketstringTarget market
contextstringBrand context
palettearrayExisting hex values
brand_namestringBrand name for CSS tokens
n_additionsintegerArchive colours to add (default 3)
archive_coverage_gap2 paramsGiven a list of themes, report which are well-evidenced in the archive and which are under-evidenced or missing. Returns a coverage matri…

Given a list of themes, report which are well-evidenced in the archive and which are under-evidenced or missing. Returns a coverage matrix: for each theme, entries found, coverage grade (strong/moderate/weak/missing), best match with claim strength, and what source type would be needed to improve coverage. Use this BEFORE building an archive_report_brief or brief_forensic to know where the evidence is strong and where gaps will appear. Prevents building beautiful reports that quietly ignore half

ParameterTypeDescription
themesarrayThemes to check e.g. ['opium', 'gin', 'gambling', 'racing']
archivesarrayOptional archives to search e.g. ['EIC', 'Dickens']
archive_cultural_anachronism4 paramsCheck a list of colour entries for anachronism risk. Detects whether the primary source date falls outside the requested period, whether …

Check a list of colour entries for anachronism risk. Detects whether the primary source date falls outside the requested period, whether the archive is a known modern source (RacingSilks, FootballStrips), and returns a period_relevance score and safe phrasing. Essential for historical documents: prevents a 2011 Jockey Club racing silk registration being presented as Georgian evidence. Returns anachronism_risk (none/low/medium/elevated/high), period_relevance score 0-1, safe_phrasing, and unsafe_

ParameterTypeDescription
entriesarrayColour entries to check
period_endintegerEnd year e.g. 1830
period_startintegerStart year e.g. 1714
target_periodstringPeriod description e.g. 'Georgian England 1714-1830'
session_brief12 paramsSingle-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores clai…

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: c

ParameterTypeDescription
tonestringforensic | editorial | clinical | narrative
avoidarrayThemes to suppress
titlestringBrief title e.g. 'The Colours of Pleasure'
themesarrayResearch themes
archivesarrayArchives to draw from
audiencestringTarget audience e.g. 'serious collector'
n_coloursintegerNumber of colour cards (default 8)
period_endintegerEnd year e.g. 1830
period_startintegerStart year e.g. 1714
target_periodstringHistorical period e.g. 'Georgian England 1714-1830'
strict_sourcesbooleanOnly include entries with named primary sources
confidence_thresholdnumberMin confidence 0-1 (default 0.6)
index_resonance2 paramsColour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 =…

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.

ParameterTypeDescription
entriesarrayList of colour entries to score for resonance
score_basisstringScoring basis (default: material_origin_to_social_consequence)
archive_evidence_gap4 paramsGiven a hex value and a proposed claim about it, return whether the archive supports that claim, what is missing, what kind of source wou…

Given a hex value and a proposed claim about it, return whether the archive supports that claim, what is missing, what kind of source would be needed, and safe agent wording. This is Colour Memory's anti-hallucination endpoint. It turns the absence of evidence into a forensic finding rather than a gap to fill with invention. Example: hex #4A535C + proposed claim 'cyanosis in a death chamber' returns: nearest archive support, support level (supported/partial/unsupported), what source type is need

ParameterTypeDescription
hexstringHex colour to analyse e.g. '#4A535C'
archivestringOptional archive to search e.g. 'DarkHistory'
n_candidatesintegerNumber of archive candidates to return (default 5)
proposed_claimstringWhat you want to say about this colour e.g. 'cyanosis in a death chamber'
brand_collision7 paramsCan this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market…

Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE2000 distance to each competitor, archive context for each colour, a distinctiveness score (0-100), an ownership verdict (strong/viable/contested/collision), a plain-English verdict summary, and a strategic recommendation. Use before committing to a brand colour in a competitive market. Replaces manual colour distance checks and competito

ParameterTypeDescription
marketstringMarket context e.g. 'UK luxury food retail'
regionstringRegion code e.g. 'GB', 'UAE', 'JP'
brand_hexstringBrand hero colour hex e.g. '#D4A829'
brand_namestringBrand name e.g. 'Fortnum and Mason'
competitor_hexesarrayList of competitor hex colours
competitor_namesarrayCompetitor names matching hex order
competitor_provenancearrayWhere each competitor colour came from, positionally aligned to competitor_hexes. Only a verified value moves the distinctiveness score; an estimated or unverified one is kept as a QUALITATIVE compari
brand_report7 paramsOne-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor,…

One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, colour DNA, strategy verdict, commercial signals, market reading per market, usage rules, palette roles, ecommerce copy, memory hooks, Instagram caption, and Midjourney/Flux/DALLE agent brief. Use this instead of chaining colour_strategy + cliche_breaker + ecommerce_product_copy + memory_hooks + agent_brief separately. Two Claude calls to

ParameterTypeDescription
hexstringHero hex colour e.g. '#4A2A50'
mediumstringMedium e.g. 'packaging', 'digital', 'interior'
conceptstringOptional concept to search for cliche contradiction e.g. 'luxury', 'eco', 'wellness'
marketsarrayTarget markets e.g. ['UK', 'France', 'Japan']
product_typestringProduct type for copy e.g. 'velvet cushion', 'fragrance', 'cleaning spray'
target_modelstringImage model for agent brief e.g. 'midjourney', 'flux', 'dalle'
brand_contextobjectBrand context: category, positioning, audience, channels
brand_audit6 paramsFast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRON…

Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of any kind: colour roles with archive names, the full WCAG accessibility matrix, cultural risk per colour, CSS variables, Tailwind config, design tokens and production notes. NOT COMPUTED HERE: palette interpretation -- the verdict, its score and the written narrative copy. Those require an LLM call and used to be made inside this tool wit

ParameterTypeDescription
marketstringTarget market e.g. 'UK luxury', 'global', 'Japan'
mediumstringdigital | print | both
palettearrayArray of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B']
use_casestringUse case e.g. 'brand identity', 'packaging', 'app UI'
site_evidenceobjectEvidence for a LIVE-SITE audit, supplied by the host (Colour Memory does not browse). {pages: [{url, role: 'homepage'|'about'|'work'|'services'|'product'|..., screenshot: bool, tokens: bool, observati
brand_categorystringOptional brand category e.g. 'developer tool', 'food', 'fashion'
agent_verify3 paramsVerify that an AI-generated image actually used the colours specified in an agent_brief call. Supply the generated image (URL or base64) …

Verify that an AI-generated image actually used the colours specified in an agent_brief call. Supply the generated image (URL or base64) and the target palette from agent_brief colour_tokens. Returns a fidelity score 0-100, dE2000 distance per colour, match quality per colour (accurate/acceptable/drifted/ignored), and an overall verdict. Use after agent_brief + image generation to close the colour loop.

ParameterTypeDescription
image_urlstringURL of the generated image
image_base64stringBase64 encoded generated image
target_palettearrayHex values from agent_brief colour_tokens e.g. ['#ED9921', '#E29937']
colour_passport5 paramsCanonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temp…

Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive anchor with dE2000, claim_strength, do_not_say and evidence grade, hex provenance (status, confidence, spectrophotometric flag), physics (illuminant behaviour, gamut, print risk), and cultural reading (colour family, warnings, positives). Use this as the foundation call when you need the complete picture. Every other tool is built on this

ParameterTypeDescription
hexstringSingle hex colour e.g. #31559B
hexesarrayMultiple hex colours for batch lookup e.g. ['#31559B', '#8B1A1A']. Max 20.
n_archiveintegerNumber of archive matches to return (default 3)
include_physicsbooleanInclude illuminant behaviour and gamut data (default true)
include_culturalbooleanInclude cultural risk and associations (default true)
colour_passports4 paramsBatch version of colour_passport. Submit up to 20 hex values in one call. Returns a full Colour Passport for each unique hex: colour scie…

Batch version of colour_passport. Submit up to 20 hex values in one call. Returns a full Colour Passport for each unique hex: colour science, archive anchor, evidence grade, do_not_say constraints, hex provenance, accessibility, and physics. Deduplicates hex values automatically. Use for multi-colour workflows, Figma palette analysis, or any case where calling colour_passport separately for each colour would be slow.

ParameterTypeDescription
hexesarrayList of hex colours e.g. ['#31559B', '#8B1A1A']
n_archiveintegerNumber of archive matches per colour (default 3)
include_physicsbooleanInclude illuminant behaviour and gamut data (default true)
include_culturalbooleanInclude cultural associations (default false)
colour_dna1 paramCompact semantic fingerprint for a single hex colour. This is one component of colour_passport. Use colour_passport for a general colour …

Compact semantic fingerprint for a single hex colour. This is one component of colour_passport. Use colour_passport for a general colour profile; use this only when the user explicitly wants the fingerprint format alone. 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 th

ParameterTypeDescription
hexstringHex colour to fingerprint e.g. '#4A2A50'
ecommerce_copy5 paramsGenerate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, …

Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long description, SEO title, meta description, alt text, Instagram caption, and cross-sell suggestion. Every piece of copy is grounded in archive provenance -- never generic AI colour copy. The colour name comes from the nearest archive match, not invented. Examples: velvet cushion in Murex Luxury, ceramic vase in Woad Vat Blue, linen throw i

ParameterTypeDescription
hexstringHex colour of the product e.g. '#4A2A50'
tonestringCopy tone e.g. 'premium but not pompous', 'warm and accessible', 'heritage and serious'
channelstringSales channel e.g. 'shopify', 'etsy', 'instagram', 'editorial'
brand_namestringOptional brand name to include in copy
product_typestringProduct type e.g. 'velvet cushion', 'ceramic vase', 'linen throw', 'candle'
colour_hooks3 paramsGenerate a hook sentence, three-sentence story, tweet, image prompt, and follow-up questions for any hex colour. Backed by the nearest ar…

Generate a hook sentence, three-sentence story, tweet, image prompt, and follow-up questions for any hex colour. Backed by the nearest archive colour's cultural provenance. Tunable by audience (general public, designers, historians, children) and tone (dinner party, academic, social media, brand copy). Use to make archive colours shareable, to generate content, or to power a public-facing colour chat experience.

ParameterTypeDescription
hexstringHex colour e.g. '#154F20'
tonestringDesired tone e.g. 'dinner party', 'academic', 'social media', 'brand copy'
audiencestringTarget audience e.g. 'general public', 'interior designers', 'children'
archive_provenance1 paramExplains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidenc…

Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. This is one component of colour_passport, but also a standalone research tool for deep provenance work (museum, documentary, editorial). Use colour_passport for a general profile; call this directly for research workflows needing full source-chain detail.

ParameterTypeDescription
colour_namestringName of the archive colour e.g. 'Love Idleness', 'Woad Vat Blue', 'Murex Luxury'
colour_forensics5 paramsAssess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / …

Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required actions, light behaviour under three illuminants (north daylight, warm artificial, direct sun), substrate-specific notes, and a recommended alternative. Backed by CIEDE2000 archive matching and Claude material knowledge. Examples: ultramarine on lime plaster, lead white on exterior timber, verdigris on north-facing interior wall, red och

ParameterTypeDescription
hexstringHex colour to assess e.g. '#2A5498'
usestringSpecific use context e.g. 'heritage repair', 'new build interior', 'conservation project'
finishstringPaint finish e.g. 'matt', 'eggshell', 'gloss', 'limewash'
substratestringPhysical substrate e.g. 'lime plaster', 'gypsum board', 'brick', 'timber', 'canvas'
orientationstringRoom or surface orientation e.g. 'north-facing', 'south exterior', 'east bedroom'
palette_iterate6 paramsRefine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corpor…

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 fi

ParameterTypeDescription
marketsarrayTarget markets
palettearrayCurrent hex palette to refine
feedbackstringNatural language refinement e.g. more melancholic
use_casestringUse case context e.g. luxury homewares
directionstringAlias for feedback — natural language direction e.g. more dangerous, more historical, warmer
n_resultsintegerNumber of variants to return (default 1)
colour_variants1 paramFor any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essent…

For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers exploring around a colour. 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

ParameterTypeDescription
namestringNamed archive colour e.g. Bourton Honey
palette_export4 paramsExport a palette to CSS custom properties, Figma design tokens, Tailwind config, ASE hex list, or JSON. Each colour is automatically name…

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.

ParameterTypeDescription
namesarrayOptional custom names
formatstringcss | figma | ase_hex | tailwind | json
prefixstringToken prefix e.g. cm, brand (default: cm)
palettearrayHex values to export
palette_compare4 paramsDeep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural dep…

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,

ParameterTypeDescription
marketsarrayTarget markets
use_casestringContext for comparison e.g. luxury packaging
palette_aarrayFirst palette hex values
palette_barraySecond palette hex values
ecommerce_namer5 paramsGenerate archive-grounded colour names for up to 40 product SKUs. Input: list of hex values, product category, brand name, naming style. …

Generate archive-grounded colour names for up to 40 product SKUs. Input: list of hex values, product category, brand name, naming style. Output: for each hex -- archive name, source citation, one-line product description, dE2000 match distance, match quality, and confidence score. Every name is archive-sourced, not invented. Each carries a primary source citation that can be defended to buyers, press, and brand teams. Use for paint ranges, candle collections, fashion lines, homeware, cosmetics.

ParameterTypeDescription
hexesarrayList of hex values e.g. ['#D4A829', '#1A5C6E']
stylestringgeographical | poetic | material | literary | mixed (default)
max_dEnumberMax dE2000 distance to accept (default 25)
brand_namestringBrand name for context
product_categorystringe.g. 'paint', 'candle', 'fashion', 'homeware'
ui_states3 paramsGenerate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, su…

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.

ParameterTypeDescription
brand_hexstringBrand colour hex e.g. '#D4A829'
dark_modebooleanGenerate for dark mode (default false)
background_hexstringBackground hex (default #FFFFFF)
colour_namer5 paramsGenerate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary,…

Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial, or mixed. Every name is grounded in a real archive source. The core of the Shopify product naming use case.

ParameterTypeDescription
hexstringHex colour to name e.g. #8B4A2A
stylestringgeographical | poetic | material | literary | botanical | industrial | mixed
marketstringTarget market e.g. UK luxury
n_namesintegerNumber of name options (default 5)
product_typestringProduct type e.g. candle, paint, leather bag
palette_swatch5 paramsGenerate a clean, text-free PNG swatch image from hex colours. Returns a URL to the PNG. Use for Midjourney --sref style references or de…

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.).

ParameterTypeDescription
hintegerOutput height in pixels (default 630)
wintegerOutput width in pixels (default 1200)
hexesstringComma-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
weightsstringComma-separated proportional weights from k-means extraction. Used only when layout=photo.
palette_analyse3 paramsAnalyse a palette of hex colours against the Colour Memory archive. For each colour returns the nearest named archive entry with cultural…

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

ParameterTypeDescription
nintegerMax alternatives per colour when confidence is low (1-3, default 1)
archivestringOptional: restrict to one archive e.g. China, Pigment, ArtsAndCrafts
coloursarrayArray of colour objects
ingest_image3 paramsUpload an image to Colour Memory for ephemeral processing. Returns image_id valid 5 minutes. Pass image_id to palette_extract or image_br…

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.

ParameterTypeDescription
imageobjectMCP file reference {download_url, mime_type, file_name}
source_urlstringHTTPS URL of the image
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).
palette_extract8 paramsExtract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values…

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 an

ParameterTypeDescription
kintegerNumber of colours to extract (3-12, default 6)
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'.
image_idstringEphemeral image_id from ingest_image (preferred for images over 50 KB)
image_urlstringPublic URL of the image to extract colours from
image_base64stringBase64-encoded image data (small images only, under 50 KB)
grey_card_hexstringHex value sampled from a grey or white card in the image for white balance correction e.g. #C8C8C8
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 from
image_brief8 paramsCompound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coher…

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

ParameterTypeDescription
kintegerNumber of colours to extract (3-12, default 6)
modelstringImage model: midjourney | flux | dalle | stable_diffusion (default midjourney)
archivestringExplicit archive name override e.g. 'MarsColour', 'Japan'
image_urlstringPublic URL of the image
image_base64stringBase64-encoded image data
product_typestringProduct focus e.g. 'tea towel', 'wallpaper', 'ceramic', 'textile'
grey_card_hexstringHex value from a grey/white card for white balance correction
style_contextstringPlain English style e.g. 'English cottage garden', 'Victorian', 'Japanese', 'MarsColour'. Restricts archive matching to coherent cultural set.
project_get2 paramsRetrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, cr…

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 no

ParameterTypeDescription
versionintegerSpecific version number to describe. Omit for the project's current version.
project_idstringThe project_id returned by house_specify for an authenticated (keyed) call.
project_list5 paramsList durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty l…

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.

ParameterTypeDescription
limitintegerMax projects to return, default 50, capped at 200.
cursorstringOpaque pagination cursor -- pass the previous response's next_cursor to get the next page.
project_typestringFilter by project type, e.g. 'house'. Omit for all types.
updated_sincestringISO 8601 timestamp -- only return projects updated after this time.
include_deletedbooleanInclude soft-deleted projects (still owner-scoped). Default false.
project_versions1 paramList every stored version of a durable house project you own, oldest first, with each version's content hash, build/schema/archive revisi…

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.

ParameterTypeDescription
project_idstringThe project_id returned by house_specify for an authenticated (keyed) call.
project_delete1 paramSoft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same…

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.

ParameterTypeDescription
project_idstringThe project_id returned by house_specify for an authenticated (keyed) call.
project_export6 paramsExport the same house-flagship content palette_pdf renders as a genuinely editable Word document or Excel workbook -- for a client who ne…

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 reaso

ParameterTypeDescription
houseobjecthouse_specify's full response object, unmodified -- alternative to house_ref/project_id. PREFER house_ref or project_id when available.
formatstringWhich editable format to produce.
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.
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.
brand_guideline_specify8 paramsGenerates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes…

Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, each scored for distinctiveness against named competitors, checked for accessibility, and labelled with exactly what each colour can and cannot legitimately claim (documented archive anchor vs analogue vs original brand colour). Returns a brand_ref (valid 24h) plus a claim_id per colour -- resolve those into full source/permitted-claim/do_n

ParameterTypeDescription
brand_namestringThe brand's name.
brand_briefobjectCategory, positioning, audience, personality, values, channels, markets, and named competitors with their hex colours.
constraintsobjectStructured negative/positive retrieval constraints, checked before archive-diversity capping. avoid_concepts takes precedence over any sentiment inferred from brand_brief prose.
preferencesobject
palette_inputobjectExactly how to source the candidate colours.
identity_assetsobject
output_preferencesobject
continue_project_idstringThe project_id returned by an earlier call, when this is a REFINEMENT of that same Brand Standard. Reuse it and the work joins that project as a new version; omit it and a second project is created. '

Ready-made

Prompts

  • name-my-colourGenerate archive-verified product colour names for any hex. Returns 5 candidates with provenance citations and a hero recommendation.
  • colour-strategyFull brand colour strategy for any hex. Returns archive anchor, verdict, market readings, usage rules, and copy hooks.
  • palette-for-conceptBuild a historically grounded palette from any cultural concept or mood. Returns archive-matched colours with provenance.
  • interior-specComplete room colour specification from a concept. Returns 60/30/10 surface assignments, paint matches, light behaviour, and cultural rationale.
  • image-generation-briefComplete colour direction package for Midjourney, Flux, or DALL-E. Archive palette, prose brief, hex colour tokens, negative prompt, lighting notes.
  • should-i-use-this-colourDecisive verdict on any colour for a specific use case and market. Returns use_with_confidence, use_with_caution, or avoid, with strengths, risks, and better alternatives.
  • break-the-clicheFind the archive contradiction to a colour concept. Love is not red. Luxury is not gold. Returns the surprising historical colour that breaks the expected choice.
  • name-my-product-rangeGenerate archive-grounded names for an entire product range. Submit up to 8 hex values and a product type, get back cited name candidates for each.

Readable data

Resources

  • Colour Memory resultShows a Colour Memory palette as colour.
  • Colour Memory paletteThe final palette, its values and its downloads.