Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
DigbyO avatar

Colour Memory

  • DigbyO/colour-memory-api

Cultural color intelligence.

About

Cultural color intelligence. Every colour anchored to a person, a year, and a consequence. Cultural color intelligence. Every colour anchored to a person, a year, and a consequence. "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", "url": "https://colour-memory-api-production.up.railway.app/mcp", "url": "https://github.com/DigbyO/colour-memory-api", "description": "Cultural color intelligence. Every colour anchored to a person, a year, and a consequence."

  • Cultural color intelligence. Every colour anchored to a person, a year, and a consequence.
  • "name": "io.github.DigbyO/colour-memory",
  • "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  • "url": "https://colour-memory-api-production.up.railway.app/mcp",
  • "url": "https://github.com/DigbyO/colour-memory-api",

Colour Memory by the numbers

  • Exposes 67 verified tools (MCP introspection)
  • Data as of Jul 9, 2026 (Skillselion catalog sync)
terminal
claude mcp add --transport http colour-memory https://colour-memory-api-production.up.railway.app/mcp

Add your badge

Show developers this MCP server is listed on Skillselion. Paste this into your README.

Listed on Skillselion
TransportHTTP
AuthNone
Tools67
RepositoryDigbyO/colour-memory-api

How do agents access io.github.DigbyO/colour-memory capabilities without custom integration code?

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

Who is it for?

Developers wiring io.github.DigbyO/colour-memory into Cursor, Claude Desktop, or other MCP clients.

Skip if: Teams that need features outside the documented io.github.DigbyO/colour-memory tool surface.

What you get

Configured MCP host can call io.github.DigbyO/colour-memory tools with schemas from the server README.

  • Remote Colour Memory MCP configured in your agent
  • Agent-retrieved color recommendations with person-year-consequence framing

By the numbers

  • Server version 2.0.0
  • 1 streamable-http remote on Railway
  • GitHub repository DigbyO/colour-memory-api
At a glance

Colour Memory capabilities & compatibility

Capabilities
cultural color intelligence. every colour anchor · "name": "io.github.digbyo/colour memory", · "$schema": "https://static.modelcontextprotocol. · "url": "https://colour memory api production.up.
Use cases
api development · orchestration
Runs
Local or remote
Pricing
Bring your own API key
From the docs

What Colour Memory says it does

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

Tools 67

Public tool metadata - what this server can do for an agent.

query_conceptual3 params

Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'grief', 'Ottoman luxury', 'toxic Victorian pigments', or 'the sea at dusk'.

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

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

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

Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names.

  • coloursarrayrequiredList of 2-8 hex values
  • room_typestringe.g. 'living', 'bedroom', 'kitchen', 'study'
  • stylestringe.g. 'heritage', 'contemporary', 'minimal'
colour_metrics1 param

Return perceptual colour metrics: LRV, chroma, hue angle, warmth classification, and illuminant shifts under D65 (6500K), F11 (4000K), and Illuminant A (3000K).

  • hex_valstringrequiredHex value e.g. '#8B4513'
colour_harmonies2 params

Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours.

  • hexstringrequiredHex value e.g. '#3A5C8C'
  • harmony_typesarrayHarmony types to include
accessibility_check2 params

Return WCAG 2.1 contrast ratios and AA/AAA pass/fail grades for a foreground hex against a background.

  • hex_valstringrequiredForeground hex value
  • backgroundstringBackground hex (default 'FFFFFF')
accessibility_matrix1 param

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.

  • palettearrayrequiredArray of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B']
accessibility_rules1 param

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.

  • palettearrayrequiredArray of hex values
colour_slugs2 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.

  • hexstringrequiredHex value e.g. #D4A829
  • archivestringOptional archive filter
palette_light_dark2 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.

  • palettearrayrequiredArray of hex values
  • use_casestringUse case context e.g. UI, dashboard, report
accessibility_font2 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.

  • backgroundstringrequiredBackground hex value
  • palettearrayrequiredCandidate foreground hex values
archive_search7 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.

  • querystringrequiredSearch term e.g. cerulean, Prussian, Ottoman, ochre, medieval
  • archivestringOptional archive filter e.g. oxfordshire, japan, pigment, keats, eic, racingsilks
  • n_resultsintegerNumber of results (default 10, max 50)
  • include_fullbooleanReturn complete notes and source fields. Default false returns 150-char snippets. Set true for report workflows.
  • limitintegerAlias for n_results
  • year_fromintegerBoost entries on or after this year e.g. 1400 for Renaissance, 1837 for Victorian
  • year_tointegerBoost entries on or before this year e.g. 1600 for Renaissance, 1901 for Victorian
