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
palette_audit ~110

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_compare ~94

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_concept ~173

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_export ~109

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

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_extract ~302

Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weights sorted by luminance. Optionally runs palette_analyse on the results. Use this instead of image_palette when you need hex values with proportions for palette_analyse or palette_swatch.

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_generate ~170

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.

NameTypeReqDescription
archivestringOptional: restrict fills to one archive e.g. 'Oxfordshire', 'Shakespeare', 'Japan'
sizeintegerTotal palette size 2-8 (default 5)
slotsarrayyesList of palette slots. Each has index (0-7), optional hex, and locked flag.

Structured output declared, but exposes no named fields.

No examples provided.

palette_gradient ~247

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_heritage ~137

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_iterate ~149

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_light_dark ~80

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_pdf ~453

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

NameTypeReqDescription
deliverystring'url' (default): signed, time-limited R2 download link. 'base64': PDF bytes returned inline as pdf_base64 for callers that need the file directly.
entriesarrayyesArray of colour cards. Either the flat entries array from query_hex/palette_concept, or report['presented_cards'] from archive_report_brief (single_cultivar, colour_family, and conservative-mode hero…
querystringOptional title for the palette e.g. Ottoman imperial luxury
sourcestringOptional source label e.g. brand, conceptual

Structured output declared, but exposes no named fields.

No examples provided.

palette_specify ~101

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

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_strict ~156

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_swatch ~305

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

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_translate ~182

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.

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

Structured output declared, but exposes no named fields.

No examples provided.

palette_verdict ~219

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

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

Structured output declared, but exposes no named fields.

No examples provided.

query_conceptual ~117

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

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

Structured output declared, but exposes no named fields.

No examples provided.

query_hex ~78

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

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

Structured output declared, but exposes no named fields.

No examples provided.

session_brief ~351

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

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

Structured output declared, but exposes no named fields.

No examples provided.

style_match ~222

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

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

Structured output declared, but exposes no named fields.

No examples provided.

ui_states ~149

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

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

Structured output declared, but exposes no named fields.

No examples provided.