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

Colour Memory

REMOTE · COLOUR-MEMORY-API-PRODUCTION.UP.RAILWAY.APP · SCANNED AUG 3

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

+8 this week 76 Trust /100
Trust breakdown (6 categories)

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

Endpoint Security83
Transport & Reachability100
Schema Quality & AI Usability69
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 12799 tokens (~180/item across 71 items; 71 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

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

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

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

Changelog

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

  • 3 Aug 26 0
    • Tool “palette_pdf” rewrote its description, which is the text the model reads security
    • Tool “agent_brief” rewrote its description, which is the text the model reads security
    • “palette_pdf” added an optional parameter “delivery” cosmetic
    • “archive_report_brief” added an optional parameter “max_family_card_share” cosmetic
    • “archive_report_brief” added an optional parameter “output_format” cosmetic
    • “archive_report_brief” added an optional parameter “period_end” cosmetic
    • “archive_report_brief” added an optional parameter “period_start” cosmetic
    • “agent_brief” added an optional parameter “avoid” cosmetic
    • “agent_brief” added an optional parameter “minimum_claim_strength” cosmetic
    • “archive_report_brief” added an optional parameter “allow_partial” cosmetic
    • “archive_report_brief” added an optional parameter “confidence_threshold” cosmetic
    • “archive_report_brief” added an optional parameter “family_card_mode” cosmetic
    • “palette_pdf” reworded the description of “entries” cosmetic
    • “agent_brief” reworded the description of “concept” cosmetic
    • “agent_brief” reworded the description of “locked_palette” cosmetic
  • 2 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +5
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 28 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 67

    First indexed and scored.

Diagnostics

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

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

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

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

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

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

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

Result Challenged, unverified
Enforced On tool calls
HTTP status 200

Protected resource metadata

Retrieved No
Problem no_resource_metadata
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://colour-memory-api-production.up.railway.app/mcp Verified 200
http (plaintext) http://colour-memory-api-production.up.railway.app/mcp HTTPS enforced 301 https://colour-memory-api-production.up.railway.app/mcp
MCP tools — 71 exposed · ~12,799 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
accessibility_check ~64

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.

NameTypeReqDescription
backgroundstringBackground hex (default 'FFFFFF')
hex_valstringyesForeground hex value

Structured output declared, but exposes no named fields.

No examples provided.

accessibility_font ~65

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.

NameTypeReqDescription
backgroundstringyesBackground hex value
palettearrayyesCandidate foreground hex values

Structured output declared, but exposes no named fields.

No examples provided.

accessibility_matrix ~99

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.

NameTypeReqDescription
palettearrayyesArray of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B']

Structured output declared, but exposes no named fields.

No examples provided.

accessibility_rules ~68

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.

NameTypeReqDescription
palettearrayyesArray of hex values

Structured output declared, but exposes no named fields.

No examples provided.

accessibility_simulate ~56

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

NameTypeReqDescription
hex_valstringyesHex value e.g. '#BE0032'

Structured output declared, but exposes no named fields.

No examples provided.

agent_brief ~610

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. Archive-grounded retrieval is evidence-filtered: entries with claim_role='reject' (no primary source and no period connection), stub entries, blank-source entries, and entries below minimum_claim_strength are never selected. If fewer than palette_size colours pass these filters, the call returns an honest incomplete result (ok:false, error_code:INSUFFICIENT_EVIDENCE_ELIGIBLE_PALETTE) rather than padding the palette with rejected or weak evidence. Negative constraints (from 'avoid' or negation phrases in concept like 'must never', 'without', 'not') are also applied to retrieval, not just flagged afterward -- a brief that says a wedding must never feel funereal will not surface mourning-themed colours in the first place. locked_palette calls skip evidence filtering entirely since the caller is supplying colours directly, not requesting archive evidence.

NameTypeReqDescription
allowed_archivesarrayOptional: list of allowed archive names. Query restricted to these archives only.
archivestringOptional: restrict palette query to this archive e.g. georgianpleasures, japan, china
avoidarrayOptional: terms/associations to keep out of retrieval e.g. ['mourning', 'funeral black']. Affects retrieval directly, not just post-hoc flagging.
conceptstringyesColour 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_palettearrayOptional: list of hex values to use exclusively. When provided, no archive query is run and no evidence filtering applies — these exact colours are used as-is. Prevents palette drift.
minimum_claim_strengthstringEvidence-grade floor for archive-grounded retrieval (default 'C'). Grade controls documentary strength; claim_role='reject' entries are excluded regardless of how low this is set. Not applied to lock…
modelstringTarget model: midjourney, flux, dalle, stable_diffusion
palette_sizeintegerNumber of archive colours to include (default 5, max 8)
style_notesstringOptional: additional style direction e.g. 'matte surfaces only', 'no gold'
taskstringyesWhat the other AI needs to generate e.g. 'luxury hotel bedroom image'

Structured output declared, but exposes no named fields.

No examples provided.

agent_verify ~154

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.

NameTypeReqDescription
image_base64stringBase64 encoded generated image
image_urlstringURL of the generated image
target_palettearrayyesHex values from agent_brief colour_tokens e.g. ['#ED9921', '#E29937']

Structured output declared, but exposes no named fields.

No examples provided.

archive_cliche ~210

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.

NameTypeReqDescription
conceptstringyesColour 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)

