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 →
house_specify Multi-Room House Colour Scheme — Provenance-Grouped Where Documented ~774
Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance (same object, same pattern colourway, same source citation, same designer, same period+institution); where it does not, they are grouped by perceptual similarity and the response says so -- grouping_basis reports which, and provenance_credit reports how many delivered colours are individually evidenced versus documented as a GROUP (often zero). Every colour is a real archive record either way. Each room gets a full colour card set (dominant/secondary/joinery/textile/accent roles) with paint matches, LRV, illuminant behaviour, and WCAG data. A documentary grouping states exactly which documented fact ties its colours together (e.g. 'documented on the same Fitzwilliam Museum record for the Artichoke hanging, accession T.1-1979') and its weighted grouping_strength score -- historical claims are templated only from fields the archive record actually states; room/surface assignment is disclosed as editorial, never as historical fact. Orientation (north/south/east/west) is recorded as room context and surfaced in each room's light_context; in the current model it does not alter palette selection. Example: concept='Arts and Crafts movement family house', archive='ArtsAndCrafts', rooms=[{label:'Entrance Hall', room_type:'hallway', orientation:'north'}, {label:'Living Room', room_type:'living', orientation:'south'}]. Use interior_specify instead for a single room without cross-room grouping. The response includes house_ref -- pass that (not the full response) to palette_pdf's house_ref input to render the flagship document; the full response is often 60-100KB+, too large to safely resend as another tool call's input. 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 a…
| Name | Type | Req | Description |
|---|---|---|---|
| archive | string | yes | Single archive to draw every room's colours from, e.g. 'ArtsAndCrafts'. Required -- invalid names return a clear error listing valid archives. |
| avoid | array | – | Terms to exclude from retrieval. |
| colours_per_room | integer | – | Default 5. |
| concept | string | yes | House-level concept or brief, e.g. 'Arts and Crafts movement family house' |
| guidance_level | string | – | Who the guidance notes are written for. 'client' (default) for a homeowner; 'decorator' for a trade reader. The specification decisions are identical either way -- only the wording differs. |
| minimum_claim_strength | string | – | Evidence-grade floor, default 'B'. Explicitly supplied: a hard admission filter, never relaxed -- too few qualifying records fails closed with a per-grade availability map (ARCHIVE_EVIDENCE_POOL_DEPL… |
| narrative_mode | string | – | Default 'evidence_only'. |
| rooms | array | yes | One entry per room, e.g. [{label:'Entrance Hall', room_type:'hallway', orientation:'north'}] |
| shared_house_colours | integer | – | Default 2. |
| strict_semantic_colour | boolean | – | Default true -- excludes entries whose quoted colour language contradicts their stored hex. |
Structured output declared, but exposes no named fields.
No examples provided.
image_brief Generate Creative Brief from Image ~372
Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, understands the scene, identifies the style period, suggests product directions by category (textiles, interiors, fashion), generates an image generation prompt, and returns a swatch URL. Use instead of chaining palette_extract + palette_analyse + agent_brief separately. Pass style_context for coherent archive matching e.g. 'English cottage garden', 'Victorian', 'MarsColour'. 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 |
|---|---|---|---|
| archive | string | – | Explicit archive name override e.g. 'MarsColour', 'Japan' |
| grey_card_hex | string | – | Hex value from a grey/white card for white balance correction |
| image_base64 | string | – | Base64-encoded image data |
| image_url | string | – | Public URL of the image |
| k | integer | – | Number of colours to extract (3-12, default 6) |
| model | string | – | Image model: midjourney | flux | dalle | stable_diffusion (default midjourney) |
| product_type | string | – | Product focus e.g. 'tea towel', 'wallpaper', 'ceramic', 'textile' |
| style_context | string | – | Plain English style e.g. 'English cottage garden', 'Victorian', 'Japanese', 'MarsColour'. Restricts archive matching to coherent cultural set. |
Structured output declared, but exposes no named fields.
No examples provided.
image_palette Extract and Name Colours from an Image ~269
Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provenance. Uses K-means++ extraction; sRGB pixels are read as D65 CIELAB for matching. Returns up to 5 dominant colours, each with archive name, cultural story, nearest RAL standard, and WCAG accessibility data. Works for product photography, interior photos, artwork, brand assets, and mood boards. The image is never stored — processed in memory only. 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 |
|---|---|---|---|
| archive | string | – | Optional: restrict archive matching to a specific archive |
| image_base64 | string | yes | Base64 encoded image (JPEG, PNG, WebP) |
| media_type | string | – | Image MIME type e.g. 'image/jpeg' |
| n_colours | integer | – | Number of dominant colours to extract (default 5, max 5) |
Structured output declared, but exposes no named fields.
No examples provided.
image_personal Personal Colour Analysis — Find Your Colours ~239
Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, medium, or deep), and undertone (warm, cool, or neutral). Returns a curated palette of archive colours that genuinely suit you — each with full historical provenance and cultural context — plus colours to avoid. Uses Claude Vision for skin, hair, and eye analysis, then matches to the archive by CIEDE2000 perceptual distance. The photo is never stored. Example: a Deep Winter might wear Ottoman Carbon Ink while a True Spring suits Kogi Mango.
| Name | Type | Req | Description |
|---|---|---|---|
| image_base64 | string | – | Base64 encoded portrait photo (JPEG or PNG). Face should be clearly visible in natural light. Either image_base64 or image_url required. |
| image_url | string | – | URL of a portrait photo hosted online. Easier than base64 for MCP use. Either image_url or image_base64 required. |
| media_type | string | – | Image MIME type e.g. 'image/jpeg' |
| name | string | – | Optional: person's name for the report e.g. 'Sarah' |
Structured output declared, but exposes no named fields.
No examples provided.
index_resonance Resonance Index ~178
Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequence are indistinguishable (blood as prognosis, ash as finality). 0.80 = institution mediates the colour (paint as deterrence, flag as authority). 0.50 = symbolic or associative only. Input: list of colour entries with name, hex, archive, source, notes. Output: resonance score, material origin, social function, alignment reason, confidence. Use for investigative reports, forensic briefs, museum content, editorial PDFs. This is the metric that separates Colour Memory from palette generators.
| Name | Type | Req | Description |
|---|---|---|---|
| entries | array | yes | List of colour entries to score for resonance |
| score_basis | string | – | Scoring basis (default: material_origin_to_social_consequence) |
Structured output declared, but exposes no named fields.
No examples provided.
ingest_image Ingest Image for Processing ~118
Upload an image to Colour Memory for ephemeral processing. Returns image_id valid 5 minutes. Pass image_id to palette_extract or image_brief. Use for any image over 50 KB.
| Name | Type | Req | Description |
|---|---|---|---|
| image | object | – | MCP file reference {download_url, mime_type, file_name} |
| image_base64 | string | – | Base64-encoded image data. Use this for locally uploaded files with no public URL. No size limit here (unlike palette_extract's image_base64). |
| source_url | string | – | HTTPS URL of the image |
Structured output declared, but exposes no named fields.
No examples provided.
interior_specify Interior Colour Specification — Full Room Brief ~647
Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour scheme with 60/30/10 surface assignments, archive colour names with full cultural provenance, Farrow and Ball and Little Greene paint matches, three-illuminant light behaviour (D65 daylight, F11 atrium, Illuminant A incandescent), WCAG accessibility for digital use, and a written cultural rationale explaining why each colour belongs in this room. Examples: 'bold maximalist living room', 'calm Scandi bedroom', 'Victorian study', 'coastal kitchen', 'gallery hallway'. Pass `archive` to lock the whole scheme to one named archive (e.g. 'ArtsAndCrafts', 'GeorgianPleasures') -- every returned colour will belong to it, or you get a clear error listing valid archive names rather than a silent unrestricted search. Use /interior-specification/pdf for a downloadable branded PDF version. Use house_specify instead for a multi-room scheme with cross-room provenance grouping. This is the tool that replaces a colour consultation. 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 |
|---|---|---|---|
| archive | string | – | Optional: restrict the candidate pool to this single archive before scoring, e.g. 'ArtsAndCrafts' or 'GeorgianPleasures'. Invalid names return a clear error listing valid archives rather than silentl… |
| avoid | array | – | Colours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection. |
| concept | string | yes | Room concept or brief e.g. 'bold maximalist living room' or 'calm Scandi bedroom' |
| n_colours | integer | – | Number of colours in scheme (default 5, max 7) |
| orientation | string | – | Room orientation e.g. 'north', 'south', 'east', 'west' — affects light advice |
| role_plan | array | – | Optional: the room's spatial hierarchy, decided BEFORE colours are retrieved, so retrieval can be asked for candidates that suit a named job on a named surface. The role vocabulary is open -- field,… |
| room_type | string | – | Room type e.g. 'living', 'bedroom', 'kitchen', 'study', 'bathroom', 'hallway', 'dining' |
| style | string | – | Style direction e.g. 'heritage', 'contemporary', 'maximalist', 'minimal', 'scandi', 'industrial', 'coastal' |
Structured output declared, but exposes no named fields.
No examples provided.
meta_capabilities API Capabilities Inventory ~60
Return a live inventory of all active endpoints and MCP tools. Use this first to discover what the API can do before making calls. Returns tool count, endpoint list, MCP-exposed tools, and usage notes. Deterministic -- no LLM cost.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
palette_analyse Analyse Palette Against Archive ~222
Analyse a palette of hex colours against the Colour Memory archive. For each colour returns the nearest named archive entry with cultural name, source, claim_strength (A-E), do_not_say guardrails, and alternatives when confidence is low. Palette-level deduplication ensures no two colours map to the same archive entry. Use after extracting colours from a photo or generating a palette. 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 |
|---|---|---|---|
| archive | string | – | Optional: restrict to one archive e.g. China, Pigment, ArtsAndCrafts |
| colours | array | yes | Array of colour objects |
| n | integer | – | Max alternatives per colour when confidence is low (1-3, default 1) |
Structured output declared, but exposes no named fields.
No examples provided.
palette_audit Palette Quality Audit ~189
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. 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 |
|---|---|---|---|
| market | string | – | Target market |
| medium | string | – | digital | print | both |
| palette | array | yes | Hex values to audit |
| use_case | string | – | Use case context |
Structured output declared, but exposes no named fields.
No examples provided.
palette_compare Compare Two Palettes ~173
Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional difference, and a winner verdict for the stated use case. The result already carries the rendered palette and its PNG, PDF, 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 |
|---|---|---|---|
| markets | array | – | Target markets |
| palette_a | array | yes | First palette hex values |
| palette_b | array | yes | Second palette hex values |
| use_case | string | – | Context for comparison e.g. luxury packaging |
Structured output declared, but exposes no named fields.
No examples provided.
palette_concept Generate Heritage Palette from Cultural Concept ~252
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. 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 | – | Colours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection. |
| concept | string | yes | Cultural theme or historical period e.g. 'Victorian mourning' or 'Ottoman court' |
| include_neutrals | boolean | – | Include neutral/background colours |
| n_colours | integer | – | Number of colours to return (default 5, max 8) |
Structured output declared, but exposes no named fields.
No examples provided.
palette_export Export Palette to Design Formats ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | css | figma | ase_hex | tailwind | json |
| names | array | – | Optional custom names |
| palette | array | yes | Hex values to export |
| prefix | string | – | Token prefix e.g. cm, brand (default: cm) |
Structured output declared, but exposes no named fields.
No examples provided.
palette_extract Extract Dominant Palette Colours ~381
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. 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 |
|---|---|---|---|
| analyse | boolean | – | If true, also run palette_analyse on the extracted colours and return archive names |
| archive | string | – | Explicit single archive name to restrict matching to e.g. 'MarsColour', 'Japan', 'Victorian'. |
| grey_card_hex | string | – | Hex value sampled from a grey or white card in the image for white balance correction e.g. #C8C8C8 |
| image_base64 | string | – | Base64-encoded image data (small images only, under 50 KB) |
| image_id | string | – | Ephemeral image_id from ingest_image (preferred for images over 50 KB) |
| image_url | string | – | Public URL of the image to extract colours from |
| k | integer | – | Number of colours to extract (3-12, default 6) |
| style_context | string | – | Plain English style description that restricts archive matching to a coherent set e.g. 'English cottage garden', 'Victorian', 'Japanese', 'MarsColour', 'Arts and Crafts'. Prevents palette colours fro… |
Structured output declared, but exposes no named fields.
No examples provided.
palette_finalize Finalise a chosen palette ~227
Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for the customer -- it verifies and packages your decision and returns the palette image plus PNG, SVG, PDF, ASE, JSON and CSS. It does not search, select, replace or improve anything: the colours you send are the colours that come back, in your order. Send every final colour with its name, and mark a colour source-backed only if it really is a Colour Memory archive record -- anything unverified is presented as your recommendation, which is the honest description of it.
| Name | Type | Req | Description |
|---|---|---|---|
| brief | string | – | The customer's request, in their words. |
| colours | array | yes | The final palette, in the order you want it shown. |
| notes | array | – | Short usage guidance, in your words. |
| source_anchors | array | – | Archive records that informed the palette but are not in it. Give the record's name so it can be verified. |
| title | string | – | What you are calling this palette. |
Structured output declared, but exposes no named fields.
No examples provided.
palette_generate Lock-and-Fill Palette from Archive ~280
Send a palette of up to 12 slots, locking some with hex values and leaving others empty. Empty slots are filled with the nearest CIEDE2000 archive match, interpolated from the locked anchors. Optional archive filter restricts fills to one archive. Returns full citation — name, 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. 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 |
|---|---|---|---|
| archive | string | – | Optional: restrict fills to one archive e.g. 'Oxfordshire', 'Shakespeare', 'Japan' |
| size | integer | – | Total CURATED palette size 2-12 (default 5). This is the designed-palette ceiling, not a product limit on how many colours exist: for a large colour COLLECTION, page archive_search instead. |
| slots | array | yes | List of palette slots. Each has index (0-11), optional hex, and locked flag. |
Structured output declared, but exposes no named fields.
No examples provided.
palette_gradient Archive Gradient — Lab-Interpolated Colour Journey ~326
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. 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 |
|---|---|---|---|
| anchors | array | yes | 2-5 hex values (#RRGGBB) or exact archive colour names |
| archive | string | – | Restrict snapping to this archive name e.g. Victorian |
| output_format | string | – | stops: array of colour objects. css: linear-gradient string. svg: swatch bar. |
| path | string | – | linear: straight Lab lerp (may have neutral midpoint). chroma_preserved: LCh short-arc, saturation maintained. |
| snap_to_archive | boolean | – | Snap each stop to nearest archive colour (default true) |
| steps | integer | – | Total stops including anchors (default 7, max 20) |
Structured output declared, but exposes no named fields.
No examples provided.
palette_heritage Heritage Palette Evolution ~216
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. 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_name | string | – | Brand name for CSS tokens |
| context | string | – | Brand context |
| market | string | – | Target market |
| n_additions | integer | – | Archive colours to add (default 3) |
| palette | array | yes | Existing hex values |
Structured output declared, but exposes no named fields.
No examples provided.
palette_iterate Iterate and Refine a Palette ~228
Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or better for Gen Z luxury. Returns a refined palette with archive grounding and change rationale. The result already 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 |
|---|---|---|---|
| direction | string | – | Alias for feedback — natural language direction e.g. more dangerous, more historical, warmer |
| feedback | string | yes | Natural language refinement e.g. more melancholic |
| markets | array | – | Target markets |
| n_results | integer | – | Number of variants to return (default 1) |
| palette | array | yes | Current hex palette to refine |
| use_case | string | – | Use case context e.g. luxury homewares |
Structured output declared, but exposes no named fields.
No examples provided.
palette_light_dark Palette Light and Dark Mode Maps ~159
Generate light-mode and dark-mode role maps from a palette. Analyses LRV, assigns background/surface/text/accent roles for each mode, checks body text contrast safety, and flags missing neutrals. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and 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 |
|---|---|---|---|
| palette | array | yes | Array of hex values |
| use_case | string | – | Use case context e.g. UI, dashboard, report |
Structured output declared, but exposes no named fields.
No examples provided.
palette_pdf Generate Palette PDF ~1,153
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. Alternative input mode: pass `sections` instead of `entries` for a grouped, multi-section document (e.g. house_specify's rooms) instead of one page per flat colour card. Each section has a title, rationale, and its own entries. `presentation.template` picks the layout: 'sectioned_specification' (clean grid-per-section spec sheet) or 'colour_drenched_lookbook' (hero colour fills the page, swatches cover most of it, citations collected into a final appendix rather than shrunk onto every page). T…
| Name | Type | Req | Description |
|---|---|---|---|
| delivery | string | – | 'url' (default): signed, time-limited R2 download link. 'base64': PDF bytes returned inline as pdf_base64 for callers that need the file directly. |
| entries | array | – | Array of colour cards. Either the flat entries array from query_hex/palette_concept, or report['presented_cards'] from archive_report_brief (single_cultivar, colour_family, and conservative-mode hero… |
| house | object | – | Alternative to `entries`/`sections` -- pass house_specify's full response object unmodified (house_title, house_thesis, progression, shared_house_palette, rooms) to render the complete flagship docum… |
| house_ref | string | – | Preferred alternative to `house` -- the house_ref string house_specify returns in its own response (valid for 30 minutes after that call, or per project_persistence for a durable/temporary project).… |
| presentation | object | – | Used with `sections` or `house`. {template: 'sectioned_specification'|'colour_drenched_lookbook' (sections only), page_size?: 'A4-portrait'|'A4-landscape'|'16:9', minimum_colour_coverage?: number (de… |
| project_id | string | – | Alternative to house_ref for an authenticated (keyed) caller's own durable project -- the project_id house_specify returned. Requires the same API key that created the project. |
| project_version | integer | – | Used with either house_ref or project_id -- render this specific immutable version instead of the project's current version. Omit to render the current version. |
| query | string | – | Optional title for the palette e.g. Ottoman imperial luxury |
| sections | array | – | Alternative to `entries` -- one entry per document section, e.g. house_specify's rooms. Each: {title, subtitle?, rationale, grouping_basis?, hero_hex?, entries: [...colour cards...], application_note… |
| source | string | – | Optional source label e.g. brand, conceptual |
Structured output declared, but exposes no named fields.
No examples provided.
palette_specify Specify Colour Palette for a Room ~180
Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the 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 |
|---|---|---|---|
| colours | array | yes | List of 2-8 hex values |
| room_type | string | – | e.g. 'living', 'bedroom', 'kitchen', 'study' |
| style | string | – | e.g. 'heritage', 'contemporary', 'minimal' |
Structured output declared, but exposes no named fields.
No examples provided.
palette_strict Strict Archive-Filtered Palette from Concept ~235
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. 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 |
|---|---|---|---|
| allowed_archives | array | – | Archive names to restrict results e.g. ['Japan', 'China'] |
| concept | string | yes | Cultural concept e.g. Japanese wabi-sabi |
| include_neutrals | boolean | – | Include neutral tones (default true) |
| min_relevance | number | – | Minimum relevance score 0-1 (default 0.3) |
| n_colours | integer | – | Number of colours (default 5) |
Structured output declared, but exposes no named fields.
No examples provided.
palette_swatch Generate Palette Swatch Image ~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.).
| Name | Type | Req | Description |
|---|---|---|---|
| h | integer | – | Output height in pixels (default 630) |
| hexes | string | yes | Comma-separated hex values e.g. #d4a829,#1a5c6e,#0a0a0b |
| layout | string | – | photo | equal | grid | gradient | filmstrip | 6310 | 7020 | 5030 | 8010 | 5050 | 6040 | triptych | quad | 55-25-20 | quint | 70-10-20 | 40-30-20-10 | 33-33-24-10. gradient is a true smooth perceptual… |
| w | integer | – | Output width in pixels (default 1200) |
| weights | string | – | Comma-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 Translate Any Palette into a Named Archive ~261
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. 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 |
|---|---|---|---|
| max_delta_e | number | – | Max acceptable CIEDE2000 distance — above this is flagged out-of-threshold (default 40) |
| palette | array | yes | List of hex values to translate e.g. ['#F5F0E8', '#8B6B3D'] |
| target_archive | string | yes | Archive to translate into e.g. 'Shakespeare', 'Japan', 'Oxfordshire' |
Structured output declared, but exposes no named fields.
No examples provided.
palette_verdict Is This Palette Working? ~298
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'. 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 |
|---|---|---|---|
| market | string | – | Optional: target market e.g. 'UK', 'Japan', 'global' |
| medium | string | – | Application medium e.g. 'interior', 'digital', 'fashion', 'print' |
| palette | array | yes | List of 2-8 hex values e.g. ['#31559B', '#E8D898', '#4A2A50'] |
| use_case | string | yes | What the palette will be used for e.g. 'luxury cushion collection', 'brand identity' |
Structured output declared, but exposes no named fields.
No examples provided.
project_delete Delete a Durable Project ~100
Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped response either way, and never discloses which case occurred. Version rows are never physically erased. Once deleted, a project can no longer be resolved by project_id or house_ref.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The project_id returned by house_specify for an authenticated (keyed) call. |
Structured output declared, but exposes no named fields.
No examples provided.
project_export Export House Project as Editable DOCX or XLSX ~513
Export the same house-flagship content palette_pdf renders as a genuinely editable Word document or Excel workbook -- for a client who needs to annotate the scheme, or a contractor building a materials/procurement schedule from it. Accepts exactly one of house, house_ref, or project_id (same resolution and ownership rules as palette_pdf: an authenticated project_id or house_ref requires its owner; an anonymous temporary house_ref works bearer-only). Never calls house_specify, never re-runs reasoning or re-matches archives -- it renders exactly what was already resolved and stored. DOCX mirrors the PDF flagship's structure (title page, house thesis, whole-house progression, one section per room, implementation details with the same historical/digital-estimate/commercial-candidate distinction, and a deduplicated source appendix) as real editable paragraphs and tables, never images. XLSX produces three sheets: Finishes Schedule (one row per room-surface-colour assignment), Evidence Register (one row per unique colour, the full citation/claim-strength/do_not_say trail), and Paint Procurement (one row per unique paint product, deduplicated for ordering). Every field left blank where the underlying stored data doesn't have it -- nothing is invented. delivery="url" (default) gives a signed R2 download link; delivery="base64" returns the file inline unless the encoded result is too large, in which case it fails closed with OUTPUT_TOO_LARGE_FOR_INLINE_DELIVERY and a repair instruction to use delivery="url" instead.
| Name | Type | Req | Description |
|---|---|---|---|
| delivery | string | – | 'url' (default): signed, time-limited R2 download link. 'base64': file bytes returned inline as file_base64, unless too large -- see OUTPUT_TOO_LARGE_FOR_INLINE_DELIVERY. |
| format | string | yes | Which editable format to produce. |
| house | object | – | house_specify's full response object, unmodified -- alternative to house_ref/project_id. PREFER house_ref or project_id when available. |
| house_ref | string | – | The house_ref string house_specify returns. For a durable (authenticated) project this also requires the same API key that created it. |
| project_id | string | – | The project_id returned by house_specify for an authenticated (keyed) call. Requires the same API key that created the project. |
| project_version | integer | – | Used with either house_ref or project_id -- export this specific immutable version instead of the project's current version. Omit to export the current version. |
Structured output declared, but exposes no named fields.
No examples provided.
project_get Get Durable Project (Summary Only) ~166
Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamps, and the content hash of the requested version. Requires an API key; the project must belong to the calling key. Does NOT return the full house specification (rooms, colours, sources) -- use house_ref with palette_pdf to render a document from a project, or project_versions to see its version history. An unknown, deleted, expired, or not-owned project_id all return the same generic not-found response, by design.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The project_id returned by house_specify for an authenticated (keyed) call. |
| version | integer | – | Specific version number to describe. Omit for the project's current version. |
Structured output declared, but exposes no named fields.
No examples provided.
project_list List Your Durable Projects ~169
List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonymous projects are never listable, only resolvable directly by their house_ref. Requires an API key.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Opaque pagination cursor -- pass the previous response's next_cursor to get the next page. |
| include_deleted | boolean | – | Include soft-deleted projects (still owner-scoped). Default false. |
| limit | integer | – | Max projects to return, default 50, capped at 200. |
| project_type | string | – | Filter by project type, e.g. 'house'. Omit for all types. |
| updated_since | string | – | ISO 8601 timestamp -- only return projects updated after this time. |
Structured output declared, but exposes no named fields.
No examples provided.
project_versions List a Project's Version History ~99
List every stored version of a durable house project you own, oldest first, with each version's content hash, build/schema/archive revision, and creation time. Version 1 is always immutable and always present. Earlier versions remain renderable via palette_pdf's project_version input even after a newer version exists. Requires an API key and ownership.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The project_id returned by house_specify for an authenticated (keyed) call. |
Structured output declared, but exposes no named fields.
No examples provided.
query_conceptual Search Colours by Concept or Culture ~214
Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'grief' (returns Ophelia Violet, Titan's Grief), 'toxic Victorian pigments' (returns Nightshade Poison Berry Purple, Victorian Arsenic Mirror Silver), or 'the sea at dusk' (returns Evening Sea, Thames Blue Dusk). Even a vague or personal-sounding query never comes back empty -- result_path in the response tells you honestly whether this was a 'direct' hit, a 'broadened' retry (relaxed match threshold), or a 'redirected' fallback (dropped an archive restriction or switched to full-corpus semantic search).
| Name | Type | Req | Description |
|---|---|---|---|
| archive | string | – | Optional: restrict to a named archive e.g. 'Japan', 'Pigment', 'OttomanEmpire' |
| n_results | integer | – | Number of results (default 5) |
| query | string | yes | The colour concept or cultural question to search for |
Structured output declared, but exposes no named fields.
No examples provided.
query_hex Find Named Colours by Hex Code ~78
Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance.
| Name | Type | Req | Description |
|---|---|---|---|
| archive | string | – | Optional: restrict to a named archive |
| hex | string | yes | Hex value with or without # e.g. '#8B4513' |
| n_results | integer | – | Number of results (default 5) |
Structured output declared, but exposes no named fields.
No examples provided.
render_colour_result ~493
Show a finished colour result to the customer AS COLOUR. Call this last, once the palette, house scheme, brand system or audit you are going to hand over has been decided -- it presents what you already have and chooses nothing. Do not call it for a single contrast figure, a colour history question with no palette, or tool guidance. Send the story with it: one sentence on what the scheme IS, the design decision you made, and the one rule worth remembering. The colours cannot carry those on their own.
| Name | Type | Req | Description |
|---|---|---|---|
| bridge | object | – | Where the evidence started and where you took it. Include `colours` on a side ONLY if you have real colour values for it -- an invented source swatch beside a real archive one reads as evidence and i… |
| checks | array | – | – |
| colours | array | yes | The colours you are handing over, in order. |
| design_move | string | – | At most two sentences on the decision you made -- what the evidence offered and what you did with it. This is usually the most interesting thing in your answer and the part a list of colours cannot c… |
| evidence_boundary | string | – | What is source-backed and what is your interpretation. Say it plainly: 'Designed contemporary interpretation, not a measured historical paint specification.' |
| evidence_summary | string | – | – |
| evidence_thread | array | – | Three to five short sources or references that shaped this. Orientation, not a bibliography. |
| key_rule | string | – | The one rule worth remembering, short enough to repeat to a decorator. 'Boathouse Clay stays tiny. Never a wall.' |
| kind | string | – | palette, house, brand or audit. |
| proportions | array | – | Only where a real share was decided. Every colour gets one and they total 100, or leave this out entirely -- a share nobody decided reads as a measurement nobody took. |
| rooms | array | – | For a multi-room scheme: one short line per room, in your own words. What that room is doing with the palette. |
| story_thesis | string | – | ONE sentence: what this scheme IS. 'Danish coastal colour, domesticated for a summer house.' Shown above the palette, so it must earn its line. |
| title | string | – | What this result is, in the customer's terms. |
| verdict | string | – | One sentence, shown under the colour. |
Structured output declared, but exposes no named fields.
No examples provided.
session_brief Forensic 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.
| Name | Type | Req | Description |
|---|---|---|---|
| archives | array | – | Archives to draw from |
| audience | string | – | Target audience e.g. 'serious collector' |
| avoid | array | – | Themes to suppress |
| confidence_threshold | number | – | Min confidence 0-1 (default 0.6) |
| minimum_claim_strength | string | – | Hard evidence-grade floor: A, B, C, D, or E. Never silently relaxed. |
| n_colours | integer | – | Number of colour cards (default 8) |
| period_end | integer | – | End year e.g. 1830 |
| period_start | integer | – | Start year e.g. 1714 |
| strict_sources | boolean | – | Only include entries with named primary sources |
| target_period | string | – | Historical period e.g. 'Georgian England 1714-1830' |
| themes | array | yes | Research themes |
| title | string | – | Brief title e.g. 'The Colours of Pleasure' |
| tone | string | – | forensic | editorial | clinical | narrative |
Structured output declared, but exposes no named fields.
No examples provided.
style_match Style Match — Does This Go With That? ~300
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?' 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 |
|---|---|---|---|
| ask | string | – | Optional: specific question e.g. 'what bag colour works?' or 'do the shoes work?' |
| items | array | yes | List of outfit items with label and hex colour |
| occasion | string | – | Optional: occasion context e.g. 'daytime', 'evening', 'office', 'casual', 'wedding guest' |
Structured output declared, but exposes no named fields.
No examples provided.
system_status Colour Memory Diagnostic / Version Status ~110
Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at, server_environment). Use this to confirm you're seeing the current deployed schema -- e.g. if a tool you expect (like house_specify) seems to be missing, call this first and compare schema_hash against another connection before assuming the server is wrong; a mismatch usually means one connection is holding a stale cached manifest, not a real deployment gap.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
tool_guide Tool Routing Guide ~159
Deterministic tool-routing lookup -- not an LLM call, always instant, never consumes archive or LLM credit. Give it a goal in plain words (e.g. 'I have a brand colour and want to check it against competitors', 'I want to paint a whole house', 'I have a photo and want the colours from it') and it returns exactly which tool to call first, what to call next, and which superficially-similar tools NOT to start with and why. Use this before guessing between similarly-named tools (e.g. palette_specify vs interior_specify vs house_specify, or colour_passport vs colour_dna).
| Name | Type | Req | Description |
|---|---|---|---|
| goal | string | yes | Plain-English description of what you're trying to do. |
| Name | Type | Req | Description |
|---|---|---|---|
| do_not_start_with | array | – | – |
| reason | string | – | – |
| start_with | string | – | – |
| then | array | – | – |
No examples provided.
ui_states UI State Palette Generator ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| background_hex | string | – | Background hex (default #FFFFFF) |
| brand_hex | string | yes | Brand colour hex e.g. '#D4A829' |
| dark_mode | boolean | – | Generate for dark mode (default false) |
Structured output declared, but exposes no named fields.
No examples provided.
vanderpoel_pairing Vanderpoel Pairing ~361
Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), served from the build artefacts vanderpoel_dyads.json and vanderpoel_triads.json. Snaps an input hex to the nearest of Vanderpoel's eleven real hue-family labels, resolves that hex against the archive, and returns every documented dyad or triad the label belongs to -- each OTHER member carrying its own nearest real archive match (CIEDE2000), with hex_collision disclosed when the match is tied. Unlike hay_contrast, this carries NO proportional ratio -- only Vanderpoel's own categorical 'good' editorial judgement, printed verbatim on the plates. Returns groupings: null for a near-neutral input, where hue is not meaningfully defined, or when the nearest hue-family label is a member of no dyad or triad -- silence is the honest answer, not a forced match. Member names come from a transcriber's digitisation_alt_text (an accessibility description of the plate image), not verified printed captions; every response states this caveat explicitly (member_source_caveat), not just a code comment. The hue positions used to snap an input to a label are a modern matching convention, not a number Vanderpoel printed -- disclosed per response as label_placement_basis.
| Name | Type | Req | Description |
|---|---|---|---|
| hex | string | yes | Hex colour, e.g. '#CC1A14'. |
| n_per_member | integer | – | Archive candidates per partner member (1-5). Default 1, which returns a single archive_match object rather than a list. |
| Name | Type | Req | Description |
|---|---|---|---|
| covered | boolean | – | – |
| degrees_from_nearest_named_hue | number|null | – | – |
| groupings | array|null | – | Documented dyads/triads containing the snapped label. Each carries other_member_labels (Vanderpoel's own words), other_members (each with archive_match and hex_collision), judgement, judgement_basis_… |
| input_archive_match | object|null | – | Nearest real archive colour to the input itself, or null if nothing is near enough. |
| input_hex | string | – | – |
| input_snapped_to | string|null | – | Vanderpoel hue-family label the input snapped to. |
| label_placement_basis | string | – | States that the snap angles are a modern convention, not a number Vanderpoel printed. |
| member_source_caveat | string | – | – |
| reason | string | – | – |
No examples provided.
why_connected Why Connected ~146
Are these two specific archive records connected -- and if so, exactly why? Traces the real path between them through Colour Memory's stored relationship graph (e.g. two Wada colours that share membership in the same published combination) and returns the actual path, not just a yes/no. States plainly when two records are NOT connected, and always states what a shared connection does not prove -- e.g. that two colours sharing a Wada combination were independently asserted as a pair, not just co-published in the same numbered plate. Get record_id values from archive_search or colour_card.
| Name | Type | Req | Description |
|---|---|---|---|
| a | string | yes | First record id. |
| b | string | yes | Second record id. |
| Name | Type | Req | Description |
|---|---|---|---|
| connected | boolean | – | – |
| does_not_mean | array | – | – |
| explanation | string | – | – |
| hops | integer|null | – | – |
| path | array | – | – |
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.