이 MCP로 할 수 있는 일
Provides historical color archive research, color analysis, accessibility checks, cultural context, and brand palette and asset generation.
도구
입력 스키마
{'type': 'object', 'required': ['hex_val'], 'properties': {'hex_val': {'type': 'string', 'description': 'Foreground hex value'}, 'background': {'type': 'string', 'default': 'FFFFFF', 'description': "Background hex (default 'FFFFFF')"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['background', 'palette'], 'properties': {'palette': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Candidate foreground hex values'}, 'background': {'type': 'string', 'description': 'Background hex value'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette'], 'properties': {'palette': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 20, 'minItems': 2, 'description': "Array of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B']"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette'], 'properties': {'palette': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Array of hex values'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex_val'], 'properties': {'hex_val': {'type': 'string', 'description': "Hex value e.g. '#BE0032'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['task', 'concept'], 'properties': {'task': {'type': 'string', 'description': "What the other AI needs to generate e.g. 'luxury hotel bedroom image'"}, 'avoid': {'type': 'array', 'items': {'type': 'string'}, 'default': [], 'description': "Optional: terms/associations to keep out of retrieval e.g. ['mourning', 'funeral black']. Affects retrieval directly, not just post-hoc flagging."}, 'model': {'type': 'string', 'default': 'midjourney', 'description': 'Target model: midjourney, flux, dalle, stable_diffusion'}, 'archive': {'type': 'string', 'default': '', 'description': 'Optional: restrict palette query to this archive e.g. georgianpleasures, japan, china'}, 'concept': {'type': 'string', 'description': "Colour concept to draw from e.g. 'Ottoman winter luxury', 'Victorian mourning'. Negation phrases ('must never', 'without', 'not X') are extracted and kept out of retrieval."}, 'style_notes': {'type': 'string', 'description': "Optional: additional style direction e.g. 'matte surfaces only', 'no gold'"}, 'palette_size': {'type': 'integer', 'default': 5, 'description': 'Number of archive colours to include (default 5, max 8)'}, 'locked_palette': {'type': 'array', 'items': {'type': 'string'}, 'default': [], 'description': 'Optional: list of hex values to use exclusively. When provided, no archive query is run and no evidence filtering applies — these exact colours are used as-is. Prevents palette drift.'}, 'allowed_archives': {'type': 'array', 'items': {'type': 'string'}, 'default': [], 'description': 'Optional: list of allowed archive names. Query restricted to these archives only.'}, 'minimum_claim_strength': {'enum': ['A', 'B', 'C', 'D', 'E'], 'type': 'string', 'default': 'C', 'description': "Evidence-grade floor for archive-grounded retrieval (default 'C'). Grade controls documentary strength; claim_role='reject' entries are excluded regardless of how low this is set. Not applied to locked_palette calls."}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['target_palette'], 'properties': {'image_url': {'type': 'string', 'description': 'URL of the generated image'}, 'image_base64': {'type': 'string', 'description': 'Base64 encoded generated image'}, 'target_palette': {'type': 'array', 'items': {'type': 'string'}, 'description': "Hex values from agent_brief colour_tokens e.g. ['#ED9921', '#E29937']"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['concept'], 'properties': {'concept': {'type': 'string', 'description': "Colour concept to subvert e.g. 'love', 'grief', 'luxury', 'betrayal', 'power'"}, 'n_results': {'type': 'integer', 'default': 8, 'description': 'Number of archive entries to search (default 8)'}, 'expected_colour': {'type': 'string', 'description': "Optional: the cliche colour to contradict e.g. 'red', '#FF0000'. Hex or colour name."}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['themes'], 'properties': {'themes': {'type': 'array', 'items': {'type': 'string'}, 'description': "Themes to check e.g. ['opium', 'gin', 'gambling', 'racing']"}, 'archives': {'type': 'array', 'items': {'type': 'string'}, 'description': "Optional archives to search e.g. ['EIC', 'Dickens']"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['entries'], 'properties': {'entries': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'notes': {'type': 'string'}, 'archive': {'type': 'string'}, 'primary_source': {'type': 'string'}}}, 'description': 'Colour entries to check'}, 'period_end': {'type': 'integer', 'description': 'End year e.g. 1830'}, 'period_start': {'type': 'integer', 'description': 'Start year e.g. 1714'}, 'target_period': {'type': 'string', 'description': "Period description e.g. 'Georgian England 1714-1830'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex', 'proposed_claim'], 'properties': {'hex': {'type': 'string', 'description': "Hex colour to analyse e.g. '#4A535C'"}, 'archive': {'type': 'string', 'description': "Optional archive to search e.g. 'DarkHistory'"}, 'n_candidates': {'type': 'integer', 'description': 'Number of archive candidates to return (default 5)'}, 'proposed_claim': {'type': 'string', 'description': "What you want to say about this colour e.g. 'cyanosis in a death chamber'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['colour_name'], 'properties': {'colour_name': {'type': 'string', 'description': "Name of the archive colour e.g. 'Love Idleness', 'Woad Vat Blue', 'Murex Luxury'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['themes'], 'properties': {'avoid': {'type': 'array', 'description': "Topics to suppress e.g. ['arsenic wallpaper', 'Wedgwood blue']"}, 'title': {'type': 'string', 'description': "Document title e.g. 'The Colours of Georgian Power'"}, 'themes': {'type': 'array', 'items': {'type': 'string'}, 'description': "Research themes e.g. ['racing silks', 'EIC trade', 'Keats']"}, 'archives': {'type': 'array', 'description': "Archives to search e.g. ['RacingSilks', 'EIC', 'Keats', 'Dickens']"}, 'audience': {'type': 'string', 'description': "Target audience e.g. 'serious Georgian collector'"}, 'n_colours': {'type': 'integer', 'description': 'Number of colours to return (default 8, max 16)'}, 'period_end': {'type': 'integer', 'description': 'Hard period gate: exclude entries dated after this year. Default 9999 (no upper bound).'}, 'period_start': {'type': 'integer', 'description': 'Hard period gate: exclude entries dated before this year. Default 0 (no lower bound).'}, 'allow_partial': {'type': 'boolean', 'description': "If false (default), returning fewer cards than requested sets ok=false with error_code INSUFFICIENT_PALETTE_RESULTS instead of a silent short 'success'. Set true to accept a short result."}, 'output_format': {'type': 'string', 'description': 'Reserved for future use -- currently accepted but has no effect on the response shape (the endpoint always returns the full report).'}, 'strict_sources': {'type': 'boolean', 'description': 'Only return entries with named primary sources (default true)'}, 'family_card_mode': {'enum': ['auto', 'always', 'conservative'], 'type': 'string', 'description': "How near-identical cultivars/records are presented. 'auto' (default): current behaviour, groups into family cards above the standard ΔE threshold. 'always': widens the clustering threshold so more near-duplicates group into family cards. 'conservative': suppresses family cards over max_family_card_share of the deck, instead promoting one hero cultivar per suppressed family with the rest folded into that card's also_supported_by list (never dissolved back into separate near-duplicate swatches)."}, 'confidence_threshold': {'type': 'number', 'description': 'Minimum confidence score (0.0-1.0) for an entry to be included. Default 0.5 filters out weakly-matched stubs.'}, 'max_family_card_share': {'type': 'number', 'description': 'Conservative mode only: maximum fraction (0.0-1.0, default 0.5) of presented cards that may be family cards before excess families are suppressed to hero cards. Ignored in auto/always modes.'}, 'minimum_claim_strength': {'type': 'string', 'description': 'Hard evidence-grade floor: A, B, C, D, or E. Never silently relaxed.'}, 'strict_semantic_colour': {'type': 'boolean', 'description': "Default false. When true, excludes entries whose quoted colour language contradicts their stored hex (e.g. a record naming 'Prussian blue' whose hex is actually a pale cream) rather than presenting them as normal evidence. Never alters hex values, only excludes flagged ones."}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'description': 'Alias for n_results'}, 'query': {'type': 'string', 'description': 'Search term e.g. cerulean, Prussian, Ottoman, ochre, medieval'}, 'offset': {'type': 'integer', 'default': 0, 'description': "Skip this many ranked matches before returning results -- collection paging. The response's next_offset gives the value to pass here for the next page; it is absent on the last page. total_found always reports the full collection size."}, 'archive': {'type': 'string', 'description': 'Optional archive filter e.g. oxfordshire, japan, pigment, keats, eic, racingsilks'}, 'year_to': {'type': 'integer', 'description': 'Boost entries on or before this year e.g. 1600 for Renaissance, 1901 for Victorian'}, 'n_results': {'type': 'integer', 'default': 10, 'description': 'Results per page (default 10, max 50 per call). This is a PAGE size, not a collection limit -- for a large collection (tens or hundreds of records) page with offset until next_offset disappears, and never tell the user the product caps out at one page.'}, 'year_from': {'type': 'integer', 'description': 'Boost entries on or after this year e.g. 1400 for Renaissance, 1837 for Victorian'}, 'entity_mode': {'enum': ['text', 'exact'], 'type': 'string', 'default': 'text', 'description': "'text' (default): ordinary keyword search -- 'rose' finds any name containing the word, across genera. 'exact': resolve the query to a botanical entity and return ONLY records whose structured identity matches. Use 'exact' when you mean the plant, not the word: entity_mode='exact' with query='Rose' returns genus Rosa only and excludes Sweet Pea cultivars named 'Rose Pink'. The response carries an entity_resolution block showing the resolved genus and how many off-genus rows were excluded."}, 'include_full': {'type': 'boolean', 'description': 'Return complete notes and source fields. Default false returns 150-char snippets. Set true for report workflows.'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette'], 'properties': {'market': {'type': 'string', 'default': 'global', 'description': 'Target market'}, 'medium': {'type': 'string', 'default': 'digital', 'description': 'digital | print | both'}, 'palette': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Hex values'}, 'use_case': {'type': 'string', 'default': 'brand identity', 'description': 'Use case'}, 'brand_category': {'type': 'string', 'description': 'Optional brand name or category'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette'], 'properties': {'market': {'type': 'string', 'default': 'global', 'description': "Target market e.g. 'UK luxury', 'global', 'Japan'"}, 'medium': {'type': 'string', 'default': 'digital', 'description': 'digital | print | both'}, 'palette': {'type': 'array', 'items': {'type': 'string'}, 'description': "Array of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B']"}, 'use_case': {'type': 'string', 'default': 'brand identity', 'description': "Use case e.g. 'brand identity', 'packaging', 'app UI'"}, 'site_evidence': {'type': 'object', 'description': "Evidence for a LIVE-SITE audit, supplied by the host (Colour Memory does not browse). {pages: [{url, role: 'homepage'|'about'|'work'|'services'|'product'|..., screenshot: bool, tokens: bool, observations: [{hex, evidence_type: 'canonical_token'|'rendered_observation'|'source_verified_external'|'model_interpretation', prominence?: 'dominant'|'primary'|...}]}], competitors: [{name, colours: [hex], colour_provenance: 'verified_brand_guideline'|'verified_current_site'|'verified_identity_source'|'estimated'|'unverified', source?}]}. A FULL live-site audit needs a homepage, an about/company page and one meaningful deep page (work/approach/services/product/case study), with rendered evidence from at least two of them. Supply less and the response's audit_evidence.audit_status comes back PARTIAL or INSUFFICIENT with the specific gaps named -- it will not present as a completed multi-page audit. A competitor colour that is not verified is kept as a QUALITATIVE comparison and never enters a CIEDE2000 or distinctiveness number; do not invent a hex to fill the gap."}, 'brand_category': {'type': 'string', 'description': "Optional brand category e.g. 'developer tool', 'food', 'fashion'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['brand_hex'], 'properties': {'market': {'type': 'string', 'description': "Market context e.g. 'UK luxury food retail'"}, 'region': {'type': 'string', 'description': "Region code e.g. 'GB', 'UAE', 'JP'"}, 'brand_hex': {'type': 'string', 'description': "Brand hero colour hex e.g. '#D4A829'"}, 'brand_name': {'type': 'string', 'description': "Brand name e.g. 'Fortnum and Mason'"}, 'competitor_hexes': {'type': 'array', 'description': 'List of competitor hex colours'}, 'competitor_names': {'type': 'array', 'description': 'Competitor names matching hex order'}, 'competitor_provenance': {'type': 'array', 'items': {'enum': ['verified_brand_guideline', 'verified_current_site', 'verified_identity_source', 'estimated', 'unverified'], 'type': 'string'}, 'description': "Where each competitor colour came from, positionally aligned to competitor_hexes. Only a verified value moves the distinctiveness score; an estimated or unverified one is kept as a QUALITATIVE comparison instead. Never invent a hex to fill a gap -- omit the competitor's colours and name them qualitatively. Omit this array entirely and the numbers are computed as before, with every competitor labelled 'unverified'."}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'properties': {'brand_ref': {'type': 'string', 'description': 'The brand_ref returned by brand_guideline_specify or brand_guideline_select.'}, 'claim_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Which claim_id values to resolve. Omit (or pass an empty list) to return every claim on the brand_ref.'}, 'project_id': {'type': 'string', 'description': 'Alternative to brand_ref for an authenticated (keyed) brand project. Requires the same API key that created it.'}, 'project_version': {'type': 'integer', 'description': "Resolve claims against this specific immutable version instead of the project's current version."}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'properties': {'delivery': {'enum': ['url', 'base64'], 'type': 'string', 'default': 'url', 'description': "'url' (default): signed, time-limited R2 download link. 'base64': PDF bytes returned inline."}, 'brand_ref': {'type': 'string', 'description': 'The brand_ref returned by brand_guideline_specify or brand_guideline_select.'}, 'project_id': {'type': 'string', 'description': 'Alternative to brand_ref for an authenticated (keyed) brand project. Requires the same API key that created it.'}, 'project_version': {'type': 'integer', 'description': "Render this specific immutable version instead of the project's current version. Omit to render the current version."}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['selected_candidate_id'], 'properties': {'note': {'type': 'string', 'description': 'Optional free-text rationale, e.g. "Client prefers the quieter system."'}, 'brand_ref': {'type': 'string', 'description': 'The brand_ref returned by brand_guideline_specify. Supply this OR project_id.'}, 'project_id': {'type': 'string', 'description': 'The project_id returned by brand_guideline_specify. Use this after a refinement (a continued project has a project_id but no new brand_ref). Supply this OR brand_ref.'}, 'locked_colour_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'colour_id values to lock for future iteration.'}, 'suppressed_claim_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'claim_id values to suppress (marked superseded).'}, 'selected_candidate_id': {'type': 'string', 'description': 'Which candidate_id to make canonical.'}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['brand_name', 'palette_input'], 'properties': {'brand_name': {'type': 'string', 'description': "The brand's name."}, 'brand_brief': {'type': 'object', 'properties': {'values': {'type': 'array', 'items': {'type': 'string'}}, 'markets': {'type': 'array', 'items': {'type': 'string'}}, 'audience': {'type': 'string'}, 'category': {'type': 'string'}, 'channels': {'type': 'array', 'items': {'enum': ['digital', 'print', 'packaging', 'interior', 'social'], 'type': 'string'}}, 'competitors': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'colours': {'type': 'array', 'items': {'type': 'string'}}}}}, 'personality': {'type': 'array', 'items': {'type': 'string'}}, 'positioning': {'type': 'string'}}, 'description': 'Category, positioning, audience, personality, values, channels, markets, and named competitors with their hex colours.'}, 'constraints': {'type': 'object', 'properties': {'avoid_concepts': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Phrases to exclude -- an archive match whose own name/colour_notes/archive_source contains one (case-insensitive substring) is dropped from the retrieval pool entirely.'}, 'preferred_families': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Soft ranking boost -- matching archive entries are preferred, not the only ones allowed.'}}, 'description': 'Structured negative/positive retrieval constraints, checked before archive-diversity capping. avoid_concepts takes precedence over any sentiment inferred from brand_brief prose.'}, 'preferences': {'type': 'object', 'properties': {'palette_size': {'type': 'integer', 'description': 'Colours per candidate (default 5, max 12).'}, 'accessibility_target': {'enum': ['AA', 'AAA'], 'type': 'string'}, 'minimum_claim_strength': {'enum': ['A', 'B', 'C', 'D', 'E'], 'type': 'string', 'description': 'Minimum evidence grade required for full evidence qualification and recommendation. Evidence-floor failure ALONE does not cause an otherwise relevant colour to be replaced in the designed palette -- design decides whether a colour belongs, evidence decides what may be claimed about it. Colours below the requested grade keep their actual evidence status, are disclosed as below floor, and do not count as satisfying the requested evidence qualification (minimum_claim_strength_met stays false). A colour may still be replaced for an independent semantic-relevance failure. A derived/original colour makes no archive claim, so no grade applies to it -- that is not the same as meeting the floor, and it never counts positively toward it. Note this differs from palette_specify, where the floor IS a hard admission filter.'}, 'strict_semantic_colour': {'type': 'boolean', 'description': 'Default true for Brand Standard. Excludes colours whose brief-relevance is weak or irrelevant -- a DESIGN admission test, applied independently of the evidence floor above.'}, 'allow_unsourced_original_colours': {'type': 'boolean', 'description': 'Whether original/derived colours with no archive claim may appear in the palette. Does not affect evidence qualification: an unsourced colour never satisfies minimum_claim_strength.'}}}, 'palette_input': {'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['existing_palette', 'seed_colours', 'concept', 'archive', 'image'], 'type': 'string'}, 'archive': {'type': 'string', 'description': 'Used by mode=archive -- an archive name to sample representative colours from.'}, 'colours': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Hex colours -- used by existing_palette/seed_colours modes.'}, 'concept': {'type': 'string', 'description': 'Used by mode=concept -- a text description searched against the archive.'}, 'image_id': {'type': 'string', 'description': 'Used by mode=image -- an ephemeral image_id from ingest_image.'}, 'locked_colours': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Hex colours that must appear, unchanged, in every candidate.'}}, 'description': 'Exactly how to source the candidate colours.'}, 'identity_assets': {'type': 'object', 'properties': {'logo_base64': {'type': 'string', 'description': 'The logo as base64 image bytes, for callers holding the file directly. Rendered on the cover by default.'}, 'logo_image_id': {'type': 'string', 'description': "An ingest_image image_id for the brand's logo. Resolved once at specify time and frozen into the project snapshot, so it still renders after the ephemeral image expires."}, 'wordmark_base64': {'type': 'string', 'description': 'As logo_base64, for a wordmark.'}, 'wordmark_image_id': {'type': 'string', 'description': 'As logo_image_id, for a wordmark.'}}}, 'output_preferences': {'type': 'object', 'properties': {'tone': {'type': 'string'}, 'language': {'type': 'string'}}}, 'continue_project_id': {'type': 'string', 'description': "The project_id returned by an earlier call, when this is a REFINEMENT of that same Brand Standard. Reuse it and the work joins that project as a new version; omit it and a second project is created. 'Make it warmer', 'change the secondary', 'render the PDF again' and 'show another option' are all continuations. Start a new project only when the customer asks for a genuinely separate brand."}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['brand_job_ref'], 'properties': {'brand_job_ref': {'type': 'string', 'description': "The brand_job_ref returned by brand_guideline_specify's processing response."}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'description': "Hero hex colour e.g. '#4A2A50'"}, 'medium': {'type': 'string', 'default': 'general', 'description': "Medium e.g. 'packaging', 'digital', 'interior'"}, 'concept': {'type': 'string', 'description': "Optional concept to search for cliche contradiction e.g. 'luxury', 'eco', 'wellness'"}, 'markets': {'type': 'array', 'description': "Target markets e.g. ['UK', 'France', 'Japan']"}, 'product_type': {'type': 'string', 'description': "Product type for copy e.g. 'velvet cushion', 'fragrance', 'cleaning spray'"}, 'target_model': {'type': 'string', 'default': 'midjourney', 'description': "Image model for agent brief e.g. 'midjourney', 'flux', 'dalle'"}, 'brand_context': {'type': 'object', 'description': 'Brand context: category, positioning, audience, channels'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette'], 'properties': {'market': {'type': 'string', 'default': 'global', 'description': 'Target market e.g. global, UK, Japan'}, 'medium': {'type': 'string', 'default': 'digital', 'description': 'digital | print | both'}, 'palette': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Hex values'}, 'use_case': {'type': 'string', 'default': 'brand identity', 'description': 'Use case e.g. brand identity, packaging'}, 'brand_category': {'type': 'string', 'description': 'Optional e.g. developer tool, luxury, food'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': [], 'properties': {'name': {'type': 'string', 'description': "Colour name e.g. 'Prussian Blue' or 'Ottoman Carbon Ink'"}, 'slug': {'type': 'string', 'description': "Stable colour slug from archive_search e.g. 'keats:keats-s-lung' -- preferred over name for reliable retrieval"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['colours'], 'properties': {'colours': {'type': 'array', 'items': {'type': 'string'}, 'description': '2-5 hex values to assess as a combination'}, 'context': {'type': 'string', 'default': 'UI', 'description': 'Usage context: UI | data viz | fashion | interior | print | branding'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex_a', 'hex_b'], 'properties': {'hex_a': {'type': 'string', 'description': "First colour hex e.g. '#003366'"}, 'hex_b': {'type': 'string', 'description': "Second colour hex e.g. '#1877F2'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': [], 'properties': {'hex': {'type': 'string', 'description': "Single hex value to assess e.g. '#FF9900'"}, 'markets': {'type': 'array', 'items': {'type': 'string'}, 'description': "Optional market focus e.g. ['China', 'Middle East', 'India']"}, 'palette': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional list of hex values to assess as a palette'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'description': "Hex colour to fingerprint e.g. '#4A2A50'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex', 'substrate'], 'properties': {'hex': {'type': 'string', 'description': "Hex colour to assess e.g. '#2A5498'"}, 'use': {'type': 'string', 'default': '', 'description': "Specific use context e.g. 'heritage repair', 'new build interior', 'conservation project'"}, 'finish': {'type': 'string', 'default': 'matt', 'description': "Paint finish e.g. 'matt', 'eggshell', 'gloss', 'limewash'"}, 'substrate': {'type': 'string', 'description': "Physical substrate e.g. 'lime plaster', 'gypsum board', 'brick', 'timber', 'canvas'"}, 'orientation': {'type': 'string', 'default': '', 'description': "Room or surface orientation e.g. 'north-facing', 'south exterior', 'east bedroom'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'description': "Hex value e.g. '#3A5C8C'"}, 'harmony_types': {'type': 'array', 'items': {'type': 'string'}, 'description': "Harmony types to include: 'complementary', 'analogous', 'triadic', 'split_complementary', 'tetradic', or 'hay_contrast' (D.R. Hay's 1838 documented contrast pairing, distinct from the geometric types -- see tool description)."}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'description': "Hex colour e.g. '#154F20'"}, 'tone': {'type': 'string', 'default': 'dinner party', 'description': "Desired tone e.g. 'dinner party', 'academic', 'social media', 'brand copy'"}, 'audience': {'type': 'string', 'default': 'general public', 'description': "Target audience e.g. 'general public', 'interior designers', 'children'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex_val'], 'properties': {'n': {'type': 'integer', 'default': 3, 'description': 'Number of matches (default 3)'}, 'brand': {'type': 'string', 'description': "Optional brand filter: 'farrow' or 'little_greene'"}, 'hex_val': {'type': 'string', 'description': "Hex value e.g. '#003153'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex_val'], 'properties': {'hex_val': {'type': 'string', 'description': "Hex value e.g. '#8B4513'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex_a', 'hex_b'], 'properties': {'hex_a': {'type': 'string', 'description': "First colour hex e.g. '#003366'"}, 'hex_b': {'type': 'string', 'description': "Second colour hex e.g. '#C8A600'"}, 'ratio': {'type': 'number', 'default': 0.5, 'description': 'Mix ratio 0.0-1.0 where 0.5 is equal parts (default 0.5)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'description': 'Hex colour to name e.g. #8B4A2A'}, 'style': {'type': 'string', 'description': 'geographical | poetic | material | literary | botanical | industrial | mixed'}, 'market': {'type': 'string', 'description': 'Target market e.g. UK luxury'}, 'n_names': {'type': 'integer', 'description': 'Number of name options (default 5)'}, 'product_type': {'type': 'string', 'description': 'Product type e.g. candle, paint, leather bag'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'anyOf': [{'required': ['hex']}, {'required': ['hexes']}], 'properties': {'hex': {'type': 'string', 'description': 'Single hex colour e.g. #31559B'}, 'hexes': {'type': 'array', 'items': {'type': 'string'}, 'description': "Multiple hex colours for batch lookup e.g. ['#31559B', '#8B1A1A']. Max 20."}, 'n_archive': {'type': 'integer', 'default': 3, 'description': 'Number of archive matches to return (default 3)'}, 'include_physics': {'type': 'boolean', 'default': True, 'description': 'Include illuminant behaviour and gamut data (default true)'}, 'include_cultural': {'type': 'boolean', 'default': True, 'description': 'Include cultural risk and associations (default true)'}}}
출력 스키마
{'type': 'object', 'description': 'Structured JSON response. Shape varies by tool; most return an ok boolean plus a result or results field with the tools data payload.', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hexes'], 'properties': {'hexes': {'type': 'array', 'items': {'type': 'string'}, 'description': "List of hex colours e.g. ['#31559B', '#8B1A1A']"}, 'n_archive': {'type': 'integer', 'default': 3, 'description': 'Number of archive matches per colour (default 3)'}, 'include_physics': {'type': 'boolean', 'default': True, 'description': 'Include illuminant behaviour and gamut data (default true)'}, 'include_cultural': {'type': 'boolean', 'default': False, 'description': 'Include cultural associations (default false)'}}}
출력 스키마
{'type': 'object', 'description': 'Returns ok, requested, unique, returned, errors, and results array of passports.', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['record_id'], 'properties': {'record_id': {'type': 'string', 'description': 'Stable record id, e.g. from archive_search or colour_card.'}, 'include_computed': {'type': 'boolean', 'description': 'Include computed (not source-asserted) relationships where available. Default true.'}, 'include_unresolved': {'type': 'boolean', 'description': 'Include same-name candidates across sources -- the cheapest, easiest-to-misread-as-evidence edge in the system. Default false.'}}}
출력 스키마
{'type': 'object', 'properties': {'label': {'type': 'string'}, 'record_id': {'type': 'string'}, 'structural': {'type': 'object', 'description': 'Mechanical facts about the source object (plate layout etc.), kept separate from source_asserted on purpose.'}, 'source_asserted': {'type': 'object', 'description': 'Edges the source itself states, grouped by predicate.'}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'description': 'Hex value e.g. #D4A829'}, 'archive': {'type': 'string', 'description': 'Optional archive filter'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'description': "Hex value e.g. '#DC143C'"}, 'n_archives': {'type': 'integer', 'default': 5, 'description': 'Number of archive sources to draw from (default 5)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'description': "Hex colour to evaluate e.g. '#4A2A50'"}, 'medium': {'type': 'string', 'default': 'general', 'description': "Primary medium e.g. 'packaging', 'interior', 'digital'"}, 'markets': {'type': 'array', 'items': {'type': 'string'}, 'description': "Target markets e.g. ['UK', 'France', 'Japan']"}, 'constraints': {'type': 'object', 'properties': {'avoid': {'type': 'array', 'items': {'type': 'string'}, 'description': "What to avoid e.g. ['obvious gold', 'generic black']"}, 'must_work_on': {'type': 'array', 'items': {'type': 'string'}, 'description': "Surfaces e.g. ['glass', 'paper label', 'website']"}}, 'description': 'Constraints object'}, 'brand_context': {'type': 'object', 'properties': {'audience': {'type': 'string', 'description': "Target audience e.g. 'affluent UK women 35-55'"}, 'category': {'type': 'string', 'description': "Brand category e.g. 'luxury fragrance', 'heritage interior', 'SaaS'"}, 'channels': {'type': 'array', 'items': {'type': 'string'}, 'description': "Channels e.g. ['packaging', 'ecommerce', 'social']"}, 'positioning': {'type': 'string', 'description': "Brand positioning e.g. 'quiet ritual luxury', 'trusted authority'"}}, 'description': 'Brand context object'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['concept'], 'properties': {'n': {'type': 'integer', 'default': 10, 'description': 'Number of timeline entries to return (default 10, max 20)'}, 'concept': {'type': 'string', 'description': 'Colour name or concept to trace e.g. indigo, imperial purple, mourning black'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Named archive colour e.g. Bourton Honey'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex', 'use_case'], 'properties': {'hex': {'type': 'string', 'description': "Hex colour to evaluate e.g. '#31559B'"}, 'medium': {'type': 'string', 'default': 'general', 'description': "Application medium e.g. 'digital', 'interior', 'print', 'fashion', 'packaging'"}, 'markets': {'type': 'array', 'items': {'type': 'string'}, 'default': [], 'description': "Target markets e.g. ['UK', 'Japan', 'UAE']"}, 'audience': {'type': 'string', 'description': "Optional: target audience e.g. 'high net worth travellers', 'young professionals'"}, 'use_case': {'type': 'string', 'description': "What the colour will be used for e.g. 'luxury hotel brand', 'heritage interior wall'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['concept'], 'properties': {'avoid': {'type': 'array', 'items': {'type': 'string'}, 'default': [], 'description': "Archive names or colour terms to exclude e.g. ['neon', 'ScreenDigital']"}, 'medium': {'type': 'string', 'default': 'general', 'description': "Application context e.g. 'interior', 'brand identity', 'fashion', 'digital', 'print'"}, 'concept': {'type': 'string', 'description': "Cultural theme, mood, or brief e.g. 'Victorian mourning', 'Ottoman court', 'Scandinavian minimal'"}, 'n_colours': {'type': 'integer', 'default': 5, 'description': 'Palette size (default 5, max 8)'}, 'include_prompt': {'type': 'boolean', 'default': True, 'description': 'Include image generation prompt (default true)'}, 'include_accessibility': {'type': 'boolean', 'default': True, 'description': 'Include WCAG contrast check (default true)'}, 'include_paint_matches': {'type': 'boolean', 'default': True, 'description': 'Include commercial paint matches (default true)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex', 'product_type'], 'properties': {'hex': {'type': 'string', 'description': "Hex colour of the product e.g. '#4A2A50'"}, 'tone': {'type': 'string', 'default': 'premium but not pompous', 'description': "Copy tone e.g. 'premium but not pompous', 'warm and accessible', 'heritage and serious'"}, 'channel': {'type': 'string', 'default': 'shopify', 'description': "Sales channel e.g. 'shopify', 'etsy', 'instagram', 'editorial'"}, 'brand_name': {'type': 'string', 'default': '', 'description': 'Optional brand name to include in copy'}, 'product_type': {'type': 'string', 'description': "Product type e.g. 'velvet cushion', 'ceramic vase', 'linen throw', 'candle'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hexes'], 'properties': {'hexes': {'type': 'array', 'description': "List of hex values e.g. ['#D4A829', '#1A5C6E']"}, 'style': {'type': 'string', 'description': 'geographical | poetic | material | literary | mixed (default)'}, 'max_dE': {'type': 'number', 'description': 'Max dE2000 distance to accept (default 25)'}, 'brand_name': {'type': 'string', 'description': 'Brand name for context'}, 'product_category': {'type': 'string', 'description': "e.g. 'paint', 'candle', 'fashion', 'homeware'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': [], 'properties': {'k': {'type': 'integer', 'description': 'Number of colours to extract (3-12, default 6)'}, 'image': {'type': 'object', 'required': [], 'properties': {'file_id': {'type': 'string'}, 'file_name': {'type': 'string'}, 'mime_type': {'type': 'string'}, 'download_url': {'type': 'string'}}, 'description': 'Image file attachment from ChatGPT'}, 'analyse': {'type': 'boolean', 'description': 'If true, match colours against archive and return names'}, 'image_id': {'type': 'string', 'description': 'Ephemeral image_id returned by ingest_image. Use this if you only have a local file path or raw file attachment with no public URL.'}, 'image_url': {'type': 'string', 'description': 'Public URL of image'}, 'grey_card_hex': {'type': 'string', 'description': 'Hex from a grey/white card for white balance'}, 'style_context': {'type': 'string', 'description': 'e.g. English cottage garden, Victorian, Japanese'}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['query'], 'properties': {'mode': {'enum': ['user', 'evidence'], 'type': 'string', 'description': "'user' (default) returns an evidence-led answer packet with structured values retained. 'evidence' additionally returns the complete underlying records."}, 'query': {'type': 'string', 'description': 'Plain-English historical colour question.'}, 'sources': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional restriction to named sources.'}, 'max_results': {'type': 'integer', 'description': 'Upper bound on evidence items (default 12).'}, 'high_confidence_only': {'type': 'boolean', 'description': 'Only high-confidence records.'}}}
출력 스키마
{'type': 'object', 'properties': {'answer': {'type': 'object', 'description': 'Evidence-led answer: what the evidence supports, one observation that changes the question where the records support one, and the boundary of the claim.'}, 'evidence': {'type': 'array', 'items': {'type': 'object'}}, 'do_not_say': {'type': 'array', 'items': {'type': 'string'}}, 'incomparabilities': {'type': 'array', 'items': {'type': 'object'}}, 'premise_correction': {'type': ['object', 'null']}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['concept', 'archive', 'rooms'], 'properties': {'avoid': {'type': 'array', 'items': {'type': 'string'}, 'default': [], 'description': 'Terms to exclude from retrieval.'}, 'rooms': {'type': 'array', 'items': {'type': 'object', 'properties': {'label': {'type': 'string', 'description': "Room name e.g. 'Entrance Hall'"}, 'function': {'type': 'string', 'default': ''}, 'room_type': {'type': 'string', 'default': 'living', 'description': "e.g. 'living', 'bedroom', 'kitchen', 'study', 'bathroom', 'hallway', 'dining'"}, 'orientation': {'enum': ['north', 'south', 'east', 'west', ''], 'type': 'string', 'default': '', 'description': 'Optional room orientation. Recorded as descriptive light context and surfaced in light_context; it does not alter candidate selection.'}, 'requested_character': {'type': 'string', 'default': ''}}}, 'description': "One entry per room, e.g. [{label:'Entrance Hall', room_type:'hallway', orientation:'north'}]"}, 'archive': {'type': 'string', 'description': "Single archive to draw every room's colours from, e.g. 'ArtsAndCrafts'. Required -- invalid names return a clear error listing valid archives."}, 'concept': {'type': 'string', 'description': "House-level concept or brief, e.g. 'Arts and Crafts movement family house'"}, 'output_format': {'enum': ['standard', 'scene_brief'], 'type': 'string', 'default': 'standard', 'description': "'scene_brief' adds a Historical Scene Colour Brief for film and image work: per colour its place, date, observer, timing, source and do-not-claim lines, then DOCUMENTED VISUAL CONSTRAINTS, NEGATIVE / DO-NOT-INVENT constraints and a CREATIVE RECONSTRUCTION BOUNDARY. Evidence only; nothing is invented."}, 'guidance_level': {'enum': ['client', 'decorator'], 'type': 'string', 'default': 'client', 'description': "Who the guidance notes are written for. 'client' (default) for a homeowner; 'decorator' for a trade reader. The specification decisions are identical either way -- only the wording differs."}, 'narrative_mode': {'type': 'string', 'default': 'evidence_only', 'description': "Default 'evidence_only'."}, 'colours_per_room': {'type': 'integer', 'default': 5, 'description': 'Default 5.'}, 'shared_house_colours': {'type': 'integer', 'default': 2, 'description': 'Default 2.'}, 'minimum_claim_strength': {'type': 'string', 'default': 'B', 'description': "Evidence-grade floor, default 'B'. Explicitly supplied: a hard admission filter, never relaxed -- too few qualifying records fails closed with a per-grade availability map (ARCHIVE_EVIDENCE_POOL_DEPLETED). Left at the implicit default: if the archive's best relevant records sit below it, the design-admissibility floor is relaxed to the archive's best achievable grade and disclosed in the response's evidence_floor block. Colours always keep their true evidence grade either way -- claims are never upgraded."}, 'strict_semantic_colour': {'type': 'boolean', 'default': True, 'description': 'Default true -- excludes entries whose quoted colour language contradicts their stored hex.'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': [], 'properties': {'k': {'type': 'integer', 'description': 'Number of colours to extract (3-12, default 6)'}, 'model': {'type': 'string', 'description': 'Image model: midjourney | flux | dalle | stable_diffusion (default midjourney)'}, 'archive': {'type': 'string', 'description': "Explicit archive name override e.g. 'MarsColour', 'Japan'"}, 'image_url': {'type': 'string', 'description': 'Public URL of the image'}, 'image_base64': {'type': 'string', 'description': 'Base64-encoded image data'}, 'product_type': {'type': 'string', 'description': "Product focus e.g. 'tea towel', 'wallpaper', 'ceramic', 'textile'"}, 'grey_card_hex': {'type': 'string', 'description': 'Hex value from a grey/white card for white balance correction'}, 'style_context': {'type': 'string', 'description': "Plain English style e.g. 'English cottage garden', 'Victorian', 'Japanese', 'MarsColour'. Restricts archive matching to coherent cultural set."}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['image_base64'], 'properties': {'archive': {'type': 'string', 'description': 'Optional: restrict archive matching to a specific archive'}, 'n_colours': {'type': 'integer', 'default': 5, 'description': 'Number of dominant colours to extract (default 5, max 5)'}, 'media_type': {'type': 'string', 'default': 'image/jpeg', 'description': "Image MIME type e.g. 'image/jpeg'"}, 'image_base64': {'type': 'string', 'description': 'Base64 encoded image (JPEG, PNG, WebP)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': [], 'properties': {'name': {'type': 'string', 'description': "Optional: person's name for the report e.g. 'Sarah'"}, 'image_url': {'type': 'string', 'description': 'URL of a portrait photo hosted online. Easier than base64 for MCP use. Either image_url or image_base64 required.'}, 'media_type': {'type': 'string', 'default': 'image/jpeg', 'description': "Image MIME type e.g. 'image/jpeg'"}, 'image_base64': {'type': 'string', 'description': 'Base64 encoded portrait photo (JPEG or PNG). Face should be clearly visible in natural light. Either image_base64 or image_url required.'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['entries'], 'properties': {'entries': {'type': 'array', 'items': {'type': 'object', 'properties': {'hex': {'type': 'string'}, 'name': {'type': 'string'}, 'notes': {'type': 'string'}, 'archive': {'type': 'string'}, 'primary_source': {'type': 'string'}}}, 'description': 'List of colour entries to score for resonance'}, 'score_basis': {'type': 'string', 'description': 'Scoring basis (default: material_origin_to_social_consequence)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': [], 'properties': {'image': {'type': 'object', 'properties': {'file_name': {'type': 'string'}, 'mime_type': {'type': 'string'}, 'download_url': {'type': 'string'}}, 'description': 'MCP file reference {download_url, mime_type, file_name}'}, 'source_url': {'type': 'string', 'description': 'HTTPS URL of the image'}, 'image_base64': {'type': 'string', 'description': "Base64-encoded image data. Use this for locally uploaded files with no public URL. No size limit here (unlike palette_extract's image_base64)."}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['concept'], 'properties': {'avoid': {'type': 'array', 'items': {'type': 'string'}, 'default': [], 'description': "Colours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection."}, 'style': {'type': 'string', 'default': 'heritage', 'description': "Style direction e.g. 'heritage', 'contemporary', 'maximalist', 'minimal', 'scandi', 'industrial', 'coastal'"}, 'archive': {'type': 'string', 'default': '', 'description': "Optional: restrict the candidate pool to this single archive before scoring, e.g. 'ArtsAndCrafts' or 'GeorgianPleasures'. Invalid names return a clear error listing valid archives rather than silently searching everything. Omit for unrestricted cross-archive search (default, unchanged behaviour)."}, 'concept': {'type': 'string', 'description': "Room concept or brief e.g. 'bold maximalist living room' or 'calm Scandi bedroom'"}, 'n_colours': {'type': 'integer', 'default': 5, 'description': 'Number of colours in scheme (default 5, max 7)'}, 'role_plan': {'type': 'array', 'items': {'type': 'object', 'required': ['role'], 'properties': {'role': {'type': 'string', 'description': "The job this colour does in the room e.g. 'ground', 'joinery', 'accent'."}, 'intent': {'type': 'string', 'default': '', 'description': 'What this role is for, in words.'}, 'surfaces': {'type': 'array', 'items': {'type': 'string'}, 'default': [], 'description': "Where it goes e.g. ['walls'], ['skirting', 'architrave']."}, 'proportion': {'type': 'string', 'description': 'ONLY when the plan genuinely specifies one. An ungrounded percentage reads as a measured area split that nobody computed.'}, 'target_hex': {'type': 'string', 'default': '', 'description': "Approximately the colour the intent means, stated by you. A TARGET, not the answer -- the archive still supplies the real colour. Without it, 'a warm sunny yellow' is answered by text similarity over record names and can return a mauve sweet pea called Wendy's Joy."}, 'allow_contrast': {'type': 'boolean', 'default': False, 'description': 'Whether this role may contrast with the scheme rather than harmonise.'}}}, 'default': [], 'description': "Optional: the room's spatial hierarchy, decided BEFORE colours are retrieved, so retrieval can be asked for candidates that suit a named job on a named surface. The role vocabulary is open -- field, architectural, ground, joinery, material, textile, accent and signal are all reasonable, and a room may need three of them or six. Omit to let the endpoint decide the hierarchy itself (unchanged behaviour)."}, 'room_type': {'type': 'string', 'default': 'living', 'description': "Room type e.g. 'living', 'bedroom', 'kitchen', 'study', 'bathroom', 'hallway', 'dining'"}, 'orientation': {'type': 'string', 'default': '', 'description': "Room orientation e.g. 'north', 'south', 'east', 'west' — affects light advice"}, 'output_format': {'enum': ['standard', 'scene_brief'], 'type': 'string', 'default': 'standard', 'description': "'scene_brief' adds a Historical Scene Colour Brief for film and image work: per colour its place, date, observer, timing, source and do-not-claim lines, then DOCUMENTED VISUAL CONSTRAINTS, NEGATIVE / DO-NOT-INVENT constraints and a CREATIVE RECONSTRUCTION BOUNDARY. Evidence only; nothing is invented."}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': [], 'properties': {}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['colours'], 'properties': {'n': {'type': 'integer', 'description': 'Max alternatives per colour when confidence is low (1-3, default 1)'}, 'archive': {'type': 'string', 'description': 'Optional: restrict to one archive e.g. China, Pigment, ArtsAndCrafts'}, 'colours': {'type': 'array', 'items': {'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'description': 'Hex colour e.g. #D4A829'}, 'weight': {'type': 'number', 'description': 'Proportional weight 0-1 from palette extraction'}}}, 'description': 'Array of colour objects'}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette'], 'properties': {'market': {'type': 'string', 'default': 'global', 'description': 'Target market'}, 'medium': {'type': 'string', 'default': 'digital', 'description': 'digital | print | both'}, 'palette': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Hex values to audit'}, 'use_case': {'type': 'string', 'default': 'brand identity', 'description': 'Use case context'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette_a', 'palette_b'], 'properties': {'markets': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Target markets'}, 'use_case': {'type': 'string', 'description': 'Context for comparison e.g. luxury packaging'}, 'palette_a': {'type': 'array', 'items': {'type': 'string'}, 'description': 'First palette hex values'}, 'palette_b': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Second palette hex values'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['concept'], 'properties': {'avoid': {'type': 'array', 'items': {'type': 'string'}, 'default': [], 'description': "Colours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection."}, 'concept': {'type': 'string', 'description': "Cultural theme or historical period e.g. 'Victorian mourning' or 'Ottoman court'"}, 'n_colours': {'type': 'integer', 'default': 5, 'description': 'Number of colours to return (default 5, max 8)'}, 'include_neutrals': {'type': 'boolean', 'default': True, 'description': 'Include neutral/background colours'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette'], 'properties': {'names': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional custom names'}, 'format': {'type': 'string', 'description': 'css | figma | ase_hex | tailwind | json'}, 'prefix': {'type': 'string', 'description': 'Token prefix e.g. cm, brand (default: cm)'}, 'palette': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Hex values to export'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': [], 'properties': {'k': {'type': 'integer', 'description': 'Number of colours to extract (3-12, default 6)'}, 'analyse': {'type': 'boolean', 'description': 'If true, also run palette_analyse on the extracted colours and return archive names'}, 'archive': {'type': 'string', 'description': "Explicit single archive name to restrict matching to e.g. 'MarsColour', 'Japan', 'Victorian'."}, 'image_id': {'type': 'string', 'description': 'Ephemeral image_id from ingest_image (preferred for images over 50 KB)'}, 'image_url': {'type': 'string', 'description': 'Public URL of the image to extract colours from'}, 'image_base64': {'type': 'string', 'description': 'Base64-encoded image data (small images only, under 50 KB)'}, 'grey_card_hex': {'type': 'string', 'description': 'Hex value sampled from a grey or white card in the image for white balance correction e.g. #C8C8C8'}, 'style_context': {'type': 'string', 'description': "Plain English style description that restricts archive matching to a coherent set e.g. 'English cottage garden', 'Victorian', 'Japanese', 'MarsColour', 'Arts and Crafts'. Prevents palette colours from being named across unrelated archives."}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['colours'], 'properties': {'brief': {'type': 'string', 'description': "The customer's request, in their words."}, 'notes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Short usage guidance, in your words.'}, 'title': {'type': 'string', 'description': 'What you are calling this palette.'}, 'colours': {'type': 'array', 'items': {'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string'}, 'name': {'type': 'string'}, 'role': {'type': 'string', 'description': 'what this colour is for'}, 'status': {'enum': ['SOURCE-BACKED ANCHOR', 'CONTEMPORARY RECOMMENDATION', 'COMPUTED', 'DERIVED'], 'type': 'string', 'description': 'Leave out unless you know. Source-backed is checked against the archive and downgraded if it does not hold.'}, 'proportion': {'type': 'number', 'description': 'share of the scheme, if you decided one'}}}, 'description': 'The final palette, in the order you want it shown.'}, 'source_anchors': {'type': 'array', 'items': {'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string'}, 'name': {'type': 'string'}, 'archive': {'type': 'string'}}}, 'description': "Archive records that informed the palette but are not in it. Give the record's name so it can be verified."}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['slots'], 'properties': {'size': {'type': 'integer', 'default': 5, 'description': 'Total CURATED palette size 2-12 (default 5). This is the designed-palette ceiling, not a product limit on how many colours exist: for a large colour COLLECTION, page archive_search instead.'}, 'slots': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'locked'], 'properties': {'hex': {'type': 'string', 'description': "Hex colour e.g. '#8B6B3D' — required if locked is true"}, 'index': {'type': 'integer', 'description': 'Slot position 0-11'}, 'locked': {'type': 'boolean', 'description': 'If true this slot is fixed and will not be filled'}}}, 'description': 'List of palette slots. Each has index (0-11), optional hex, and locked flag.'}, 'archive': {'type': 'string', 'description': "Optional: restrict fills to one archive e.g. 'Oxfordshire', 'Shakespeare', 'Japan'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['anchors'], 'properties': {'path': {'enum': ['linear', 'chroma_preserved'], 'type': 'string', 'default': 'chroma_preserved', 'description': 'linear: straight Lab lerp (may have neutral midpoint). chroma_preserved: LCh short-arc, saturation maintained.'}, 'steps': {'type': 'integer', 'default': 7, 'description': 'Total stops including anchors (default 7, max 20)'}, 'anchors': {'type': 'array', 'items': {'type': 'string'}, 'description': '2-5 hex values (#RRGGBB) or exact archive colour names'}, 'archive': {'type': 'string', 'description': 'Restrict snapping to this archive name e.g. Victorian'}, 'output_format': {'enum': ['stops', 'css', 'svg'], 'type': 'string', 'default': 'stops', 'description': 'stops: array of colour objects. css: linear-gradient string. svg: swatch bar.'}, 'snap_to_archive': {'type': 'boolean', 'default': True, 'description': 'Snap each stop to nearest archive colour (default true)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette'], 'properties': {'market': {'type': 'string', 'description': 'Target market'}, 'context': {'type': 'string', 'description': 'Brand context'}, 'palette': {'type': 'array', 'description': 'Existing hex values'}, 'brand_name': {'type': 'string', 'description': 'Brand name for CSS tokens'}, 'n_additions': {'type': 'integer', 'description': 'Archive colours to add (default 3)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette', 'feedback'], 'properties': {'markets': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Target markets'}, 'palette': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Current hex palette to refine'}, 'feedback': {'type': 'string', 'default': '', 'description': 'Natural language refinement e.g. more melancholic'}, 'use_case': {'type': 'string', 'description': 'Use case context e.g. luxury homewares'}, 'direction': {'type': 'string', 'default': '', 'description': 'Alias for feedback — natural language direction e.g. more dangerous, more historical, warmer'}, 'n_results': {'type': 'integer', 'description': 'Number of variants to return (default 1)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette'], 'properties': {'palette': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Array of hex values'}, 'use_case': {'type': 'string', 'default': 'UI', 'description': 'Use case context e.g. UI, dashboard, report'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': [], 'properties': {'house': {'type': 'object', 'description': 'DO NOT USE. Inline house objects are REFUSED outright (400, INLINE_HOUSE_NOT_ALLOWED), even alongside a valid house_ref/project_id -- this PDF is Colour Memory-branded and can only render a house Colour Memory itself created and still holds, never one relayed back through the request body. Call house_specify, then pass the house_ref it returns in `house_ref` below instead.'}, 'query': {'type': 'string', 'description': 'Optional title for the palette e.g. Ottoman imperial luxury'}, 'source': {'type': 'string', 'default': 'archive', 'description': 'Optional source label e.g. brand, conceptual'}, 'entries': {'type': 'array', 'items': {'type': 'object'}, 'description': "Array of colour cards. Either the flat entries array from query_hex/palette_concept, or report['presented_cards'] from archive_report_brief (single_cultivar, colour_family, and conservative-mode hero cards are all supported -- see tool description). Omit if using `sections` instead. EVIDENCE FIELDS ARE SERVER-VERIFIED: each entry's name+hex(+archive_source) must match a real archive record -- any claim_strength/primary_source/colour_notes/colour_basis/hex_confidence supplied here is ignored and replaced with Colour Memory's own record; a non-matching entry refuses the whole request. Requires a valid API key."}, 'delivery': {'enum': ['url', 'base64'], 'type': 'string', 'description': "'url' (default): signed, time-limited R2 download link. 'base64': PDF bytes returned inline as pdf_base64 for callers that need the file directly."}, 'sections': {'type': 'array', 'items': {'type': 'object'}, 'description': "Alternative to `entries` -- one entry per document section, e.g. house_specify's rooms. Each: {grouping_basis?, hero_hex?, entries: [...colour cards, server-verified exactly like the flat `entries` field above...]}. DO NOT include title/subtitle/rationale/application_notes -- this renderer cannot currently keep that requester free text cleanly separated from Colour Memory's own evidence, so any of them present REFUSES THE WHOLE REQUEST with 400 REQUESTER_FREE_TEXT_NOT_ALLOWED naming the field(s); a section with only `entries` still renders, with an auto-numbered heading. Requires a valid API key."}, 'house_ref': {'type': 'string', 'description': "THE way to render the flagship document-plan publication -- the house_ref string house_specify's own response returns (valid for 30 minutes after that call, or per project_persistence for a durable/temporary project). Renders the identical flagship document without resending the house object over the wire, and without it ever being treated as caller-supplied evidence. Anonymous house_ref access needs no API key, unchanged; do not send `house` alongside it."}, 'project_id': {'type': 'string', 'description': "Alternative to house_ref for an authenticated (keyed) caller's own durable project -- the project_id house_specify returned. Requires the same API key that created the project."}, 'presentation': {'type': 'object', 'description': "Used with `sections` or `house_ref`/`project_id`. {template: 'sectioned_specification'|'colour_drenched_lookbook' (sections only), page_size?: 'A4-portrait'|'A4-landscape'|'16:9', minimum_colour_coverage?: number (default 0.55 for lookbook), source_display?: 'inline'|'appendix', max_body_words_per_page?: integer, min_body_font_pt?: number (default 10.5), min_label_font_pt?: number (default 9, swatch colour-name labels), min_citation_font_pt?: number (default 7.5, appendix citations and page furniture)}. No rendered text falls below its category's floor -- names that don't fit are truncated with an ellipsis, never shrunk past the floor."}, 'project_version': {'type': 'integer', 'description': "Used with either house_ref or project_id -- render this specific immutable version instead of the project's current version. Omit to render the current version."}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['colours'], 'properties': {'style': {'type': 'string', 'description': "e.g. 'heritage', 'contemporary', 'minimal'"}, 'colours': {'type': 'array', 'items': {'type': 'string'}, 'description': 'List of 2-8 hex values'}, 'room_type': {'type': 'string', 'description': "e.g. 'living', 'bedroom', 'kitchen', 'study'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['concept'], 'properties': {'concept': {'type': 'string', 'description': 'Cultural concept e.g. Japanese wabi-sabi'}, 'n_colours': {'type': 'integer', 'default': 5, 'description': 'Number of colours (default 5)'}, 'min_relevance': {'type': 'number', 'default': 0.3, 'description': 'Minimum relevance score 0-1 (default 0.3)'}, 'allowed_archives': {'type': 'array', 'items': {'type': 'string'}, 'description': "Archive names to restrict results e.g. ['Japan', 'China']"}, 'include_neutrals': {'type': 'boolean', 'default': True, 'description': 'Include neutral tones (default true)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hexes'], 'properties': {'h': {'type': 'integer', 'description': 'Output height in pixels (default 630)'}, 'w': {'type': 'integer', 'description': 'Output width in pixels (default 1200)'}, 'hexes': {'type': 'string', 'description': 'Comma-separated hex values e.g. #d4a829,#1a5c6e,#0a0a0b'}, 'layout': {'type': 'string', 'description': 'photo | equal | grid | gradient | filmstrip | 6310 | 7020 | 5030 | 8010 | 5050 | 6040 | triptych | quad | 55-25-20 | quint | 70-10-20 | 40-30-20-10 | 33-33-24-10. gradient is a true smooth perceptual blend with no hard edges, unlike every other layout here.'}, 'weights': {'type': 'string', 'description': 'Comma-separated proportional weights from k-means extraction. Used only when layout=photo.'}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette', 'target_archive'], 'properties': {'palette': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 24, 'description': "List of hex values to translate e.g. ['#F5F0E8', '#8B6B3D']"}, 'max_delta_e': {'type': 'number', 'default': 40, 'description': 'Max acceptable CIEDE2000 distance — above this is flagged out-of-threshold (default 40)'}, 'target_archive': {'type': 'string', 'description': "Archive to translate into e.g. 'Shakespeare', 'Japan', 'Oxfordshire'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['palette', 'use_case'], 'properties': {'market': {'type': 'string', 'description': "Optional: target market e.g. 'UK', 'Japan', 'global'"}, 'medium': {'type': 'string', 'default': 'general', 'description': "Application medium e.g. 'interior', 'digital', 'fashion', 'print'"}, 'palette': {'type': 'array', 'items': {'type': 'string'}, 'description': "List of 2-8 hex values e.g. ['#31559B', '#E8D898', '#4A2A50']"}, 'use_case': {'type': 'string', 'description': "What the palette will be used for e.g. 'luxury cushion collection', 'brand identity'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'description': 'The project_id returned by house_specify for an authenticated (keyed) call.'}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['format'], 'properties': {'house': {'type': 'object', 'description': 'DO NOT USE -- an inline house object is refused (400 INLINE_HOUSE_NOT_ALLOWED). Pass house_ref (returned by house_specify) or project_id instead.'}, 'format': {'enum': ['docx', 'xlsx'], 'type': 'string', 'description': 'Which editable format to produce.'}, 'delivery': {'enum': ['url', 'base64'], 'type': 'string', 'default': 'url', 'description': "'url' (default): signed, time-limited R2 download link. 'base64': file bytes returned inline as file_base64, unless too large -- see OUTPUT_TOO_LARGE_FOR_INLINE_DELIVERY."}, 'house_ref': {'type': 'string', 'description': 'The house_ref string house_specify returns. For a durable (authenticated) project this also requires the same API key that created it.'}, 'project_id': {'type': 'string', 'description': 'The project_id returned by house_specify for an authenticated (keyed) call. Requires the same API key that created the project.'}, 'project_version': {'type': 'integer', 'description': "Used with either house_ref or project_id -- export this specific immutable version instead of the project's current version. Omit to export the current version."}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['project_id'], 'properties': {'version': {'type': 'integer', 'description': "Specific version number to describe. Omit for the project's current version."}, 'project_id': {'type': 'string', 'description': 'The project_id returned by house_specify for an authenticated (keyed) call.'}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': [], 'properties': {'limit': {'type': 'integer', 'default': 50, 'description': 'Max projects to return, default 50, capped at 200.'}, 'cursor': {'type': 'string', 'description': "Opaque pagination cursor -- pass the previous response's next_cursor to get the next page."}, 'project_type': {'type': 'string', 'description': "Filter by project type, e.g. 'house'. Omit for all types."}, 'updated_since': {'type': 'string', 'description': 'ISO 8601 timestamp -- only return projects updated after this time.'}, 'include_deleted': {'type': 'boolean', 'default': False, 'description': 'Include soft-deleted projects (still owner-scoped). Default false.'}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'description': 'The project_id returned by house_specify for an authenticated (keyed) call.'}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'The colour concept or cultural question to search for'}, 'archive': {'type': 'string', 'description': "Optional: restrict to a named archive e.g. 'Japan', 'Pigment', 'OttomanEmpire'"}, 'n_results': {'type': 'integer', 'default': 5, 'description': 'Number of results (default 5)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'description': "Hex value with or without # e.g. '#8B4513'"}, 'archive': {'type': 'string', 'description': 'Optional: restrict to a named archive'}, 'n_results': {'type': 'integer', 'default': 5, 'description': 'Number of results (default 5)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['colours'], 'properties': {'kind': {'type': 'string', 'description': 'palette, house, brand or audit.'}, 'rooms': {'type': 'array', 'items': {'type': 'object', 'required': ['label'], 'properties': {'label': {'type': 'string'}, 'summary': {'type': 'string'}}}, 'description': 'For a multi-room scheme: one short line per room, in your own words. What that room is doing with the palette.'}, 'title': {'type': 'string', 'description': "What this result is, in the customer's terms."}, 'bridge': {'type': 'object', 'properties': {'to': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'label': {'type': 'string'}, 'colours': {'type': 'array', 'items': {'type': 'string'}}}}, 'from': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'label': {'type': 'string'}, 'colours': {'type': 'array', 'items': {'type': 'string'}}}}}, 'description': 'Where the evidence started and where you took it. Include `colours` on a side ONLY if you have real colour values for it -- an invented source swatch beside a real archive one reads as evidence and is not.'}, 'checks': {'type': 'array', 'items': {'type': 'object', 'properties': {'label': {'type': 'string'}, 'value': {'type': 'string'}}}}, 'colours': {'type': 'array', 'items': {'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string'}, 'lrv': {'type': 'number'}, 'name': {'type': 'string'}, 'role': {'type': 'string', 'description': 'wall, joinery, textile, accent, primary...'}, 'room': {'type': 'string'}}}, 'description': 'The colours you are handing over, in order.'}, 'verdict': {'type': 'string', 'description': 'One sentence, shown under the colour.'}, 'key_rule': {'type': 'string', 'description': "The one rule worth remembering, short enough to repeat to a decorator. 'Boathouse Clay stays tiny. Never a wall.'"}, 'design_move': {'type': 'string', 'description': 'At most two sentences on the decision you made -- what the evidence offered and what you did with it. This is usually the most interesting thing in your answer and the part a list of colours cannot carry.'}, 'proportions': {'type': 'array', 'items': {'type': 'object', 'required': ['hex', 'percent'], 'properties': {'hex': {'type': 'string'}, 'name': {'type': 'string'}, 'percent': {'type': 'number'}}}, 'description': 'Only where a real share was decided. Every colour gets one and they total 100, or leave this out entirely -- a share nobody decided reads as a measurement nobody took.'}, 'story_thesis': {'type': 'string', 'description': "ONE sentence: what this scheme IS. 'Danish coastal colour, domesticated for a summer house.' Shown above the palette, so it must earn its line."}, 'evidence_thread': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Three to five short sources or references that shaped this. Orientation, not a bibliography.'}, 'evidence_summary': {'type': 'string'}, 'evidence_boundary': {'type': 'string', 'description': "What is source-backed and what is your interpretation. Say it plainly: 'Designed contemporary interpretation, not a measured historical paint specification.'"}}}
출력 스키마
{'type': 'object', 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['themes'], 'properties': {'tone': {'type': 'string', 'description': 'forensic | editorial | clinical | narrative'}, 'avoid': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Themes to suppress'}, 'title': {'type': 'string', 'description': "Brief title e.g. 'The Colours of Pleasure'"}, 'themes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Research themes'}, 'archives': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Archives to draw from'}, 'audience': {'type': 'string', 'description': "Target audience e.g. 'serious collector'"}, 'n_colours': {'type': 'integer', 'description': 'Number of colour cards (default 8)'}, 'period_end': {'type': 'integer', 'description': 'End year e.g. 1830'}, 'period_start': {'type': 'integer', 'description': 'Start year e.g. 1714'}, 'target_period': {'type': 'string', 'description': "Historical period e.g. 'Georgian England 1714-1830'"}, 'strict_sources': {'type': 'boolean', 'description': 'Only include entries with named primary sources'}, 'confidence_threshold': {'type': 'number', 'description': 'Min confidence 0-1 (default 0.6)'}, 'minimum_claim_strength': {'type': 'string', 'description': 'Hard evidence-grade floor: A, B, C, D, or E. Never silently relaxed.'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['items'], 'properties': {'ask': {'type': 'string', 'description': "Optional: specific question e.g. 'what bag colour works?' or 'do the shoes work?'"}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'hex'], 'properties': {'hex': {'type': 'string', 'description': "Hex colour of the item e.g. '#1C3A6E'"}, 'label': {'type': 'string', 'description': "Item name e.g. 'dress', 'bag', 'shoes', 'coat', 'belt', 'scarf', 'trousers', 'top'"}}}, 'description': 'List of outfit items with label and hex colour'}, 'occasion': {'type': 'string', 'default': 'general', 'description': "Optional: occasion context e.g. 'daytime', 'evening', 'office', 'casual', 'wedding guest'"}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': [], 'properties': {}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['goal'], 'properties': {'goal': {'type': 'string', 'description': "Plain-English description of what you're trying to do."}}}
출력 스키마
{'type': 'object', 'properties': {'then': {'type': 'array', 'items': {'type': 'string'}}, 'reason': {'type': 'string'}, 'start_with': {'type': 'string'}, 'do_not_start_with': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['brand_hex'], 'properties': {'brand_hex': {'type': 'string', 'description': "Brand colour hex e.g. '#D4A829'"}, 'dark_mode': {'type': 'boolean', 'description': 'Generate for dark mode (default false)'}, 'background_hex': {'type': 'string', 'description': 'Background hex (default #FFFFFF)'}}}
출력 스키마
{'type': 'object', 'description': "Structured JSON response. Shape varies by tool; most return an 'ok' boolean plus a 'result' or 'results' field with the tool's data payload.", 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'description': "Hex colour, e.g. '#CC1A14'."}, 'n_per_member': {'type': 'integer', 'description': 'Archive candidates per partner member (1-5). Default 1, which returns a single archive_match object rather than a list.'}}}
출력 스키마
{'type': 'object', 'properties': {'reason': {'type': 'string'}, 'covered': {'type': 'boolean'}, 'groupings': {'type': ['array', 'null'], 'items': {'type': 'object'}, 'description': "Documented dyads/triads containing the snapped label. Each carries other_member_labels (Vanderpoel's own words), other_members (each with archive_match and hex_collision), judgement, judgement_basis_verbatim, source_plate and its own member_source_caveat. null -- never [] and never a substituted weaker answer -- when nothing is documented."}, 'input_hex': {'type': 'string'}, 'input_snapped_to': {'type': ['string', 'null'], 'description': 'Vanderpoel hue-family label the input snapped to.'}, 'input_archive_match': {'type': ['object', 'null'], 'description': 'Nearest real archive colour to the input itself, or null if nothing is near enough.'}, 'member_source_caveat': {'type': 'string'}, 'label_placement_basis': {'type': 'string', 'description': 'States that the snap angles are a modern convention, not a number Vanderpoel printed.'}, 'degrees_from_nearest_named_hue': {'type': ['number', 'null']}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', 'required': ['a', 'b'], 'properties': {'a': {'type': 'string', 'description': 'First record id.'}, 'b': {'type': 'string', 'description': 'Second record id.'}}}
출력 스키마
{'type': 'object', 'properties': {'hops': {'type': ['integer', 'null']}, 'path': {'type': 'array', 'items': {'type': 'string'}}, 'connected': {'type': 'boolean'}, 'explanation': {'type': 'string'}, 'does_not_mean': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}
최근 도구 변경
유사한 MCP 서버
arch-tools-mcp
Provides general-purpose agent APIs for browser automation, web and PDF extraction, data conversion, email operations, fact check…
Tollmint
Audits content, page design, cognitive load, dark patterns, trust signals, marketing compliance, accessibility, AI disclosures, a…
Reelfy Agent Tools
Provides paid AI image, video, music, voice, vision, and text generation alongside web search, page scraping, domain data, and cr…
arhiiv
Searches and documents Estonian jewellery and metalwork artists, works, exhibitions, organizations, maker's marks, museum holding…
Thisispaper
Searches and explores a curated archive of architecture, interiors, design, photography, and art projects using keyword, taste, a…
The Artillerist Intelligence
Searches source-backed art and illustration research, prepares commission estimates, and structures paid company intelligence req…
UX Jobs
Searches live UX and product-design jobs and provides job details, hiring snapshots, salary statistics, and company hiring rankin…
texttostl
Generates text-based 3D-printable STL models and provides paid web search and search-with-page-reading tools.