{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_sywyjxq3gtg4","handle":"colour-memory","url":"https://wellknown.network/agents/colour-memory","links":{"self":"https://wellknown.network/agents/colour-memory/record.json","html":"https://wellknown.network/agents/colour-memory","markdown":"https://wellknown.network/agents/colour-memory/record.md","api":"https://wellknown.network/api/v1/agents/colour-memory","status":"https://wellknown.network/api/v1/agents/colour-memory/status","claim":"https://wellknown.network/agents/colour-memory/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/colour-memory/claim.json","badge":"https://wellknown.network/agents/colour-memory/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/colour-memory/history","tools":"https://wellknown.network/api/v1/agents/colour-memory/tools"},"ard":{"identifier":"urn:air:api.colourmemory.com:server:colour-memory","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Colour Memory","summary":"Colour meaning, history and evidence for AI: 45,000+ source-graded colour records and 91 tools.","description":"Colour meaning, history and evidence for AI: 45,000+ source-graded colour records and 91 tools.","publisher":{"name":"DigbyO","url":null},"homepage":"https://www.colourmemory.com","repository":"https://github.com/DigbyO/colour-memory-api","version":"2.3.5","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://api.colourmemory.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"https://colour-memory-api-production.up.railway.app/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-06T08:43:39.940918Z","publishedAt":"2026-10-06T08:43:39.940918Z","registryName":"io.github.DigbyO/colour-memory"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"media.image-generation","name":"Image Generation","confidence":1,"provenance":"derived"},{"slug":"knowledge.memory","name":"Agent Memory","confidence":1,"provenance":"derived"},{"slug":"media.3d","name":"3D & Design","confidence":0.977,"provenance":"derived"},{"slug":"documents.conversion","name":"Document Conversion","confidence":0.977,"provenance":"derived"},{"slug":"content.translation","name":"Translation","confidence":0.54,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.54,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"}],"categories":["commerce","content","dev","documents","knowledge","media"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 46m ago.","lastOkAt":"2026-10-10T00:28:34.019Z","lastProbedAt":"2026-10-10T00:28:34.019Z","statusComputedAt":"2026-10-10T00:29:58.280Z","reliability30d":{"probes":120,"successRate":0.9917,"p50Ms":207,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":120,"ok":119,"authBoundaryOk":0,"serviceOk":119,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T00:28:34.019Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":201,"error":null,"detail":{"tools":[{"name":"query_conceptual","description":"Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'gr"},{"name":"extract_image_colours","description":"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 onl"},{"name":"query_hex","description":"Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance."},{"name":"palette_specify","description":"Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names."},{"name":"colour_metrics","description":"Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma "},{"name":"colour_harmonies","description":"Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838"},{"name":"accessibility_check","description":"Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibili"},{"name":"accessibility_matrix","description":"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 "},{"name":"accessibility_rules","description":"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 co"},{"name":"colour_slugs","description":"Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-g"},{"name":"palette_light_dark","description":"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 "},{"name":"accessibility_font","description":"Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for bod"},{"name":"archive_search","description":"Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical per"},{"name":"colour_combination","description":"Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summa"},{"name":"palette_strict","description":"Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] "},{"name":"archive_report_document","description":"Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word"},{"name":"palette_pdf","description":"Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, p"},{"name":"palette_audit","description":"Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, g"},{"name":"brand_system","description":"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, d"},{"name":"brand_asset_pack","description":"Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs "},{"name":"accessibility_simulate","description":"Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, "},{"name":"colour_match_paint","description":"Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene."},{"name":"colour_card","description":"Look up a named colour and return its hex, archive, provenance, and cultural notes."},{"name":"meta_capabilities","description":"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 "},{"name":"system_status","description":"Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at,"},{"name":"colour_story","description":"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 civilisation"},{"name":"palette_concept","description":"Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and prov"},{"name":"colour_mix","description":"Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its neare"},{"name":"colour_timeline","description":"Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entr"},{"name":"image_palette","description":"Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provena"},{"name":"colour_compare","description":"Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, pl"},{"name":"colour_cultural_risk","description":"Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_pa"},{"name":"design_session","description":"One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrati"},{"name":"image_personal","description":"Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, med"},{"name":"style_match","description":"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, be"},{"name":"interior_specify","description":"Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour sc"},{"name":"house_specify","description":"Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance ("},{"name":"palette_generate","description":"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, interp"},{"name":"palette_gradient","description":"Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor"},{"name":"palette_translate","description":"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"},{"name":"archive_cliche","description":"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', 'gri"},{"name":"colour_verdict","description":"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 strengt"},{"name":"palette_verdict","description":"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 "},{"name":"agent_brief","description":"Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, t"},{"name":"colour_strategy","description":"Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hook"},{"name":"archive_report_brief","description":"One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, numb"},{"name":"palette_heritage","description":"Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and s"},{"name":"archive_coverage_gap","description":"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, entr"},{"name":"archive_cultural_anachronism","description":"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 "},{"name":"session_brief","description":"Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support"},{"name":"index_resonance","description":"Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequen"},{"name":"archive_evidence_gap","description":"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 "},{"name":"brand_collision","description":"Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE"},{"name":"brand_report","description":"One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, "},{"name":"brand_audit","description":"Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of"},{"name":"agent_verify","description":"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 "},{"name":"colour_passport","description":"Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive "},{"name":"colour_passports","description":"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, ev"},{"name":"colour_dna","description":"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 "},{"name":"ecommerce_copy","description":"Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long"},{"name":"colour_hooks","description":"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"},{"name":"archive_provenance","description":"Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. "},{"name":"colour_forensics","description":"Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required"},{"name":"palette_iterate","description":"Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or bett"},{"name":"colour_variants","description":"For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers explo"},{"name":"palette_export","description":"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. Emb"},{"name":"palette_compare","description":"Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional differenc"},{"name":"ecommerce_namer","description":"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 --"},{"name":"ui_states","description":"Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, "},{"name":"colour_namer","description":"Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial,"},{"name":"palette_swatch","description":"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. Suppo"},{"name":"palette_analyse","description":"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_st"},{"name":"ingest_image","description":"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 "},{"name":"palette_extract","description":"Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weig"},{"name":"image_brief","description":"Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, un"},{"name":"project_get","description":"Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamp"},{"name":"project_list","description":"List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonym"},{"name":"project_versions","description":"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. "},{"name":"project_delete","description":"Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped resp"},{"name":"project_export","description":"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 sch"},{"name":"brand_guideline_specify","description":"Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, ea"},{"name":"brand_guideline_status","description":"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 -"},{"name":"brand_guideline_select","description":"Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produc"},{"name":"brand_guideline_pdf","description":"Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour syste"},{"name":"brand_guideline_claims","description":"Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/loca"},{"name":"render_colour_result","description":"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 be"},{"name":"palette_finalize","description":"Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for t"},{"name":"tool_guide","description":"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 "},{"name":"historical_colour_query","description":"Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source "},{"name":"colour_relationships","description":"What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 34"},{"name":"why_connected","description":"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 "},{"name":"vanderpoel_pairing","description":"Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), se"}],"toolCount":92,"toolsHash":"5d71881ad224a5cea4bd4b41131fed46baecd94a19d95bb31b38e79c0b2fbdf1","serverName":"colour-memory","capabilities":["tools","resources"],"serverVersion":"2.3.4","protocolVersion":"2025-11-25"}},{"at":"2026-10-09T23:30:52.072Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":187,"error":null,"detail":{"tools":[{"name":"query_conceptual","description":"Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'gr"},{"name":"extract_image_colours","description":"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 onl"},{"name":"query_hex","description":"Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance."},{"name":"palette_specify","description":"Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names."},{"name":"colour_metrics","description":"Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma "},{"name":"colour_harmonies","description":"Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838"},{"name":"accessibility_check","description":"Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibili"},{"name":"accessibility_matrix","description":"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 "},{"name":"accessibility_rules","description":"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 co"},{"name":"colour_slugs","description":"Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-g"},{"name":"palette_light_dark","description":"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 "},{"name":"accessibility_font","description":"Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for bod"},{"name":"archive_search","description":"Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical per"},{"name":"colour_combination","description":"Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summa"},{"name":"palette_strict","description":"Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] "},{"name":"archive_report_document","description":"Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word"},{"name":"palette_pdf","description":"Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, p"},{"name":"palette_audit","description":"Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, g"},{"name":"brand_system","description":"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, d"},{"name":"brand_asset_pack","description":"Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs "},{"name":"accessibility_simulate","description":"Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, "},{"name":"colour_match_paint","description":"Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene."},{"name":"colour_card","description":"Look up a named colour and return its hex, archive, provenance, and cultural notes."},{"name":"meta_capabilities","description":"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 "},{"name":"system_status","description":"Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at,"},{"name":"colour_story","description":"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 civilisation"},{"name":"palette_concept","description":"Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and prov"},{"name":"colour_mix","description":"Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its neare"},{"name":"colour_timeline","description":"Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entr"},{"name":"image_palette","description":"Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provena"},{"name":"colour_compare","description":"Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, pl"},{"name":"colour_cultural_risk","description":"Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_pa"},{"name":"design_session","description":"One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrati"},{"name":"image_personal","description":"Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, med"},{"name":"style_match","description":"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, be"},{"name":"interior_specify","description":"Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour sc"},{"name":"house_specify","description":"Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance ("},{"name":"palette_generate","description":"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, interp"},{"name":"palette_gradient","description":"Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor"},{"name":"palette_translate","description":"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"},{"name":"archive_cliche","description":"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', 'gri"},{"name":"colour_verdict","description":"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 strengt"},{"name":"palette_verdict","description":"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 "},{"name":"agent_brief","description":"Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, t"},{"name":"colour_strategy","description":"Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hook"},{"name":"archive_report_brief","description":"One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, numb"},{"name":"palette_heritage","description":"Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and s"},{"name":"archive_coverage_gap","description":"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, entr"},{"name":"archive_cultural_anachronism","description":"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 "},{"name":"session_brief","description":"Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support"},{"name":"index_resonance","description":"Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequen"},{"name":"archive_evidence_gap","description":"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 "},{"name":"brand_collision","description":"Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE"},{"name":"brand_report","description":"One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, "},{"name":"brand_audit","description":"Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of"},{"name":"agent_verify","description":"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 "},{"name":"colour_passport","description":"Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive "},{"name":"colour_passports","description":"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, ev"},{"name":"colour_dna","description":"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 "},{"name":"ecommerce_copy","description":"Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long"},{"name":"colour_hooks","description":"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"},{"name":"archive_provenance","description":"Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. "},{"name":"colour_forensics","description":"Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required"},{"name":"palette_iterate","description":"Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or bett"},{"name":"colour_variants","description":"For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers explo"},{"name":"palette_export","description":"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. Emb"},{"name":"palette_compare","description":"Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional differenc"},{"name":"ecommerce_namer","description":"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 --"},{"name":"ui_states","description":"Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, "},{"name":"colour_namer","description":"Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial,"},{"name":"palette_swatch","description":"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. Suppo"},{"name":"palette_analyse","description":"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_st"},{"name":"ingest_image","description":"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 "},{"name":"palette_extract","description":"Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weig"},{"name":"image_brief","description":"Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, un"},{"name":"project_get","description":"Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamp"},{"name":"project_list","description":"List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonym"},{"name":"project_versions","description":"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. "},{"name":"project_delete","description":"Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped resp"},{"name":"project_export","description":"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 sch"},{"name":"brand_guideline_specify","description":"Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, ea"},{"name":"brand_guideline_status","description":"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 -"},{"name":"brand_guideline_select","description":"Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produc"},{"name":"brand_guideline_pdf","description":"Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour syste"},{"name":"brand_guideline_claims","description":"Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/loca"},{"name":"render_colour_result","description":"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 be"},{"name":"palette_finalize","description":"Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for t"},{"name":"tool_guide","description":"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 "},{"name":"historical_colour_query","description":"Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source "},{"name":"colour_relationships","description":"What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 34"},{"name":"why_connected","description":"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 "},{"name":"vanderpoel_pairing","description":"Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), se"}],"toolCount":92,"toolsHash":"5d71881ad224a5cea4bd4b41131fed46baecd94a19d95bb31b38e79c0b2fbdf1","serverName":"colour-memory","capabilities":["tools","resources"],"serverVersion":"2.3.4","protocolVersion":"2025-11-25"}},{"at":"2026-10-09T17:27:57.603Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":298,"error":null,"detail":{"tools":[{"name":"query_conceptual","description":"Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'gr"},{"name":"extract_image_colours","description":"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 onl"},{"name":"query_hex","description":"Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance."},{"name":"palette_specify","description":"Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names."},{"name":"colour_metrics","description":"Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma "},{"name":"colour_harmonies","description":"Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838"},{"name":"accessibility_check","description":"Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibili"},{"name":"accessibility_matrix","description":"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 "},{"name":"accessibility_rules","description":"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 co"},{"name":"colour_slugs","description":"Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-g"},{"name":"palette_light_dark","description":"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 "},{"name":"accessibility_font","description":"Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for bod"},{"name":"archive_search","description":"Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical per"},{"name":"colour_combination","description":"Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summa"},{"name":"palette_strict","description":"Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] "},{"name":"archive_report_document","description":"Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word"},{"name":"palette_pdf","description":"Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, p"},{"name":"palette_audit","description":"Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, g"},{"name":"brand_system","description":"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, d"},{"name":"brand_asset_pack","description":"Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs "},{"name":"accessibility_simulate","description":"Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, "},{"name":"colour_match_paint","description":"Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene."},{"name":"colour_card","description":"Look up a named colour and return its hex, archive, provenance, and cultural notes."},{"name":"meta_capabilities","description":"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 "},{"name":"system_status","description":"Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at,"},{"name":"colour_story","description":"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 civilisation"},{"name":"palette_concept","description":"Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and prov"},{"name":"colour_mix","description":"Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its neare"},{"name":"colour_timeline","description":"Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entr"},{"name":"image_palette","description":"Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provena"},{"name":"colour_compare","description":"Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, pl"},{"name":"colour_cultural_risk","description":"Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_pa"},{"name":"design_session","description":"One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrati"},{"name":"image_personal","description":"Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, med"},{"name":"style_match","description":"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, be"},{"name":"interior_specify","description":"Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour sc"},{"name":"house_specify","description":"Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance ("},{"name":"palette_generate","description":"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, interp"},{"name":"palette_gradient","description":"Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor"},{"name":"palette_translate","description":"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"},{"name":"archive_cliche","description":"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', 'gri"},{"name":"colour_verdict","description":"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 strengt"},{"name":"palette_verdict","description":"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 "},{"name":"agent_brief","description":"Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, t"},{"name":"colour_strategy","description":"Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hook"},{"name":"archive_report_brief","description":"One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, numb"},{"name":"palette_heritage","description":"Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and s"},{"name":"archive_coverage_gap","description":"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, entr"},{"name":"archive_cultural_anachronism","description":"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 "},{"name":"session_brief","description":"Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support"},{"name":"index_resonance","description":"Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequen"},{"name":"archive_evidence_gap","description":"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 "},{"name":"brand_collision","description":"Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE"},{"name":"brand_report","description":"One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, "},{"name":"brand_audit","description":"Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of"},{"name":"agent_verify","description":"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 "},{"name":"colour_passport","description":"Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive "},{"name":"colour_passports","description":"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, ev"},{"name":"colour_dna","description":"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 "},{"name":"ecommerce_copy","description":"Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long"},{"name":"colour_hooks","description":"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"},{"name":"archive_provenance","description":"Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. "},{"name":"colour_forensics","description":"Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required"},{"name":"palette_iterate","description":"Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or bett"},{"name":"colour_variants","description":"For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers explo"},{"name":"palette_export","description":"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. Emb"},{"name":"palette_compare","description":"Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional differenc"},{"name":"ecommerce_namer","description":"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 --"},{"name":"ui_states","description":"Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, "},{"name":"colour_namer","description":"Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial,"},{"name":"palette_swatch","description":"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. Suppo"},{"name":"palette_analyse","description":"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_st"},{"name":"ingest_image","description":"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 "},{"name":"palette_extract","description":"Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weig"},{"name":"image_brief","description":"Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, un"},{"name":"project_get","description":"Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamp"},{"name":"project_list","description":"List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonym"},{"name":"project_versions","description":"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. "},{"name":"project_delete","description":"Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped resp"},{"name":"project_export","description":"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 sch"},{"name":"brand_guideline_specify","description":"Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, ea"},{"name":"brand_guideline_status","description":"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 -"},{"name":"brand_guideline_select","description":"Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produc"},{"name":"brand_guideline_pdf","description":"Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour syste"},{"name":"brand_guideline_claims","description":"Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/loca"},{"name":"render_colour_result","description":"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 be"},{"name":"palette_finalize","description":"Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for t"},{"name":"tool_guide","description":"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 "},{"name":"historical_colour_query","description":"Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source "},{"name":"colour_relationships","description":"What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 34"},{"name":"why_connected","description":"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 "},{"name":"vanderpoel_pairing","description":"Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), se"}],"toolCount":92,"toolsHash":"5d71881ad224a5cea4bd4b41131fed46baecd94a19d95bb31b38e79c0b2fbdf1","serverName":"colour-memory","capabilities":["tools","resources"],"serverVersion":"2.3.4","protocolVersion":"2025-11-25"}},{"at":"2026-10-09T17:27:49.277Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":199,"error":null,"detail":{"tools":[{"name":"query_conceptual","description":"Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'gr"},{"name":"extract_image_colours","description":"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 onl"},{"name":"query_hex","description":"Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance."},{"name":"palette_specify","description":"Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names."},{"name":"colour_metrics","description":"Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma "},{"name":"colour_harmonies","description":"Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838"},{"name":"accessibility_check","description":"Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibili"},{"name":"accessibility_matrix","description":"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 "},{"name":"accessibility_rules","description":"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 co"},{"name":"colour_slugs","description":"Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-g"},{"name":"palette_light_dark","description":"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 "},{"name":"accessibility_font","description":"Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for bod"},{"name":"archive_search","description":"Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical per"},{"name":"colour_combination","description":"Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summa"},{"name":"palette_strict","description":"Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] "},{"name":"archive_report_document","description":"Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word"},{"name":"palette_pdf","description":"Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, p"},{"name":"palette_audit","description":"Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, g"},{"name":"brand_system","description":"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, d"},{"name":"brand_asset_pack","description":"Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs "},{"name":"accessibility_simulate","description":"Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, "},{"name":"colour_match_paint","description":"Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene."},{"name":"colour_card","description":"Look up a named colour and return its hex, archive, provenance, and cultural notes."},{"name":"meta_capabilities","description":"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 "},{"name":"system_status","description":"Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at,"},{"name":"colour_story","description":"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 civilisation"},{"name":"palette_concept","description":"Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and prov"},{"name":"colour_mix","description":"Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its neare"},{"name":"colour_timeline","description":"Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entr"},{"name":"image_palette","description":"Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provena"},{"name":"colour_compare","description":"Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, pl"},{"name":"colour_cultural_risk","description":"Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_pa"},{"name":"design_session","description":"One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrati"},{"name":"image_personal","description":"Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, med"},{"name":"style_match","description":"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, be"},{"name":"interior_specify","description":"Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour sc"},{"name":"house_specify","description":"Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance ("},{"name":"palette_generate","description":"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, interp"},{"name":"palette_gradient","description":"Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor"},{"name":"palette_translate","description":"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"},{"name":"archive_cliche","description":"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', 'gri"},{"name":"colour_verdict","description":"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 strengt"},{"name":"palette_verdict","description":"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 "},{"name":"agent_brief","description":"Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, t"},{"name":"colour_strategy","description":"Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hook"},{"name":"archive_report_brief","description":"One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, numb"},{"name":"palette_heritage","description":"Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and s"},{"name":"archive_coverage_gap","description":"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, entr"},{"name":"archive_cultural_anachronism","description":"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 "},{"name":"session_brief","description":"Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support"},{"name":"index_resonance","description":"Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequen"},{"name":"archive_evidence_gap","description":"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 "},{"name":"brand_collision","description":"Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE"},{"name":"brand_report","description":"One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, "},{"name":"brand_audit","description":"Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of"},{"name":"agent_verify","description":"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 "},{"name":"colour_passport","description":"Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive "},{"name":"colour_passports","description":"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, ev"},{"name":"colour_dna","description":"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 "},{"name":"ecommerce_copy","description":"Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long"},{"name":"colour_hooks","description":"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"},{"name":"archive_provenance","description":"Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. "},{"name":"colour_forensics","description":"Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required"},{"name":"palette_iterate","description":"Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or bett"},{"name":"colour_variants","description":"For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers explo"},{"name":"palette_export","description":"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. Emb"},{"name":"palette_compare","description":"Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional differenc"},{"name":"ecommerce_namer","description":"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 --"},{"name":"ui_states","description":"Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, "},{"name":"colour_namer","description":"Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial,"},{"name":"palette_swatch","description":"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. Suppo"},{"name":"palette_analyse","description":"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_st"},{"name":"ingest_image","description":"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 "},{"name":"palette_extract","description":"Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weig"},{"name":"image_brief","description":"Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, un"},{"name":"project_get","description":"Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamp"},{"name":"project_list","description":"List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonym"},{"name":"project_versions","description":"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. "},{"name":"project_delete","description":"Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped resp"},{"name":"project_export","description":"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 sch"},{"name":"brand_guideline_specify","description":"Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, ea"},{"name":"brand_guideline_status","description":"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 -"},{"name":"brand_guideline_select","description":"Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produc"},{"name":"brand_guideline_pdf","description":"Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour syste"},{"name":"brand_guideline_claims","description":"Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/loca"},{"name":"render_colour_result","description":"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 be"},{"name":"palette_finalize","description":"Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for t"},{"name":"tool_guide","description":"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 "},{"name":"historical_colour_query","description":"Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source "},{"name":"colour_relationships","description":"What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 34"},{"name":"why_connected","description":"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 "},{"name":"vanderpoel_pairing","description":"Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), se"}],"toolCount":92,"toolsHash":"5d71881ad224a5cea4bd4b41131fed46baecd94a19d95bb31b38e79c0b2fbdf1","serverName":"colour-memory","capabilities":["tools","resources"],"serverVersion":"2.3.4","protocolVersion":"2025-11-25"}},{"at":"2026-10-09T10:23:07.707Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":172,"error":null,"detail":{"tools":[{"name":"query_conceptual","description":"Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'gr"},{"name":"extract_image_colours","description":"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 onl"},{"name":"query_hex","description":"Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance."},{"name":"palette_specify","description":"Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names."},{"name":"colour_metrics","description":"Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma "},{"name":"colour_harmonies","description":"Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838"},{"name":"accessibility_check","description":"Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibili"},{"name":"accessibility_matrix","description":"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 "},{"name":"accessibility_rules","description":"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 co"},{"name":"colour_slugs","description":"Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-g"},{"name":"palette_light_dark","description":"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 "},{"name":"accessibility_font","description":"Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for bod"},{"name":"archive_search","description":"Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical per"},{"name":"colour_combination","description":"Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summa"},{"name":"palette_strict","description":"Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] "},{"name":"archive_report_document","description":"Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word"},{"name":"palette_pdf","description":"Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, p"},{"name":"palette_audit","description":"Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, g"},{"name":"brand_system","description":"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, d"},{"name":"brand_asset_pack","description":"Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs "},{"name":"accessibility_simulate","description":"Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, "},{"name":"colour_match_paint","description":"Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene."},{"name":"colour_card","description":"Look up a named colour and return its hex, archive, provenance, and cultural notes."},{"name":"meta_capabilities","description":"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 "},{"name":"system_status","description":"Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at,"},{"name":"colour_story","description":"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 civilisation"},{"name":"palette_concept","description":"Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and prov"},{"name":"colour_mix","description":"Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its neare"},{"name":"colour_timeline","description":"Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entr"},{"name":"image_palette","description":"Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provena"},{"name":"colour_compare","description":"Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, pl"},{"name":"colour_cultural_risk","description":"Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_pa"},{"name":"design_session","description":"One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrati"},{"name":"image_personal","description":"Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, med"},{"name":"style_match","description":"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, be"},{"name":"interior_specify","description":"Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour sc"},{"name":"house_specify","description":"Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance ("},{"name":"palette_generate","description":"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, interp"},{"name":"palette_gradient","description":"Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor"},{"name":"palette_translate","description":"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"},{"name":"archive_cliche","description":"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', 'gri"},{"name":"colour_verdict","description":"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 strengt"},{"name":"palette_verdict","description":"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 "},{"name":"agent_brief","description":"Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, t"},{"name":"colour_strategy","description":"Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hook"},{"name":"archive_report_brief","description":"One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, numb"},{"name":"palette_heritage","description":"Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and s"},{"name":"archive_coverage_gap","description":"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, entr"},{"name":"archive_cultural_anachronism","description":"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 "},{"name":"session_brief","description":"Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support"},{"name":"index_resonance","description":"Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequen"},{"name":"archive_evidence_gap","description":"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 "},{"name":"brand_collision","description":"Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE"},{"name":"brand_report","description":"One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, "},{"name":"brand_audit","description":"Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of"},{"name":"agent_verify","description":"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 "},{"name":"colour_passport","description":"Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive "},{"name":"colour_passports","description":"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, ev"},{"name":"colour_dna","description":"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 "},{"name":"ecommerce_copy","description":"Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long"},{"name":"colour_hooks","description":"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"},{"name":"archive_provenance","description":"Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. "},{"name":"colour_forensics","description":"Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required"},{"name":"palette_iterate","description":"Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or bett"},{"name":"colour_variants","description":"For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers explo"},{"name":"palette_export","description":"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. Emb"},{"name":"palette_compare","description":"Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional differenc"},{"name":"ecommerce_namer","description":"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 --"},{"name":"ui_states","description":"Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, "},{"name":"colour_namer","description":"Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial,"},{"name":"palette_swatch","description":"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. Suppo"},{"name":"palette_analyse","description":"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_st"},{"name":"ingest_image","description":"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 "},{"name":"palette_extract","description":"Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weig"},{"name":"image_brief","description":"Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, un"},{"name":"project_get","description":"Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamp"},{"name":"project_list","description":"List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonym"},{"name":"project_versions","description":"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. "},{"name":"project_delete","description":"Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped resp"},{"name":"project_export","description":"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 sch"},{"name":"brand_guideline_specify","description":"Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, ea"},{"name":"brand_guideline_status","description":"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 -"},{"name":"brand_guideline_select","description":"Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produc"},{"name":"brand_guideline_pdf","description":"Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour syste"},{"name":"brand_guideline_claims","description":"Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/loca"},{"name":"render_colour_result","description":"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 be"},{"name":"palette_finalize","description":"Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for t"},{"name":"tool_guide","description":"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 "},{"name":"historical_colour_query","description":"Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source "},{"name":"colour_relationships","description":"What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 34"},{"name":"why_connected","description":"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 "},{"name":"vanderpoel_pairing","description":"Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), se"}],"toolCount":92,"toolsHash":"5d71881ad224a5cea4bd4b41131fed46baecd94a19d95bb31b38e79c0b2fbdf1","serverName":"colour-memory","capabilities":["tools","resources"],"serverVersion":"2.3.4","protocolVersion":"2025-11-25"}},{"at":"2026-10-09T10:22:05.992Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":212,"error":null,"detail":{"tools":[{"name":"query_conceptual","description":"Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'gr"},{"name":"extract_image_colours","description":"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 onl"},{"name":"query_hex","description":"Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance."},{"name":"palette_specify","description":"Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names."},{"name":"colour_metrics","description":"Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma "},{"name":"colour_harmonies","description":"Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838"},{"name":"accessibility_check","description":"Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibili"},{"name":"accessibility_matrix","description":"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 "},{"name":"accessibility_rules","description":"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 co"},{"name":"colour_slugs","description":"Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-g"},{"name":"palette_light_dark","description":"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 "},{"name":"accessibility_font","description":"Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for bod"},{"name":"archive_search","description":"Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical per"},{"name":"colour_combination","description":"Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summa"},{"name":"palette_strict","description":"Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] "},{"name":"archive_report_document","description":"Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word"},{"name":"palette_pdf","description":"Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, p"},{"name":"palette_audit","description":"Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, g"},{"name":"brand_system","description":"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, d"},{"name":"brand_asset_pack","description":"Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs "},{"name":"accessibility_simulate","description":"Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, "},{"name":"colour_match_paint","description":"Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene."},{"name":"colour_card","description":"Look up a named colour and return its hex, archive, provenance, and cultural notes."},{"name":"meta_capabilities","description":"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 "},{"name":"system_status","description":"Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at,"},{"name":"colour_story","description":"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 civilisation"},{"name":"palette_concept","description":"Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and prov"},{"name":"colour_mix","description":"Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its neare"},{"name":"colour_timeline","description":"Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entr"},{"name":"image_palette","description":"Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provena"},{"name":"colour_compare","description":"Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, pl"},{"name":"colour_cultural_risk","description":"Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_pa"},{"name":"design_session","description":"One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrati"},{"name":"image_personal","description":"Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, med"},{"name":"style_match","description":"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, be"},{"name":"interior_specify","description":"Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour sc"},{"name":"house_specify","description":"Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance ("},{"name":"palette_generate","description":"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, interp"},{"name":"palette_gradient","description":"Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor"},{"name":"palette_translate","description":"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"},{"name":"archive_cliche","description":"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', 'gri"},{"name":"colour_verdict","description":"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 strengt"},{"name":"palette_verdict","description":"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 "},{"name":"agent_brief","description":"Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, t"},{"name":"colour_strategy","description":"Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hook"},{"name":"archive_report_brief","description":"One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, numb"},{"name":"palette_heritage","description":"Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and s"},{"name":"archive_coverage_gap","description":"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, entr"},{"name":"archive_cultural_anachronism","description":"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 "},{"name":"session_brief","description":"Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support"},{"name":"index_resonance","description":"Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequen"},{"name":"archive_evidence_gap","description":"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 "},{"name":"brand_collision","description":"Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE"},{"name":"brand_report","description":"One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, "},{"name":"brand_audit","description":"Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of"},{"name":"agent_verify","description":"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 "},{"name":"colour_passport","description":"Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive "},{"name":"colour_passports","description":"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, ev"},{"name":"colour_dna","description":"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 "},{"name":"ecommerce_copy","description":"Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long"},{"name":"colour_hooks","description":"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"},{"name":"archive_provenance","description":"Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. "},{"name":"colour_forensics","description":"Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required"},{"name":"palette_iterate","description":"Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or bett"},{"name":"colour_variants","description":"For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers explo"},{"name":"palette_export","description":"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. Emb"},{"name":"palette_compare","description":"Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional differenc"},{"name":"ecommerce_namer","description":"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 --"},{"name":"ui_states","description":"Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, "},{"name":"colour_namer","description":"Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial,"},{"name":"palette_swatch","description":"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. Suppo"},{"name":"palette_analyse","description":"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_st"},{"name":"ingest_image","description":"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 "},{"name":"palette_extract","description":"Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weig"},{"name":"image_brief","description":"Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, un"},{"name":"project_get","description":"Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamp"},{"name":"project_list","description":"List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonym"},{"name":"project_versions","description":"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. "},{"name":"project_delete","description":"Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped resp"},{"name":"project_export","description":"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 sch"},{"name":"brand_guideline_specify","description":"Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, ea"},{"name":"brand_guideline_status","description":"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 -"},{"name":"brand_guideline_select","description":"Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produc"},{"name":"brand_guideline_pdf","description":"Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour syste"},{"name":"brand_guideline_claims","description":"Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/loca"},{"name":"render_colour_result","description":"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 be"},{"name":"palette_finalize","description":"Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for t"},{"name":"tool_guide","description":"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 "},{"name":"historical_colour_query","description":"Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source "},{"name":"colour_relationships","description":"What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 34"},{"name":"why_connected","description":"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 "},{"name":"vanderpoel_pairing","description":"Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), se"}],"toolCount":92,"toolsHash":"5d71881ad224a5cea4bd4b41131fed46baecd94a19d95bb31b38e79c0b2fbdf1","serverName":"colour-memory","capabilities":["tools","resources"],"serverVersion":"2.3.4","protocolVersion":"2025-11-25"}},{"at":"2026-10-09T03:24:31.222Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":220,"error":null,"detail":{"tools":[{"name":"query_conceptual","description":"Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'gr"},{"name":"extract_image_colours","description":"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 onl"},{"name":"query_hex","description":"Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance."},{"name":"palette_specify","description":"Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names."},{"name":"colour_metrics","description":"Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma "},{"name":"colour_harmonies","description":"Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838"},{"name":"accessibility_check","description":"Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibili"},{"name":"accessibility_matrix","description":"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 "},{"name":"accessibility_rules","description":"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 co"},{"name":"colour_slugs","description":"Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-g"},{"name":"palette_light_dark","description":"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 "},{"name":"accessibility_font","description":"Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for bod"},{"name":"archive_search","description":"Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical per"},{"name":"colour_combination","description":"Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summa"},{"name":"palette_strict","description":"Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] "},{"name":"archive_report_document","description":"Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word"},{"name":"palette_pdf","description":"Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, p"},{"name":"palette_audit","description":"Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, g"},{"name":"brand_system","description":"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, d"},{"name":"brand_asset_pack","description":"Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs "},{"name":"accessibility_simulate","description":"Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, "},{"name":"colour_match_paint","description":"Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene."},{"name":"colour_card","description":"Look up a named colour and return its hex, archive, provenance, and cultural notes."},{"name":"meta_capabilities","description":"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 "},{"name":"system_status","description":"Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at,"},{"name":"colour_story","description":"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 civilisation"},{"name":"palette_concept","description":"Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and prov"},{"name":"colour_mix","description":"Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its neare"},{"name":"colour_timeline","description":"Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entr"},{"name":"image_palette","description":"Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provena"},{"name":"colour_compare","description":"Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, pl"},{"name":"colour_cultural_risk","description":"Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_pa"},{"name":"design_session","description":"One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrati"},{"name":"image_personal","description":"Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, med"},{"name":"style_match","description":"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, be"},{"name":"interior_specify","description":"Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour sc"},{"name":"house_specify","description":"Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance ("},{"name":"palette_generate","description":"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, interp"},{"name":"palette_gradient","description":"Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor"},{"name":"palette_translate","description":"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"},{"name":"archive_cliche","description":"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', 'gri"},{"name":"colour_verdict","description":"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 strengt"},{"name":"palette_verdict","description":"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 "},{"name":"agent_brief","description":"Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, t"},{"name":"colour_strategy","description":"Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hook"},{"name":"archive_report_brief","description":"One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, numb"},{"name":"palette_heritage","description":"Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and s"},{"name":"archive_coverage_gap","description":"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, entr"},{"name":"archive_cultural_anachronism","description":"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 "},{"name":"session_brief","description":"Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support"},{"name":"index_resonance","description":"Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequen"},{"name":"archive_evidence_gap","description":"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 "},{"name":"brand_collision","description":"Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE"},{"name":"brand_report","description":"One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, "},{"name":"brand_audit","description":"Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of"},{"name":"agent_verify","description":"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 "},{"name":"colour_passport","description":"Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive "},{"name":"colour_passports","description":"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, ev"},{"name":"colour_dna","description":"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 "},{"name":"ecommerce_copy","description":"Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long"},{"name":"colour_hooks","description":"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"},{"name":"archive_provenance","description":"Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. "},{"name":"colour_forensics","description":"Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required"},{"name":"palette_iterate","description":"Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or bett"},{"name":"colour_variants","description":"For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers explo"},{"name":"palette_export","description":"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. Emb"},{"name":"palette_compare","description":"Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional differenc"},{"name":"ecommerce_namer","description":"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 --"},{"name":"ui_states","description":"Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, "},{"name":"colour_namer","description":"Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial,"},{"name":"palette_swatch","description":"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. Suppo"},{"name":"palette_analyse","description":"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_st"},{"name":"ingest_image","description":"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 "},{"name":"palette_extract","description":"Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weig"},{"name":"image_brief","description":"Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, un"},{"name":"project_get","description":"Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamp"},{"name":"project_list","description":"List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonym"},{"name":"project_versions","description":"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. "},{"name":"project_delete","description":"Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped resp"},{"name":"project_export","description":"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 sch"},{"name":"brand_guideline_specify","description":"Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, ea"},{"name":"brand_guideline_status","description":"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 -"},{"name":"brand_guideline_select","description":"Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produc"},{"name":"brand_guideline_pdf","description":"Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour syste"},{"name":"brand_guideline_claims","description":"Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/loca"},{"name":"render_colour_result","description":"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 be"},{"name":"palette_finalize","description":"Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for t"},{"name":"tool_guide","description":"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 "},{"name":"historical_colour_query","description":"Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source "},{"name":"colour_relationships","description":"What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 34"},{"name":"why_connected","description":"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 "},{"name":"vanderpoel_pairing","description":"Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), se"}],"toolCount":92,"toolsHash":"5d71881ad224a5cea4bd4b41131fed46baecd94a19d95bb31b38e79c0b2fbdf1","serverName":"colour-memory","capabilities":["tools","resources"],"serverVersion":"2.3.4","protocolVersion":"2025-11-25"}},{"at":"2026-10-09T03:22:43.617Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":300,"error":null,"detail":{"tools":[{"name":"query_conceptual","description":"Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'gr"},{"name":"extract_image_colours","description":"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 onl"},{"name":"query_hex","description":"Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance."},{"name":"palette_specify","description":"Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names."},{"name":"colour_metrics","description":"Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma "},{"name":"colour_harmonies","description":"Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838"},{"name":"accessibility_check","description":"Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibili"},{"name":"accessibility_matrix","description":"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 "},{"name":"accessibility_rules","description":"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 co"},{"name":"colour_slugs","description":"Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-g"},{"name":"palette_light_dark","description":"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 "},{"name":"accessibility_font","description":"Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for bod"},{"name":"archive_search","description":"Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical per"},{"name":"colour_combination","description":"Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summa"},{"name":"palette_strict","description":"Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] "},{"name":"archive_report_document","description":"Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word"},{"name":"palette_pdf","description":"Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, p"},{"name":"palette_audit","description":"Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, g"},{"name":"brand_system","description":"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, d"},{"name":"brand_asset_pack","description":"Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs "},{"name":"accessibility_simulate","description":"Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, "},{"name":"colour_match_paint","description":"Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene."},{"name":"colour_card","description":"Look up a named colour and return its hex, archive, provenance, and cultural notes."},{"name":"meta_capabilities","description":"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 "},{"name":"system_status","description":"Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at,"},{"name":"colour_story","description":"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 civilisation"},{"name":"palette_concept","description":"Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and prov"},{"name":"colour_mix","description":"Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its neare"},{"name":"colour_timeline","description":"Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entr"},{"name":"image_palette","description":"Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provena"},{"name":"colour_compare","description":"Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, pl"},{"name":"colour_cultural_risk","description":"Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_pa"},{"name":"design_session","description":"One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrati"},{"name":"image_personal","description":"Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, med"},{"name":"style_match","description":"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, be"},{"name":"interior_specify","description":"Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour sc"},{"name":"house_specify","description":"Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance ("},{"name":"palette_generate","description":"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, interp"},{"name":"palette_gradient","description":"Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor"},{"name":"palette_translate","description":"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"},{"name":"archive_cliche","description":"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', 'gri"},{"name":"colour_verdict","description":"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 strengt"},{"name":"palette_verdict","description":"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 "},{"name":"agent_brief","description":"Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, t"},{"name":"colour_strategy","description":"Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hook"},{"name":"archive_report_brief","description":"One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, numb"},{"name":"palette_heritage","description":"Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and s"},{"name":"archive_coverage_gap","description":"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, entr"},{"name":"archive_cultural_anachronism","description":"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 "},{"name":"session_brief","description":"Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support"},{"name":"index_resonance","description":"Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequen"},{"name":"archive_evidence_gap","description":"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 "},{"name":"brand_collision","description":"Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE"},{"name":"brand_report","description":"One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, "},{"name":"brand_audit","description":"Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of"},{"name":"agent_verify","description":"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 "},{"name":"colour_passport","description":"Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive "},{"name":"colour_passports","description":"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, ev"},{"name":"colour_dna","description":"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 "},{"name":"ecommerce_copy","description":"Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long"},{"name":"colour_hooks","description":"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"},{"name":"archive_provenance","description":"Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. "},{"name":"colour_forensics","description":"Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required"},{"name":"palette_iterate","description":"Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or bett"},{"name":"colour_variants","description":"For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers explo"},{"name":"palette_export","description":"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. Emb"},{"name":"palette_compare","description":"Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional differenc"},{"name":"ecommerce_namer","description":"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 --"},{"name":"ui_states","description":"Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, "},{"name":"colour_namer","description":"Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial,"},{"name":"palette_swatch","description":"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. Suppo"},{"name":"palette_analyse","description":"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_st"},{"name":"ingest_image","description":"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 "},{"name":"palette_extract","description":"Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weig"},{"name":"image_brief","description":"Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, un"},{"name":"project_get","description":"Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamp"},{"name":"project_list","description":"List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonym"},{"name":"project_versions","description":"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. "},{"name":"project_delete","description":"Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped resp"},{"name":"project_export","description":"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 sch"},{"name":"brand_guideline_specify","description":"Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, ea"},{"name":"brand_guideline_status","description":"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 -"},{"name":"brand_guideline_select","description":"Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produc"},{"name":"brand_guideline_pdf","description":"Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour syste"},{"name":"brand_guideline_claims","description":"Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/loca"},{"name":"render_colour_result","description":"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 be"},{"name":"palette_finalize","description":"Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for t"},{"name":"tool_guide","description":"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 "},{"name":"historical_colour_query","description":"Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source "},{"name":"colour_relationships","description":"What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 34"},{"name":"why_connected","description":"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 "},{"name":"vanderpoel_pairing","description":"Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), se"}],"toolCount":92,"toolsHash":"5d71881ad224a5cea4bd4b41131fed46baecd94a19d95bb31b38e79c0b2fbdf1","serverName":"colour-memory","capabilities":["tools","resources"],"serverVersion":"2.3.4","protocolVersion":"2025-11-25"}},{"at":"2026-10-08T21:22:28.321Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":189,"error":null,"detail":{"tools":[{"name":"query_conceptual","description":"Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'gr"},{"name":"extract_image_colours","description":"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 onl"},{"name":"query_hex","description":"Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance."},{"name":"palette_specify","description":"Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names."},{"name":"colour_metrics","description":"Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma "},{"name":"colour_harmonies","description":"Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838"},{"name":"accessibility_check","description":"Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibili"},{"name":"accessibility_matrix","description":"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 "},{"name":"accessibility_rules","description":"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 co"},{"name":"colour_slugs","description":"Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-g"},{"name":"palette_light_dark","description":"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 "},{"name":"accessibility_font","description":"Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for bod"},{"name":"archive_search","description":"Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical per"},{"name":"colour_combination","description":"Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summa"},{"name":"palette_strict","description":"Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] "},{"name":"archive_report_document","description":"Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word"},{"name":"palette_pdf","description":"Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, p"},{"name":"palette_audit","description":"Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, g"},{"name":"brand_system","description":"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, d"},{"name":"brand_asset_pack","description":"Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs "},{"name":"accessibility_simulate","description":"Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, "},{"name":"colour_match_paint","description":"Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene."},{"name":"colour_card","description":"Look up a named colour and return its hex, archive, provenance, and cultural notes."},{"name":"meta_capabilities","description":"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 "},{"name":"system_status","description":"Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at,"},{"name":"colour_story","description":"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 civilisation"},{"name":"palette_concept","description":"Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and prov"},{"name":"colour_mix","description":"Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its neare"},{"name":"colour_timeline","description":"Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entr"},{"name":"image_palette","description":"Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provena"},{"name":"colour_compare","description":"Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, pl"},{"name":"colour_cultural_risk","description":"Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_pa"},{"name":"design_session","description":"One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrati"},{"name":"image_personal","description":"Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, med"},{"name":"style_match","description":"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, be"},{"name":"interior_specify","description":"Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour sc"},{"name":"house_specify","description":"Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance ("},{"name":"palette_generate","description":"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, interp"},{"name":"palette_gradient","description":"Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor"},{"name":"palette_translate","description":"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"},{"name":"archive_cliche","description":"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', 'gri"},{"name":"colour_verdict","description":"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 strengt"},{"name":"palette_verdict","description":"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 "},{"name":"agent_brief","description":"Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, t"},{"name":"colour_strategy","description":"Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hook"},{"name":"archive_report_brief","description":"One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, numb"},{"name":"palette_heritage","description":"Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and s"},{"name":"archive_coverage_gap","description":"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, entr"},{"name":"archive_cultural_anachronism","description":"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 "},{"name":"session_brief","description":"Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support"},{"name":"index_resonance","description":"Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequen"},{"name":"archive_evidence_gap","description":"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 "},{"name":"brand_collision","description":"Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE"},{"name":"brand_report","description":"One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, "},{"name":"brand_audit","description":"Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of"},{"name":"agent_verify","description":"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 "},{"name":"colour_passport","description":"Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive "},{"name":"colour_passports","description":"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, ev"},{"name":"colour_dna","description":"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 "},{"name":"ecommerce_copy","description":"Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long"},{"name":"colour_hooks","description":"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"},{"name":"archive_provenance","description":"Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. "},{"name":"colour_forensics","description":"Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required"},{"name":"palette_iterate","description":"Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or bett"},{"name":"colour_variants","description":"For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers explo"},{"name":"palette_export","description":"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. Emb"},{"name":"palette_compare","description":"Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional differenc"},{"name":"ecommerce_namer","description":"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 --"},{"name":"ui_states","description":"Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, "},{"name":"colour_namer","description":"Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial,"},{"name":"palette_swatch","description":"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. Suppo"},{"name":"palette_analyse","description":"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_st"},{"name":"ingest_image","description":"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 "},{"name":"palette_extract","description":"Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weig"},{"name":"image_brief","description":"Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, un"},{"name":"project_get","description":"Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamp"},{"name":"project_list","description":"List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonym"},{"name":"project_versions","description":"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. "},{"name":"project_delete","description":"Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped resp"},{"name":"project_export","description":"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 sch"},{"name":"brand_guideline_specify","description":"Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, ea"},{"name":"brand_guideline_status","description":"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 -"},{"name":"brand_guideline_select","description":"Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produc"},{"name":"brand_guideline_pdf","description":"Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour syste"},{"name":"brand_guideline_claims","description":"Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/loca"},{"name":"render_colour_result","description":"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 be"},{"name":"palette_finalize","description":"Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for t"},{"name":"tool_guide","description":"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 "},{"name":"historical_colour_query","description":"Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source "},{"name":"colour_relationships","description":"What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 34"},{"name":"why_connected","description":"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 "},{"name":"vanderpoel_pairing","description":"Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), se"}],"toolCount":92,"toolsHash":"5d71881ad224a5cea4bd4b41131fed46baecd94a19d95bb31b38e79c0b2fbdf1","serverName":"colour-memory","capabilities":["tools","resources"],"serverVersion":"2.3.4","protocolVersion":"2025-11-25"}},{"at":"2026-10-08T20:25:57.560Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":212,"error":null,"detail":{"tools":[{"name":"query_conceptual","description":"Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'gr"},{"name":"extract_image_colours","description":"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 onl"},{"name":"query_hex","description":"Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance."},{"name":"palette_specify","description":"Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names."},{"name":"colour_metrics","description":"Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma "},{"name":"colour_harmonies","description":"Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838"},{"name":"accessibility_check","description":"Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibili"},{"name":"accessibility_matrix","description":"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 "},{"name":"accessibility_rules","description":"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 co"},{"name":"colour_slugs","description":"Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-g"},{"name":"palette_light_dark","description":"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 "},{"name":"accessibility_font","description":"Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for bod"},{"name":"archive_search","description":"Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical per"},{"name":"colour_combination","description":"Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summa"},{"name":"palette_strict","description":"Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] "},{"name":"palette_pdf","description":"Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, p"},{"name":"palette_audit","description":"Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, g"},{"name":"brand_system","description":"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, d"},{"name":"brand_asset_pack","description":"Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs "},{"name":"accessibility_simulate","description":"Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, "},{"name":"colour_match_paint","description":"Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene."},{"name":"colour_card","description":"Look up a named colour and return its hex, archive, provenance, and cultural notes."},{"name":"meta_capabilities","description":"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 "},{"name":"system_status","description":"Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at,"},{"name":"colour_story","description":"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 civilisation"},{"name":"palette_concept","description":"Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and prov"},{"name":"colour_mix","description":"Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its neare"},{"name":"colour_timeline","description":"Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entr"},{"name":"image_palette","description":"Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provena"},{"name":"colour_compare","description":"Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, pl"},{"name":"colour_cultural_risk","description":"Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_pa"},{"name":"design_session","description":"One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrati"},{"name":"image_personal","description":"Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, med"},{"name":"style_match","description":"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, be"},{"name":"interior_specify","description":"Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour sc"},{"name":"house_specify","description":"Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance ("},{"name":"palette_generate","description":"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, interp"},{"name":"palette_gradient","description":"Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor"},{"name":"palette_translate","description":"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"},{"name":"archive_cliche","description":"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', 'gri"},{"name":"colour_verdict","description":"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 strengt"},{"name":"palette_verdict","description":"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 "},{"name":"agent_brief","description":"Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, t"},{"name":"colour_strategy","description":"Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hook"},{"name":"archive_report_brief","description":"One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, numb"},{"name":"palette_heritage","description":"Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and s"},{"name":"archive_coverage_gap","description":"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, entr"},{"name":"archive_cultural_anachronism","description":"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 "},{"name":"session_brief","description":"Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support"},{"name":"index_resonance","description":"Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequen"},{"name":"archive_evidence_gap","description":"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 "},{"name":"brand_collision","description":"Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE"},{"name":"brand_report","description":"One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, "},{"name":"brand_audit","description":"Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of"},{"name":"agent_verify","description":"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 "},{"name":"colour_passport","description":"Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive "},{"name":"colour_passports","description":"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, ev"},{"name":"colour_dna","description":"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 "},{"name":"ecommerce_copy","description":"Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long"},{"name":"colour_hooks","description":"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"},{"name":"archive_provenance","description":"Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. "},{"name":"colour_forensics","description":"Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required"},{"name":"palette_iterate","description":"Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or bett"},{"name":"colour_variants","description":"For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers explo"},{"name":"palette_export","description":"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. Emb"},{"name":"palette_compare","description":"Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional differenc"},{"name":"ecommerce_namer","description":"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 --"},{"name":"ui_states","description":"Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, "},{"name":"colour_namer","description":"Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial,"},{"name":"palette_swatch","description":"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. Suppo"},{"name":"palette_analyse","description":"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_st"},{"name":"ingest_image","description":"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 "},{"name":"palette_extract","description":"Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weig"},{"name":"image_brief","description":"Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, un"},{"name":"project_get","description":"Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamp"},{"name":"project_list","description":"List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonym"},{"name":"project_versions","description":"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. "},{"name":"project_delete","description":"Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped resp"},{"name":"project_export","description":"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 sch"},{"name":"brand_guideline_specify","description":"Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, ea"},{"name":"brand_guideline_status","description":"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 -"},{"name":"brand_guideline_select","description":"Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produc"},{"name":"brand_guideline_pdf","description":"Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour syste"},{"name":"brand_guideline_claims","description":"Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/loca"},{"name":"render_colour_result","description":"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 be"},{"name":"palette_finalize","description":"Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for t"},{"name":"tool_guide","description":"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 "},{"name":"historical_colour_query","description":"Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source "},{"name":"colour_relationships","description":"What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 34"},{"name":"why_connected","description":"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 "},{"name":"vanderpoel_pairing","description":"Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), se"}],"toolCount":91,"toolsHash":"f0607d94ab653670ff19629505507f35249d22fde1066a19961e2564cc699bb6","serverName":"colour-memory","capabilities":["tools","resources"],"serverVersion":"2.3.4","protocolVersion":"2025-11-25"}}],"tools":[{"name":"query_conceptual","description":"Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'gr"},{"name":"extract_image_colours","description":"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 onl"},{"name":"query_hex","description":"Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance."},{"name":"palette_specify","description":"Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names."},{"name":"colour_metrics","description":"Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma "},{"name":"colour_harmonies","description":"Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838"},{"name":"accessibility_check","description":"Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibili"},{"name":"accessibility_matrix","description":"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 "},{"name":"accessibility_rules","description":"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 co"},{"name":"colour_slugs","description":"Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-g"},{"name":"palette_light_dark","description":"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 "},{"name":"accessibility_font","description":"Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for bod"},{"name":"archive_search","description":"Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical per"},{"name":"colour_combination","description":"Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summa"},{"name":"palette_strict","description":"Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] "},{"name":"archive_report_document","description":"Create a designed, full-colour Word (.docx) report from Colour Memory records. Use this whenever the user asks for a document, report, write-up, handout or Word"},{"name":"palette_pdf","description":"Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, p"},{"name":"palette_audit","description":"Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, g"},{"name":"brand_system","description":"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, d"},{"name":"brand_asset_pack","description":"Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs "},{"name":"accessibility_simulate","description":"Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, "},{"name":"colour_match_paint","description":"Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene."},{"name":"colour_card","description":"Look up a named colour and return its hex, archive, provenance, and cultural notes."},{"name":"meta_capabilities","description":"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 "},{"name":"system_status","description":"Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at,"},{"name":"colour_story","description":"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 civilisation"},{"name":"palette_concept","description":"Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and prov"},{"name":"colour_mix","description":"Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its neare"},{"name":"colour_timeline","description":"Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entr"},{"name":"image_palette","description":"Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provena"},{"name":"colour_compare","description":"Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, pl"},{"name":"colour_cultural_risk","description":"Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_pa"},{"name":"design_session","description":"One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrati"},{"name":"image_personal","description":"Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, med"},{"name":"style_match","description":"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, be"},{"name":"interior_specify","description":"Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour sc"},{"name":"house_specify","description":"Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance ("},{"name":"palette_generate","description":"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, interp"},{"name":"palette_gradient","description":"Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor"},{"name":"palette_translate","description":"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"},{"name":"archive_cliche","description":"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', 'gri"},{"name":"colour_verdict","description":"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 strengt"},{"name":"palette_verdict","description":"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 "},{"name":"agent_brief","description":"Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, t"},{"name":"colour_strategy","description":"Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hook"},{"name":"archive_report_brief","description":"One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, numb"},{"name":"palette_heritage","description":"Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and s"},{"name":"archive_coverage_gap","description":"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, entr"},{"name":"archive_cultural_anachronism","description":"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 "},{"name":"session_brief","description":"Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support"},{"name":"index_resonance","description":"Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequen"},{"name":"archive_evidence_gap","description":"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 "},{"name":"brand_collision","description":"Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE"},{"name":"brand_report","description":"One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, "},{"name":"brand_audit","description":"Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of"},{"name":"agent_verify","description":"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 "},{"name":"colour_passport","description":"Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive "},{"name":"colour_passports","description":"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, ev"},{"name":"colour_dna","description":"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 "},{"name":"ecommerce_copy","description":"Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long"},{"name":"colour_hooks","description":"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"},{"name":"archive_provenance","description":"Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. "},{"name":"colour_forensics","description":"Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required"},{"name":"palette_iterate","description":"Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or bett"},{"name":"colour_variants","description":"For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers explo"},{"name":"palette_export","description":"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. Emb"},{"name":"palette_compare","description":"Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional differenc"},{"name":"ecommerce_namer","description":"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 --"},{"name":"ui_states","description":"Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, "},{"name":"colour_namer","description":"Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial,"},{"name":"palette_swatch","description":"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. Suppo"},{"name":"palette_analyse","description":"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_st"},{"name":"ingest_image","description":"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 "},{"name":"palette_extract","description":"Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weig"},{"name":"image_brief","description":"Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, un"},{"name":"project_get","description":"Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamp"},{"name":"project_list","description":"List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonym"},{"name":"project_versions","description":"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. "},{"name":"project_delete","description":"Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped resp"},{"name":"project_export","description":"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 sch"},{"name":"brand_guideline_specify","description":"Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, ea"},{"name":"brand_guideline_status","description":"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 -"},{"name":"brand_guideline_select","description":"Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produc"},{"name":"brand_guideline_pdf","description":"Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour syste"},{"name":"brand_guideline_claims","description":"Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/loca"},{"name":"render_colour_result","description":"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 be"},{"name":"palette_finalize","description":"Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for t"},{"name":"tool_guide","description":"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 "},{"name":"historical_colour_query","description":"Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source "},{"name":"colour_relationships","description":"What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 34"},{"name":"why_connected","description":"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 "},{"name":"vanderpoel_pairing","description":"Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), se"}],"package":null,"toolSurface":{"id":"ts_wd6zp2xvuxgq","endpointId":"ep_fwgt3s5tejjf","hash":"5d71881ad224a5cea4bd4b41131fed46baecd94a19d95bb31b38e79c0b2fbdf1","toolCount":92,"serverName":"colour-memory","serverVersion":"2.3.4","protocolVersion":"2025-11-25","firstSeenAt":"2026-10-09T03:22:43.651Z","lastSeenAt":"2026-10-10T00:28:34.027Z","observations":4,"toolNames":["query_conceptual","extract_image_colours","query_hex","palette_specify","colour_metrics","colour_harmonies","accessibility_check","accessibility_matrix","accessibility_rules","colour_slugs","palette_light_dark","accessibility_font","archive_search","colour_combination","palette_strict","archive_report_document","palette_pdf","palette_audit","brand_system","brand_asset_pack","accessibility_simulate","colour_match_paint","colour_card","meta_capabilities","system_status","colour_story","palette_concept","colour_mix","colour_timeline","image_palette","colour_compare","colour_cultural_risk","design_session","image_personal","style_match","interior_specify","house_specify","palette_generate","palette_gradient","palette_translate","archive_cliche","colour_verdict","palette_verdict","agent_brief","colour_strategy","archive_report_brief","palette_heritage","archive_coverage_gap","archive_cultural_anachronism","session_brief","index_resonance","archive_evidence_gap","brand_collision","brand_report","brand_audit","agent_verify","colour_passport","colour_passports","colour_dna","ecommerce_copy","colour_hooks","archive_provenance","colour_forensics","palette_iterate","colour_variants","palette_export","palette_compare","ecommerce_namer","ui_states","colour_namer","palette_swatch","palette_analyse","ingest_image","palette_extract","image_brief","project_get","project_list","project_versions","project_delete","project_export","brand_guideline_specify","brand_guideline_status","brand_guideline_select","brand_guideline_pdf","brand_guideline_claims","render_colour_result","palette_finalize","tool_guide","historical_colour_query","colour_relationships","why_connected","vanderpoel_pairing"],"distinctSurfaces":13},"endpointFacts":[{"id":"ep_uut64aycnqda","url":"https://api.colourmemory.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-08T14:22:08.463Z","auth":{"observedAt":"2026-10-08T14:22:08.617Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-08T14:22:08.633Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"api.colourmemory.com","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-10-02T17:55:55.000Z","validTo":"2026-12-31T17:55:54.000Z","daysToExpiry":82,"sanCount":1,"fingerprint256":"14:E8:4E:CC:0A:BD:43:9F:A2:6B:3D:75:1E:71:C2:F3:E8:FE:8A:96:48:C7:57:22:01:63:47:CF:1D:03:1F:84"}},{"id":"ep_fwgt3s5tejjf","url":"https://colour-memory-api-production.up.railway.app/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-08T14:21:38.034Z","auth":{"observedAt":"2026-10-08T14:21:38.188Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-08T14:21:38.198Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"*.up.railway.app","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-09-27T03:01:43.000Z","validTo":"2026-12-26T03:01:42.000Z","daysToExpiry":77,"sanCount":2,"fingerprint256":"FB:37:0C:A2:68:42:DA:2B:2F:F8:E3:18:2E:0E:8C:FC:6F:B8:EA:C3:2C:DB:57:18:F4:5A:4B:39:B9:E1:40:AF"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.DigbyO/colour-memory","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.DigbyO%2Fcolour-memory","firstSeenAt":"2026-09-06T02:21:28.226Z","fetchedAt":"2026-10-09T20:20:57.356Z","normalizedAt":"2026-10-09T20:20:57.356Z"}]},"firstSeenAt":"2026-09-06T02:21:28.226Z","updatedAt":"2026-10-10T00:30:57.872Z"}