colour_combination2 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.

  • coloursarrayrequired2-5 hex values to assess as a combination
  • contextstringUsage context: UI | data viz | fashion | interior | print | branding
palette_strict5 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 specificity matters.

  • conceptstringrequiredCultural concept e.g. Japanese wabi-sabi
  • allowed_archivesarrayArchive names to restrict results e.g. ['Japan', 'China']
  • n_coloursintegerNumber of colours (default 5)
  • min_relevancenumberMinimum relevance score 0-1 (default 0.3)
  • include_neutralsbooleanInclude neutral tones (default true)
palette_pdf3 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. Pass the entries array from query_hex or palette_from_concept directly. Use this to create client deliverables, specification sheets, and print assets.

  • entriesarrayrequiredArray of colour entries from query_hex or palette_concept. Each needs name, hex, archive_source, colour_notes, primary_source, zone.
  • querystringOptional title for the palette e.g. Ottoman imperial luxury
  • sourcestringOptional source label e.g. brand, conceptual
palette_audit4 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 cost.

  • palettearrayrequiredHex values to audit
  • use_casestringUse case context
  • marketstringTarget market
  • mediumstringdigital | print | both
brand_system5 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.

  • palettearrayrequiredHex values
  • marketstringTarget market e.g. global, UK, Japan
  • use_casestringUse case e.g. brand identity, packaging
  • mediumstringdigital | print | both
  • brand_categorystringOptional e.g. developer tool, luxury, food
brand_asset_pack5 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.

  • palettearrayrequiredHex values
  • marketstringTarget market
  • use_casestringUse case
  • mediumstringdigital | print | both
  • brand_categorystringOptional brand name or category
accessibility_simulate1 param

Return simulated hex values for protanopia, deuteranopia, and tritanopia using the Brettel-Vienot-Mollon model.

  • hex_valstringrequiredHex value e.g. '#BE0032'
colour_match_paint3 params

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

  • hex_valstringrequiredHex value e.g. '#003153'
  • brandstringOptional brand filter: 'farrow' or 'little_greene'
  • nintegerNumber of matches (default 3)
colour_card2 params

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

  • 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_capabilities

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.

archive_status

Return live archive status: total colour count, per-archive breakdown, embedding model, search engine state, and API version.

colour_story2 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. Example: '#DC143C' returns the story of crimson from Byzantine imperial courts through Tudor England to modern sport.

  • hexstringrequiredHex value e.g. '#DC143C'
  • n_archivesintegerNumber of archive sources to draw from (default 5)
palette_concept4 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 kente', 'Renaissance Florence'. Every colour returned is sourced from the archive with documented history.

  • conceptstringrequiredCultural 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
  • avoidarrayColours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection.
colour_mix3 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 Prussian Blue and Yellow Ochre gives a muted green — the tool identifies which archive colour that green most closely matches.

  • hex_astringrequiredFirst colour hex e.g. '#003366'
  • hex_bstringrequiredSecond colour hex e.g. '#C8A600'
  • rationumberMix ratio 0.0-1.0 where 0.5 is equal parts (default 0.5)
colour_timeline2 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, 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.

  • conceptstringrequiredColour name or concept to trace e.g. indigo, imperial purple, mourning black
  • nintegerNumber of timeline entries to return (default 10, max 20)
image_palette4 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 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 only.

  • image_base64stringrequiredBase64 encoded image (JPEG, PNG, WebP)
  • media_typestringImage MIME type e.g. 'image/jpeg'
  • n_coloursintegerNumber of dominant colours to extract (default 5, max 5)
  • archivestringOptional: restrict archive matching to a specific archive
colour_compare2 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, 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.

  • hex_astringrequiredFirst colour hex e.g. '#003366'
  • hex_bstringrequiredSecond colour hex e.g. '#1877F2'
colour_cultural_risk3 params

Score a hex value or palette for cultural sensitivity, symbolic weight, regional taboos, religious associations, and potential misinterpretation across global markets. Returns warnings, positive associations, and context-dependent readings per colour family, with specific market flags. Use before deploying a colour in a global brand, product, or campaign context. Based on documented cultural colour associations, not generalisation.

  • hexstringSingle hex value to assess e.g. '#FF9900'
  • palettearrayOptional list of hex values to assess as a palette
  • marketsarrayOptional market focus e.g. ['China', 'Middle East', 'India']
