digbyo avatar

Colour Memory

digbyo/colour-memory-api

If you've ever wondered why a particular shade matters beyond hex codes, this connects Claude to a curated database of colors tied to their cultural origins and historical impact. Each color comes with attribution to the person who created or popularized it, the year it emerged, and the real-world consequences that followed. Reach for this when you're doing design research, writing about color theory, or need to ground aesthetic decisions in cultural context rather than just visual appeal. It's essentially a searchable archive that treats color as cultural artifact rather than just wavelength.

tools
80
auth
Secret needed
transport
HTTP
last updated
Oct 6, 2026

Install

From registry metadata
$ npx add-mcp https://api.colourmemory.com/mcp --name colour-memory --header 'X-Api-Key: ${X_API_KEY}'

Run in your terminal. add-mcp asks which agents to add it to, then asks for each value it needs. Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http colour-memory https://api.colourmemory.com/mcp --header 'X-Api-Key: YOUR_X_API_KEY'

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 80 tools

Verified live against the running server on Nov 6, 2026.

query_conceptualAsk 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, Vic...3 params

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, Vic...

Parameters* required
archivestring
Optional: restrict to a named archive e.g. 'Japan', 'Pigment', 'OttomanEmpire'
n_resultsinteger
Number of results (default 5)default: 5
query*string
The colour concept or cultural question to search for
extract_image_coloursExtract 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 d...7 params

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

Parameters* required
analyseboolean
If true, match colours against archive and return names
grey_card_hexstring
Hex from a grey/white card for white balance
imageobject
Image file attachment from ChatGPT
image_idstring
Ephemeral 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_urlstring
Public URL of image
kinteger
Number of colours to extract (3-12, default 6)
style_contextstring
e.g. English cottage garden, Victorian, Japanese
query_hexFind the closest named archive colours to a hex value using CIEDE2000 perceptual distance.3 params

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

Parameters* required
archivestring
Optional: restrict to a named archive
hex*string
Hex value with or without # e.g. '#8B4513'
n_resultsinteger
Number of results (default 5)default: 5
palette_specifyGenerate 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 cu...3 params

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

Parameters* required
colours*array
List of 2-8 hex values
room_typestring
e.g. 'living', 'bedroom', 'kitchen', 'study'
stylestring
e.g. 'heritage', 'contemporary', 'minimal'
colour_metricsReturns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma and hue angle, and Bradford corresponding colours under two standard illuminants. It also lists what a hex cannot sup...1 params

Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma and hue angle, and Bradford corresponding colours under two standard illuminants. It also lists what a hex cannot sup...

Parameters* required
hex_val*string
Hex value e.g. '#8B4513'
colour_harmoniesReturn 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 proportion...2 params

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