Structured output declared, but exposes no named fields.

No examples provided.

archive_coverage_gap ~163

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.

NameTypeReqDescription
archivesarrayOptional archives to search e.g. ['EIC', 'Dickens']
themesarrayyesThemes to check e.g. ['opium', 'gin', 'gambling', 'racing']

Structured output declared, but exposes no named fields.

No examples provided.

archive_cultural_anachronism ~199

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.

NameTypeReqDescription
entriesarrayyesColour entries to check
period_endintegerEnd year e.g. 1830
period_startintegerStart year e.g. 1714
target_periodstringPeriod description e.g. 'Georgian England 1714-1830'

Structured output declared, but exposes no named fields.

No examples provided.

archive_evidence_gap ~220

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.

NameTypeReqDescription
archivestringOptional archive to search e.g. 'DarkHistory'
hexstringyesHex colour to analyse e.g. '#4A535C'
n_candidatesintegerNumber of archive candidates to return (default 5)
proposed_claimstringyesWhat you want to say about this colour e.g. 'cyanosis in a death chamber'

Structured output declared, but exposes no named fields.

No examples provided.

archive_provenance ~115

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

NameTypeReqDescription
colour_namestringyesName of the archive colour e.g. 'Love Idleness', 'Woad Vat Blue', 'Murex Luxury'

Structured output declared, but exposes no named fields.

No examples provided.

archive_report_brief ~657

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.

NameTypeReqDescription
allow_partialbooleanIf false (default), returning fewer cards than requested sets ok=false with error_code INSUFFICIENT_PALETTE_RESULTS instead of a silent short 'success'. Set true to accept a short result.
archivesarrayArchives to search e.g. ['RacingSilks', 'EIC', 'Keats', 'Dickens']
audiencestringTarget audience e.g. 'serious Georgian collector'
avoidarrayTopics to suppress e.g. ['arsenic wallpaper', 'Wedgwood blue']
confidence_thresholdnumberMinimum confidence score (0.0-1.0) for an entry to be included. Default 0.5 filters out weakly-matched stubs.
family_card_modestringHow near-identical cultivars/records are presented. 'auto' (default): current behaviour, groups into family cards above the standard ΔE threshold. 'always': widens the clustering threshold so more ne…
max_family_card_sharenumberConservative 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_strengthstringHard evidence-grade floor: A, B, C, D, or E. Never silently relaxed.
n_coloursintegerNumber of colours to return (default 8, max 16)
output_formatstringReserved for future use -- currently accepted but has no effect on the response shape (the endpoint always returns the full report).
period_endintegerHard period gate: exclude entries dated after this year. Default 9999 (no upper bound).
period_startintegerHard period gate: exclude entries dated before this year. Default 0 (no lower bound).
strict_sourcesbooleanOnly return entries with named primary sources (default true)
themesarrayyesResearch themes e.g. ['racing silks', 'EIC trade', 'Keats']
titlestringDocument title e.g. 'The Colours of Georgian Power'

Structured output declared, but exposes no named fields.

No examples provided.

archive_search ~219

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.

NameTypeReqDescription
archivestringOptional archive filter e.g. oxfordshire, japan, pigment, keats, eic, racingsilks
include_fullbooleanReturn complete notes and source fields. Default false returns 150-char snippets. Set true for report workflows.
limitintegerAlias for n_results
n_resultsintegerNumber of results (default 10, max 50)
querystringyesSearch term e.g. cerulean, Prussian, Ottoman, ochre, medieval
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

Structured output declared, but exposes no named fields.

No examples provided.

brand_asset_pack ~106

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.

NameTypeReqDescription
brand_categorystringOptional brand name or category
marketstringTarget market
mediumstringdigital | print | both
palettearrayyesHex values
use_casestringUse case

Structured output declared, but exposes no named fields.

No examples provided.

brand_audit ~233

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.