design_session7 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 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 single call. Not for iterative refinement — use individual tools for that.

  • conceptstringrequiredCultural theme, mood, or brief e.g. 'Victorian mourning', 'Ottoman court', 'Scandinavian minimal'
  • mediumstringApplication context e.g. 'interior', 'brand identity', 'fashion', 'digital', 'print'
  • n_coloursintegerPalette size (default 5, max 8)
  • include_accessibilitybooleanInclude WCAG contrast check (default true)
  • include_paint_matchesbooleanInclude commercial paint matches (default true)
  • include_promptbooleanInclude image generation prompt (default true)
  • avoidarrayArchive names or colour terms to exclude e.g. ['neon', 'ScreenDigital']
image_personal4 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 suit you — each with full historical provenance and cultural context — plus colours to avoid. Uses Claude Vision for skin, hair, and eye analysis, then matches to the archive by CIEDE2000 perceptual distance. The photo is never stored. Example: a Deep Winter might wear Ottoman Carbon Ink while a True Spring suits Kogi Mango.

  • image_base64stringBase64 encoded portrait photo (JPEG or PNG). Face should be clearly visible in natural light. Either image_base64 or image_url required.
  • image_urlstringURL of a portrait photo hosted online. Easier than base64 for MCP use. Either image_url or image_base64 required.
  • media_typestringImage MIME type e.g. 'image/jpeg'
  • namestringOptional: person's name for the report e.g. 'Sarah'
style_match3 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. Every recommendation is backed by archive colour names and historical context — not generic colour theory, but documented cultural combinations. Also suggests one missing archive colour that would complete the look. Examples: 'I have a navy dress (#1C3A6E) and a tan bag (#C8A87A) — what shoes?' or 'Does this burgundy coat work with olive trousers?'

  • itemsarrayrequiredList of outfit items with label and hex colour
  • occasionstringOptional: occasion context e.g. 'daytime', 'evening', 'office', 'casual', 'wedding guest'
  • askstringOptional: specific question e.g. 'what bag colour works?' or 'do the shoes work?'
interior_specify6 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 Little Greene paint matches, three-illuminant light behaviour (D65 daylight, F11 atrium, Illuminant A incandescent), WCAG accessibility for digital use, and a written cultural rationale explaining why each colour belongs in this room. Examples: 'bold maximalist living room', 'calm Scandi bedroom', 'Victorian study', 'coastal kitchen', 'gallery hallway'. Use /interior-specification/pdf for a downloadable branded PDF version. This is the tool that replaces a colour consultation.

  • conceptstringrequiredRoom concept or brief e.g. 'bold maximalist living room' or 'calm Scandi bedroom'
  • room_typestringRoom type e.g. 'living', 'bedroom', 'kitchen', 'study', 'bathroom', 'hallway', 'dining'
  • stylestringStyle direction e.g. 'heritage', 'contemporary', 'maximalist', 'minimal', 'scandi', 'industrial', 'coastal'
  • orientationstringRoom orientation e.g. 'north', 'south', 'east', 'west' — affects light advice
  • n_coloursintegerNumber of colours in scheme (default 5, max 7)
  • avoidarrayColours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection.
palette_generate3 params

Send a palette of up to 8 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.

  • slotsarrayrequiredList of palette slots. Each has index (0-7), optional hex, and locked flag.
  • archivestringOptional: restrict fills to one archive e.g. 'Oxfordshire', 'Shakespeare', 'Japan'
  • sizeintegerTotal palette size 2-8 (default 5)
palette_gradient6 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 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.

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

  • palettearrayrequiredList of hex values to translate e.g. ['#F5F0E8', '#8B6B3D']
  • target_archivestringrequiredArchive to translate into e.g. 'Shakespeare', 'Japan', 'Oxfordshire'
  • max_delta_enumberMax acceptable CIEDE2000 distance — above this is flagged out-of-threshold (default 40)
archive_cliche3 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 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, content, and brand storytelling.

  • conceptstringrequiredColour concept to subvert e.g. 'love', 'grief', 'luxury', 'betrayal', 'power'
  • expected_colourstringOptional: the cliche colour to contradict e.g. 'red', '#FF0000'. Hex or colour name.
  • n_resultsintegerNumber of archive entries to search (default 8)