Parameters* required
harmony_typesarray
Harmony types to include: 'complementary', 'analogous', 'triadic', 'split_complementary', 'tetradic', or 'hay_contrast' (D.R. Hay's 1838 documented contrast pairing, distinct from the geometric typ...
hex*string
Hex value e.g. '#3A5C8C'
accessibility_checkEvaluates 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.2 params

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.

Parameters* required
backgroundstring
Background hex (default 'FFFFFF')default: FFFFFF
hex_val*string
Foreground hex value
accessibility_matrixAccept 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.1 params

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.

Parameters* required
palette*array
Array of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B']
accessibility_rulesConvert 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.1 params

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.

Parameters* required
palette*array
Array of hex values
colour_slugsReturn 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.2 params

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.

Parameters* required
archivestring
Optional archive filter
hex*string
Hex value e.g. #D4A829
palette_light_darkGenerate 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 C...2 params

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

Parameters* required
palette*array
Array of hex values
use_casestring
Use case context e.g. UI, dashboard, reportdefault: UI
accessibility_fontGiven 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.2 params

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.

Parameters* required
background*string
Background hex value
palette*array
Candidate foreground hex values
archive_searchFull-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. Bour...9 params

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

Parameters* required
archivestring
Optional archive filter e.g. oxfordshire, japan, pigment, keats, eic, racingsilks
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 iden...one of text · exactdefault: text
include_fullboolean
Return complete notes and source fields. Default false returns 150-char snippets. Set true for report workflows.
limitinteger
Alias for n_results
n_resultsinteger
Results 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, an...default: 10
offsetinteger
Skip 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 al...default: 0
query*string
Search term e.g. cerulean, Prussian, Ottoman, ochre, medieval
year_frominteger
Boost entries on or after this year e.g. 1400 for Renaissance, 1837 for Victorian
year_tointeger
Boost entries on or before this year e.g. 1600 for Renaissance, 1901 for Victorian
colour_combinationAssess 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.2 params

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.

Parameters* required
colours*array
2-5 hex values to assess as a combination
contextstring
Usage context: UI | data viz | fashion | interior | print | brandingdefault: UI
palette_strictLike 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 specific...5 params

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

Parameters* required
allowed_archivesarray
Archive names to restrict results e.g. ['Japan', 'China']
concept*string
Cultural concept e.g. Japanese wabi-sabi
include_neutralsboolean
Include neutral tones (default true)default: true
min_relevancenumber
Minimum relevance score 0-1 (default 0.3)default: 0.3
n_coloursinteger
Number of colours (default 5)default: 5
archive_report_documentCreate a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word file built from archive findings, instead of writing a plain document yourself. Pass the records by the record_id or...4 params

Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word file built from archive findings, instead of writing a plain document yourself. Pass the records by the record_id or...

Parameters* required
deliverystring
url (default) or base64.one of url · base64
sections*array
Ordered sections of the report.
subtitlestring
One-sentence subtitle.
title*string
Document title, under 90 characters.
palette_pdfGenerate 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 c...11 params

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

Parameters* required
deliverystring
'url' (default): signed, time-limited R2 download link. 'base64': PDF bytes returned inline as pdf_base64 for callers that need the file directly.one of url · base64
entriesarray
Array 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 he...
houseobject
DO NOT USE. Inline house objects are REFUSED outright (400, INLINE_HOUSE_NOT_ALLOWED), even alongside a valid house_ref/project_id -- this PDF is Colour Memory-branded and can only render a house C...
house_refstring
THE way to render the flagship document-plan publication -- the house_ref string house_specify's own response returns (valid for 30 minutes after that call, or per project_persistence for a durable...
presentationobject
Used with `sections` or `house_ref`/`project_id`. {template: 'sectioned_specification'|'colour_drenched_lookbook' (sections only), page_size?: 'A4-portrait'|'A4-landscape'|'16:9', minimum_colour_co...
project_idstring
Alternative 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_versioninteger
Used 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.
querystring
Optional title for the palette e.g. Ottoman imperial luxury
sectionsarray
Alternative to `entries` -- one entry per document section, e.g. house_specify's rooms. Each: {grouping_basis?, hero_hex?, entries: [...colour cards, server-verified exactly like the flat `entries`...
sourcestring
Optional source label e.g. brand, conceptualdefault: archive
verifyboolean
Issue as a Verified by Colour Memory document (Colour Memory Pro).
palette_auditFull 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 cos...4 params

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

Parameters* required
marketstring
Target marketdefault: global
mediumstring
digital | print | bothdefault: digital
palette*array
Hex values to audit
use_casestring
Use case contextdefault: brand identity
brand_systemComplete 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 r...5 params

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

Parameters* required
brand_categorystring
Optional e.g. developer tool, luxury, food
marketstring
Target market e.g. global, UK, Japandefault: global
mediumstring
digital | print | bothdefault: digital
palette*array
Hex values
use_casestring
Use case e.g. brand identity, packagingdefault: brand identity
brand_asset_packComplete 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.5 params

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.

Parameters* required
brand_categorystring
Optional brand name or category
marketstring
Target marketdefault: global
mediumstring
digital | print | bothdefault: digital
palette*array
Hex values
use_casestring
Use casedefault: brand identity
accessibility_simulateReturn simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, linear sRGB), with a flag when a simulated colour had to be clipped to sRGB. Anomalous trichromacy and partial severi...1 params

Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, linear sRGB), with a flag when a simulated colour had to be clipped to sRGB. Anomalous trichromacy and partial severi...

Parameters* required
hex_val*string
Hex value e.g. '#BE0032'
colour_match_paintFind the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene.3 params

Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene.

Parameters* required
brandstring
Optional brand filter: 'farrow' or 'little_greene'
hex_val*string
Hex value e.g. '#003153'
ninteger
Number of matches (default 3)default: 3
colour_cardLook up a named colour and return its hex, archive, provenance, and cultural notes.2 params

