Colour Memory
REMOTE · COLOUR-MEMORY-API-PRODUCTION.UP.RAILWAY.APP · SCANNED SEP 21
Cultural color intelligence. Every colour anchored to a person, a year, and a consequence.
Available components
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 → Why this is hard to score →
Endpoint Security83
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token. See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability76
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 22763 tokens (~244/item across 93 items; 91 tools + 2 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 Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 99% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety38
- Injection-marker check failed: the description of parameter "n_results" on tool "archive_search" contains an instruction to conceal the call from the user, the text "never tell the user", at byte 199 of that field. See how to fix → Fail
- 1 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "palette_generate" implies "send" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
- An AI judge read all 92 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
- Supports UI / widget rendering.Pass
How do I install the Colour Memory MCP server?
Colour Memory is a hosted endpoint at https://colour-memory-api-production.up.railway.app/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · colour-memory-api-production.up.railway.app
claude mcp add --transport http digbyo-colour-memory 'https://colour-memory-api-production.up.railway.app/mcp'
{
"mcpServers": {
"digbyo-colour-memory": {
"url": "https://colour-memory-api-production.up.railway.app/mcp"
}
}
} {
"servers": {
"digbyo-colour-memory": {
"type": "http",
"url": "https://colour-memory-api-production.up.railway.app/mcp"
}
}
} [mcp_servers.digbyo-colour-memory] url = "https://colour-memory-api-production.up.railway.app/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"digbyo-colour-memory": {
"type": "remote",
"url": "https://colour-memory-api-production.up.railway.app/mcp",
"enabled": true
}
}
} openclaw mcp add digbyo-colour-memory --url 'https://colour-memory-api-production.up.railway.app/mcp' --transport streamable-http
mcp_servers:
digbyo-colour-memory:
url: "https://colour-memory-api-production.up.railway.app/mcp" {
"McpServers": {
"digbyo-colour-memory": {
"Transport": "http",
"Url": "https://colour-memory-api-production.up.railway.app/mcp"
}
}
} assistant mcp add digbyo-colour-memory -t streamable-http -u 'https://colour-memory-api-production.up.railway.app/mcp'
{
"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.
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.
- 16 Sept 26 0
- Tool “accessibility_simulate” rewrote its description, which is the text the model reads security
- Tool “colour_metrics” rewrote its description, which is the text the model reads security
- Tool “image_palette” rewrote its description, which is the text the model reads security
- 14 Sept 26 0
- “house_specify” added an optional parameter “guidance_level” cosmetic
- “interior_specify” added an optional parameter “role_plan” cosmetic
2 cosmetic changes on this day. Switch on “Show cosmetic changes” to see them.
- 1 Sept 26 0
- New tool “vanderpoel_pairing” functional
- 31 Aug 26 0
- Tool “colour_harmonies” rewrote its description, which is the text the model reads security
- New tool “colour_relationships” functional
- New tool “why_connected” functional
- “colour_harmonies” reworded the description of “harmony_types” cosmetic
- 30 Aug 26 0
- “house_specify” reworded the description of “minimum_claim_strength” cosmetic
1 cosmetic change on this day. Switch on “Show cosmetic changes” to see it.
- 29 Aug 26 −4
- Injection markers: pass → fail ▼ security
- Tool “brand_audit” rewrote its description, which is the text the model reads security
- Tool “brand_guideline_specify” rewrote its description, which is the text the model reads security
- Tool “brand_system” rewrote its description, which is the text the model reads security
- Tool “colour_dna” rewrote its description, which is the text the model reads security
- Tool “colour_harmonies” rewrote its description, which is the text the model reads security
- Tool “colour_variants” rewrote its description, which is the text the model reads security
- Tool “design_session” rewrote its description, which is the text the model reads security
- Tool “house_specify” rewrote its description, which is the text the model reads security
- Tool “image_brief” rewrote its description, which is the text the model reads security
- Tool “image_palette” rewrote its description, which is the text the model reads security
- Tool “interior_specify” rewrote its description, which is the text the model reads security
- Tool “palette_analyse” rewrote its description, which is the text the model reads security
- Tool “palette_audit” rewrote its description, which is the text the model reads security
- Tool “palette_compare” rewrote its description, which is the text the model reads security
- Tool “palette_concept” rewrote its description, which is the text the model reads security
- Tool “palette_extract” rewrote its description, which is the text the model reads security
- Tool “palette_generate” rewrote its description, which is the text the model reads security
- Tool “palette_gradient” rewrote its description, which is the text the model reads security
- Tool “palette_heritage” rewrote its description, which is the text the model reads security
- Tool “palette_iterate” rewrote its description, which is the text the model reads security
- Tool “palette_light_dark” rewrote its description, which is the text the model reads security
- Tool “palette_specify” rewrote its description, which is the text the model reads security
- Tool “palette_strict” rewrote its description, which is the text the model reads security
- Tool “palette_translate” rewrote its description, which is the text the model reads security
- Tool “palette_verdict” rewrote its description, which is the text the model reads security
- Tool “style_match” rewrote its description, which is the text the model reads security
- Schema quality: 210 → 238 ▼ functional
- New resource “Colour Memory palette” functional
- New tool “palette_finalize” functional
- “archive_search” added an optional parameter “offset” cosmetic
- “brand_audit” added an optional parameter “site_evidence” cosmetic
- “brand_collision” added an optional parameter “competitor_provenance” cosmetic
- “brand_guideline_select” added an optional parameter “project_id” cosmetic
- “brand_guideline_specify” added an optional parameter “continue_project_id” cosmetic
- “archive_search” reworded the description of “n_results” cosmetic
- “brand_guideline_select” reworded the description of “brand_ref” cosmetic
- “palette_generate” reworded the description of “size” cosmetic
- “palette_generate” reworded the description of “slots” cosmetic
- “brand_guideline_select” made “brand_ref” optional cosmetic
- 28 Aug 26 +2
- The server now declares the “resources” capability functional
- First check of Capabilities: pass functional
- First check of Schema quality: 100 functional
- New resource “Colour Memory result” functional
- New tool “render_colour_result” functional
- 26 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
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 21 Sept 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 |
Background: What to check on a remote MCP endpoint →
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 |
Background: How OAuth 2.1 works in the 2026 MCP spec →
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 |
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. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
accessibility_check Check WCAG Accessibility ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| background | string | – | Background hex (default 'FFFFFF') |
| hex_val | string | yes | Foreground hex value |
Structured output declared, but exposes no named fields.
No examples provided.
accessibility_font Font Colour Advisor ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| background | string | yes | Background hex value |
| palette | array | yes | Candidate foreground hex values |
Structured output declared, but exposes no named fields.
No examples provided.
accessibility_matrix Full Palette 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.
| Name | Type | Req | Description |
|---|---|---|---|
| palette | array | yes | Array of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B'] |
Structured output declared, but exposes no named fields.
No examples provided.
accessibility_rules Accessibility Usage 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.
| Name | Type | Req | Description |
|---|---|---|---|
| palette | array | yes | Array of hex values |
Structured output declared, but exposes no named fields.
No examples provided.
accessibility_simulate Simulate Colour Blindness ~117
Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, linear sRGB), with a flag when a simulated colour had to be clipped to sRGB. Anomalous trichromacy and partial severities are not simulated. A model prediction on a standard display, not how an individual perceives colour.
| Name | Type | Req | Description |
|---|---|---|---|
| hex_val | string | yes | Hex value e.g. '#BE0032' |
Structured output declared, but exposes no named fields.
No examples provided.
agent_brief Generate Colour Direction for Another AI ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| allowed_archives | array | – | Optional: list of allowed archive names. Query restricted to these archives only. |
| archive | string | – | Optional: restrict palette query to this archive e.g. georgianpleasures, japan, china |
| avoid | array | – | Optional: terms/associations to keep out of retrieval e.g. ['mourning', 'funeral black']. Affects retrieval directly, not just post-hoc flagging. |
| concept | string | yes | Colour concept to draw from e.g. 'Ottoman winter luxury', 'Victorian mourning'. Negation phrases ('must never', 'without', 'not X') are extracted and kept out of retrieval. |
| locked_palette | array | – | Optional: list of hex values to use exclusively. When provided, no archive query is run and no evidence filtering applies — these exact colours are used as-is. Prevents palette drift. |
| minimum_claim_strength | string | – | Evidence-grade floor for archive-grounded retrieval (default 'C'). Grade controls documentary strength; claim_role='reject' entries are excluded regardless of how low this is set. Not applied to lock… |
| model | string | – | Target model: midjourney, flux, dalle, stable_diffusion |
| palette_size | integer | – | Number of archive colours to include (default 5, max 8) |
| style_notes | string | – | Optional: additional style direction e.g. 'matte surfaces only', 'no gold' |
| task | string | yes | What 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 Verify AI Image Generation Colour Fidelity ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| image_base64 | string | – | Base64 encoded generated image |
| image_url | string | – | URL of the generated image |
| target_palette | array | yes | Hex values from agent_brief colour_tokens e.g. ['#ED9921', '#E29937'] |
Structured output declared, but exposes no named fields.
No examples provided.
archive_cliche Break a Colour 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.
| Name | Type | Req | Description |
|---|---|---|---|
| concept | string | yes | Colour concept to subvert e.g. 'love', 'grief', 'luxury', 'betrayal', 'power' |
| expected_colour | string | – | Optional: the cliche colour to contradict e.g. 'red', '#FF0000'. Hex or colour name. |
| n_results | integer | – | Number of archive entries to search (default 8) |
Structured output declared, but exposes no named fields.
No examples provided.
archive_coverage_gap Coverage Gap Report ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| archives | array | – | Optional archives to search e.g. ['EIC', 'Dickens'] |
| themes | array | yes | Themes to check e.g. ['opium', 'gin', 'gambling', 'racing'] |
Structured output declared, but exposes no named fields.
No examples provided.
archive_cultural_anachronism Anachronism Guard ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| entries | array | yes | Colour entries to check |
| period_end | integer | – | End year e.g. 1830 |
| period_start | integer | – | Start year e.g. 1714 |
| target_period | string | – | Period description e.g. 'Georgian England 1714-1830' |
Structured output declared, but exposes no named fields.
No examples provided.
archive_evidence_gap Evidence Gap Analysis ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| archive | string | – | Optional archive to search e.g. 'DarkHistory' |
| hex | string | yes | Hex colour to analyse e.g. '#4A535C' |
| n_candidates | integer | – | Number of archive candidates to return (default 5) |
| proposed_claim | string | yes | What 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 Explain a Colour's 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.
| Name | Type | Req | Description |
|---|---|---|---|
| colour_name | string | yes | Name 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 Archive Report Brief ~721
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_partial | boolean | – | If false (default), returning fewer cards than requested sets ok=false with error_code INSUFFICIENT_PALETTE_RESULTS instead of a silent short 'success'. Set true to accept a short result. |
| archives | array | – | Archives to search e.g. ['RacingSilks', 'EIC', 'Keats', 'Dickens'] |
| audience | string | – | Target audience e.g. 'serious Georgian collector' |
| avoid | array | – | Topics to suppress e.g. ['arsenic wallpaper', 'Wedgwood blue'] |
| confidence_threshold | number | – | Minimum confidence score (0.0-1.0) for an entry to be included. Default 0.5 filters out weakly-matched stubs. |
| family_card_mode | string | – | How near-identical cultivars/records are presented. 'auto' (default): current behaviour, groups into family cards above the standard ΔE threshold. 'always': widens the clustering threshold so more ne… |
| max_family_card_share | number | – | Conservative mode only: maximum fraction (0.0-1.0, default 0.5) of presented cards that may be family cards before excess families are suppressed to hero cards. Ignored in auto/always modes. |
| minimum_claim_strength | string | – | Hard evidence-grade floor: A, B, C, D, or E. Never silently relaxed. |
| n_colours | integer | – | Number of colours to return (default 8, max 16) |
| output_format | string | – | Reserved for future use -- currently accepted but has no effect on the response shape (the endpoint always returns the full report). |
| period_end | integer | – | Hard period gate: exclude entries dated after this year. Default 9999 (no upper bound). |
| period_start | integer | – | Hard period gate: exclude entries dated before this year. Default 0 (no lower bound). |
| strict_semantic_colour | boolean | – | Default false. When true, excludes entries whose quoted colour language contradicts their stored hex (e.g. a record naming 'Prussian blue' whose hex is actually a pale cream) rather than presenting t… |
| strict_sources | boolean | – | Only return entries with named primary sources (default true) |
| themes | array | yes | Research themes e.g. ['racing silks', 'EIC trade', 'Keats'] |
| title | string | – | Document title e.g. 'The Colours of Georgian Power' |
Structured output declared, but exposes no named fields.
No examples provided.
archive_search Archive Keyword Search ~592
Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical period. Complements conceptual embedding search with exact keyword matching. Examples: 'cerulean' (28 matches, e.g. Bourton Cerulean), 'Prussian' (187 matches spanning pigment history), 'medieval' (over 1,000 matches across period archives). Never returns a bare empty result for a genuinely obscure query -- result_path in the response is 'direct' (exact keyword hit), 'broadened' (archive restriction dropped), or 'redirected' (fell back to conceptual/semantic search) so you always know which one fired. Set entity_mode='exact' to search by botanical identity rather than by word: a plain query for 'Rose' matches any cultivar name containing it (including Sweet Peas called 'Rose Pink'), whereas entity_mode='exact' returns genus Rosa only and discloses how many off-genus records were excluded.
| Name | Type | Req | Description |
|---|---|---|---|
| archive | string | – | Optional archive filter e.g. oxfordshire, japan, pigment, keats, eic, racingsilks |
| entity_mode | string | – | 'text' (default): ordinary keyword search -- 'rose' finds any name containing the word, across genera. 'exact': resolve the query to a botanical entity and return ONLY records whose structured identi… |
| include_full | boolean | – | Return complete notes and source fields. Default false returns 150-char snippets. Set true for report workflows. |
| limit | integer | – | Alias for n_results |
| n_results | integer | – | Results per page (default 10, max 50 per call). This is a PAGE size, not a collection limit -- for a large collection (tens or hundreds of records) page with offset until next_offset disappears, and… |
| offset | integer | – | Skip this many ranked matches before returning results -- collection paging. The response's next_offset gives the value to pass here for the next page; it is absent on the last page. total_found alwa… |
| query | string | yes | Search term e.g. cerulean, Prussian, Ottoman, ochre, medieval |
| year_from | integer | – | Boost entries on or after this year e.g. 1400 for Renaissance, 1837 for Victorian |
| year_to | integer | – | Boost 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 Brand Asset Pack Export ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_category | string | – | Optional brand name or category |
| market | string | – | Target market |
| medium | string | – | digital | print | both |
| palette | array | yes | Hex values |
| use_case | string | – | Use case |
Structured output declared, but exposes no named fields.
No examples provided.
brand_audit Complete Brand Colour Audit ~744
Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of any kind: colour roles with archive names, the full WCAG accessibility matrix, cultural risk per colour, CSS variables, Tailwind config, design tokens and production notes. NOT COMPUTED HERE: palette interpretation -- the verdict, its score and the written narrative copy. Those require an LLM call and used to be made inside this tool without saying so, which put a normal five-colour audit at 43-45s. The palette_verdict and verdict_copy keys are still returned, carrying interpretation_status='not_computed' plus a ready-to-send palette_verdict.continuation.arguments -- forward those verbatim to the palette_verdict tool to get the interpretation. Replaces chaining accessibility_matrix + cultural_risk_assessment; palette_verdict is now an explicit, optional second call rather than a hidden one. FOR A LIVE-SITE BRAND AUDIT ('audit this website'): inspect representative rendered pages FIRST (homepage, about, one deep page) and pass what you observed as site_evidence -- a CSS scrape alone is not an audit of what a visitor sees, and the response's audit_evidence.audit_status will say PARTIAL until real multi-page rendered evidence is supplied. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_category | string | – | Optional brand category e.g. 'developer tool', 'food', 'fashion' |
| market | string | – | Target market e.g. 'UK luxury', 'global', 'Japan' |
| medium | string | – | digital | print | both |
| palette | array | yes | Array of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B'] |
| site_evidence | object | – | Evidence for a LIVE-SITE audit, supplied by the host (Colour Memory does not browse). {pages: [{url, role: 'homepage'|'about'|'work'|'services'|'product'|..., screenshot: bool, tokens: bool, observat… |
| use_case | string | – | Use case e.g. 'brand identity', 'packaging', 'app UI' |
Structured output declared, but exposes no named fields.
No examples provided.
brand_collision Brand Colour Collision Check ~308
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.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_hex | string | yes | Brand hero colour hex e.g. '#D4A829' |
| brand_name | string | – | Brand name e.g. 'Fortnum and Mason' |
| competitor_hexes | array | – | List of competitor hex colours |
| competitor_names | array | – | Competitor names matching hex order |
| competitor_provenance | array | – | Where each competitor colour came from, positionally aligned to competitor_hexes. Only a verified value moves the distinctiveness score; an estimated or unverified one is kept as a QUALITATIVE compar… |
| market | string | – | Market context e.g. 'UK luxury food retail' |
| region | string | – | Region code e.g. 'GB', 'UAE', 'JP' |
Structured output declared, but exposes no named fields.
No examples provided.
brand_guideline_claims Resolve Brand Colour Standard Claim Detail ~232
Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/locator/citation, the exact permitted claim text, do_not_say restrictions, and claim_role (anchor/analogue/reject). Read-only -- reads the already-persisted, frozen brand_ref snapshot, never re-runs generation or mutates anything. Omit claim_ids to return every claim on the brand_ref. Accepts exactly one of brand_ref or project_id, same as brand_guideline_pdf.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_ref | string | – | The brand_ref returned by brand_guideline_specify or brand_guideline_select. |
| claim_ids | array | – | Which claim_id values to resolve. Omit (or pass an empty list) to return every claim on the brand_ref. |
| project_id | string | – | Alternative to brand_ref for an authenticated (keyed) brand project. Requires the same API key that created it. |
| project_version | integer | – | Resolve claims against this specific immutable version instead of the project's current version. |
Structured output declared, but exposes no named fields.
No examples provided.
brand_guideline_pdf Render Brand Colour Standard PDF ~337
Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour system in proportion, the argument for the palette, packaging and digital application, a full pairwise WCAG accessibility matrix computed upstream (never hand-drawn examples), and a provenance and evidence register in which every claim is bound to the colour it belongs to. Page count is not fixed: sections that have nothing real to say are omitted rather than padded -- a single-candidate brand_ref drops the comparison spread, and a candidate that was never scored for distinctiveness gets a different page shape rather than an empty scale. Derived colours are never presented in documented-source language. Renders the brand_guideline_select-chosen candidate if one has been recorded, otherwise the strongest eligible candidate as a provisional preview (clearly labelled as such). Reads only the already-persisted, frozen snapshot -- never re-runs brand_guideline_specify, never rematches an archive, never mutates the resolved project. Accepts exactly one of brand_ref or project_id.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_ref | string | – | The brand_ref returned by brand_guideline_specify or brand_guideline_select. |
| delivery | string | – | 'url' (default): signed, time-limited R2 download link. 'base64': PDF bytes returned inline. |
| project_id | string | – | Alternative to brand_ref for an authenticated (keyed) brand project. Requires the same API key that created it. |
| project_version | integer | – | Render this specific immutable version instead of the project's current version. Omit to render the current version. |
Structured output declared, but exposes no named fields.
No examples provided.
brand_guideline_select Record a Manual Brand Colour Decision ~216
Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produces a revised brand_ref (same reference, a new version underneath it, exactly like a versioned house_ref). No accounts or reviewer states yet -- this demonstrates decision-making, not a full approval workflow.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_ref | string | – | The brand_ref returned by brand_guideline_specify. Supply this OR project_id. |
| locked_colour_ids | array | – | colour_id values to lock for future iteration. |
| note | string | – | Optional free-text rationale, e.g. "Client prefers the quieter system." |
| project_id | string | – | The project_id returned by brand_guideline_specify. Use this after a refinement (a continued project has a project_id but no new brand_ref). Supply this OR brand_ref. |
| selected_candidate_id | string | yes | Which candidate_id to make canonical. |
| suppressed_claim_ids | array | – | claim_id values to suppress (marked superseded). |
Structured output declared, but exposes no named fields.
No examples provided.
brand_guideline_specify Generate an Archive-Grounded Brand Colour Standard ~532
Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, each scored for distinctiveness against named competitors, checked for accessibility, and labelled with exactly what each colour can and cannot legitimately claim (documented archive anchor vs analogue vs original brand colour). Returns a brand_ref (valid 24h) plus a claim_id per colour -- resolve those into full source/permitted-claim/do_not_say text with brand_guideline_claims (the response's own claim_detail_available_via field always names it explicitly). Follow with brand_guideline_select to record which candidate was chosen. CREATE ONCE, THEN VERSION: the response returns project_id and current_version. When you refine or update a Brand Standard you already created in this conversation, pass that project_id back as continue_project_id rather than creating a second project. TIMING (2026-08-07): real generation cost ranges roughly 60-280 seconds depending on retrieval/generation path. This call races generation against a safe ~55s window: a fast generation returns the full result exactly as described above, unchanged. A slower generation instead returns a compact {"status": "processing", "brand_job_ref": ..., "poll_after_seconds": ...} -- generation keeps running server-side regardless, and is never lost. Call brand_guideline_status with that brand_job_ref to retrieve the completed result (brand_ref, project_id, candidate summary) once ready; poll no more often than poll_after_seconds suggests.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_brief | object | – | Category, positioning, audience, personality, values, channels, markets, and named competitors with their hex colours. |
| brand_name | string | yes | The brand's name. |
| constraints | object | – | Structured negative/positive retrieval constraints, checked before archive-diversity capping. avoid_concepts takes precedence over any sentiment inferred from brand_brief prose. |
| continue_project_id | string | – | The project_id returned by an earlier call, when this is a REFINEMENT of that same Brand Standard. Reuse it and the work joins that project as a new version; omit it and a second project is created.… |
| identity_assets | object | – | – |
| output_preferences | object | – | – |
| palette_input | object | yes | Exactly how to source the candidate colours. |
| preferences | object | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
brand_guideline_status Retrieve a Slow brand_guideline_specify Generation's Result ~200
Resolves a brand_job_ref returned by brand_guideline_specify when its race-to-complete window elapsed before generation finished. Read-only, in-process lookup -- never re-runs generation. Returns {"status": "processing"} if still running, {"status": "complete", "brand_ref": ..., "project_id": ..., "recommended_candidate_id": ..., "candidate_count": ...} once done (a compact summary -- use the returned brand_ref with brand_guideline_select/brand_guideline_pdf/brand_guideline_claims for full detail, the same pattern every other Brand Standard tool already uses), or {"status": "failed", "error_code": ..., "message": ...} if generation genuinely failed server-side. An unknown or expired brand_job_ref returns a structured BRAND_JOB_NOT_FOUND error, never a crash or empty success.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_job_ref | string | yes | The brand_job_ref returned by brand_guideline_specify's processing response. |
Structured output declared, but exposes no named fields.
No examples provided.
brand_report Complete Brand Colour Intelligence 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.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_context | object | – | Brand context: category, positioning, audience, channels |
| concept | string | – | Optional concept to search for cliche contradiction e.g. 'luxury', 'eco', 'wellness' |
| hex | string | yes | Hero hex colour e.g. '#4A2A50' |
| markets | array | – | Target markets e.g. ['UK', 'France', 'Japan'] |
| medium | string | – | Medium e.g. 'packaging', 'digital', 'interior' |
| product_type | string | – | Product type for copy e.g. 'velvet cushion', 'fragrance', 'cleaning spray' |
| target_model | string | – | Image model for agent brief e.g. 'midjourney', 'flux', 'dalle' |
Structured output declared, but exposes no named fields.
No examples provided.
brand_system Complete Brand Colour System ~214
Complete brand colour system in one call. Returns colour roles with archive names, light and dark mode role maps, typography guidance, usage rules per colour, design tokens (CSS, Tailwind, Figma), and citation cards. Deterministic. No LLM cost. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_category | string | – | Optional e.g. developer tool, luxury, food |
| market | string | – | Target market e.g. global, UK, Japan |
| medium | string | – | digital | print | both |
| palette | array | yes | Hex values |
| use_case | string | – | Use case e.g. brand identity, packaging |
Structured output declared, but exposes no named fields.
No examples provided.
colour_card Get Colour Details by Name ~82
Look up a named colour and return its hex, archive, provenance, and cultural notes.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | Colour name e.g. 'Prussian Blue' or 'Ottoman Carbon Ink' |
| slug | string | – | Stable 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 Colour Combination Check ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| colours | array | yes | 2-5 hex values to assess as a combination |
| context | string | – | Usage context: UI | data viz | fashion | interior | print | branding |
Structured output declared, but exposes no named fields.
No examples provided.
colour_compare Compare Two Colours — Perceptual and Cultural ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| hex_a | string | yes | First colour hex e.g. '#003366' |
| hex_b | string | yes | Second colour hex e.g. '#1877F2' |
Structured output declared, but exposes no named fields.
No examples provided.
colour_cultural_risk Assess Cultural Risk of a Colour or Palette ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| hex | string | – | Single hex value to assess e.g. '#FF9900' |
| markets | array | – | Optional market focus e.g. ['China', 'Middle East', 'India'] |
| palette | array | – | Optional list of hex values to assess as a palette |
Structured output declared, but exposes no named fields.
No examples provided.
colour_dna Colour DNA Fingerprint ~149
Compact semantic fingerprint for a single hex colour. This is one component of colour_passport. Use colour_passport for a general colour profile; use this only when the user explicitly wants the fingerprint format alone. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Type | Req | Description |
|---|---|---|---|
| hex | string | yes | Hex colour to fingerprint e.g. '#4A2A50' |
Structured output declared, but exposes no named fields.
No examples provided.
colour_forensics Colour Specification Safety Check ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| finish | string | – | Paint finish e.g. 'matt', 'eggshell', 'gloss', 'limewash' |
| hex | string | yes | Hex colour to assess e.g. '#2A5498' |
| orientation | string | – | Room or surface orientation e.g. 'north-facing', 'south exterior', 'east bedroom' |
| substrate | string | yes | Physical substrate e.g. 'lime plaster', 'gypsum board', 'brick', 'timber', 'canvas' |
| use | string | – | Specific use context e.g. 'heritage repair', 'new build interior', 'conservation project' |
Structured output declared, but exposes no named fields.
No examples provided.
colour_harmonies Get Colour Harmonies ~309
Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838) documented contrast pairing between six named hues (yellow/purple, orange/blue, red/green), with Field's proportional power for the pair. Unlike the fixed-angle types, this snaps the input to Hay's nearest named hue rather than rotating it, and returns covered:false with no invented partner when the input sits nearer a tertiary region (olive/citron/russet) than any of the six -- Hay records only an aggregate total for tertiaries, never a specific pair. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Type | Req | Description |
|---|---|---|---|
| harmony_types | array | – | Harmony types to include: 'complementary', 'analogous', 'triadic', 'split_complementary', 'tetradic', or 'hay_contrast' (D.R. Hay's 1838 documented contrast pairing, distinct from the geometric types… |
| hex | string | yes | Hex value e.g. '#3A5C8C' |
Structured output declared, but exposes no named fields.
No examples provided.
colour_hooks Make Any Colour Memorable ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| audience | string | – | Target audience e.g. 'general public', 'interior designers', 'children' |
| hex | string | yes | Hex colour e.g. '#154F20' |
| tone | string | – | Desired tone e.g. 'dinner party', 'academic', 'social media', 'brand copy' |
Structured output declared, but exposes no named fields.
No examples provided.
colour_match_paint Match to Commercial Paint System ~79
Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene.
| Name | Type | Req | Description |
|---|---|---|---|
| brand | string | – | Optional brand filter: 'farrow' or 'little_greene' |
| hex_val | string | yes | Hex value e.g. '#003153' |
| n | integer | – | Number of matches (default 3) |
Structured output declared, but exposes no named fields.
No examples provided.
colour_metrics Get Colour Metrics and Properties ~125
Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma and hue angle, and Bradford corresponding colours under two standard illuminants. It also lists what a hex cannot support, such as thermal performance or a measured LRV. 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.
| Name | Type | Req | Description |
|---|---|---|---|
| hex_val | string | yes | Hex value e.g. '#8B4513' |
Structured output declared, but exposes no named fields.
No examples provided.
colour_mix Mix Two Colours (Pigment Simulation) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| hex_a | string | yes | First colour hex e.g. '#003366' |
| hex_b | string | yes | Second colour hex e.g. '#C8A600' |
| ratio | number | – | Mix 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 Generate Archive-Grounded Colour Names ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| hex | string | yes | Hex colour to name e.g. #8B4A2A |
| market | string | – | Target market e.g. UK luxury |
| n_names | integer | – | Number of name options (default 5) |
| product_type | string | – | Product type e.g. candle, paint, leather bag |
| style | string | – | geographical | poetic | material | literary | botanical | industrial | mixed |
Structured output declared, but exposes no named fields.
No examples provided.
colour_passport Colour Passport -- Complete Colour Truth Object ~301
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. Examples: '#31559B' (anchors to Henry VIII Manuscript Blue Initials), '#8B1A1A' (Penny Post Sealing Wax Dark Red), '#D4AF37' (Sutton Hoo Great Gold Buckle).
| Name | Type | Req | Description |
|---|---|---|---|
| hex | string | – | Single hex colour e.g. #31559B |
| hexes | array | – | Multiple hex colours for batch lookup e.g. ['#31559B', '#8B1A1A']. Max 20. |
| include_cultural | boolean | – | Include cultural risk and associations (default true) |
| include_physics | boolean | – | Include illuminant behaviour and gamut data (default true) |
| n_archive | integer | – | Number of archive matches to return (default 3) |
Structured output declared, but exposes no named fields.
No examples provided.
colour_passports Batch Colour Passport Lookup ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| hexes | array | yes | List of hex colours e.g. ['#31559B', '#8B1A1A'] |
| include_cultural | boolean | – | Include cultural associations (default false) |
| include_physics | boolean | – | Include illuminant behaviour and gamut data (default true) |
| n_archive | integer | – | Number of archive matches per colour (default 3) |
Structured output declared, but exposes no named fields.
No examples provided.
colour_relationships Colour Relationships ~286
What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 348 design_combination nodes are Wada's 1933 Dictionary of Color Combinations plates. Returns edges in separate blocks by relationship_class so a caller can never mistake a computed colour distance for something a historical source actually said: SOURCE_ASSERTED (the source itself states the relationship, e.g. 'this colour was assigned to numbered combination 176') versus DETERMINISTIC_STRUCTURAL (a mechanical fact about the source object, e.g. 'printed on this plate'). Every edge carries its own 'does_not_mean' caveat inline -- e.g. membership in the same Wada combination does not assert that any specific pair within it was individually intended as a pairing. Not every record_id has relationships yet; an empty result is a true negative, not an error. Get record_id values from archive_search or colour_card.
| Name | Type | Req | Description |
|---|---|---|---|
| include_computed | boolean | – | Include computed (not source-asserted) relationships where available. Default true. |
| include_unresolved | boolean | – | Include same-name candidates across sources -- the cheapest, easiest-to-misread-as-evidence edge in the system. Default false. |
| record_id | string | yes | Stable record id, e.g. from archive_search or colour_card. |
| Name | Type | Req | Description |
|---|---|---|---|
| label | string | – | – |
| record_id | string | – | – |
| source_asserted | object | – | Edges the source itself states, grouped by predicate. |
| structural | object | – | Mechanical facts about the source object (plate layout etc.), kept separate from source_asserted on purpose. |
No examples provided.
colour_slugs Colour Name Developer Tokens ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| archive | string | – | Optional archive filter |
| hex | string | yes | Hex value e.g. #D4A829 |
Structured output declared, but exposes no named fields.
No examples provided.
colour_story Get the Cultural Story of a Colour ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| hex | string | yes | Hex value e.g. '#DC143C' |
| n_archives | integer | – | Number of archive sources to draw from (default 5) |
Structured output declared, but exposes no named fields.
No examples provided.
colour_strategy Complete 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.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_context | object | – | Brand context object |
| constraints | object | – | Constraints object |
| hex | string | yes | Hex colour to evaluate e.g. '#4A2A50' |
| markets | array | – | Target markets e.g. ['UK', 'France', 'Japan'] |
| medium | string | – | Primary medium e.g. 'packaging', 'interior', 'digital' |
Structured output declared, but exposes no named fields.
No examples provided.
colour_timeline Trace a Colour Concept Through History ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| concept | string | yes | Colour name or concept to trace e.g. indigo, imperial purple, mourning black |
| n | integer | – | Number of timeline entries to return (default 10, max 20) |
Structured output declared, but exposes no named fields.
No examples provided.
colour_variants Get Colour Variants and Siblings ~134
For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers exploring around a colour. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | Named archive colour e.g. Bourton Honey |
Structured output declared, but exposes no named fields.
No examples provided.
colour_verdict Should I Use This Colour? ~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'.
| Name | Type | Req | Description |
|---|---|---|---|
| audience | string | – | Optional: target audience e.g. 'high net worth travellers', 'young professionals' |
| hex | string | yes | Hex colour to evaluate e.g. '#31559B' |
| markets | array | – | Target markets e.g. ['UK', 'Japan', 'UAE'] |
| medium | string | – | Application medium e.g. 'digital', 'interior', 'print', 'fashion', 'packaging' |
| use_case | string | yes | What 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 Full Design Session — Concept to Complete Palette ~348
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. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Type | Req | Description |
|---|---|---|---|
| avoid | array | – | Archive names or colour terms to exclude e.g. ['neon', 'ScreenDigital'] |
| concept | string | yes | Cultural theme, mood, or brief e.g. 'Victorian mourning', 'Ottoman court', 'Scandinavian minimal' |
| include_accessibility | boolean | – | Include WCAG contrast check (default true) |
| include_paint_matches | boolean | – | Include commercial paint matches (default true) |
| include_prompt | boolean | – | Include image generation prompt (default true) |
| medium | string | – | Application context e.g. 'interior', 'brand identity', 'fashion', 'digital', 'print' |
| n_colours | integer | – | Palette size (default 5, max 8) |
Structured output declared, but exposes no named fields.
No examples provided.
ecommerce_copy Ecommerce Product Copy from Archive Colour ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_name | string | – | Optional brand name to include in copy |
| channel | string | – | Sales channel e.g. 'shopify', 'etsy', 'instagram', 'editorial' |
| hex | string | yes | Hex colour of the product e.g. '#4A2A50' |
| product_type | string | yes | Product type e.g. 'velvet cushion', 'ceramic vase', 'linen throw', 'candle' |
| tone | string | – | Copy 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 Product Line Colour 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.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_name | string | – | Brand name for context |
| hexes | array | yes | List of hex values e.g. ['#D4A829', '#1A5C6E'] |
| max_dE | number | – | Max dE2000 distance to accept (default 25) |
| product_category | string | – | e.g. 'paint', 'candle', 'fashion', 'homeware' |
| style | string | – | geographical | poetic | material | literary | mixed (default) |
Structured output declared, but exposes no named fields.
No examples provided.
extract_image_colours Extract Colours from Image ~257
Extract dominant colours from a photograph using Colour Memory's proprietary k-means++ algorithm. Requires either a public image_url, or an image_id. If you only have a raw uploaded file with no public URL (e.g. a local file path or a ChatGPT file attachment without a usable download_url), call ingest_image first to get an image_id, then pass that image_id here. Returns hex values with proportional weights. Optionally matches colours against the archive with style_context for coherent cultural naming. Use this before image_brief when you have an uploaded photograph.
| Name | Type | Req | Description |
|---|---|---|---|
| analyse | boolean | – | If true, match colours against archive and return names |
| grey_card_hex | string | – | Hex from a grey/white card for white balance |
| image | object | – | Image file attachment from ChatGPT |
| image_id | string | – | Ephemeral image_id returned by ingest_image. Use this if you only have a local file path or raw file attachment with no public URL. |
| image_url | string | – | Public URL of image |
| k | integer | – | Number of colours to extract (3-12, default 6) |
| style_context | string | – | e.g. English cottage garden, Victorian, Japanese |
Structured output declared, but exposes no named fields.
No examples provided.
historical_colour_query Historical Colour Evidence ~316
Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source builds -- Jennings (paint recipes, 1902), Bradley (rotating-disc apparatus, 1895), Vanderpoel (quantified object analyses, 1902), Beaumont (woven colour relationships), Hay (harmonic proportional powers, 1838), Guichard (measured spatial extents, 1880) and Hokusai (subject-conditioned colour application, 1848). Each answer names its source, its locator and what that kind of evidence CANNOT support. Use it for questions like 'how do I paint a leaf', 'what did Bradley's disc proportions measure', 'what's the difference between making a colour and applying it', or to check a claim someone has attributed to one of these authors. Crucially, these sources' numbers are NOT interchangeable: a recipe part, a disc share, an object percentage, a proportional power and a measured extent answer different questions, and the response says so explicitly rather than averaging them.
| Name | Type | Req | Description |
|---|---|---|---|
| high_confidence_only | boolean | – | Only high-confidence records. |
| max_results | integer | – | Upper bound on evidence items (default 12). |
| mode | string | – | 'user' (default) returns an evidence-led answer packet with structured values retained. 'evidence' additionally returns the complete underlying records. |
| query | string | yes | Plain-English historical colour question. |
| sources | array | – | Optional restriction to named sources. |
| Name | Type | Req | Description |
|---|---|---|---|
| answer | object | – | Evidence-led answer: what the evidence supports, one observation that changes the question where the records support one, and the boundary of the claim. |
| do_not_say | array | – | – |
| evidence | array | – | – |
| incomparabilities | array | – | – |
| premise_correction | object|null | – | – |
No examples provided.
What is the Colour Memory MCP server?
Colour Memory is an MCP server listed in the public MCP registry as io.github.DigbyO/colour-memory. Cultural color intelligence. Every colour anchored to a person, a year, and a consequence. This page covers its hosted endpoint (https://colour-memory-api-production.up.railway.app/mcp).
Is the Colour Memory MCP server safe to use?
Colour Memory scores 85 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Colour Memory MCP server expose?
Colour Memory exposes 91 tools: query_conceptual, extract_image_colours, query_hex, palette_specify, colour_metrics, and 86 more. Their descriptions and schemas cost roughly 22,733 tokens of context every time the server is loaded.
Does the Colour Memory MCP server require authentication?
Yes. Colour Memory asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Colour Memory MCP server still maintained?
Colour Memory is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.