colour_verdict5 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 cultural intelligence. Examples: 'luxury hotel brand in Japan', 'ecommerce CTA button UK', 'heritage interior lime plaster wall', 'premium packaging Middle East'.

  • hexstringrequiredHex colour to evaluate e.g. '#31559B'
  • use_casestringrequiredWhat the colour will be used for e.g. 'luxury hotel brand', 'heritage interior wall'
  • marketsarrayTarget markets e.g. ['UK', 'Japan', 'UAE']
  • mediumstringApplication medium e.g. 'digital', 'interior', 'print', 'fashion', 'packaging'
  • audiencestringOptional: target audience e.g. 'high net worth travellers', 'young professionals'
palette_verdict4 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 matched to the nearest archive entry for cultural grounding. Examples: 'premium cushion collection UK ecommerce', 'hotel lobby interior', 'SaaS brand identity global digital'.

  • palettearrayrequiredList of 2-8 hex values e.g. ['#31559B', '#E8D898', '#4A2A50']
  • use_casestringrequiredWhat the palette will be used for e.g. 'luxury cushion collection', 'brand identity'
  • marketstringOptional: target market e.g. 'UK', 'Japan', 'global'
  • mediumstringApplication medium e.g. 'interior', 'digital', 'fashion', 'print'
agent_brief8 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 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 Colour Memory the colour layer for other AI systems.

  • taskstringrequiredWhat the other AI needs to generate e.g. 'luxury hotel bedroom image'
  • conceptstringrequiredColour concept to draw from e.g. 'Ottoman winter luxury', 'Victorian mourning'
  • palette_sizeintegerNumber of archive colours to include (default 5, max 8)
  • modelstringTarget model: midjourney, flux, dalle, stable_diffusion
  • style_notesstringOptional: additional style direction e.g. 'matte surfaces only', 'no gold'
  • locked_palettearrayOptional: list of hex values to use exclusively. When provided, no archive query is run — these exact colours are used. Prevents palette drift.
  • archivestringOptional: restrict palette query to this archive e.g. georgianpleasures, japan, china
  • allowed_archivesarrayOptional: list of allowed archive names. Query restricted to these archives only.
colour_strategy5 params

The flagship commercial endpoint. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hooks, and usage rules in a single call. 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_with), copy hooks (one_liner, social, brand_rationale), and alternatives. Examples: luxury fragrance brand UK/France/Japan, heritage interior specification, premium ecommerce packaging, SaaS brand identity.

  • hexstringrequiredHex colour to evaluate e.g. '#4A2A50'
  • brand_contextobjectBrand context object
  • constraintsobjectConstraints object
  • marketsarrayTarget markets e.g. ['UK', 'France', 'Japan']
  • mediumstringPrimary medium e.g. 'packaging', 'interior', 'digital'
archive_report_brief7 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, 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 Claude calls total. This is the endpoint for building premium archive documents, PDFs, briefs, and editorial content. Use this first for any document workflow.

  • titlestringDocument title e.g. 'The Colours of Georgian Power'
  • audiencestringTarget audience e.g. 'serious Georgian collector'
  • themesarrayrequiredResearch themes e.g. ['racing silks', 'EIC trade', 'Keats']
  • archivesarrayArchives to search e.g. ['RacingSilks', 'EIC', 'Keats', 'Dickens']
  • avoidarrayTopics to suppress e.g. ['arsenic wallpaper', 'Wedgwood blue']
  • n_coloursintegerNumber of colours to return (default 8, max 16)
  • strict_sourcesbooleanOnly return entries with named primary sources (default true)
palette_heritage5 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 roles, confidence scores, CSS tokens, and production notes. Every addition has a named historical origin.

  • palettearrayrequiredExisting hex values
  • brand_namestringBrand name for CSS tokens
  • contextstringBrand context
  • marketstringTarget market
  • n_additionsintegerArchive colours to add (default 3)
archive_coverage_gap2 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 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 the brief.

  • themesarrayrequiredThemes to check e.g. ['opium', 'gin', 'gambling', 'racing']
  • archivesarrayOptional archives to search e.g. ['EIC', 'Dickens']
archive_cultural_anachronism4 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 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_phrasing for each entry.

  • entriesarrayrequiredColour entries to check
  • target_periodstringPeriod description e.g. 'Georgian England 1714-1830'
  • period_startintegerStart year e.g. 1714
  • period_endintegerEnd year e.g. 1830