NameTypeReqDescription
brand_categorystringOptional brand category e.g. 'developer tool', 'food', 'fashion'
marketstringTarget market e.g. 'UK luxury', 'global', 'Japan'
mediumstringdigital | print | both
palettearrayyesArray of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B']
use_casestringUse case e.g. 'brand identity', 'packaging', 'app UI'

Structured output declared, but exposes no named fields.

No examples provided.

brand_collision ~217

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.

NameTypeReqDescription
brand_hexstringyesBrand 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'

Structured output declared, but exposes no named fields.

No examples provided.

brand_report ~274

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

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

Structured output declared, but exposes no named fields.

No examples provided.

brand_system ~135

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.

NameTypeReqDescription
brand_categorystringOptional e.g. developer tool, luxury, food
marketstringTarget market e.g. global, UK, Japan
mediumstringdigital | print | both
palettearrayyesHex values
use_casestringUse case e.g. brand identity, packaging

Structured output declared, but exposes no named fields.

No examples provided.

colour_card ~82

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

NameTypeReqDescription
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

Structured output declared, but exposes no named fields.

No examples provided.

colour_combination ~94

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.

NameTypeReqDescription
coloursarrayyes2-5 hex values to assess as a combination
contextstringUsage context: UI | data viz | fashion | interior | print | branding

Structured output declared, but exposes no named fields.

No examples provided.

colour_compare ~136

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.

NameTypeReqDescription
hex_astringyesFirst colour hex e.g. '#003366'
hex_bstringyesSecond colour hex e.g. '#1877F2'

Structured output declared, but exposes no named fields.

No examples provided.

colour_cultural_risk ~135

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

NameTypeReqDescription
hexstringSingle hex value to assess e.g. '#FF9900'
marketsarrayOptional market focus e.g. ['China', 'Middle East', 'India']
palettearrayOptional list of hex values to assess as a palette

Structured output declared, but exposes no named fields.

No examples provided.

colour_dna ~70

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.

NameTypeReqDescription
hexstringyesHex colour to fingerprint e.g. '#4A2A50'

Structured output declared, but exposes no named fields.

No examples provided.

colour_forensics ~240

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.

NameTypeReqDescription
finishstringPaint finish e.g. 'matt', 'eggshell', 'gloss', 'limewash'
hexstringyesHex colour to assess e.g. '#2A5498'
orientationstringRoom or surface orientation e.g. 'north-facing', 'south exterior', 'east bedroom'
substratestringyesPhysical substrate e.g. 'lime plaster', 'gypsum board', 'brick', 'timber', 'canvas'
usestringSpecific use context e.g. 'heritage repair', 'new build interior', 'conservation project'

Structured output declared, but exposes no named fields.

No examples provided.

colour_harmonies ~62

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

NameTypeReqDescription
harmony_typesarrayHarmony types to include
hexstringyesHex value e.g. '#3A5C8C'

Structured output declared, but exposes no named fields.

No examples provided.

colour_hooks ~160

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

colour_match_paint ~79

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

NameTypeReqDescription
brandstringOptional brand filter: 'farrow' or 'little_greene'
hex_valstringyesHex value e.g. '#003153'
nintegerNumber of matches (default 3)

Structured output declared, but exposes no named fields.

No examples provided.

colour_metrics ~82

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

NameTypeReqDescription
hex_valstringyesHex value e.g. '#8B4513'

Structured output declared, but exposes no named fields.

No examples provided.

colour_mix ~152

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.

NameTypeReqDescription
hex_astringyesFirst colour hex e.g. '#003366'
hex_bstringyesSecond colour hex e.g. '#C8A600'
rationumberMix ratio 0.0-1.0 where 0.5 is equal parts (default 0.5)

Structured output declared, but exposes no named fields.

No examples provided.

colour_namer ~152

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

colour_passport ~249

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.

NameTypeReqDescription
hexstringSingle hex colour e.g. #31559B
hexesarrayMultiple hex colours for batch lookup e.g. ['#31559B', '#8B1A1A']. Max 20.
include_culturalbooleanInclude cultural risk and associations (default true)
include_physicsbooleanInclude illuminant behaviour and gamut data (default true)
n_archiveintegerNumber of archive matches to return (default 3)

Structured output declared, but exposes no named fields.

No examples provided.

colour_passports ~175

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

NameTypeReqDescription
hexesarrayyesList of hex colours e.g. ['#31559B', '#8B1A1A']
include_culturalbooleanInclude cultural associations (default false)
include_physicsbooleanInclude illuminant behaviour and gamut data (default true)
n_archiveintegerNumber of archive matches per colour (default 3)

Structured output declared, but exposes no named fields.

No examples provided.

colour_slugs ~83

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.

NameTypeReqDescription
archivestringOptional archive filter
hexstringyesHex value e.g. #D4A829