Look up a named colour and return its hex, archive, provenance, and cultural notes.

Parameters* required
namestring
Colour name e.g. 'Prussian Blue' or 'Ottoman Carbon Ink'
slugstring
Stable 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. Returns tool count, endpoint list, MCP-exposed tools, and usage notes. Deterministic -- no LLM cost.

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.

No parameters. Call it with no arguments.

system_statusZero-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 (lik...

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 (lik...

No parameters. Call it with no arguments.

colour_storyGiven 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...2 params

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

Parameters* required
hex*string
Hex value e.g. '#DC143C'
n_archivesinteger
Number of archive sources to draw from (default 5)default: 5
palette_conceptGenerate 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 k...4 params

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

Parameters* required
avoidarray
Colours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection.
concept*string
Cultural theme or historical period e.g. 'Victorian mourning' or 'Ottoman court'
include_neutralsboolean
Include neutral/background coloursdefault: true
n_coloursinteger
Number of colours to return (default 5, max 8)default: 5
colour_mixSimulate 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 Pruss...3 params

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

Parameters* required
hex_a*string
First colour hex e.g. '#003366'
hex_b*string
Second colour hex e.g. '#C8A600'
rationumber
Mix ratio 0.0-1.0 where 0.5 is equal parts (default 0.5)default: 0.5
colour_timelineGiven 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,...2 params

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

Parameters* required
concept*string
Colour name or concept to trace e.g. indigo, imperial purple, mourning black
ninteger
Number of timeline entries to return (default 10, max 20)default: 10
image_paletteUpload 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, ea...4 params

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, ea...

Parameters* required
archivestring
Optional: restrict archive matching to a specific archive
image_base64*string
Base64 encoded image (JPEG, PNG, WebP)
media_typestring
Image MIME type e.g. 'image/jpeg'default: image/jpeg
n_coloursinteger
Number of dominant colours to extract (default 5, max 5)default: 5
colour_compareDeep 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, a...2 params

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, a...

Parameters* required
hex_a*string
First colour hex e.g. '#003366'
hex_b*string
Second colour hex e.g. '#1877F2'
colour_cultural_riskCultural 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 check...3 params

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

Parameters* required
hexstring
Single hex value to assess e.g. '#FF9900'
marketsarray
Optional market focus e.g. ['China', 'Middle East', 'India']
palettearray
Optional list of hex values to assess as a palette
design_sessionOne-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 promp...7 params

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

Parameters* required
avoidarray
Archive names or colour terms to exclude e.g. ['neon', 'ScreenDigital']
concept*string
Cultural theme, mood, or brief e.g. 'Victorian mourning', 'Ottoman court', 'Scandinavian minimal'
include_accessibilityboolean
Include WCAG contrast check (default true)default: true
include_paint_matchesboolean
Include commercial paint matches (default true)default: true
include_promptboolean
Include image generation prompt (default true)default: true
mediumstring
Application context e.g. 'interior', 'brand identity', 'fashion', 'digital', 'print'default: general
n_coloursinteger
Palette size (default 5, max 8)default: 5
image_personalUpload 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 su...4 params

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

Parameters* required
image_base64string
Base64 encoded portrait photo (JPEG or PNG). Face should be clearly visible in natural light. Either image_base64 or image_url required.
image_urlstring
URL of a portrait photo hosted online. Easier than base64 for MCP use. Either image_url or image_base64 required.
media_typestring
Image MIME type e.g. 'image/jpeg'default: image/jpeg
namestring
Optional: person's name for the report e.g. 'Sarah'
style_matchThe 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. Pairs are judge...3 params

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. Pairs are judge...

Parameters* required
askstring
Optional: specific question e.g. 'what bag colour works?' or 'do the shoes work?'
items*array
List of outfit items with label and hex colour
occasionstring
Optional: occasion context e.g. 'daytime', 'evening', 'office', 'casual', 'wedding guest'default: general
interior_specifyGenerate 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 Littl...9 params

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

Parameters* required
archivestring
Optional: 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 silen...default:
avoidarray
Colours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection.
concept*string
Room concept or brief e.g. 'bold maximalist living room' or 'calm Scandi bedroom'
n_coloursinteger
Number of colours in scheme (default 5, max 7)default: 5
orientationstring
Room orientation e.g. 'north', 'south', 'east', 'west' — affects light advicedefault:
output_formatstring
'scene_brief' adds a Historical Scene Colour Brief for film and image work: per colour its place, date, observer, timing, source and do-not-claim lines, then DOCUMENTED VISUAL CONSTRAINTS, NEGATIVE...one of standard · scene_briefdefault: standard
role_planarray
Optional: 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_typestring
Room type e.g. 'living', 'bedroom', 'kitchen', 'study', 'bathroom', 'hallway', 'dining'default: living
stylestring
Style direction e.g. 'heritage', 'contemporary', 'maximalist', 'minimal', 'scandi', 'industrial', 'coastal'default: heritage
house_specifyGenerate 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...11 params

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

Parameters* required
archive*string
Single archive to draw every room's colours from, e.g. 'ArtsAndCrafts'. Required -- invalid names return a clear error listing valid archives.
avoidarray
Terms to exclude from retrieval.
colours_per_roominteger
Default 5.default: 5
concept*string
House-level concept or brief, e.g. 'Arts and Crafts movement family house'
guidance_levelstring
Who 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.one of client · decoratordefault: client
minimum_claim_strengthstring
Evidence-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_DE...default: B
narrative_modestring
Default 'evidence_only'.default: evidence_only
output_formatstring
'scene_brief' adds a Historical Scene Colour Brief for film and image work: per colour its place, date, observer, timing, source and do-not-claim lines, then DOCUMENTED VISUAL CONSTRAINTS, NEGATIVE...one of standard · scene_briefdefault: standard
rooms*array
One entry per room, e.g. [{label:'Entrance Hall', room_type:'hallway', orientation:'north'}]
shared_house_coloursinteger
Default 2.default: 2
strict_semantic_colourboolean
Default true -- excludes entries whose quoted colour language contradicts their stored hex.default: true
palette_generateSend 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,...3 params

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

Parameters* required
archivestring
Optional: restrict fills to one archive e.g. 'Oxfordshire', 'Shakespeare', 'Japan'
sizeinteger
Total 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.default: 5
slots*array
List of palette slots. Each has index (0-11), optional hex, and locked flag.
palette_gradientGenerate 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...6 params

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

Parameters* required
anchors*array
2-5 hex values (#RRGGBB) or exact archive colour names
archivestring
Restrict snapping to this archive name e.g. Victorian
output_formatstring
stops: array of colour objects. css: linear-gradient string. svg: swatch bar.one of stops · css · svgdefault: stops
pathstring
linear: straight Lab lerp (may have neutral midpoint). chroma_preserved: LCh short-arc, saturation maintained.one of linear · chroma_preserveddefault: chroma_preserved
snap_to_archiveboolean
Snap each stop to nearest archive colour (default true)default: true
stepsinteger
Total stops including anchors (default 7, max 20)default: 7
palette_translateMap 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...3 params

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

Parameters* required
max_delta_enumber
Max acceptable CIEDE2000 distance — above this is flagged out-of-threshold (default 40)default: 40
palette*array
List of hex values to translate e.g. ['#F5F0E8', '#8B6B3D']
target_archive*string
Archive to translate into e.g. 'Shakespeare', 'Japan', 'Oxfordshire'
archive_clicheFind 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...3 params

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

Parameters* required
concept*string
Colour concept to subvert e.g. 'love', 'grief', 'luxury', 'betrayal', 'power'
expected_colourstring
Optional: the cliche colour to contradict e.g. 'red', '#FF0000'. Hex or colour name.
n_resultsinteger
Number of archive entries to search (default 8)default: 8
colour_verdictEvaluate 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...5 params

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

Parameters* required
audiencestring
Optional: target audience e.g. 'high net worth travellers', 'young professionals'
hex*string
Hex colour to evaluate e.g. '#31559B'
marketsarray
Target markets e.g. ['UK', 'Japan', 'UAE']
mediumstring
Application medium e.g. 'digital', 'interior', 'print', 'fashion', 'packaging'default: general
use_case*string
What the colour will be used for e.g. 'luxury hotel brand', 'heritage interior wall'
palette_verdictEvaluate 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...4 params

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

Parameters* required
marketstring
Optional: target market e.g. 'UK', 'Japan', 'global'
mediumstring
Application medium e.g. 'interior', 'digital', 'fashion', 'print'default: general
palette*array
List of 2-8 hex values e.g. ['#31559B', '#E8D898', '#4A2A50']
use_case*string
What the palette will be used for e.g. 'luxury cushion collection', 'brand identity'
agent_briefGenerate 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 i...10 params

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

Parameters* required
allowed_archivesarray
Optional: list of allowed archive names. Query restricted to these archives only.
archivestring
Optional: restrict palette query to this archive e.g. georgianpleasures, japan, chinadefault:
avoidarray
Optional: terms/associations to keep out of retrieval e.g. ['mourning', 'funeral black']. Affects retrieval directly, not just post-hoc flagging.
concept*string
Colour 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.
locked_palettearray
Optional: 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.
minimum_claim_strengthstring
Evidence-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 lo...one of A · B · C · D · Edefault: C
modelstring
Target model: midjourney, flux, dalle, stable_diffusiondefault: midjourney
palette_sizeinteger
Number of archive colours to include (default 5, max 8)default: 5
style_notesstring
Optional: additional style direction e.g. 'matte surfaces only', 'no gold'
task*string
What the other AI needs to generate e.g. 'luxury hotel bedroom image'
colour_strategySingle-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...5 params

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

Parameters* required
brand_contextobject
Brand context object
constraintsobject
Constraints object
hex*string
Hex colour to evaluate e.g. '#4A2A50'
marketsarray
Target markets e.g. ['UK', 'France', 'Japan']
mediumstring
Primary medium e.g. 'packaging', 'interior', 'digital'default: general
archive_report_briefOne-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, CT...16 params

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, CT...

Parameters* required
allow_partialboolean
If 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.
archivesarray
Archives to search e.g. ['RacingSilks', 'EIC', 'Keats', 'Dickens']
audiencestring
Target audience e.g. 'serious Georgian collector'
avoidarray
Topics to suppress e.g. ['arsenic wallpaper', 'Wedgwood blue']
confidence_thresholdnumber
Minimum confidence score (0.0-1.0) for an entry to be included. Default 0.5 filters out weakly-matched stubs.
family_card_modestring
How 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...one of auto · always · conservative
max_family_card_sharenumber
Conservative mode only: maximum fraction (0.0-1.0, default 0.5) of presented cards that may be family cards before excess families are suppressed to hero cards. Ignored in auto/always modes.
minimum_claim_strengthstring
Hard evidence-grade floor: A, B, C, D, or E. Never silently relaxed.
n_coloursinteger
Number of colours to return (default 8, max 16)
output_formatstring
Reserved for future use -- currently accepted but has no effect on the response shape (the endpoint always returns the full report).
period_endinteger
Hard period gate: exclude entries dated after this year. Default 9999 (no upper bound).
period_startinteger
Hard period gate: exclude entries dated before this year. Default 0 (no lower bound).
strict_semantic_colourboolean
Default false. When true, excludes entries whose quoted colour language contradicts their stored hex (e.g. a record naming 'Prussian blue' whose hex is actually a pale cream) rather than presenting...
strict_sourcesboolean
Only return entries with named primary sources (default true)
themes*array
Research themes e.g. ['racing silks', 'EIC trade', 'Keats']
titlestring
Document title e.g. 'The Colours of Georgian Power'
palette_heritageGiven 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 role...5 params

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

Parameters* required
brand_namestring
Brand name for CSS tokens
contextstring
Brand context
marketstring
Target market
n_additionsinteger
Archive colours to add (default 3)
palette*array
Existing hex values
archive_coverage_gapGiven 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...2 params

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

Parameters* required
archivesarray
Optional archives to search e.g. ['EIC', 'Dickens']
themes*array
Themes to check e.g. ['opium', 'gin', 'gambling', 'racing']
archive_cultural_anachronismCheck 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 hi...4 params

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

Parameters* required
entries*array
Colour entries to check
period_endinteger
End year e.g. 1830
period_startinteger
Start year e.g. 1714
target_periodstring
Period description e.g. 'Georgian England 1714-1830'
session_briefSingle-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 l...13 params

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

Parameters* required
archivesarray
Archives to draw from
audiencestring
Target audience e.g. 'serious collector'
avoidarray
Themes to suppress
confidence_thresholdnumber
Min confidence 0-1 (default 0.6)
minimum_claim_strengthstring
Hard evidence-grade floor: A, B, C, D, or E. Never silently relaxed.
n_coloursinteger
Number of colour cards (default 8)
period_endinteger
End year e.g. 1830
period_startinteger
Start year e.g. 1714
strict_sourcesboolean
Only include entries with named primary sources
target_periodstring
Historical period e.g. 'Georgian England 1714-1830'
themes*array
Research themes
titlestring
Brief title e.g. 'The Colours of Pleasure'
tonestring
forensic | editorial | clinical | narrative
index_resonanceColour 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 dete...2 params

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

Parameters* required
entries*array
List of colour entries to score for resonance
score_basisstring
Scoring basis (default: material_origin_to_social_consequence)
archive_evidence_gapGiven 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...4 params

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

Parameters* required
archivestring
Optional archive to search e.g. 'DarkHistory'
hex*string
Hex colour to analyse e.g. '#4A535C'
n_candidatesinteger
Number of archive candidates to return (default 5)
proposed_claim*string
What you want to say about this colour e.g. 'cyanosis in a death chamber'
brand_collisionCan 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 verd...7 params

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

Parameters* required
brand_hex*string
Brand hero colour hex e.g. '#D4A829'
brand_namestring
Brand name e.g. 'Fortnum and Mason'
competitor_hexesarray
List of competitor hex colours
competitor_namesarray
Competitor names matching hex order
competitor_provenancearray
Where 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 comp...
marketstring
Market context e.g. 'UK luxury food retail'
regionstring
Region code e.g. 'GB', 'UAE', 'JP'
brand_reportOne-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 co...7 params

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

Parameters* required
brand_contextobject
Brand context: category, positioning, audience, channels
conceptstring
Optional concept to search for cliche contradiction e.g. 'luxury', 'eco', 'wellness'
hex*string
Hero hex colour e.g. '#4A2A50'
marketsarray
Target markets e.g. ['UK', 'France', 'Japan']
mediumstring
Medium e.g. 'packaging', 'digital', 'interior'default: general
product_typestring
Product type for copy e.g. 'velvet cushion', 'fragrance', 'cleaning spray'
target_modelstring
Image model for agent brief e.g. 'midjourney', 'flux', 'dalle'default: midjourney
brand_auditFast, 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 variabl...6 params

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

Parameters* required
brand_categorystring
Optional brand category e.g. 'developer tool', 'food', 'fashion'
marketstring
Target market e.g. 'UK luxury', 'global', 'Japan'default: global
mediumstring
digital | print | bothdefault: digital
palette*array
Array of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B']
site_evidenceobject
Evidence 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, observ...
use_casestring
Use case e.g. 'brand identity', 'packaging', 'app UI'default: brand identity
agent_verifyVerify 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...3 params

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

Parameters* required
image_base64string
Base64 encoded generated image
image_urlstring
URL of the generated image
target_palette*array
Hex values from agent_brief colour_tokens e.g. ['#ED9921', '#E29937']
colour_passportCanonical 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, spectrophotome...5 params

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, spectrophotome...

Parameters* required
hexstring
Single hex colour e.g. #31559B
hexesarray
Multiple hex colours for batch lookup e.g. ['#31559B', '#8B1A1A']. Max 20.
include_culturalboolean
Include cultural risk and associations (default true)default: true
include_physicsboolean
Include illuminant behaviour and gamut data (default true)default: true
n_archiveinteger
Number of archive matches to return (default 3)default: 3
colour_passportsBatch 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 automatical...4 params

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

Parameters* required
hexes*array
List of hex colours e.g. ['#31559B', '#8B1A1A']
include_culturalboolean
Include cultural associations (default false)default: false
include_physicsboolean
Include illuminant behaviour and gamut data (default true)default: true
n_archiveinteger
Number of archive matches per colour (default 3)default: 3
colour_dnaCompact 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...1 params

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

Parameters* required
hex*string
Hex colour to fingerprint e.g. '#4A2A50'
ecommerce_copyGenerate 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 cop...5 params

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

Parameters* required
brand_namestring
Optional brand name to include in copydefault:
channelstring
Sales channel e.g. 'shopify', 'etsy', 'instagram', 'editorial'default: shopify
hex*string
Hex colour of the product e.g. '#4A2A50'
product_type*string
Product type e.g. 'velvet cushion', 'ceramic vase', 'linen throw', 'candle'
tonestring
Copy tone e.g. 'premium but not pompous', 'warm and accessible', 'heritage and serious'default: premium but not pompous
colour_hooksGenerate 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,...3 params

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

Parameters* required
audiencestring
Target audience e.g. 'general public', 'interior designers', 'children'default: general public
hex*string
Hex colour e.g. '#154F20'
tonestring
Desired tone e.g. 'dinner party', 'academic', 'social media', 'brand copy'default: dinner party
archive_provenanceExplains 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, docum...1 params

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, docum...

Parameters* required
colour_name*string
Name of the archive colour e.g. 'Love Idleness', 'Woad Vat Blue', 'Murex Luxury'
colour_forensicsAssess 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 n...5 params

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

Parameters* required
finishstring
Paint finish e.g. 'matt', 'eggshell', 'gloss', 'limewash'default: matt
hex*string
Hex colour to assess e.g. '#2A5498'
orientationstring
Room or surface orientation e.g. 'north-facing', 'south exterior', 'east bedroom'default:
substrate*string
Physical substrate e.g. 'lime plaster', 'gypsum board', 'brick', 'timber', 'canvas'
usestring
Specific use context e.g. 'heritage repair', 'new build interior', 'conservation project'default:
palette_iterateRefine 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 carrie...6 params

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

Parameters* required
directionstring
Alias for feedback — natural language direction e.g. more dangerous, more historical, warmerdefault:
feedback*string
Natural language refinement e.g. more melancholicdefault:
marketsarray
Target markets
n_resultsinteger
Number of variants to return (default 1)
palette*array
Current hex palette to refine
use_casestring
Use case context e.g. luxury homewares
colour_variantsFor 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 -...1 params

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

Parameters* required
name*string
Named archive colour e.g. Bourton Honey
palette_exportExport 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.4 params

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.

Parameters* required
formatstring
css | figma | ase_hex | tailwind | json
namesarray
Optional custom names
palette*array
Hex values to export
prefixstring
Token prefix e.g. cm, brand (default: cm)
palette_compareDeep 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, AS...4 params

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

Parameters* required
marketsarray
Target markets
palette_a*array
First palette hex values
palette_b*array
Second palette hex values
use_casestring
Context for comparison e.g. luxury packaging
ecommerce_namerGenerate 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 sc...5 params

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

Parameters* required
brand_namestring
Brand name for context
hexes*array
List of hex values e.g. ['#D4A829', '#1A5C6E']
max_dEnumber
Max dE2000 distance to accept (default 25)
product_categorystring
e.g. 'paint', 'candle', 'fashion', 'homeware'
stylestring
geographical | poetic | material | literary | mixed (default)
ui_statesGenerate 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, c...3 params

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, c...

Parameters* required
background_hexstring
Background hex (default #FFFFFF)
brand_hex*string
Brand colour hex e.g. '#D4A829'
dark_modeboolean
Generate for dark mode (default false)
colour_namerGenerate 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.5 params

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.

Parameters* required
hex*string
Hex colour to name e.g. #8B4A2A
marketstring
Target market e.g. UK luxury
n_namesinteger
Number of name options (default 5)
product_typestring
Product type e.g. candle, paint, leather bag
stylestring
geographical | poetic | material | literary | botanical | industrial | mixed
palette_swatchGenerate 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-interpolat...5 params

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

Parameters* required
hinteger
Output height in pixels (default 630)
hexes*string
Comma-separated hex values e.g. #d4a829,#1a5c6e,#0a0a0b
layoutstring
photo | 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 perceptu...
winteger
Output width in pixels (default 1200)
weightsstring
Comma-separated proportional weights from k-means extraction. Used only when layout=photo.
palette_analyseAnalyse 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...3 params

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

Parameters* required
archivestring
Optional: restrict to one archive e.g. China, Pigment, ArtsAndCrafts
colours*array
Array of colour objects
ninteger
Max alternatives per colour when confidence is low (1-3, default 1)
ingest_imageUpload an image to Colour Memory for ephemeral processing. Returns image_id valid 5 minutes. Pass image_id to palette_extract or extract_image_colours. Use for any image over 50 KB.3 params

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

Parameters* required
imageobject
MCP file reference {download_url, mime_type, file_name}
image_base64string
Base64-encoded image data. Use this for locally uploaded files with no public URL. No size limit here (unlike palette_extract's image_base64).
source_urlstring
HTTPS URL of the image
palette_extractExtract 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 n...8 params

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

Parameters* required
analyseboolean
If true, also run palette_analyse on the extracted colours and return archive names
archivestring
Explicit single archive name to restrict matching to e.g. 'MarsColour', 'Japan', 'Victorian'.
grey_card_hexstring
Hex value sampled from a grey or white card in the image for white balance correction e.g. #C8C8C8
image_base64string
Base64-encoded image data (small images only, under 50 KB)
image_idstring
Ephemeral image_id from ingest_image (preferred for images over 50 KB)
image_urlstring
Public URL of the image to extract colours from
kinteger
Number of colours to extract (3-12, default 6)
style_contextstring
Plain 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 f...
image_briefCompound 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, fashi...8 params

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, fashi...

Parameters* required
archivestring
Explicit archive name override e.g. 'MarsColour', 'Japan'
grey_card_hexstring
Hex value from a grey/white card for white balance correction
image_base64string
Base64-encoded image data
image_urlstring
Public URL of the image
kinteger
Number of colours to extract (3-12, default 6)
modelstring
Image model: midjourney | flux | dalle | stable_diffusion (default midjourney)
product_typestring
Product focus e.g. 'tea towel', 'wallpaper', 'ceramic', 'textile'
style_contextstring
Plain English style e.g. 'English cottage garden', 'Victorian', 'Japanese', 'MarsColour'. Restricts archive matching to coherent cultural set.
project_getRetrieve 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. Do...2 params

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

Parameters* required
project_id*string
The project_id returned by house_specify for an authenticated (keyed) call.
versioninteger
Specific version number to describe. Omit for the project's current version.
project_listList 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.5 params

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.

Parameters* required
cursorstring
Opaque pagination cursor -- pass the previous response's next_cursor to get the next page.
include_deletedboolean
Include soft-deleted projects (still owner-scoped). Default false.default: false
limitinteger
Max projects to return, default 50, capped at 200.default: 50
project_typestring
Filter by project type, e.g. 'house'. Omit for all types.
updated_sincestring
ISO 8601 timestamp -- only return projects updated after this time.
project_versionsList 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_versio...1 params

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

Parameters* required
project_id*string
The project_id returned by house_specify for an authenticated (keyed) call.
project_deleteSoft-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 p...1 params

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

Parameters* required
project_id*string
The project_id returned by house_specify for an authenticated (keyed) call.
project_exportExport 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_ref or project_i...6 params

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_ref or project_i...

Parameters* required
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.one of url · base64default: url
format*string
Which editable format to produce.one of docx · xlsx
houseobject
DO NOT USE -- an inline house object is refused (400 INLINE_HOUSE_NOT_ALLOWED). Pass house_ref (returned by house_specify) or project_id instead.
house_refstring
The house_ref string house_specify returns. For a durable (authenticated) project this also requires the same API key that created it.
project_idstring
The project_id returned by house_specify for an authenticated (keyed) call. Requires the same API key that created the project.
project_versioninteger
Used 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.

Sponsors

Readme

Details

Repository
github.com/digbyo/colour-memory-api
Website
www.colourmemory.com
Category
AI & LLM Tools
Transport
HTTP
Auth
Required
Registry
MCP registry, active
Resources
2
Tools verified
Nov 6, 2026

Related AI & LLM Tools MCP servers

View all
1hatgit avatarForex-GPT MCP Serverio.github.hatgit/forex-gpt-mcpAI-powered forex and crypto trading analysis with real-time data across 127+ instruments.0stars
2jacobsd32-cpu avatarDjd Agent Scorejacobsd32-cpu/djd-agent-score-mcpReputation scoring for AI agent wallets on Base. Trust scores, fraud checks, x402.0stars
3lazymac2x avatarAgent Loop Detectorlazymac2x/agent-loop-detector-apiCloudflare Workers MCP server: agent-loop-detector0stars
4lazymac2x avatarAgent Trace Auditorlazymac2x/agent-trace-auditor-apiCloudflare Workers MCP server: agent-trace-auditor0stars
5lazymac2x avatarAgent Workflow Enginelazymac2x/agent-workflow-engine-apiCloudflare Workers MCP server: agent-workflow-engine0stars
6lazymac2x avatarAi Agent Scratchpadlazymac2x/ai-agent-scratchpad-apiCloudflare Workers MCP server: ai-agent-scratchpad0stars