session_brief12 params

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

  • titlestringBrief title e.g. 'The Colours of Pleasure'
  • audiencestringTarget audience e.g. 'serious collector'
  • themesarrayrequiredResearch themes
  • archivesarrayArchives to draw from
  • avoidarrayThemes to suppress
  • n_coloursintegerNumber of colour cards (default 8)
  • target_periodstringHistorical period e.g. 'Georgian England 1714-1830'
  • period_startintegerStart year e.g. 1714
  • period_endintegerEnd year e.g. 1830
  • strict_sourcesbooleanOnly include entries with named primary sources
  • confidence_thresholdnumberMin confidence 0-1 (default 0.6)
  • tonestringforensic | editorial | clinical | narrative
index_resonance2 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 deterrence, flag as authority). 0.50 = symbolic or associative only. Input: list of colour entries with name, hex, archive, source, notes. Output: resonance score, material origin, social function, alignment reason, confidence. Use for investigative reports, forensic briefs, museum content, editorial PDFs. This is the metric that separates Colour Memory from palette generators.

  • entriesarrayrequiredList of colour entries to score for resonance
  • score_basisstringScoring basis (default: material_origin_to_social_consequence)
archive_evidence_gap4 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 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 needed, and safe wording for the agent to use. Essential for museum, documentary, editorial, legal, and forensic workflows.

  • hexstringrequiredHex colour to analyse e.g. '#4A535C'
  • proposed_claimstringrequiredWhat you want to say about this colour e.g. 'cyanosis in a death chamber'
  • archivestringOptional archive to search e.g. 'DarkHistory'
  • n_candidatesintegerNumber of archive candidates to return (default 5)
brand_collision6 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 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 competitor palette analysis.

  • brand_hexstringrequiredBrand 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
  • marketstringMarket context e.g. 'UK luxury food retail'
  • regionstringRegion code e.g. 'GB', 'UAE', 'JP'
brand_report7 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 copy, memory hooks, Instagram caption, and Midjourney/Flux/DALLE agent brief. Runs entirely internally -- no chained calls, cannot be blocked by agent safety filters. Use this instead of chaining colour_strategy + cliche_breaker + ecommerce_product_copy + memory_hooks + agent_brief separately. Two Claude calls total. One complete response.

  • hexstringrequiredHero hex colour e.g. '#4A2A50'
  • brand_contextobjectBrand context: category, positioning, audience, channels
  • marketsarrayTarget markets e.g. ['UK', 'France', 'Japan']
  • mediumstringMedium e.g. 'packaging', 'digital', 'interior'
  • conceptstringOptional concept to search for cliche contradiction e.g. 'luxury', 'eco', 'wellness'
  • product_typestringProduct type for copy e.g. 'velvet cushion', 'fragrance', 'cleaning spray'
  • target_modelstringImage model for agent brief e.g. 'midjourney', 'flux', 'dalle'
brand_audit5 params

Complete brand colour intelligence audit in one call. Accepts a palette array plus market, use_case, medium, and brand_category. Returns: colour roles with archive names, full WCAG accessibility matrix, cultural risk per colour, palette verdict with score and suggested addition, CSS variables, Tailwind config, and production notes. All computed data -- no LLM cost. Pass results to an LLM for written narrative. Replaces chaining accessibility_matrix + cultural_risk_assessment + palette_verdict separately.

  • palettearrayrequiredArray of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B']
  • marketstringTarget market e.g. 'UK luxury', 'global', 'Japan'
  • use_casestringUse case e.g. 'brand identity', 'packaging', 'app UI'
  • mediumstringdigital | print | both
  • brand_categorystringOptional brand category e.g. 'developer tool', 'food', 'fashion'
agent_verify3 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 (accurate/acceptable/drifted/ignored), and an overall verdict. Use after agent_brief + image generation to close the colour loop.

  • target_palettearrayrequiredHex values from agent_brief colour_tokens e.g. ['#ED9921', '#E29937']
  • image_urlstringURL of the generated image
  • image_base64stringBase64 encoded generated image
colour_passport4 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, 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 data. Replaces chaining colour_dna + archive_provenance + colour_cultural_risk + colour_metrics separately.

  • hexstringrequiredHex colour e.g. #31559B
  • include_physicsbooleanInclude illuminant behaviour and gamut data (default true)
  • include_culturalbooleanInclude cultural risk and associations (default true)
  • n_archiveintegerNumber of archive matches to return (default 3)
colour_dna1 param

Compact semantic fingerprint for any hex colour. Returns depth (very_dark to very_light), temperature (warm/cool), chroma band (neutral/muted/moderate/saturated), LRV, hue angle, zone, commercial signal, risk summary, best mediums, and avoid mediums. Backed by nearest archive match with delta-e and notes excerpt. No Claude call -- pure archive and physics data. Fast and cacheable. Use when an agent needs to reason about a colour semantically without reading long prose. Ideal for filtering, ranking, or comparing colours.

  • hexstringrequiredHex colour to fingerprint e.g. '#4A2A50'