Structured output declared, but exposes no named fields.

No examples provided.

colour_story ~119

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.

NameTypeReqDescription
hexstringyesHex value e.g. '#DC143C'
n_archivesintegerNumber of archive sources to draw from (default 5)

Structured output declared, but exposes no named fields.

No examples provided.

colour_strategy ~235

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

NameTypeReqDescription
brand_contextobjectBrand context object
constraintsobjectConstraints object
hexstringyesHex colour to evaluate e.g. '#4A2A50'
marketsarrayTarget markets e.g. ['UK', 'France', 'Japan']
mediumstringPrimary medium e.g. 'packaging', 'interior', 'digital'

Structured output declared, but exposes no named fields.

No examples provided.

colour_timeline ~143

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.

NameTypeReqDescription
conceptstringyesColour name or concept to trace e.g. indigo, imperial purple, mourning black
nintegerNumber of timeline entries to return (default 10, max 20)

Structured output declared, but exposes no named fields.

No examples provided.

colour_variants ~55

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.

NameTypeReqDescription
namestringyesNamed archive colour e.g. Bourton Honey

Structured output declared, but exposes no named fields.

No examples provided.

colour_verdict ~222

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

NameTypeReqDescription
audiencestringOptional: target audience e.g. 'high net worth travellers', 'young professionals'
hexstringyesHex colour to evaluate e.g. '#31559B'
marketsarrayTarget markets e.g. ['UK', 'Japan', 'UAE']
mediumstringApplication medium e.g. 'digital', 'interior', 'print', 'fashion', 'packaging'
use_casestringyesWhat the colour will be used for e.g. 'luxury hotel brand', 'heritage interior wall'

Structured output declared, but exposes no named fields.

No examples provided.

design_session ~269

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.

NameTypeReqDescription
avoidarrayArchive names or colour terms to exclude e.g. ['neon', 'ScreenDigital']
conceptstringyesCultural theme, mood, or brief e.g. 'Victorian mourning', 'Ottoman court', 'Scandinavian minimal'
include_accessibilitybooleanInclude WCAG contrast check (default true)
include_paint_matchesbooleanInclude commercial paint matches (default true)
include_promptbooleanInclude image generation prompt (default true)
mediumstringApplication context e.g. 'interior', 'brand identity', 'fashion', 'digital', 'print'
n_coloursintegerPalette size (default 5, max 8)

Structured output declared, but exposes no named fields.

No examples provided.

ecommerce_copy ~249

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.

NameTypeReqDescription
brand_namestringOptional brand name to include in copy
channelstringSales channel e.g. 'shopify', 'etsy', 'instagram', 'editorial'
hexstringyesHex colour of the product e.g. '#4A2A50'
product_typestringyesProduct type e.g. 'velvet cushion', 'ceramic vase', 'linen throw', 'candle'
tonestringCopy tone e.g. 'premium but not pompous', 'warm and accessible', 'heritage and serious'

Structured output declared, but exposes no named fields.

No examples provided.

ecommerce_namer ~233

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.

NameTypeReqDescription
brand_namestringBrand name for context
hexesarrayyesList of hex values e.g. ['#D4A829', '#1A5C6E']
max_dEnumberMax dE2000 distance to accept (default 25)
product_categorystringe.g. 'paint', 'candle', 'fashion', 'homeware'
stylestringgeographical | poetic | material | literary | mixed (default)

Structured output declared, but exposes no named fields.

No examples provided.

image_brief ~293

Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, understands the scene, identifies the style period, suggests product directions by category (textiles, interiors, fashion), generates an image generation prompt, and returns a swatch URL. Use instead of chaining palette_extract + palette_analyse + agent_brief separately. Pass style_context for coherent archive matching e.g. 'English cottage garden', 'Victorian', 'MarsColour'.

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

Structured output declared, but exposes no named fields.

No examples provided.

image_palette ~183

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

image_personal ~239

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

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

Structured output declared, but exposes no named fields.

No examples provided.

index_resonance ~178

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

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

Structured output declared, but exposes no named fields.

No examples provided.

ingest_image ~118

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

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

Structured output declared, but exposes no named fields.

No examples provided.

interior_specify ~341

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

meta_capabilities ~60

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

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

palette_analyse ~143

Analyse a palette of hex colours against the Colour Memory archive. For each colour returns the nearest named archive entry with cultural name, source, claim_strength (A-E), do_not_say guardrails, and alternatives when confidence is low. Palette-level deduplication ensures no two colours map to the same archive entry. Use after extracting colours from a photo or generating a palette.

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

Structured output declared, but exposes no named fields.

No examples provided.