ecommerce_copy5 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 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 in Standlake Silt. Directly useful for Shopify, WooCommerce, and editorial product pages.

  • hexstringrequiredHex colour of the product e.g. '#4A2A50'
  • product_typestringrequiredProduct type e.g. 'velvet cushion', 'ceramic vase', 'linen throw', 'candle'
  • 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
archive_audit1 param

Run a data quality audit on any named archive. Returns entry count, health score 0-100, grade A-D, and issue counts for: empty colour_notes, empty primary_source, weak notes, duplicate names, duplicate hex values, and malformed hex codes. Also returns the first 20 affected colour names per issue type and a prioritised fix list. No Claude call — pure archive data analysis. Use before building new archive content to establish a baseline, or after a batch import to verify data quality.

  • archivestringrequiredArchive name to audit e.g. 'British', 'Tingry', 'Byzantine'
colour_hooks3 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, social media, brand copy). Use to make archive colours shareable, to generate content, or to power a public-facing colour chat experience.

  • hexstringrequiredHex colour e.g. '#154F20'
  • audiencestringTarget audience e.g. 'general public', 'interior designers', 'children'
  • tonestringDesired tone e.g. 'dinner party', 'academic', 'social media', 'brand copy'
archive_provenance1 param

Explain the provenance of any named archive colour with explicit separation of: documented historical fact, computational hex derivation, and cultural interpretation. Returns: claim, evidence type, source specificity, confidence, what is documented, what is inferred, what is interpretive, hex status, and citation format. This is the trust endpoint. It answers 'how do you know this?' Essential for any use case requiring intellectual honesty about colour data provenance.

  • colour_namestringrequiredName of the archive colour e.g. 'Love Idleness', 'Woad Vat Blue', 'Murex Luxury'
colour_forensics5 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 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 ochre on historic brick.

  • hexstringrequiredHex colour to assess e.g. '#2A5498'
  • substratestringrequiredPhysical substrate e.g. 'lime plaster', 'gypsum board', 'brick', 'timber', 'canvas'
  • finishstringPaint finish e.g. 'matt', 'eggshell', 'gloss', 'limewash'
  • orientationstringRoom or surface orientation e.g. 'north-facing', 'south exterior', 'east bedroom'
  • usestringSpecific use context e.g. 'heritage repair', 'new build interior', 'conservation project'
palette_iterate6 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.

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

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.

  • namestringrequiredNamed archive colour e.g. Bourton Honey
palette_export4 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.

  • palettearrayrequiredHex values to export
  • formatstringcss | figma | ase_hex | tailwind | json
  • namesarrayOptional custom names
  • prefixstringToken prefix e.g. cm, brand (default: cm)
palette_compare4 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.

  • palette_aarrayrequiredFirst palette hex values
  • palette_barrayrequiredSecond palette hex values
  • use_casestringContext for comparison e.g. luxury packaging
  • marketsarrayTarget markets
ecommerce_namer5 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 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. Style options: geographical, poetic, material, literary, mixed.

  • hexesarrayrequiredList of hex values e.g. ['#D4A829', '#1A5C6E']
  • product_categorystringe.g. 'paint', 'candle', 'fashion', 'homeware'
  • brand_namestringBrand name for context
  • stylestringgeographical | poetic | material | literary | mixed (default)
  • max_dEnumberMax dE2000 distance to accept (default 25)
ui_states3 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, 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.

  • brand_hexstringrequiredBrand colour hex e.g. '#D4A829'
  • background_hexstringBackground hex (default #FFFFFF)
  • dark_modebooleanGenerate for dark mode (default false)
colour_namer5 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.

  • hexstringrequiredHex colour to name e.g. #8B4A2A
  • stylestringgeographical | poetic | material | literary | botanical | industrial | mixed
  • marketstringTarget market e.g. UK luxury
  • product_typestringProduct type e.g. candle, paint, leather bag
  • n_namesintegerNumber of name options (default 5)

Recommended MCP Servers

How it compares

Cultural color reference MCP, not a CSS framework or Figma file sync integration.

FAQ

What does io.github.DigbyO/colour-memory do?

Cultural color intelligence.

When should I use io.github.DigbyO/colour-memory?

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

Is io.github.DigbyO/colour-memory safe to install?

Review the Security Audits panel on this page before installing in production.

Developer Toolsintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.