Colour Memory
Server Details
Colour intelligence API with 23,000+ historically grounded colours across 59 archives. Maps hex values to named archive colours with provenance, cultural risk, WCAG accessibility, and brand palette analysis.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 91 tools
Several tools have overlapping purposes, particularly image colour extraction (palette_extract, image_palette, extract_image_colours) and palette generation (palette_concept, palette_strict), where distinctions are subtle and not always clearly flagged in descriptions. Many tools are prefixed similarly (colour_*, palette_*, brand_*), so agents may struggle to pick the right one despite each having a distinct role.
Tool names overwhelmingly follow lowercase snake_case with domain prefixes like colour_, palette_, archive_, brand_, and project_, making the set predictable and scannable. Minor deviations such as verb-first names (extract_image_colours, ingest_image, render_colour_result) and a few atypical names (why_connected) prevent a perfect score but do not undermine overall consistency.
With 91 tools, the surface is far heavier than typical MCP servers, even for a broad domain like colour intelligence. Several tools could be consolidated (e.g., the three image extractors or multiple palette generation variants), and the sheer count imposes a significant selection burden on agents, suggesting poor scoping.
The toolkit covers the full colour workflow end-to-end: search and query, analysis, palette generation, accessibility, brand and interior specification, image extraction, project management, and document rendering. Compound tools like brand_report and archive_report_brief eliminate dead ends by bundling multi-step workflows, with only minor gaps (e.g., no direct palette editing or custom archive writing) that fall outside the server's stated purpose.
Available Tools
91 toolsaccessibility_checkCheck WCAG AccessibilityARead-onlyInspect
Evaluates contrast for a single foreground/background pair. For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibility_check calls in one response.
| Name | Required | Description | Default |
|---|---|---|---|
| hex_val | Yes | Foreground hex value | |
| background | No | Background hex (default 'FFFFFF') | FFFFFF |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, so the safe read-only nature is already known. The description adds the scope constraint 'single foreground/background pair' but no further behavioral details like return format or edge cases. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff, front-loading the core function and then giving a concise alternative recommendation. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter read-only tool with an output schema, the description covers purpose and usage adequately. The alternative guidance adds context. It lacks mention of output specifics, but the output schema likely covers that, so no major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear descriptions for both parameters (hex_val and background). The description adds no additional parameter-level meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Evaluates contrast for a single foreground/background pair' with a specific verb and resource, clearly distinguishing it from accessibility_matrix for palettes. It answers what the tool does unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use guidance: 'For palettes or multiple colours, use accessibility_matrix instead, it replaces multiple accessibility_check calls in one response.' This names the alternative and clarifies scope, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accessibility_fontFont Colour AdvisorARead-onlyInspect
Given a background hex and a palette of candidate foreground colours, return them ranked by contrast ratio with WCAG grades and specific recommendations for body text, large text, and UI components.
| Name | Required | Description | Default |
|---|---|---|---|
| palette | Yes | Candidate foreground hex values | |
| background | Yes | Background hex value |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the behavioral outcome (ranked list with WCAG grades and recommendations), which adds context beyond the readOnlyHint annotation. It does not contradict the annotations, and no side effects or prerequisites are hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of approximately 30 words, clearly front-loaded with the main action and without redundancy. Every phrase contributes to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two required parameters and an output schema, the description adequately covers its inputs, processing (contrast ratio ranking), and output (WCAG grades and recommendations). No further context is necessary for successful invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are documented in the schema with descriptions, achieving 100% coverage. The description adds semantic context by explaining that the background is the base for ranking and the palette contains candidate foreground colors, enriching the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'return' with the resource 'ranked by contrast ratio' and specifies WCAG grades and recommendations, making its function clear. It distinguishes itself from siblings like accessibility_check by focusing on ranking candidate foreground colors for a given background.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when comparing multiple foreground colors against a background, but it does not explicitly state when to use it instead of other accessibility or color tools. No exclusions or alternatives are mentioned, so it earns an 'implied usage' score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accessibility_matrixFull Palette Accessibility MatrixARead-onlyInspect
Accept a palette array and return every foreground/background combination with contrast ratio, AA normal, AA large, AAA normal, AAA large pass/fail grades, and a summary. Use this instead of calling accessibility_check multiple times for a palette.
| Name | Required | Description | Default |
|---|---|---|---|
| palette | Yes | Array of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B'] |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds meaningful behavioral context by explaining the tool computes all combinations with specific pass/fail grades and summary, and that it is a batch operation to avoid repeated calls. This goes beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, and the second sentence gives a clear alternative. No extraneous information or repetition of schema details. Highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema (not shown), so return values are already covered. The description fully explains the tool's role and provides context for when to use it, complementing the complete schema and readOnlyHint annotation. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the palette parameter already described as an array of hex values with example and min/max constraints. The description only echoes 'palette array' without adding further nuance, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool accepts a palette array and returns every foreground/background combination with contrast ratios, WCAG pass/fail grades, and a summary. It uses specific verbs and resource, and explicitly distinguishes itself from accessibility_check by noting it should be used instead of calling that tool multiple times.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this instead of calling accessibility_check multiple times for a palette,' providing clear guidance on when to choose this tool over the named alternative. This is direct and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accessibility_rulesAccessibility Usage RulesARead-onlyInspect
Convert a palette WCAG matrix into actionable design-system rules. Returns safe pairs, AA-only pairs, large-text-only pairs, decorative-only pairs, best text colour per background, and component usage rules. Deterministic, no LLM cost.
| Name | Required | Description | Default |
|---|---|---|---|
| palette | Yes | Array of hex values |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds that the tool is deterministic and has no LLM cost, which are meaningful behavioral traits beyond the annotation. It also enumerates return categories, providing transparency about what the tool produces. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The first sentence states the action, the second lists outputs and performance characteristics. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return values are covered. The description explains what the tool does, its inputs, and deterministic nature. The only gap is not explaining the prerequisite 'WCAG matrix' or when to call it relative to siblings, but this is a minor omission for a single-parameter read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description needn't repeat parameter details. The description mentions 'palette' in context but adds no syntax or formatting details beyond the schema's 'array of hex values'. Baseline 3 is appropriate since the schema fully documents the only parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts a WCAG matrix into design-system rules, listing specific outputs (safe pairs, AA-only pairs, etc.). This distinguishes it from sibling tools like accessibility_check or accessibility_matrix by focusing on derived rules rather than validation or raw matrix generation. However, it does not explicitly name a sibling for contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: 'Deterministic, no LLM cost' suggests it should be used when a rule-based, inexpensive conversion is needed. But there is no explicit 'use this when' or alternatives listed. It assumes the agent knows to call this after obtaining a palette matrix.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accessibility_simulateSimulate Colour BlindnessARead-onlyInspect
Return simulated hex values for full-severity protanopia, deuteranopia and tritanopia only, using the Machado, Oliveira & Fernandes (2009) model (severity 1.0, linear sRGB), with a flag when a simulated colour had to be clipped to sRGB. Anomalous trichromacy and partial severities are not simulated. A model prediction on a standard display, not how an individual perceives colour.
| Name | Required | Description | Default |
|---|---|---|---|
| hex_val | Yes | Hex value e.g. '#BE0032' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the exact model (Machado, Oliveira & Fernandes 2009), the fixed severity (1.0), the working colour space (linear sRGB), the clipping flag, and the caveat that this is a model prediction, not individual perception. This is rich behavioural context for a simulation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences front-load the primary behaviour and then add only high-value constraints and caveats. No filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter readonly simulation with an output schema present, the description covers the input domain, model, scope, failure/edge behaviour (clipping flag), and interpretation caveat. There are no obvious gaps that would prevent an agent from calling it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already fully documents hex_val with an example, so schema_description_coverage is 100%. The description confirms the hex input by saying 'simulated hex values' but adds little beyond the schema for parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and object: 'Return simulated hex values' for three named colour-blindness variants, tied to a named model. It also states exclusions that stop an agent confusing it with accessibility_check or accessibility_matrix.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly scopes when this tool applies: full-severity protanopia/deuteranopia/tritanopia only, and explicitly says anomalous trichromacy and partial severities are not simulated. It does not name an alternative tool, but the exclusion boundaries are explicit enough to guide selection among the accessibility siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_briefGenerate Colour Direction for Another AIARead-onlyInspect
Generate a complete colour direction package for another AI agent or image generation model. Fetches a historically grounded archive palette from the concept, then produces: an agent brief (colour direction in prose), colour tokens with hex values and roles, a model-specific image generation prompt, a negative prompt, and lighting notes. Supports midjourney, flux, dalle, stable_diffusion. Example: task='luxury hotel bedroom', concept='Ottoman winter luxury', model='midjourney'. Use this to make Colour Memory the colour layer for other AI systems. Archive-grounded retrieval is evidence-filtered: entries with claim_role='reject' (no primary source and no period connection), stub entries, blank-source entries, and entries below minimum_claim_strength are never selected. If fewer than palette_size colours pass these filters, the call returns an honest incomplete result (ok:false, error_code:INSUFFICIENT_EVIDENCE_ELIGIBLE_PALETTE) rather than padding the palette with rejected or weak evidence. Negative constraints (from 'avoid' or negation phrases in concept like 'must never', 'without', 'not') are also applied to retrieval, not just flagged afterward -- a brief that says a wedding must never feel funereal will not surface mourning-themed colours in the first place. locked_palette calls skip evidence filtering entirely since the caller is supplying colours directly, not requesting archive evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | What the other AI needs to generate e.g. 'luxury hotel bedroom image' | |
| avoid | No | Optional: terms/associations to keep out of retrieval e.g. ['mourning', 'funeral black']. Affects retrieval directly, not just post-hoc flagging. | |
| model | No | Target model: midjourney, flux, dalle, stable_diffusion | midjourney |
| archive | No | Optional: restrict palette query to this archive e.g. georgianpleasures, japan, china | |
| concept | Yes | Colour concept to draw from e.g. 'Ottoman winter luxury', 'Victorian mourning'. Negation phrases ('must never', 'without', 'not X') are extracted and kept out of retrieval. | |
| style_notes | No | Optional: additional style direction e.g. 'matte surfaces only', 'no gold' | |
| palette_size | No | Number of archive colours to include (default 5, max 8) | |
| locked_palette | No | 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 | No | Optional: list of allowed archive names. Query restricted to these archives only. | |
| minimum_claim_strength | No | 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. | C |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the readOnlyHint annotation, detailing evidence-filtering rules (exclusion of reject/stub/blank-source entries), the honest incomplete-result behavior (ok:false, error_code), the application of negative constraints at retrieval time, and special handling for locked_palette. This gives the agent a strong behavioral model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than minimal, but every sentence carries distinct information: purpose, deliverable components, supported models, example, use case, filtering rules, failure handling, negative constraints, and locked_palette behavior. It is well-structured and front-loaded, though some sentences paraphrase schema notes slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 params, multiple filtering behaviors, locked_palette mode, failure modes), the description is remarkably complete. It covers retrieval rules, evidence quality floors, negative constraints, special-case behavior, and model support. The presence of an output schema means return-value documentation is unnecessary, so no additional info is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already describes all 10 parameters at 100% coverage, the description adds significant cross-parameter semantics: how 'avoid' and negation phrases in 'concept' affect retrieval, how 'locked_palette' bypasses evidence filtering, how 'minimum_claim_strength' interacts with 'claim_role', and how palette_size relates to the honest failure mode. This goes beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Generate a complete colour direction package for another AI agent or image generation model.' It clearly distinguishes itself from siblings like palette_generate or image_brief by specifying the cross-AI delivery format, including agent brief, tokens, prompt, negative prompt, and lighting notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear use case ('Use this to make Colour Memory the colour layer for other AI systems') and an explicit example ('task='luxury hotel bedroom', concept='Ottoman winter luxury', model='midjourney''). However, it does not name alternatives or explicitly say when not to use this tool, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_verifyVerify AI Image Generation Colour FidelityARead-onlyInspect
Verify that an AI-generated image actually used the colours specified in an agent_brief call. Supply the generated image (URL or base64) and the target palette from agent_brief colour_tokens. Returns a fidelity score 0-100, dE2000 distance per colour, match quality per colour (accurate/acceptable/drifted/ignored), and an overall verdict. Use after agent_brief + image generation to close the colour loop.
| Name | Required | Description | Default |
|---|---|---|---|
| image_url | No | URL of the generated image | |
| image_base64 | No | Base64 encoded generated image | |
| target_palette | Yes | Hex values from agent_brief colour_tokens e.g. ['#ED9921', '#E29937'] |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds behavioral detail by specifying the return format: fidelity score 0-100, dE2000 distances, match quality categories, and a verdict. This goes beyond the annotation to clarify what the tool computes and reports.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four focused sentences cover purpose, inputs, outputs, and usage timing with no filler. The structure is front-loaded with the core action, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Combined with a rich output schema and readOnly annotation, the description covers the tool's role in the workflow, input options, and output semantics. It leaves little ambiguity about when and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage so baseline is 3. The description adds nuance by indicating that the image can be supplied via URL or base64 (implying either/or), and ties target_palette to agent_brief colour_tokens, which is not explicit in the schema. This extra guidance supports correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Verify') and a specific resource (AI-generated image colour fidelity against agent_brief). It distinguishes from siblings by referencing agent_brief colour_tokens and dE2000 metrics, making it unique among colour/palette tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use 'after agent_brief + image generation to close the colour loop', providing a clear usage context. It also describes what inputs to supply. However, it does not mention when not to use or name alternative tools, so it falls short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_clicheBreak a Colour ClicheARead-onlyInspect
Find the most surprising archive colour for a concept and generate a memorable one-liner subverting the obvious expectation. Supply a concept (e.g. 'love', 'grief', 'luxury', 'power') and optionally the expected colour (e.g. 'red' for love). The archive finds the contradiction and Claude writes the one-liner, short story, and tweet. Example: love + red returns Shakespeare's dark green with 'Love is not red. It is the green of someone still waiting in a field.' Use this for public-facing demos, content, and brand storytelling.
| Name | Required | Description | Default |
|---|---|---|---|
| concept | Yes | Colour concept to subvert e.g. 'love', 'grief', 'luxury', 'betrayal', 'power' | |
| n_results | No | Number of archive entries to search (default 8) | |
| expected_colour | No | Optional: the cliche colour to contradict e.g. 'red', '#FF0000'. Hex or colour name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the behavioural process: 'The archive finds the contradiction and Claude writes the one-liner, short story, and tweet,' and shows an example. This adds value beyond the readOnlyHint annotation, which only indicates no side effects. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, followed by input instructions, an illustrative example, and a use-case sentence. It is compact and every sentence contributes meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, input details, example output, and target use cases. Since an output schema exists, the return format is already documented. It does not mention n_results explicitly, but the schema covers that, so no significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover all three parameters (100% coverage), so baseline is 3. The description adds semantics by providing concrete examples (e.g., 'love', 'red') and illustrating how they interact (love + red returns Shakespeare's dark green), which helps the agent choose appropriate values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: find the most surprising archive colour for a concept and generate a one-liner, short story, and tweet subverting expectations. This specific verb+resource combination and the mention of creative outputs distinguish it from sibling tools like archive_search or colour_story.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use this for public-facing demos, content, and brand storytelling,' providing a clear when-to-use context. It does not explicitly state when not to use it or name alternatives, but the use case is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_coverage_gapCoverage Gap ReportARead-onlyInspect
Given a list of themes, report which are well-evidenced in the archive and which are under-evidenced or missing. Returns a coverage matrix: for each theme, entries found, coverage grade (strong/moderate/weak/missing), best match with claim strength, and what source type would be needed to improve coverage. Use this BEFORE building an archive_report_brief or brief_forensic to know where the evidence is strong and where gaps will appear. Prevents building beautiful reports that quietly ignore half the brief.
| Name | Required | Description | Default |
|---|---|---|---|
| themes | Yes | Themes to check e.g. ['opium', 'gin', 'gambling', 'racing'] | |
| archives | No | Optional archives to search e.g. ['EIC', 'Dickens'] |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description is consistent with a read-only reporting tool. The description adds context about the coverage matrix output and the strategic benefit, but does not disclose additional behavioral traits such as limitations, data sources, or performance characteristics. With annotations covering the safety profile, this is a baseline score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loading the core purpose before output details and usage guidance. Each sentence contributes useful information, though the final sentence about 'beautiful reports' is slightly promotional and could be trimmed without losing essential guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with full schema documentation and an output schema, the description provides sufficient context to select and invoke the tool correctly. It explains when to use it, what it returns, and why it matters, making it self-sufficient for an agent to understand its role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (themes and archives) already well-documented. The description only restates that it takes a list of themes, adding no new semantic detail beyond the schema. Baseline 3 applies because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports which themes are well-evidenced versus under-evidenced or missing, with a specific output format. It distinguishes itself from archive_report_brief and brief_forensic by positioning as a pre-flight check, but does not explicitly differentiate from the similarly named sibling archive_evidence_gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to use this tool BEFORE building an archive_report_brief or brief_forensic, providing strong contextual timing. It also explains the rationale (preventing reports that ignore evidence gaps). However, it does not mention when not to use it or name alternative tools like archive_evidence_gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_cultural_anachronismAnachronism GuardARead-onlyInspect
Check a list of colour entries for anachronism risk. Detects whether the primary source date falls outside the requested period, whether the archive is a known modern source (RacingSilks, FootballStrips), and returns a period_relevance score and safe phrasing. Essential for historical documents: prevents a 2011 Jockey Club racing silk registration being presented as Georgian evidence. Returns anachronism_risk (none/low/medium/elevated/high), period_relevance score 0-1, safe_phrasing, and unsafe_phrasing for each entry.
| Name | Required | Description | Default |
|---|---|---|---|
| entries | Yes | Colour entries to check | |
| period_end | No | End year e.g. 1830 | |
| period_start | No | Start year e.g. 1714 | |
| target_period | No | Period description e.g. 'Georgian England 1714-1830' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the bar is lower. The description adds useful behavioral context: it detects whether primary_source date falls outside the period, flags known modern archives (RacingSilks, FootballStrips), and returns specific fields (risk level, period_relevance, safe/unsafe phrasing). This goes beyond the annotation without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is composed of four purposeful sentences covering definition, detection logic, a use-case example, and output fields. No wasted words, though it is a bit longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and read-only annotation present, the description adequately explains the tool's role and return values. It could be more explicit about expecting entries to contain archive and primary_source fields, but that is inferable from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters, so baseline is 3. The description adds semantic value by explaining that 'archive' values like 'RacingSilks' are known modern sources and linking 'primary_source' to date checking, giving meaning beyond the schema's bare descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('check') and resource ('colour entries') and defines the exact risk detection criteria (source date vs period, known modern archives). It clearly distinguishes from sibling tools like archive_coverage_gap or colour_cultural_risk by focusing on anachronism, with a concrete example.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'Essential for historical documents' and a tangible example of a 2011 racing silk being misdated as Georgian. However, it does not explicitly mention alternatives or when NOT to use the tool, which would elevate it to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_evidence_gapEvidence Gap AnalysisARead-onlyInspect
Given a hex value and a proposed claim about it, return whether the archive supports that claim, what is missing, what kind of source would be needed, and safe agent wording. This is Colour Memory's anti-hallucination endpoint. It turns the absence of evidence into a forensic finding rather than a gap to fill with invention. Example: hex #4A535C + proposed claim 'cyanosis in a death chamber' returns: nearest archive support, support level (supported/partial/unsupported), what source type is needed, and safe wording for the agent to use. Essential for museum, documentary, editorial, legal, and forensic workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex colour to analyse e.g. '#4A535C' | |
| archive | No | Optional archive to search e.g. 'DarkHistory' | |
| n_candidates | No | Number of archive candidates to return (default 5) | |
| proposed_claim | Yes | What you want to say about this colour e.g. 'cyanosis in a death chamber' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, and the description adds meaningful behavioral context: it turns absence of evidence into a forensic finding, returns support levels (supported/partial/unsupported), and provides safe agent wording. This goes beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core behavior and is about five sentences long. The example is helpful, though the output list is partly repeated between the first sentence and the example, making it slightly less concise than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, output, and target workflows. Given that an output schema exists, it does not need to enumerate return fields in detail. It lacks explicit sibling differentiation and limitations, but overall provides enough context for an agent to select and use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a concrete example ('#4A535C' + 'cyanosis in a death chamber') and explains the intent of proposed_claim, but it does not add new parameter-level syntax or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('return') and precisely names both inputs ('hex value' and 'proposed claim') and outputs (support decision, missing evidence, source type, safe wording). It also positions the tool as Colour Memory's anti-hallucination endpoint, clearly distinguishing it from siblings like archive_search or archive_coverage_gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool is 'essential for museum, documentary, editorial, legal, and forensic workflows' and gives an example scenario. It implies use when an agent has a proposed claim about a colour and needs evidence validation, but it does not explicitly name alternatives or state 'when not to use'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_provenanceExplain a Colour's ProvenanceARead-onlyInspect
Explains the provenance of a named archive colour: documented fact vs computational derivation vs cultural interpretation, with confidence and citation format. This is one component of colour_passport, but also a standalone research tool for deep provenance work (museum, documentary, editorial). Use colour_passport for a general profile; call this directly for research workflows needing full source-chain detail.
| Name | Required | Description | Default |
|---|---|---|---|
| colour_name | Yes | Name of the archive colour e.g. 'Love Idleness', 'Woad Vat Blue', 'Murex Luxury' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint: true, and the description aligns by using 'explains' without implying mutation. The description adds meaningful behavioral context by enumerating what the provenance categories are and that confidence and citation format are returned. It goes beyond the annotation but doesn't discuss potential delays or limitations, so a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, then immediately provides usage guidance. Every phrase earns its place with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple input (one string), the presence of an output schema, and readOnly annotation, the description is sufficient. It explains what the tool returns at a conceptual level, when to use it, and how it differs from the closest sibling, making it complete for the complexity involved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'colour_name' is fully described in the schema with examples, and the description repeats the notion of a 'named archive colour' without adding additional syntax or format details. Since schema coverage is 100%, the description adds marginal value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool explains provenance of an archive colour and specifies the types of provenance (documented fact vs computational derivation vs cultural interpretation) along with confidence and citation format. It also distinguishes this from the sibling tool colour_passport by positioning it as a standalone deep-research tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool versus the alternative: 'Use colour_passport for a general profile; call this directly for research workflows needing full source-chain detail.' It also names target use cases (museum, documentary, editorial), providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_report_briefArchive Report BriefARead-onlyInspect
One-call complete archive research package for a document, PDF, or editorial brief. Input: title, audience, themes, archives to draw from, things to avoid, number of colours. Output: ranked colour cards with full provenance, story order, source confidence flags, pull quote, CTA line, CSS tokens, image prompt for Midjourney/Flux/DALLE, editorial argument, weakest and strongest entries identified. Replaces chaining archive_search + get_colour_card + cliche_breaker + agent_brief separately. Two Claude calls total. This is the endpoint for building premium archive documents, PDFs, briefs, and editorial content. Use this first for any document workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| avoid | No | Topics to suppress e.g. ['arsenic wallpaper', 'Wedgwood blue'] | |
| title | No | Document title e.g. 'The Colours of Georgian Power' | |
| themes | Yes | Research themes e.g. ['racing silks', 'EIC trade', 'Keats'] | |
| archives | No | Archives to search e.g. ['RacingSilks', 'EIC', 'Keats', 'Dickens'] | |
| audience | No | Target audience e.g. 'serious Georgian collector' | |
| n_colours | No | Number of colours to return (default 8, max 16) | |
| period_end | No | Hard period gate: exclude entries dated after this year. Default 9999 (no upper bound). | |
| period_start | No | Hard period gate: exclude entries dated before this year. Default 0 (no lower bound). | |
| allow_partial | No | 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 | No | Reserved for future use -- currently accepted but has no effect on the response shape (the endpoint always returns the full report). | |
| strict_sources | No | Only return entries with named primary sources (default true) | |
| family_card_mode | No | 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 | No | 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 | No | 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 | No | Hard evidence-grade floor: A, B, C, D, or E. Never silently relaxed. | |
| strict_semantic_colour | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral context beyond that: 'Two Claude calls total' (resource usage), hard period gates, strict evidence floors ('Never silently relaxed'), and error handling for insufficient results (INSUFFICIENT_PALETTE_RESULTS). It contradicts nothing in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the core value proposition. It is fairly long, but each sentence adds necessary context (output list, usage priority, alternatives). The output list may duplicate what the output schema already conveys, slightly bloating the text, but it remains well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (16 parameters, output schema, minimal annotations), the description provides a complete high-level orientation: purpose, expected outputs, usage guidance, and alternatives. Detailed parameter behavior is left to the exhaustive schema, so there are no critical gaps for an agent to select and call the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed per-parameter descriptions. The tool description only paraphrases a subset of parameters (title, audience, themes, archives, avoid, n_colours) without adding new semantics or format details beyond what the schema already provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific, action-oriented claim: 'One-call complete archive research package for a document, PDF, or editorial brief.' It clearly differentiates from siblings by explicitly stating it replaces chaining archive_search + get_colour_card + cliche_breaker + agent_brief, making the tool's unique value unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use instruction: 'Use this first for any document workflow.' It also names the alternatives it replaces, providing clear guidance on when this tool should be selected over the pointed-to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_searchArchive Keyword SearchARead-onlyInspect
Full-text keyword search across all archive colour names and notes. Find colours by name fragment, material, cultural reference, pigment type, or historical period. Complements conceptual embedding search with exact keyword matching. Examples: 'cerulean' (28 matches, e.g. Bourton Cerulean), 'Prussian' (187 matches spanning pigment history), 'medieval' (over 1,000 matches across period archives). Never returns a bare empty result for a genuinely obscure query -- result_path in the response is 'direct' (exact keyword hit), 'broadened' (archive restriction dropped), or 'redirected' (fell back to conceptual/semantic search) so you always know which one fired. Set entity_mode='exact' to search by botanical identity rather than by word: a plain query for 'Rose' matches any cultivar name containing it (including Sweet Peas called 'Rose Pink'), whereas entity_mode='exact' returns genus Rosa only and discloses how many off-genus records were excluded.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Alias for n_results | |
| query | Yes | Search term e.g. cerulean, Prussian, Ottoman, ochre, medieval | |
| offset | No | 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 | No | Optional archive filter e.g. oxfordshire, japan, pigment, keats, eic, racingsilks | |
| year_to | No | Boost entries on or before this year e.g. 1600 for Renaissance, 1901 for Victorian | |
| n_results | No | 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 | No | Boost entries on or after this year e.g. 1400 for Renaissance, 1837 for Victorian | |
| entity_mode | No | '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. | text |
| include_full | No | Return complete notes and source fields. Default false returns 150-char snippets. Set true for report workflows. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the burden of behavior — and it delivers richly: it guarantees the tool 'never returns a bare empty result' and explains the three response routing states (direct/broadened/redirected) so the agent knows which fallback fired. It also discloses the off-genus exclusion behavior of entity_mode='exact'. No contradiction with the readOnly annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and access patterns before any nuance. The match-count examples are concrete and useful. It is long (~230 words) and slightly overlaps the schema's entity_mode explanation, but every section earns its place for a 9-parameter tool; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 9-param tool with an existing output schema, the description covers everything non-inferable: fallback behavior, result routing, entity resolution semantics, and the sibling contrast. Pagination and return values are already handled by schema descriptions and the output schema, so no burden falls on the description there. Complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by enumerating the searchable content taxonomy (material, cultural reference, pigment type, historical period) and explaining the consequence of entity_mode on result composition. Some overlap exists — entity_mode and query examples are also in the schema — but the behavioral outcomes (result_path routing, exclusions) genuinely enrich parameter selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource statement: 'Full-text keyword search across all archive colour names and notes', then enumerates what can be found (name fragment, material, cultural reference, pigment type, historical period). Explicitly differentiates itself from conceptual embedding search, so an agent can tell it apart from query_conceptual and historical_colour_query without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the key alternative ('Complements conceptual embedding search with exact keyword matching') and the selection criterion (exact keyword vs semantic). The examples and entity_mode discussion add practical guidance. It stops short of an explicit when-not-to-use statement for every sibling, but the contrast with conceptual search is clear enough for the main routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_asset_packBrand Asset Pack ExportARead-onlyInspect
Complete brand asset pack. Returns CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide. Everything a brand team needs to ship. Deterministic. No LLM cost.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | Target market | global |
| medium | No | digital | print | both | digital |
| palette | Yes | Hex values | |
| use_case | No | Use case | brand identity |
| brand_category | No | Optional brand name or category |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With the readOnlyHint annotation already declaring a safe read operation, the description adds valuable behavioral context: it is deterministic, has no LLM cost, and returns a predefined set of artifact types. This goes beyond the annotation and helps the agent anticipate the tool's reliability and output characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long with front-loaded purpose: the first sentence names the resource, the second lists the exact outputs, and the third adds key behavioral traits (deterministic, no LLM cost). Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description thoroughly explains the tool's output scope and purpose. Given the presence of an output schema and full parameter schema coverage, the agent has enough information to select and invoke the tool correctly. It could add more detail on how optional parameters influence the pack, but this is not critical for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with descriptions for all parameters, so the description does not need to elaborate. It adds no additional parameter semantics beyond what the schema already provides, but schema coverage is sufficient, making this a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it returns a complete brand asset pack with specific artifacts (CSS variables, Tailwind config, Figma tokens JSON, citation cards, and a Markdown brand guide). This specific verb+resource distinguishes it from sibling tools like palette_export, which focus on single asset types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through phrases like 'Complete brand asset pack' and 'Everything a brand team needs to ship,' suggesting it is for comprehensive brand asset generation. However, it does not explicitly state when to use it vs. alternatives or mention exclusions, so guidance is only implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_auditComplete Brand Colour AuditARead-onlyInspect
Fast, fully deterministic brand colour audit. Accepts a palette array plus market, use_case, medium and brand_category. COMPUTED SYNCHRONOUSLY, no model call of any kind: colour roles with archive names, the full WCAG accessibility matrix, cultural risk per colour, CSS variables, Tailwind config, design tokens and production notes. NOT COMPUTED HERE: palette interpretation -- the verdict, its score and the written narrative copy. Those require an LLM call and used to be made inside this tool without saying so, which put a normal five-colour audit at 43-45s. The palette_verdict and verdict_copy keys are still returned, carrying interpretation_status='not_computed' plus a ready-to-send palette_verdict.continuation.arguments -- forward those verbatim to the palette_verdict tool to get the interpretation. Replaces chaining accessibility_matrix + cultural_risk_assessment; palette_verdict is now an explicit, optional second call rather than a hidden one. FOR A LIVE-SITE BRAND AUDIT ('audit this website'): inspect representative rendered pages FIRST (homepage, about, one deep page) and pass what you observed as site_evidence -- a CSS scrape alone is not an audit of what a visitor sees, and the response's audit_evidence.audit_status will say PARTIAL until real multi-page rendered evidence is supplied. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | Target market e.g. 'UK luxury', 'global', 'Japan' | global |
| medium | No | digital | print | both | digital |
| palette | Yes | Array of hex values e.g. ['#D4A829', '#1A5C6E', '#0F2D6B', '#0A0A0B'] | |
| use_case | No | Use case e.g. 'brand identity', 'packaging', 'app UI' | brand identity |
| site_evidence | No | 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 | No | Optional brand category e.g. 'developer tool', 'food', 'fashion' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the single readOnlyHint=true annotation. It discloses that the tool is synchronous and deterministic with no model call, reveals that interpretation was historically performed inside the tool without disclosure and the resulting 43-45s latency, and explains the continuation mechanism (returns palette_verdict.continuation.arguments to forward verbatim). It also discloses the PARTIAL/INSUFFICIENT audit_status behavior when site_evidence is inadequate and that the tool itself does not browse. This is exactly the kind of historical and operational transparency an agent needs. No contradiction with readOnlyHint=true — a deterministic synchronous computation is consistent with read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
This description is long, but every sentence carries operational information an agent cannot infer from the schema or annotations. The structure is well-designed: core purpose front-loaded, then COMPUTED HERE, then NOT COMPUTED HERE, then the live-site workflow, then downstream routing. Capitalized section markers ('COMPUTED SYNCHRONOUSLY', 'NOT COMPUTED HERE', 'FOR A LIVE-SITE BRAND AUDIT') make the dense content scannable. It loses one point only because some sentences could be tightened without losing meaning; at this complexity level the length is otherwise justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, nested objects, and an output schema, this description is remarkably complete. It covers the computation model, what is deliberately excluded and why, the continuation handoff to palette_verdict, the live-site evidence requirements with named status codes, the downloadable deliverables (PNG, PDF, ASE, JSON, CSS), and the anti-pattern to avoid (presenting archive anchors as recommendations). Since an output schema exists, return values need not be fully re-explained, but the description still names the key output keys. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value beyond the schema. For site_evidence it explains the workflow prerequisite (inspect rendered pages first), the minimum evidence for a FULL audit (homepage, about, one deep page, rendered evidence from at least two), and the consequence of shortfalls (PARTIAL/INSUFFICIENT status). It also adds behavioral guidance about the palette parameter ('Never present the archive anchors a colour was derived from as the colours you are recommending'). It does not add much for market, medium, use_case, or brand_category, which the schema already covers adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource ('colour brand audit') and immediately narrows scope with 'fully deterministic' and 'no model call of any kind.' The description then enumerates precisely what is computed (WCAG matrix, cultural risk, CSS variables, Tailwind config, design tokens) and what is not (palette interpretation), which sharply distinguishes it from siblings like palette_verdict, accessibility_matrix, and cultural_risk_assessment. Even the title 'Complete Brand Colour Audit' is descriptive rather than tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
This is exemplary usage guidance. It explicitly says the tool 'Replaces chaining accessibility_matrix + cultural_risk_assessment' and that palette_verdict is 'an explicit, optional second call rather than a hidden one,' naming both the alternatives and the relationship. It gives conditional instructions for the live-site case ('inspect representative rendered pages FIRST... a CSS scrape alone is not an audit'), and it routes downstream to palette_finalize with concrete conditions. An agent knows exactly when to call this tool, what to do beforehand, and what to call next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_collisionBrand Colour Collision CheckARead-onlyInspect
Can this brand own this colour against these competitors in this market? Input: brand hex, brand name, competitor hexes and names, market, region. Returns CIEDE2000 distance to each competitor, archive context for each colour, a distinctiveness score (0-100), an ownership verdict (strong/viable/contested/collision), a plain-English verdict summary, and a strategic recommendation. Use before committing to a brand colour in a competitive market. Replaces manual colour distance checks and competitor palette analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | Market context e.g. 'UK luxury food retail' | |
| region | No | Region code e.g. 'GB', 'UAE', 'JP' | |
| brand_hex | Yes | Brand hero colour hex e.g. '#D4A829' | |
| brand_name | No | Brand name e.g. 'Fortnum and Mason' | |
| competitor_hexes | No | List of competitor hex colours | |
| competitor_names | No | Competitor names matching hex order | |
| competitor_provenance | No | 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'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true, and the description is consistent with a pure analysis tool. It adds genuine behavioral detail beyond the annotation: the verdict taxonomy (strong/viable/contested/collision), the 0-100 distinctiveness scale, and the fact that it consults archive context per colour. The provenance-based scoring caveat lives in the schema rather than the description, but the description discloses the core analytic behavior well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero filler: purpose question, input summary, output list, usage timing, and replacement value. Dense but readable, and the most decision-relevant information (what it returns, when to use it) is front-loaded before the output enumeration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 7 parameters and an output schema, the description covers the essentials: purpose, inputs, outputs, and when to invoke. The presence of an output schema relieves the description of explaining return-value structure. Minor gaps: the meaning of 'archive context for each colour' is opaque, and the verified-vs-estimated provenance behavior is only in the schema — an agent reading only the description would miss a key scoring caveat.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 7 parameters with examples (e.g., '#D4A829', 'UK luxury food retail', provenance enums). The description restates the input set at a summary level but adds no new semantic information beyond the schema. Baseline 3 is correct since the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a purpose-framing question ('Can this brand own this colour against these competitors in this market?') that captures the exact job. Enumerates concrete inputs and outputs (CIEDE2000 distance, distinctiveness score, ownership verdict) that clearly differentiate it from sibling tools like colour_compare or colour_metrics — this is an ownership/strategy assessment, not a numeric comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit timing guidance: 'Use before committing to a brand colour in a competitive market.' Also states it 'replaces manual colour distance checks and competitor palette analysis,' which frames the decision context. However, it never names a sibling alternative or states when NOT to use it (e.g., when only raw CIEDE2000 numbers are needed), so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_guideline_claimsResolve Brand Colour Standard Claim DetailARead-onlyIdempotentInspect
Resolves claim_id values (returned inline on every colour by brand_guideline_specify and brand_guideline_select) into their full claim record: source title/locator/citation, the exact permitted claim text, do_not_say restrictions, and claim_role (anchor/analogue/reject). Read-only -- reads the already-persisted, frozen brand_ref snapshot, never re-runs generation or mutates anything. Omit claim_ids to return every claim on the brand_ref. Accepts exactly one of brand_ref or project_id, same as brand_guideline_pdf.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_ref | No | The brand_ref returned by brand_guideline_specify or brand_guideline_select. | |
| claim_ids | No | Which claim_id values to resolve. Omit (or pass an empty list) to return every claim on the brand_ref. | |
| project_id | No | Alternative to brand_ref for an authenticated (keyed) brand project. Requires the same API key that created it. | |
| project_version | No | Resolve claims against this specific immutable version instead of the project's current version. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive. The description adds value by explaining it reads a 'frozen brand_ref snapshot' and 'never re-runs generation or mutates anything,' plus the behavior of omitting claim_ids. This goes beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the primary action, each sentence earning its place. It's concise but information-dense, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter coverage, the description doesn't need return-value detail. It covers behavioral guarantees, input constraints, and sibling relationships, making it complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning by clarifying that claim_ids are 'returned inline on every colour' by sibling tools, and that brand_ref/project_id are mutually exclusive ('exactly one'). This is useful context beyond the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Resolves claim_id values ... into their full claim record.' It clearly lists what the record contains and references sibling tools (brand_guideline_specify/select) that produce the claim_ids, distinguishing it from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use with claim_ids from brand_guideline_specify/select, omit to get all claims, and accept brand_ref or project_id exactly one, same as brand_guideline_pdf. It doesn't explicitly state when not to use it, but the guidance is sufficiently specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_guideline_pdfRender Brand Colour Standard PDFARead-onlyIdempotentInspect
Renders a client-facing brand colour standard from an existing brand_ref. The document covers the direction carried forward and its assessment, the colour system in proportion, the argument for the palette, packaging and digital application, a full pairwise WCAG accessibility matrix computed upstream (never hand-drawn examples), and a provenance and evidence register in which every claim is bound to the colour it belongs to. Page count is not fixed: sections that have nothing real to say are omitted rather than padded -- a single-candidate brand_ref drops the comparison spread, and a candidate that was never scored for distinctiveness gets a different page shape rather than an empty scale. Derived colours are never presented in documented-source language. Renders the brand_guideline_select-chosen candidate if one has been recorded, otherwise the strongest eligible candidate as a provisional preview (clearly labelled as such). Reads only the already-persisted, frozen snapshot -- never re-runs brand_guideline_specify, never rematches an archive, never mutates the resolved project. Accepts exactly one of brand_ref or project_id.
| Name | Required | Description | Default |
|---|---|---|---|
| delivery | No | 'url' (default): signed, time-limited R2 download link. 'base64': PDF bytes returned inline. | url |
| brand_ref | No | The brand_ref returned by brand_guideline_specify or brand_guideline_select. | |
| project_id | No | Alternative to brand_ref for an authenticated (keyed) brand project. Requires the same API key that created it. | |
| project_version | No | Render this specific immutable version instead of the project's current version. Omit to render the current version. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and idempotent, but the description adds crucial behavioral detail: variable page count, omission of empty sections, provisional preview labeling, and the guarantee never to mutate or recompute. This goes far beyond the structured annotations and enriches the agent's understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence contributes a substantive detail about output composition or behavioral guardrails. It is longer than average but contains no filler or repeated information, earning a strong score despite its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations, an output schema, and a description that covers output content, variable behavior, input prerequisites, and safety guarantees, the tool is fully specified. An agent has all necessary information to decide when to use it and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with per-parameter descriptions, so the baseline is 3. The description adds the essential exclusivity rule ('exactly one of brand_ref or project_id') and traces brand_ref provenance to brand_guideline_specify/select, providing context not captured in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Renders') and resource ('client-facing brand colour standard PDF') derived from an existing brand_ref. It clearly differentiates from sibling tools like brand_guideline_specify and brand_guideline_select by focusing on rendering an existing snapshot rather than creating or selecting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the prerequisite ('from an existing brand_ref'), gives the exclusivity constraint ('Accepts exactly one of brand_ref or project_id'), and explicitly names what it never does ('never re-runs brand_guideline_specify, never rematches an archive'). It stops short of naming alternative tools for those scenarios, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_guideline_selectRecord a Manual Brand Colour DecisionAInspect
Records which brand_guideline_specify candidate was chosen, which colours should be locked for future iteration, and which claims should be suppressed -- produces a revised brand_ref (same reference, a new version underneath it, exactly like a versioned house_ref). No accounts or reviewer states yet -- this demonstrates decision-making, not a full approval workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional free-text rationale, e.g. "Client prefers the quieter system." | |
| brand_ref | No | The brand_ref returned by brand_guideline_specify. Supply this OR project_id. | |
| project_id | No | 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 | No | colour_id values to lock for future iteration. | |
| suppressed_claim_ids | No | claim_id values to suppress (marked superseded). | |
| selected_candidate_id | Yes | Which candidate_id to make canonical. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations: it creates a revised brand_ref with the same reference but a new version underneath, like a versioned house_ref. It also scopes behavior by stating there are no accounts or reviewer states yet, which helps set expectations for side effects and workflow position.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the core action and includes only useful qualifications. The versioning comparison and the explicit non-inclusion of approval workflow earn their place because they clarify behavior and boundaries without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with full schema coverage and an output schema, the description provides the missing workflow context: where the inputs come from, what the output represents, and what this stage does not include. Nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description adds high-level framing by naming selected candidate, locked colours, and suppressed claims, but it doesn't add meaning beyond what the property descriptions already convey; the brand_ref/project_id distinction remains explained only in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records a manual brand colour decision: which candidate was chosen, which colours to lock, and which claims to suppress. It ties the action to the sibling brand_guideline_specify tool and distinguishes itself as the decision-recording counterpart, so an agent can tell it apart from brand_guideline_status or brand_guideline_claims.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this after brand_guideline_specify has produced a candidate, and it notes this is decision-making, not a full approval workflow. It does not explicitly enumerate alternates or when-not-to-use conditions, but the connection to specify and the exclusion of approval states provide solid guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_guideline_specifyGenerate an Archive-Grounded Brand Colour StandardARead-onlyInspect
Generates the case for a brand's colours, not just the colours themselves: three genuinely different, archive-grounded candidate palettes from a brand brief, each scored for distinctiveness against named competitors, checked for accessibility, and labelled with exactly what each colour can and cannot legitimately claim (documented archive anchor vs analogue vs original brand colour). Returns a brand_ref (valid 24h) plus a claim_id per colour -- resolve those into full source/permitted-claim/do_not_say text with brand_guideline_claims (the response's own claim_detail_available_via field always names it explicitly). Follow with brand_guideline_select to record which candidate was chosen. CREATE ONCE, THEN VERSION: the response returns project_id and current_version. When you refine or update a Brand Standard you already created in this conversation, pass that project_id back as continue_project_id rather than creating a second project. TIMING (2026-08-07): real generation cost ranges roughly 60-280 seconds depending on retrieval/generation path. This call races generation against a safe ~55s window: a fast generation returns the full result exactly as described above, unchanged. A slower generation instead returns a compact {"status": "processing", "brand_job_ref": ..., "poll_after_seconds": ...} -- generation keeps running server-side regardless, and is never lost. Call brand_guideline_status with that brand_job_ref to retrieve the completed result (brand_ref, project_id, candidate summary) once ready; poll no more often than poll_after_seconds suggests.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_name | Yes | The brand's name. | |
| brand_brief | No | Category, positioning, audience, personality, values, channels, markets, and named competitors with their hex colours. | |
| constraints | No | Structured negative/positive retrieval constraints, checked before archive-diversity capping. avoid_concepts takes precedence over any sentiment inferred from brand_brief prose. | |
| preferences | No | ||
| palette_input | Yes | Exactly how to source the candidate colours. | |
| identity_assets | No | ||
| output_preferences | No | ||
| continue_project_id | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation Contradiction: the description states the call creates server-side state — it returns project_id/current_version, creates a second project when continue_project_id is omitted, and leaves generation running server-side — while the annotations declare readOnlyHint=true. An agent trusting the annotation would assume zero side effects. Apart from this conflict, the prose itself is exemplary: it discloses the ~55s async race window, persistent generation that is 'never lost', polling discipline (poll_after_seconds), and 24h brand_ref validity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but earns its length: three paragraphs with distinct topics (outputs/follow-ups, versioning, async timing), with the core value proposition front-loaded in the first sentence. Minor redundancy ('keeps running server-side regardless, and is never lost') and slightly convoluted phrasing ('the response's own claim_detail_available_via field') keep it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 params, nested objects, five palette_input modes, an async dual-path, and a multi-tool workflow, the description is nearly complete: outputs, follow-up chain, versioning, and polling are all specified, and an output schema covers return values. Small residual gaps — mode prerequisites (e.g., mode=image requires a prior ingest_image call, mode=archive needs a valid archive name) and failure semantics — prevent a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds real meaning for continue_project_id by giving concrete continuation examples ('Make it warmer', 'change the secondary', 'render the PDF again'), which is genuinely additive beyond the schema. However, it does not compensate for the roughly 37% of parameters left undocumented in the schema (accessibility_target, tone, language, and object-level descriptions for preferences/identity_assets/output_preferences), so those rely on names and enums alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a precise verb and resource: 'Generates the case for a brand's colours, not just the colours themselves' — three archive-grounded candidate palettes, scored for distinctiveness, checked for accessibility, and labelled with claim legitimacy. It clearly positions this as the 'case-making' specify step, distinguishing it from obvious siblings like palette_generate, brand_guideline_claims (claim resolution), and brand_guideline_select (recording the choice).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing and alternatives are given: follow with brand_guideline_select to record the choice, resolve claim_ids via brand_guideline_claims, and poll via brand_guideline_status with brand_job_ref when the slow path returns processing. The versioning rule states exactly when to pass continue_project_id (refinements, with concrete examples) and when not to ('Start a new project only when the customer asks for a genuinely separate brand').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_guideline_statusRetrieve a Slow brand_guideline_specify Generation's ResultARead-onlyIdempotentInspect
Resolves a brand_job_ref returned by brand_guideline_specify when its race-to-complete window elapsed before generation finished. Read-only, in-process lookup -- never re-runs generation. Returns {"status": "processing"} if still running, {"status": "complete", "brand_ref": ..., "project_id": ..., "recommended_candidate_id": ..., "candidate_count": ...} once done (a compact summary -- use the returned brand_ref with brand_guideline_select/brand_guideline_pdf/brand_guideline_claims for full detail, the same pattern every other Brand Standard tool already uses), or {"status": "failed", "error_code": ..., "message": ...} if generation genuinely failed server-side. An unknown or expired brand_job_ref returns a structured BRAND_JOB_NOT_FOUND error, never a crash or empty success.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_job_ref | Yes | The brand_job_ref returned by brand_guideline_specify's processing response. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive. Description adds behavioral context: it's an in-process lookup, never re-runs generation, and details all possible return states including error handling (BRAND_JOB_NOT_FOUND). This goes beyond the annotations and gives full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but every clause adds value: purpose, conditions, read-only nature, return shapes, error behavior, and pointers to related tools. It is front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers all possible outcomes (processing, complete, failed, not found) and how to proceed with the returned brand_ref. It references the output schema implicitly and the sibling tool family, making it complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear parameter description. The tool description adds semantic context by explaining the parameter's origin ('returned by brand_guideline_specify') and its role in a race-to-complete scenario, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves a brand_job_ref from brand_guideline_specify when its race-to-complete window elapsed. It uses a specific verb ('Resolves') and resource ('brand_job_ref'), and distinguishes itself from siblings by focusing on status retrieval, not generation or full detail retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: when brand_guideline_specify's race-to-complete window elapsed before generation finished. It also provides guidance on alternatives by directing the user to use brand_guideline_select/brand_guideline_pdf/brand_guideline_claims for full detail, and clarifies it never re-runs generation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_reportComplete Brand Colour Intelligence ReportARead-onlyInspect
One-call complete brand colour intelligence report. Input: hex + brand context + markets + medium + product type. Output: archive anchor, cliche contradiction, colour DNA, strategy verdict, commercial signals, market reading per market, usage rules, palette roles, ecommerce copy, memory hooks, Instagram caption, and Midjourney/Flux/DALLE agent brief. Use this instead of chaining colour_strategy + cliche_breaker + ecommerce_product_copy + memory_hooks + agent_brief separately. Two Claude calls total. One complete response.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hero hex colour e.g. '#4A2A50' | |
| medium | No | Medium e.g. 'packaging', 'digital', 'interior' | general |
| concept | No | Optional concept to search for cliche contradiction e.g. 'luxury', 'eco', 'wellness' | |
| markets | No | Target markets e.g. ['UK', 'France', 'Japan'] | |
| product_type | No | Product type for copy e.g. 'velvet cushion', 'fragrance', 'cleaning spray' | |
| target_model | No | Image model for agent brief e.g. 'midjourney', 'flux', 'dalle' | midjourney |
| brand_context | No | Brand context: category, positioning, audience, channels |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint annotation already conveying safety, the description adds useful behavioral context: it explains the tool is a composite that aggregates outputs from multiple sub-tools and mentions the internal 'Two Claude calls' detail. It also lists the full set of outputs, giving transparency into what the report includes. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear 'Input:' and 'Output:' sections and a final usage sentence. It is front-loaded with the main concept, and while the output list is long, each item is relevant and earns its place. It is not verbose or repetitive, and it avoids unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, output schema, nested objects), the description covers inputs, outputs, and usage guidance, making it reasonably complete. The existence of an output schema means it does not need to detail return structures. It could optionally mention more about prerequisites or limitations, but overall it provides sufficient context for an agent to decide and invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, with each parameter described in detail. The description itself lists the inputs ('hex + brand context + markets + medium + product type') but adds little semantic value beyond grouping them. It does not provide additional format, constraints, or relationships to outputs that aren't already in the schema. Thus, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a 'complete brand colour intelligence report' with a specific verb ('report') and resource ('brand colour intelligence'). It explicitly differentiates from sibling tools by naming them: 'colour_strategy + cliche_breaker + ecommerce_product_copy + memory_hooks + agent_brief', and positions itself as the composite alternative. This is a strong, specific purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this instead of chaining ... separately' and mentions 'Two Claude calls total. One complete response.' This tells the agent when to choose this tool over chaining individual tools. However, it does not explicitly state when NOT to use it (e.g., when only one specific output is needed), so it falls short of a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_systemComplete Brand Colour SystemARead-onlyInspect
Complete brand colour system in one call. Returns colour roles with archive names, light and dark mode role maps, typography guidance, usage rules per colour, design tokens (CSS, Tailwind, Figma), and citation cards. Deterministic. No LLM cost. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | Target market e.g. global, UK, Japan | global |
| medium | No | digital | print | both | digital |
| palette | Yes | Hex values | |
| use_case | No | Use case e.g. brand identity, packaging | brand identity |
| brand_category | No | Optional e.g. developer tool, luxury, food |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that the call is deterministic and has no LLM cost, which sets cost and behaviour expectations. It also states that the result already carries the rendered palette and download files (PNG, PDF, ASE, JSON, CSS) and instructs the agent to show them to the customer. The guardrail about archive anchors and the palette_finalize handoff add meaningful operational context that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the core purpose and output list in the first sentence, then layers cost/determinism, embedded deliverables, presentation instructions, and a cross-tool handoff. Each sentence earns its place: the determinism note, the 'show them to the customer' directive, and the palette_finalize routing all affect agent behavior. It is long but appropriately so for a complex aggregate tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity—5 parameters, output schema, many siblings—the description is operationally complete. It explains what the tool returns, that it is deterministic, that downloads are embedded, how to present results, and what to do if the agent selects its own palette. Parameter details are already in the schema, and return structure is covered by the output schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 5 parameters with 100% schema description coverage, so the baseline is 3. The description does not add extra meaning for market, medium, palette, use_case, or brand_category. Since the schema already documents these parameters well, the description does not need to compensate and no deduction is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Complete brand colour system in one call' and then enumerates concrete deliverables such as colour roles, light/dark role maps, typography guidance, usage rules, design tokens, and citation cards. This gives the agent a specific verb, resource, and scope. It also references palette_finalize as a distinct follow-up, which helps separate this aggregate tool from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use the tool—when a complete brand colour system is needed in one call—and gives an explicit alternative: if the agent chooses its own final palette, it should call palette_finalize once with those colours. It also provides concrete behavioural guidance such as 'Never present the archive anchors... as the colours you are recommending.' It stops short of listing exclusions for narrower palette tasks, but the routing is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_cardGet Colour Details by NameARead-onlyInspect
Look up a named colour and return its hex, archive, provenance, and cultural notes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Colour name e.g. 'Prussian Blue' or 'Ottoman Carbon Ink' | |
| slug | No | Stable colour slug from archive_search e.g. 'keats:keats-s-lung' -- preferred over name for reliable retrieval |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals safe read-only behavior, and the description adds value by specifying the exact kind of data returned (hex, archive, provenance, cultural notes). It does not introduce contradictions or hidden side effects, making the behavior clear for a lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the primary action and outcome. It contains no filler or repetition, earning its place efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, a readOnlyHint annotation, and detailed parameter descriptions, the concise description is largely sufficient. It could benefit from a note about fallback behavior when a name is not found or when to prefer slug over name, but the current coverage is adequate for straightforward usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with clear descriptions for both parameters (name and slug), including the suggestion that slug is preferred. The tool description adds no additional parameter-level meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('look up') and resource ('named colour') and lists the return contents (hex, archive, provenance, cultural notes). It distinguishes itself from colour_* siblings by focusing on details by name, though it doesn't explicitly differentiate from similar lookup tools like colour_passport.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool ('when you have a named colour'), but it does not provide explicit guidance on when to use it vs alternatives or mention prerequisites like using archive_search to obtain a slug. No exclusions or alternatives are noted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_combinationColour Combination CheckARead-onlyInspect
Assess 2-5 colours as a combination for a given context (UI, data viz, fashion, interior, print, branding). Returns harmony type, clash warnings, contrast summary, and specific deployment rules for the context.
| Name | Required | Description | Default |
|---|---|---|---|
| colours | Yes | 2-5 hex values to assess as a combination | |
| context | No | Usage context: UI | data viz | fashion | interior | print | branding | UI |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already indicates a safe read operation. The description adds meaningful behavioral context by specifying the tool returns harmony type, clash warnings, contrast summary, and deployment rules. No side effects are disclosed because none exist, and this is consistent with the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, front-loaded with the action verb 'Assess' and the resource, followed by a compact list of return categories. Every clause adds value and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two well-documented parameters, an output schema present, and a read-only annotation, the description sufficiently covers the tool's purpose, scope, and outputs. The return details are handled by the output schema, and the description provides the needed situational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both parameters (colours and context) are described with details like hex values and allowed contexts. The description repeats this information without adding new semantics such as default behaviour, hex format specifics, or validation rules. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Assess' and identifies the resource as '2-5 colours as a combination' for a defined context list (UI, data viz, fashion, interior, print, branding). It enumerates return types (harmony type, clash warnings, contrast summary, deployment rules), distinguishing it from sibling tools like colour_compare or palette_generate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use the tool: evaluate a combination of 2-5 colours for a given context, listing six specific contexts. It does not name alternative tools or state exclusions, but the context list and 'combination' scope imply appropriate usage. This is clear context without explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_compareCompare Two Colours — Perceptual and CulturalARead-onlyInspect
Deep perceptual and semantic comparison between any two hex values. Returns quantified differences in LRV, chroma, hue angle, warmth, and CIEDE2000 distance, plus cultural context on both — which is more authoritative, more saturated, more stable under different illuminants, and what each has historically signified. Use when choosing between two colours or explaining why one works better than another. Not a harmony tool — this is a decision and reasoning tool.
| Name | Required | Description | Default |
|---|---|---|---|
| hex_a | Yes | First colour hex e.g. '#003366' | |
| hex_b | Yes | Second colour hex e.g. '#1877F2' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already discloses non-destructive behavior. The description adds meaningful behavioral context by enumerating the return content — LRV, chroma, hue angle, warmth, CIEDE2000 distance, and cultural context — and notes the tool's decision-support function, going beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, followed by output details and usage guidance. Every sentence contributes distinct information: what it does, what it returns, and when to use it. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a simple 2-parameter interface and an output schema present, the description is fully sufficient. It explains the tool's purpose, output categories, usage contexts, and explicitly rejects the harmony-tool role. An agent can confidently select and invoke this tool without ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both hex_a and hex_b described and example formats provided. The description phrases them as 'any two hex values,' reinforcing the relationship between parameters, but does not need to add further detail since the schema already carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Deep perceptual and semantic comparison between any two hex values.' It lists concrete output dimensions and clearly distinguishes itself from harmony tools with 'Not a harmony tool — this is a decision and reasoning tool,' setting it apart from siblings like colour_harmonies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'Use when choosing between two colours or explaining why one works better than another.' It also states an exclusion ('Not a harmony tool'), which helps an agent decide against this tool when harmony-related tasks arise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_cultural_riskAssess Cultural Risk of a Colour or PaletteARead-onlyInspect
Cultural risk assessment for a hex value or palette (symbolic weight, regional taboos, religious associations, market flags). This is one component of colour_passport for single colours. Use colour_passport for a general profile; call this directly for palette-level risk checks or when cultural risk is the only thing being asked about.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | No | Single hex value to assess e.g. '#FF9900' | |
| markets | No | Optional market focus e.g. ['China', 'Middle East', 'India'] | |
| palette | No | Optional list of hex values to assess as a palette |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds context beyond annotations by explaining the tool handles both hex and palette inputs and that it serves as a component of colour_passport. No contradictions, and it clarifies scope without needing to restate safety since annotations cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, then a concise usage comparison. Every sentence carries meaning with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the readOnly annotation, output schema, and full parameter coverage, the description sufficiently addresses what the tool does, when to use it, and how it relates to colour_passport. It is complete for an agent to select this tool among many colour-related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 3 parameters at 100%, so the baseline is 3. The description connects 'hex value or palette' to the hex/palette parameters but does not add per-parameter syntax or nuance beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool assesses cultural risk for a hex value or palette, enumerating specific dimensions (symbolic weight, taboos, religious associations, market flags). It explicitly distinguishes itself from colour_passport by positioning as a component and direct-call for palette-level risk checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'Use colour_passport for a general profile; call this directly for palette-level risk checks or when cultural risk is the only thing being asked about.' This names an alternative and gives concrete decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_dnaColour DNA FingerprintARead-onlyInspect
Compact semantic fingerprint for a single hex colour. This is one component of colour_passport. Use colour_passport for a general colour profile; use this only when the user explicitly wants the fingerprint format alone. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex colour to fingerprint e.g. '#4A2A50' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=true, but the description adds substantial behavioral context: the result already contains the rendered palette and PNG/PDF/ASE/JSON/CSS downloads, the agent must show them, and it must never present archive anchors as recommended colours. This goes well beyond the read-only safety signal and tells the agent what to do with the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
All four sentences carry distinct, necessary information: what the tool produces, when to use it instead of colour_passport, what the result contains, and the critical finalization/misrepresentation guardrails. No filler or repetition; the key scoping statement is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one well-documented parameter, a readOnlyHint, and the presence of an output schema, the description is complete. It covers selection criteria, expected result contents, customer-facing display behaviour, and the follow-up action to palette_finalize. Nothing essential is missing for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% because the single required parameter `hex` already has a clear description and example ('#4A2A50'). The tool description adds no new parameter-level detail beyond calling it a 'single hex colour,' so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('single hex colour') and a specific outcome ('Compact semantic fingerprint'), and immediately distinguishes it from colour_passport: 'This is one component of colour_passport.' It is clear which sibling this tool is and is not, without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'use colour_passport for a general colour profile; use this only when the user explicitly wants the fingerprint format alone.' This is a direct usage criterion separating it from the closest sibling. It also gives a downstream rule: call palette_finalize if you choose your own palette from this evidence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_forensicsColour Specification Safety CheckARead-onlyInspect
Assess whether a hex colour can be safely specified for a physical application. Returns: specification_safe verdict (yes / conditional / avoid), risks, required actions, light behaviour under three illuminants (north daylight, warm artificial, direct sun), substrate-specific notes, and a recommended alternative. Backed by CIEDE2000 archive matching and Claude material knowledge. Examples: ultramarine on lime plaster, lead white on exterior timber, verdigris on north-facing interior wall, red ochre on historic brick.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex colour to assess e.g. '#2A5498' | |
| use | No | Specific use context e.g. 'heritage repair', 'new build interior', 'conservation project' | |
| finish | No | Paint finish e.g. 'matt', 'eggshell', 'gloss', 'limewash' | matt |
| substrate | Yes | Physical substrate e.g. 'lime plaster', 'gypsum board', 'brick', 'timber', 'canvas' | |
| orientation | No | Room or surface orientation e.g. 'north-facing', 'south exterior', 'east bedroom' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint annotation, the description adds substantial behavior: verdict types (yes/conditional/avoid), risks, required actions, illuminant analysis, substrate notes, and recommended alternatives. It also discloses methodology (CIEDE2000 archive matching and Claude material knowledge), going well beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a clear front-loaded purpose and a compact list of returns. The final 'Backed by...' sentence adds credibility but is not purely functional, and the four examples are useful though slightly expand length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, output categories, methodology, and concrete usage scenarios, and is paired with a full output schema and readOnlyHint. It is sufficiently complete for correct invocation despite the tool's complexity and the large sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all 5 parameters, so the baseline is 3. The description does not add parameter-specific syntax or details beyond what the schema provides, though its examples reinforce valid substrate and orientation values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool assesses whether a hex colour can be safely specified for a physical application, using a specific verb and resource. It distinguishes itself from colour_verdict or colour_metrics siblings by focusing on physical/material safety rather than generic colour analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context: use when assessing safety for a physical substrate, reinforced by concrete examples like 'ultramarine on lime plaster' and 'lead white on exterior timber'. However, it does not explicitly mention alternatives or exclusions, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_harmoniesGet Colour HarmoniesARead-onlyInspect
Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours. Also available: 'hay_contrast' -- D.R. Hay's (1838) documented contrast pairing between six named hues (yellow/purple, orange/blue, red/green), with Field's proportional power for the pair. Unlike the fixed-angle types, this snaps the input to Hay's nearest named hue rather than rotating it, and returns covered:false with no invented partner when the input sits nearer a tertiary region (olive/citron/russet) than any of the six -- Hay records only an aggregate total for tertiaries, never a specific pair. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex value e.g. '#3A5C8C' | |
| harmony_types | No | 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). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description reveals important behaviors: hay_contrast snaps to Hay's nearest named hue, returns covered:false with no invented partner for tertiary regions, and the result already includes rendered palette downloads. It also warns against presenting derived archive anchors as recommendations. This significantly exceeds annotation-level transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the first defines the core function, the second explains the special case, the third clarifies output, the fourth warns about a common misuse, and the fifth routes to the correct follow-up tool. There is no fluff or repetition, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a special historical contrast mode with edge cases) and the presence of an output schema, the description covers everything an agent needs: available harmony types, hay_contrast's unique behavior, output deliverables, customer presentation, and the exact condition for calling palette_finalize. No critical usage detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds meaningful context for harmony_types, especially hay_contrast's snapping behavior and its edge-case covered:false result. It does not add new semantics for the hex parameter, but the extra behavioral detail for the special harmony type justifies a score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Return complementary, triadic, analogous, and split-complementary harmonies matched to named archive colours.' It clearly distinguishes this tool from siblings by naming the exact harmony types and highlighting the unique hay_contrast mode. The reference to palette_finalize as a downstream step further clarifies its role in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly differentiates hay_contrast from fixed-angle types, explaining when it snaps and when it returns covered:false. It also gives direct routing guidance: 'If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once...' and instructs the agent to show the downloaded result to the customer. This is actionable, unambiguous usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_hooksMake Any Colour MemorableARead-onlyInspect
Generate a hook sentence, three-sentence story, tweet, image prompt, and follow-up questions for any hex colour. Backed by the nearest archive colour's cultural provenance. Tunable by audience (general public, designers, historians, children) and tone (dinner party, academic, social media, brand copy). Use to make archive colours shareable, to generate content, or to power a public-facing colour chat experience.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex colour e.g. '#154F20' | |
| tone | No | Desired tone e.g. 'dinner party', 'academic', 'social media', 'brand copy' | dinner party |
| audience | No | Target audience e.g. 'general public', 'interior designers', 'children' | general public |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint: true. The description adds valuable behavioral context by disclosing that outputs are 'backed by the nearest archive colour's cultural provenance' and that the tool is tunable by audience and tone. This goes beyond the annotation's simple safety hint and explains what the tool actually does with inputs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences that front-load the primary action and outputs, followed by concise use cases. No wasted words; every sentence earns its place. This is an example of efficient, well-structured tool documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's generative nature, the description lists all output types (hook, story, tweet, image prompt, follow-up questions) and presents relevant usage scenarios. An output schema exists to detail return values, so the description does not need to cover those. The description is complete for an agent to decide when and how to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for hex, tone, and audience. The description's mention of tunable audience/tone examples ('general public, designers, historians, children') largely mirrors the schema's own examples. It adds minimal extra meaning, such as 'any hex colour', which does not significantly exceed what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Generate') and lists concrete outputs (hook sentence, three-sentence story, tweet, image prompt, follow-up questions) for a hex colour. It clearly distinguishes this tool from siblings like colour_story or colour_namer by focusing on multi-format content generation grounded in archive provenance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases ('Use to make archive colours shareable, to generate content, or to power a public-facing colour chat experience'), giving clear context for when to invoke it. It does not explicitly mention when not to use it or name alternatives, so it falls short of a 5 but is well above vauge guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_match_paintMatch to Commercial Paint SystemARead-onlyInspect
Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Number of matches (default 3) | |
| brand | No | Optional brand filter: 'farrow' or 'little_greene' | |
| hex_val | Yes | Hex value e.g. '#003153' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares this as a safe operation. The description adds value by specifying the brand scope ('Farrow and Ball and Little Greene'), which is not in the annotation. However, it does not clarify whether the tool supports additional brands beyond these two, and the 'including' wording could be ambiguous. The behaviour of matching a hex to a named colour is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the verb and resource, containing no filler. It efficiently conveys the essential purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has low complexity, a complete input schema, an output schema, and a readOnlyHint annotation. The description covers the core purpose and specific brands. It is slightly ambiguous about whether other paint brands are supported, but the overall context is sufficient for an agent to understand what the tool does and what it returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already having clear descriptions (n: 'Number of matches', brand: 'Optional brand filter', hex_val: 'Hex value'). The description does not need to add parameter details. It does not go beyond the schema, but that is acceptable given the high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Find the nearest named colour in commercial paint systems including Farrow and Ball and Little Greene.' This uses a specific verb ('find') and resource ('nearest named colour in commercial paint systems'), and explicitly names the included brands, which distinguishes it from sibling tools like colour_namer or colour_compare that may handle generic colour naming or comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for matching a hex value to a commercial paint system colour, which is clear context. It does not explicitly list alternatives or when-not-to-use, but the mention of 'commercial paint systems' and specific brands provides sufficient guidance for selection among the many sibling palette/colour tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_metricsGet Colour Metrics and PropertiesARead-onlyInspect
Returns numeric metrics derived from a single display colour: an estimated light reflectance value (LRV) and band, relative luminance, CIELAB lightness, chroma and hue angle, and Bradford corresponding colours under two standard illuminants. It also lists what a hex cannot support, such as thermal performance or a measured LRV. This is one component of colour_passport. Use colour_passport for a general colour profile; use this only when the user explicitly wants isolated numeric values.
| Name | Required | Description | Default |
|---|---|---|---|
| hex_val | Yes | Hex value e.g. '#8B4513' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals safety, and the description adds meaningful behavioral detail: the values are estimated, limited to what a hex can support, and computed under two standard illuminants. It also calls out limitations like thermal performance and measured LRV, which helps an agent set user expectations without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and every sentence earns its place: first states what it returns, then notes its limitations, then routes to the sibling. The detailed list is dense but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, readOnlyHint annotations, and an output schema, the description covers everything needed to invoke the tool correctly: what it computes, what it cannot compute, and when to prefer colour_passport. No critical context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents hex_val. The description reinforces that the input is a single display colour and notes hex limitations, but it does not add parameter-level details beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific action and resource: 'Returns numeric metrics derived from a single display colour' and enumerates exact quantities (LRV, luminance, CIELAB lightness, chroma, hue angle, Bradford corresponding colours). It also explicitly distinguishes itself from colour_passport, so an agent can reliably tell this tool apart from a key sibling without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use guidance: 'Use colour_passport for a general colour profile; use this only when the user explicitly wants isolated numeric values.' This explicitly names the alternative and states the condition that selects this tool, leaving no ambiguity about routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_mixMix Two Colours (Pigment Simulation)ARead-onlyInspect
Simulate perceptually modelled subtractive mixing of two colours in CIE Lab space (not RGB screen blending). Returns the resulting mixed hex value and its nearest archive match with cultural context. Uses CIE Lab subtractive model for perceptual accuracy. Example: mixing Prussian Blue and Yellow Ochre gives a muted green — the tool identifies which archive colour that green most closely matches.
| Name | Required | Description | Default |
|---|---|---|---|
| hex_a | Yes | First colour hex e.g. '#003366' | |
| hex_b | Yes | Second colour hex e.g. '#C8A600' | |
| ratio | No | Mix ratio 0.0-1.0 where 0.5 is equal parts (default 0.5) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true is consistent with the description, which adds rich behavioural context: the CIE Lab subtractive model, perceptual accuracy, and the nature of the output (nearest archive match with cultural context). This goes well beyond what the annotation alone conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: the core function, the output, the model reinforcement, and a concrete example. It is front-loaded with the most important information and has no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, method, output, and a worked example. Given the existence of an output schema and annotations, it is complete without needing to detail return structures or safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds semantic value through the example (Prussian Blue + Yellow Ochre gives a muted green), illustrating the intended meaning of the hex inputs as pigment colours. This helps the agent understand the parameters beyond their raw format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: simulate subtractive mixing of two colours in CIE Lab space, distinct from RGB screen blending, and returns the mixed hex plus nearest archive match. This is a specific verb+resource+method and distinguishes it from other colour tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly notes 'not RGB screen blending', which is a clear when-not situation. However, it does not name alternative tools for additive mixing or colour comparison, leaving the guidance slightly implicit. The example provides a concrete use context but no explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_namerGenerate Archive-Grounded Colour NamesARead-onlyInspect
Generate memorable, archive-verified colour names for any hex value. Choose from naming styles: geographical, poetic, material, literary, botanical, industrial, or mixed. Every name is grounded in a real archive source. The core of the Shopify product naming use case.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex colour to name e.g. #8B4A2A | |
| style | No | geographical | poetic | material | literary | botanical | industrial | mixed | |
| market | No | Target market e.g. UK luxury | |
| n_names | No | Number of name options (default 5) | |
| product_type | No | Product type e.g. candle, paint, leather bag |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the safe, read-only nature is already known. The description adds useful behavioral context beyond that: names are 'archive-verified' and 'grounded in a real archive source,' and it lists the naming styles. It does not contradict annotations, and it supplements them with meaningful details about the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise, front-loaded sentences. The first sentence states the core action, the second lists options, and the third explains the unique value and primary use case. There is no filler or repetition; every sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, 1 required) and the presence of an output schema, the description is adequately complete. It covers purpose, style options, archive grounding, and a concrete use case. It could mention when to prefer alternative tools, but that is more of a usage guideline matter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description lists the style options ('geographical, poetic, material, literary, botanical, industrial, or mixed'), which mirrors the schema's style property but adds no extra meaning. It does not elaborate on parameters like market, n_names, or product_type, relying on the schema to carry that information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Generate memorable, archive-verified colour names for any hex value.' It uses a specific verb ('Generate'), a specific resource ('colour names'), and adds scope ('for any hex value') and differentiators ('archive-verified', 'grounded in a real archive source'). This distinguishes it from sibling tools like colour_card or palette_generate, which focus on palettes or analysis rather than naming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context: 'The core of the Shopify product naming use case,' implying when the tool is appropriate. However, it does not explicitly mention when not to use it or compare it to sibling naming tools like ecommerce_namer, so it lacks exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_passportColour Passport -- Complete Colour Truth ObjectARead-onlyInspect
Canonical single-call colour truth object. Returns everything known about a hex value: colour science (Lab, LCh, hue, chroma, depth, temperature, LRV), archive anchor with dE2000, claim_strength, do_not_say and evidence grade, hex provenance (status, confidence, spectrophotometric flag), physics (illuminant behaviour, gamut, print risk), and cultural reading (colour family, warnings, positives). Use this as the foundation call when you need the complete picture. Every other tool is built on this data. Replaces chaining colour_dna + archive_provenance + colour_cultural_risk + colour_metrics separately. Examples: '#31559B' (anchors to Henry VIII Manuscript Blue Initials), '#8B1A1A' (Penny Post Sealing Wax Dark Red), '#D4AF37' (Sutton Hoo Great Gold Buckle).
| Name | Required | Description | Default |
|---|---|---|---|
| hex | No | Single hex colour e.g. #31559B | |
| hexes | No | Multiple hex colours for batch lookup e.g. ['#31559B', '#8B1A1A']. Max 20. | |
| n_archive | No | Number of archive matches to return (default 3) | |
| include_physics | No | Include illuminant behaviour and gamut data (default true) | |
| include_cultural | No | Include cultural risk and associations (default true) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so no destructive behavior needs disclosure. The description adds value by explaining the tool returns a canonical, exhaustive dataset and gives concrete examples, which helps set expectations. It doesn't discuss rate limits or auth, but for a read-only tool with a rich output schema, the disclosure is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well-structured: definition, content summary, usage guidance, and examples. Every sentence contributes, though the list of data categories could be slightly more compact. It is appropriately detailed for a complex tool with many optional parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description provides enough context to understand its role, what it returns, and when to use it. The output schema covers specific return values, and examples ground the behavior. Minor missing context like default archive count or batching behavior is already in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description doesn't add parameter-level detail, but it doesn't need to; the schema already explains hex, hexes, n_archive, include_physics, and include_cultural with defaults and examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Canonical single-call colour truth object' and 'Returns everything known about a hex value', clearly stating the tool's purpose and scope. It explicitly distinguishes itself from siblings by naming colour_dna, archive_provenance, colour_cultural_risk, and colour_metrics, and positions itself as the foundational call ('Every other tool is built on this data').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance on when to use: 'Use this as the foundation call when you need the complete picture.' It also explains when not to chain separate tools by stating it 'Replaces chaining colour_dna + archive_provenance + colour_cultural_risk + colour_metrics separately', offering a direct alternative comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_passportsBatch Colour Passport LookupARead-onlyInspect
Batch version of colour_passport. Submit up to 20 hex values in one call. Returns a full Colour Passport for each unique hex: colour science, archive anchor, evidence grade, do_not_say constraints, hex provenance, accessibility, and physics. Deduplicates hex values automatically. Use for multi-colour workflows, Figma palette analysis, or any case where calling colour_passport separately for each colour would be slow.
| Name | Required | Description | Default |
|---|---|---|---|
| hexes | Yes | List of hex colours e.g. ['#31559B', '#8B1A1A'] | |
| n_archive | No | Number of archive matches per colour (default 3) | |
| include_physics | No | Include illuminant behaviour and gamut data (default true) | |
| include_cultural | No | Include cultural associations (default false) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=true. The description adds behavioral details such as the 20-value limit, automatic deduplication, and the full set of returned fields (colour science, archive anchor, evidence grade, etc.). This goes beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence names the tool as a batch version, then immediately states the limit and return behavior. Every sentence adds value with no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full schema parameter descriptions, the description covers the core purpose, constraints, deduplication, and usage scenarios. It is complete for a batch lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds a maximum batch size of 20 hex values and states that deduplication occurs, which are constraints not present in the schema. It does not discuss the optional parameters, but those are fully described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it is the 'Batch version of colour_passport' with a clear verb 'submit' and resource 'hex values', and lists the returned product. It distinguishes itself from the singular colour_passport sibling by batching up to 20 values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: 'multi-colour workflows, Figma palette analysis, or any case where calling colour_passport separately for each colour would be slow.' This provides clear context and names the alternative (colour_passport), though it does not explicitly list when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_relationshipsColour RelationshipsARead-onlyInspect
What is this archive record connected to, and why? One-hop lookup over Colour Memory's stored relationship graph -- today populated for PigmentLineage, whose 348 design_combination nodes are Wada's 1933 Dictionary of Color Combinations plates. Returns edges in separate blocks by relationship_class so a caller can never mistake a computed colour distance for something a historical source actually said: SOURCE_ASSERTED (the source itself states the relationship, e.g. 'this colour was assigned to numbered combination 176') versus DETERMINISTIC_STRUCTURAL (a mechanical fact about the source object, e.g. 'printed on this plate'). Every edge carries its own 'does_not_mean' caveat inline -- e.g. membership in the same Wada combination does not assert that any specific pair within it was individually intended as a pairing. Not every record_id has relationships yet; an empty result is a true negative, not an error. Get record_id values from archive_search or colour_card.
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | Yes | Stable record id, e.g. from archive_search or colour_card. | |
| include_computed | No | Include computed (not source-asserted) relationships where available. Default true. | |
| include_unresolved | No | Include same-name candidates across sources -- the cheapest, easiest-to-misread-as-evidence edge in the system. Default false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| label | No | |
| record_id | No | |
| structural | No | Mechanical facts about the source object (plate layout etc.), kept separate from source_asserted on purpose. |
| source_asserted | No | Edges the source itself states, grouped by predicate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint=true, the description goes far beyond the annotation by explaining that results are separated by relationship_class to prevent mistaking computed distance for historical assertion, that every edge carries an inline 'does_not_mean' caveat, and that missing relationships are true negatives. It also discloses the current population state (348 Wada plates). This is rich, honesty-promoting behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: framing question, population context, relationship-class distinction, caveat behavior, true-negative semantics, and input source guidance. It is front-loaded with the core question and strongly structured for agent comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the output schema, and the annotations, the description covers everything an agent needs to call it correctly: what the graph contains, how relationship classes are separated, what caveats accompany edges, how to interpret empty results, and where to obtain valid IDs. No critical context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all three parameters at 100%, so the baseline is 3. The description adds meaningful context for record_id (stating its source) and for include_computed by clarifying what 'computed' relationships mean via DETERMINISTIC_STRUCTURAL. include_unresolved gets no description-level elaboration, but the schema carries its own explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: a one-hop lookup over Colour Memory's stored relationship graph, returning edges grouped by relationship_class. It gives concrete examples of SOURCE_ASSERTED and DETERMINISTIC_STRUCTURAL relationships, which sharply defines the tool's job. However, it does not explicitly distinguish itself from sibling tools like why_connected, so it stops short of a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: this is a one-hop graph lookup, and it explicitly warns that an empty result is a true negative, not an error. It also tells the caller where to get valid record_id values (archive_search or colour_card). It does not name alternatives or state when not to use this tool, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_slugsColour Name Developer TokensARead-onlyInspect
Return every developer token format for a hex value: CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable. Archive-grounded name source with dE2000 distance.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex value e.g. #D4A829 | |
| archive | No | Optional archive filter |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, establishing the safe read-only nature. The description adds valuable behavioral context by explaining that the name source is archive-grounded and uses dE2000 distance for color matching, which helps the agent anticipate how results are produced. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. The first sentence front-loads the action and lists all output formats; the second provides the naming source. Every word earns its place, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with a complete input schema and the presence of an output schema, provides sufficient context for a read-only transformation tool. It lacks explicit edge-case handling (e.g., invalid hex) and prerequisites, but these are not critical given the tool's simplicity and the schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, as both hex and archive parameters are already described in the input schema. The description mentions 'hex value' and 'Archive-grounded' which loosely connects to the archive parameter, but it adds no new parameter-specific meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (return every developer token format) for a given hex value, listing concrete outputs (CSS variable, kebab-case, camelCase, PascalCase, Tailwind class, TypeScript const, SCSS variable). This clearly distinguishes it from sibling tools like colour_namer by focusing on developer token formats and mentioning archive-grounded naming with dE2000 distance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when developers need naming conventions from a hex value, but it does not explicitly state when to prefer this tool over alternatives or provide exclusions. No alternative tools are mentioned, so usage context is only implied, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_storyGet the Cultural Story of a ColourARead-onlyInspect
Given a hex value, returns a rich narrative about that colour's cultural journey — where it has appeared in history, what it has meant to different civilisations, and what archive names it carries. Essential for image generation prompts, brand storytelling, and creative briefs. Example: '#DC143C' returns the story of crimson from Byzantine imperial courts through Tudor England to modern sport.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex value e.g. '#DC143C' | |
| n_archives | No | Number of archive sources to draw from (default 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already indicates read-only behavior, and the description does not contradict it. The description adds valuable context by specifying what the narrative contains (history, civilisations, archive names) and provides a concrete example. It does not discuss potential latencies or edge cases, but the output schema and read-only hint lower the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: what it does, when to use it, and an example. It is concise, front-loaded with the core purpose, and every sentence earns its place. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a complete input schema, an output schema, and a read-only annotation, the description needs only to convey the tool's purpose and when to use it. It does so effectively, including a rich example. There is no significant missing information for a tool of this moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters, so the baseline is 3. The description does not add much beyond the schema—it repeats the hex requirement via the example but does not elaborate on n_archives or how it affects the output. The schema already documents the parameters adequately, and the description adds minimal additional value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('returns') and clearly identifies the resource and scope ('cultural story of a colour'), describing exactly what the tool does. It also distinguishes this from siblings like colour_timeline or colour_dna by focusing on the narrative and historical journey. The concrete example reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear use cases ('image generation prompts, brand storytelling, and creative briefs') which indicate when to apply the tool. However, it does not explicitly state when not to use it or mention alternative tools for other colour-related analyses, so it falls short of a 5 but provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_strategyComplete Colour StrategyARead-onlyInspect
Single-call commercial colour strategy report. Combines archive grounding, verdict, brand fit, market risk, category cliche check, material behaviour, copy hooks, and usage rules. Input: hex + brand_context (category, positioning, audience, channels) + constraints (avoid, must_work_on) + markets + medium. Output: verdict, strategy summary, archive anchor, commercial signal, category cliche risk level, market reading per market, material notes, usage rules (primary use, secondary use, avoid, pair_with), copy hooks (one_liner, social, brand_rationale), and alternatives. Examples: luxury fragrance brand UK/France/Japan, heritage interior specification, premium ecommerce packaging, SaaS brand identity.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex colour to evaluate e.g. '#4A2A50' | |
| medium | No | Primary medium e.g. 'packaging', 'interior', 'digital' | general |
| markets | No | Target markets e.g. ['UK', 'France', 'Japan'] | |
| constraints | No | Constraints object | |
| brand_context | No | Brand context object |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already disclosing the non-destructive nature, the description adds meaningful context about what the tool produces: a report with verdict, strategy summary, archive anchor, market readings, usage rules, and copy hooks. This goes beyond the annotation by explaining the actual deliverable, though it doesn't detail any internal processes or edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but well-structured, opening with a clear one-line purpose then organizing inputs, outputs, and examples. It is somewhat long due to the many output fields listed, but every sentence contributes meaningful information. The front-loading of 'Single-call commercial colour strategy report' is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers all essential aspects: it explains what the tool does, what inputs are needed, what outputs to expect, and provides representative use cases across industries. An output schema exists, so detailed return-value documentation is unnecessary. The description is sufficiently complete for an agent to decide when and how to invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents each parameter. The description's input summary mostly restates the schema structure (brand_context with categories, constraints with avoid/must_work_on), but it adds helpful examples like 'luxury fragrance brand UK/France/Japan' that clarify intended parameter usage. No additional syntax or relationship details are provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Single-call commercial colour strategy report'—a specific verb and noun combination that clearly defines the tool's purpose. It then distinguishes itself from sibling tools by enumerating the combined components ('archive grounding, verdict, brand fit, market risk...'), making it obvious this is the comprehensive strategy option rather than a single-purpose tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The descriptor 'Single-call' and the list of combined analyses clearly signal when to use this tool (when a complete strategy report is needed in one call) versus using individual sibling tools like colour_verdict or colour_hooks. It provides clear context and examples of suitable use cases, though it doesn't explicitly state 'use instead of X' or 'don't use when Y'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_timelineTrace a Colour Concept Through HistoryARead-onlyInspect
Given a concept or colour name, traces its documented appearances across cultures and centuries in chronological order. Returns a dated sequence of archive entries showing when and where the colour appeared, with primary sources. Use for historical research, provenance chains, and understanding why a colour carries the cultural weight it does. Example: 'indigo' traces from ancient Indian trade routes through Roman imports to Tudor sumptuary law to synthetic aniline displacement in 1897.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Number of timeline entries to return (default 10, max 20) | |
| concept | Yes | Colour name or concept to trace e.g. indigo, imperial purple, mourning black |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the readOnlyHint annotation by explaining that the output is a dated sequence of archive entries with primary sources, emphasizing chronological ordering and cultural/historical scope. It does not mention limitations like pagination or failure cases, but with the annotation and output schema, this is sufficient. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the tool's core function. Each sentence earns its place, including the illustrative example that clarifies the concept and shows the historical trace. It is appropriately sized without unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 params, 1 required), full schema coverage, existing output schema, and readOnlyHint annotation, the description is complete for an agent to select and invoke the tool correctly. It covers purpose, usage, return format, and an example, leaving no significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both parameters (concept and n) with 100% coverage. The description adds an example (indigo) that illustrates the concept parameter, but does not provide additional syntax or semantic details beyond the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: given a concept or colour name, it traces documented appearances chronologically across cultures and centuries, returning dated archive entries with primary sources. This specific verb+resource+scope distinguishes it from sibling tools like colour_story or archive_provenance, and includes a concrete example for the 'indigo' concept.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use for historical research, provenance chains, and understanding why a colour carries the cultural weight it does.' This provides clear context on when to use the tool, but does not explicitly list alternative tools or exclusions, which would merit a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_variantsGet Colour Variants and SiblingsARead-onlyInspect
For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings. Essential for designers exploring around a colour. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Named archive colour e.g. Bourton Honey |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses important behaviours: the result carries rendered palette downloads to show the customer, the agent must never present archive anchors as recommendations, and the agent should call palette_finalize if it chooses its own palette. This is rich, actionable behavioural guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: what is returned, when to use it, how to display results, and a critical warning plus follow-up action. Slightly long but justifiably dense with operational guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool with an output schema, the description is fully complete. It explains the purpose, the output's practical use, a key pitfall, and the correct downstream action when the agent makes its own palette selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the single 'name' parameter. The description reinforces that it must be a 'named archive colour,' which matches the schema example. It adds no major new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'For any named archive colour, return historical variants, lighter and darker versions with archive matches, and cultural siblings.' This clearly distinguishes the tool's purpose from many colour-related siblings and states exactly what it produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: 'Essential for designers exploring around a colour.' It also provides explicit handoff guidance to palette_finalize when the agent forms its own final palette. It does not name other alternatives or exclusions, but the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colour_verdictShould I Use This Colour?ARead-onlyInspect
Evaluate a hex colour for a specific use case, market, and medium. Returns a decisive verdict: use_with_confidence, use_with_caution, or avoid. Includes strengths, risks, avoid-if scenarios, and better alternatives where needed. Backed by CIEDE2000 archive matching and Claude cultural intelligence. Examples: 'luxury hotel brand in Japan', 'ecommerce CTA button UK', 'heritage interior lime plaster wall', 'premium packaging Middle East'.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex colour to evaluate e.g. '#31559B' | |
| medium | No | Application medium e.g. 'digital', 'interior', 'print', 'fashion', 'packaging' | general |
| markets | No | Target markets e.g. ['UK', 'Japan', 'UAE'] | |
| audience | No | Optional: target audience e.g. 'high net worth travellers', 'young professionals' | |
| use_case | Yes | What the colour will be used for e.g. 'luxury hotel brand', 'heritage interior wall' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses valuable behavioral context beyond the readOnlyHint: it explains that the tool is 'Backed by CIEDE2000 archive matching and Claude cultural intelligence' and lists what the output includes ('strengths, risks, avoid-if scenarios, and better alternatives'). This adds a methodological understanding and sets expectations without contradicting the read-only annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the first sentence states the core purpose, followed by the output verdicts, content included, underlying method, and relevant examples. Every sentence contributes value without redundancy, and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, an output schema, and a readOnlyHint, the description is remarkably complete. It covers purpose, output values, output contents, methodology, and practical examples, leaving no major gaps. The presence of an output schema means return values need not be described in detail, and the description does not over-explain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents each parameter (hex, medium, markets, audience, use_case). The description's examples (e.g., 'luxury hotel brand in Japan') illustrate how parameters combine but do not add new semantic meaning beyond what the schema provides, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Evaluate a hex colour for a specific use case, market, and medium.' It specifies a decisive verb (Evaluate) and the resource (hex colour), and goes beyond by explicitly naming the three possible verdicts (use_with_confidence, use_with_caution, avoid), distinguishing it from sibling tools that assess other aspects like cultural risk or palettes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when to use the tool through its focus on evaluating a colour for a specific use case, market, and medium, and it provides illustrative examples. However, it does not explicitly mention when not to use it or compare it with alternatives like colour_cultural_risk or palette_verdict, so it lacks explicit exclusions but gives a clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_sessionFull Design Session — Concept to Complete PaletteARead-onlyInspect
One-call compound tool. Submit a concept, medium, audience, and constraints — receive a complete design package: historically grounded palette, cultural narrative, commercial paint matches, WCAG accessibility check, illuminant behaviour, and a ready-made image generation prompt. Replaces chaining query_conceptual + palette_from_concept + colour_story + match_paint_system + accessibility_check + get_colour_metrics. Use when an AI agent or user needs a complete, deployable colour direction in a single call. Not for iterative refinement — use individual tools for that. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| avoid | No | Archive names or colour terms to exclude e.g. ['neon', 'ScreenDigital'] | |
| medium | No | Application context e.g. 'interior', 'brand identity', 'fashion', 'digital', 'print' | general |
| concept | Yes | Cultural theme, mood, or brief e.g. 'Victorian mourning', 'Ottoman court', 'Scandinavian minimal' | |
| n_colours | No | Palette size (default 5, max 8) | |
| include_prompt | No | Include image generation prompt (default true) | |
| include_accessibility | No | Include WCAG contrast check (default true) | |
| include_paint_matches | No | Include commercial paint matches (default true) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals safety, and the description adds substantial behavioral context beyond that: it is a compound tool that returns rendered palettes with PNG/PDF/ASE/JSON/CSS downloads, it warns against presenting archive anchors as the recommended colours, and it instructs the agent to call palette_finalize for any independently chosen palette. This is rich, non-obvious behavioral disclosure that annotations alone would not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the compound-tool framing is front-loaded, the replacement chain is explicit, the usage boundary is clear, and the output/presentation warnings are operationally important. Despite its length, there is no filler; each clause carries routing, safety, or workflow information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a compound tool with 7 parameters and an output schema, the description is complete: it covers what the tool returns, when to use it, when not to, how it differs from siblings, and how to hand off to palette_finalize. The output schema exists, so the absence of a detailed return-value list is not a gap. The readOnlyHint annotation covers the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the schema already documents concept, medium, avoid, n_colours, and the include_* flags. The description maps some high-level inputs ('concept, medium, ... constraints') to the schema, but it also mentions 'audience,' which is not an actual input parameter. That minor mismatch prevents extra credit beyond the schema-backed baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource framing: 'One-call compound tool' that 'receive[s] a complete design package' from a concept. It explicitly names the sibling tools it replaces, distinguishing it from query_conceptual, palette_from_concept, colour_story, and others, so an agent can immediately tell this is the aggregator tool rather than any individual step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the exact use case ('when an AI agent or user needs a complete, deployable colour direction in a single call') and explicitly says what it is not for ('Not for iterative refinement — use individual tools for that'). It also gives follow-up guidance about calling palette_finalize when the agent chooses its own palette, which is actionable and specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ecommerce_copyEcommerce Product Copy from Archive ColourARead-onlyInspect
Generate complete ecommerce product copy for any colour. Input: hex + product type + tone + channel. Output: colour name, product title, short description, long description, SEO title, meta description, alt text, Instagram caption, and cross-sell suggestion. Every piece of copy is grounded in archive provenance -- never generic AI colour copy. The colour name comes from the nearest archive match, not invented. Examples: velvet cushion in Murex Luxury, ceramic vase in Woad Vat Blue, linen throw in Standlake Silt. Directly useful for Shopify, WooCommerce, and editorial product pages.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex colour of the product e.g. '#4A2A50' | |
| tone | No | Copy tone e.g. 'premium but not pompous', 'warm and accessible', 'heritage and serious' | premium but not pompous |
| channel | No | Sales channel e.g. 'shopify', 'etsy', 'instagram', 'editorial' | shopify |
| brand_name | No | Optional brand name to include in copy | |
| product_type | Yes | Product type e.g. 'velvet cushion', 'ceramic vase', 'linen throw', 'candle' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds meaningful behavioral context: copy is grounded in archive provenance, colour names come from the nearest archive match rather than being invented. This goes beyond the annotation by explaining the underlying data source and generation philosophy, providing useful transparency about the tool's behaviour.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense, covering what it does, inputs, outputs, unique value, examples, and use cases in a single paragraph. Every sentence adds value, and the most important action is stated first. It avoids unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides a thorough overview of the tool's purpose, inputs, outputs, examples, and applicability. Given the output schema exists and there are no complex side effects or destructive actions, the description is nearly complete. It could mention edge cases like unavailable archive matches, but that is not essential for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description reinforces parameter purposes through examples (velvet cushion, ceramic vase, linen throw) and mentions the input combination (hex + product type + tone + channel). It does not add significant new semantic detail beyond what the schema already documents, but the examples provide practical context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates complete ecommerce product copy from a hex colour, listing specific inputs and outputs. It distinguishes itself from sibling tools like ecommerce_namer by covering full copy (titles, descriptions, SEO, social) rather than just naming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use ('Directly useful for Shopify, WooCommerce, and editorial product pages'), implying suitable scenarios. However, it does not explicitly exclude alternatives or state when not to use this tool versus other colour/copy tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ecommerce_namerProduct Line Colour NamerARead-onlyInspect
Generate archive-grounded colour names for up to 40 product SKUs. Input: list of hex values, product category, brand name, naming style. Output: for each hex -- archive name, source citation, one-line product description, dE2000 match distance, match quality, and confidence score. Every name is archive-sourced, not invented. Each carries a primary source citation that can be defended to buyers, press, and brand teams. Use for paint ranges, candle collections, fashion lines, homeware, cosmetics. Style options: geographical, poetic, material, literary, mixed.
| Name | Required | Description | Default |
|---|---|---|---|
| hexes | Yes | List of hex values e.g. ['#D4A829', '#1A5C6E'] | |
| style | No | geographical | poetic | material | literary | mixed (default) | |
| max_dE | No | Max dE2000 distance to accept (default 25) | |
| brand_name | No | Brand name for context | |
| product_category | No | e.g. 'paint', 'candle', 'fashion', 'homeware' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, so safety is already declared. The description adds meaningful behavioral context: every name is 'archive-sourced, not invented' and carries a defensible citation. It also states the 40-SKU limit. These go beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action. It covers input, output, and use cases in a few sentences. The redundancy between 'Every name is archive-sourced, not invented' and the following citation sentence is minor but slightly bloats the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, an output schema, and read-only annotations, the description is complete: it states the input types, output format, use cases, and quality guarantees. It does not explain the behaviour of max_dE, but the schema describes it, so the gap is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and parameter descriptions are self-sufficient. The description repeats some parameter names (hexes, style, brand, category) and mentions style options already in the schema, but adds no new meaning beyond the schema. Baseline 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+constraint: 'Generate archive-grounded colour names for up to 40 product SKUs.' It clearly distinguishes from siblings like colour_namer by emphasizing 'archive-grounded' and the ecommerce context, and it enumerates the exact output fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names target use cases ('Use for paint ranges, candle collections, fashion lines, homeware, cosmetics'), giving clear context. However, it does not state when to avoid this tool or name alternatives such as colour_namer, so it lacks the when-not/exclusion guidance for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_image_coloursExtract Colours from ImageARead-onlyInspect
Extract dominant colours from a photograph using Colour Memory's proprietary k-means++ algorithm. Requires either a public image_url, or an image_id. If you only have a raw uploaded file with no public URL (e.g. a local file path or a ChatGPT file attachment without a usable download_url), call ingest_image first to get an image_id, then pass that image_id here. Returns hex values with proportional weights. Optionally matches colours against the archive with style_context for coherent cultural naming. Use this before image_brief when you have an uploaded photograph.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Number of colours to extract (3-12, default 6) | |
| image | No | Image file attachment from ChatGPT | |
| analyse | No | If true, match colours against archive and return names | |
| image_id | No | 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 | No | Public URL of image | |
| grey_card_hex | No | Hex from a grey/white card for white balance | |
| style_context | No | e.g. English cottage garden, Victorian, Japanese |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds behavioral context like optional archive matching (analyse, style_context) and the ingest_image dependency flow. However, it doesn't describe the return shape or what happens with conflicting inputs (both image_url and image_id given), and 'ephemeral' image_id isn't elaborated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is compact and front-loaded with the core purpose, then branches into usage guidance. No wasted words. Minor deduction for slight redundancy between the ingest_image explanation in prose and the image_id parameter description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 params, 0 required, an output schema, and readOnlyHint annotation, the description covers the key decision points: which input to use and when, plus the optional analysis features. Missing behavioral details like behavior on conflicting inputs or error conditions, but the output schema covers return values. Adequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented. The description adds some value by linking image_id to ingest_image and explaining when each input source applies, plus clarifying style_context's purpose (cultural naming coherence). But with full schema coverage, the description correctly leaves heavy lifting to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb+resource ('Extract dominant colours from a photograph') and differentiates method (proprietary k-means++). It distinguishes from siblings: mentions ingest_image for raw uploads and positions it 'before image_brief'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use ('Use this before image_brief when you have an uploaded photograph') and when-not-to ('If you only have a raw uploaded file... call ingest_image first'). Also clearly explains alternative path when no public URL exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
historical_colour_queryHistorical Colour EvidenceARead-onlyInspect
Ask a question about how historical colour authorities actually reasoned, and get evidence with provenance rather than a summary. Covers seven validated source builds -- Jennings (paint recipes, 1902), Bradley (rotating-disc apparatus, 1895), Vanderpoel (quantified object analyses, 1902), Beaumont (woven colour relationships), Hay (harmonic proportional powers, 1838), Guichard (measured spatial extents, 1880) and Hokusai (subject-conditioned colour application, 1848). Each answer names its source, its locator and what that kind of evidence CANNOT support. Use it for questions like 'how do I paint a leaf', 'what did Bradley's disc proportions measure', 'what's the difference between making a colour and applying it', or to check a claim someone has attributed to one of these authors. Crucially, these sources' numbers are NOT interchangeable: a recipe part, a disc share, an object percentage, a proportional power and a measured extent answer different questions, and the response says so explicitly rather than averaging them.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 'user' (default) returns an evidence-led answer packet with structured values retained. 'evidence' additionally returns the complete underlying records. | |
| query | Yes | Plain-English historical colour question. | |
| sources | No | Optional restriction to named sources. | |
| max_results | No | Upper bound on evidence items (default 12). | |
| high_confidence_only | No | Only high-confidence records. |
Output Schema
| Name | Required | Description |
|---|---|---|
| answer | No | 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 | No | |
| do_not_say | No | |
| incomparabilities | No | |
| premise_correction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the provenance format, names the exact source builds, and explicitly warns that source numbers are not interchangeable and that the response will say so rather than averaging them. This is rich behavioral context that helps the agent anticipate outputs and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although the description is long, every sentence earns its place: main purpose, source inventory, provenance and limitation behavior, example queries, and a critical caveat. It is front-loaded with the purpose and well-structured for a domain-specific query tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich output schema and annotations, the description covers all necessary selection and invocation context: what question to ask, which sources are involved, what the response will contain, and what it cannot do. No important aspect is missing for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters, so baseline is 3. The description adds value by enumerating the seven source names and their evidence types, which directly informs the 'sources' parameter and helps shape a good query. It does not comment on mode, max_results, or high_confidence_only, but the schema already describes those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb phrase ('Ask a question about how historical colour authorities actually reasoned') and a clear deliverable ('evidence with provenance rather than a summary'). It differentiates itself from the many sibling colour tools by naming seven specific source builds and the exact use cases, such as checking claims attributed to these authors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'Use it for questions like...' examples and explains what the evidence can and cannot support. It does not name alternative tools or give explicit when-not-to-use conditions, but the context is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
house_specifyMulti-Room House Colour Scheme — Provenance-Grouped Where DocumentedARead-onlyInspect
Generate a complete multi-room house colour scheme from a single archive. Where the retrieved evidence supports it, rooms are grouped by documented provenance (same object, same pattern colourway, same source citation, same designer, same period+institution); where it does not, they are grouped by perceptual similarity and the response says so -- grouping_basis reports which, and provenance_credit reports how many delivered colours are individually evidenced versus documented as a GROUP (often zero). Every colour is a real archive record either way. Each room gets a full colour card set (dominant/secondary/joinery/textile/accent roles) with paint matches, LRV, illuminant behaviour, and WCAG data. A documentary grouping states exactly which documented fact ties its colours together (e.g. 'documented on the same Fitzwilliam Museum record for the Artichoke hanging, accession T.1-1979') and its weighted grouping_strength score -- historical claims are templated only from fields the archive record actually states; room/surface assignment is disclosed as editorial, never as historical fact. Orientation (north/south/east/west) is recorded as room context and surfaced in each room's light_context; in the current model it does not alter palette selection. Example: concept='Arts and Crafts movement family house', archive='ArtsAndCrafts', rooms=[{label:'Entrance Hall', room_type:'hallway', orientation:'north'}, {label:'Living Room', room_type:'living', orientation:'south'}]. Use interior_specify instead for a single room without cross-room grouping. The response includes house_ref -- pass that (not the full response) to palette_pdf's house_ref input to render the flagship document; the full response is often 60-100KB+, too large to safely resend as another tool call's input. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| avoid | No | Terms to exclude from retrieval. | |
| rooms | Yes | One entry per room, e.g. [{label:'Entrance Hall', room_type:'hallway', orientation:'north'}] | |
| archive | Yes | Single archive to draw every room's colours from, e.g. 'ArtsAndCrafts'. Required -- invalid names return a clear error listing valid archives. | |
| concept | Yes | House-level concept or brief, e.g. 'Arts and Crafts movement family house' | |
| guidance_level | No | 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. | client |
| narrative_mode | No | Default 'evidence_only'. | evidence_only |
| colours_per_room | No | Default 5. | |
| shared_house_colours | No | Default 2. | |
| minimum_claim_strength | No | 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. | B |
| strict_semantic_colour | No | Default true -- excludes entries whose quoted colour language contradicts their stored hex. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, it discloses a great deal: grouping_basis and provenance_credit semantics, the provenance-vs-perceptual fallback, the fail-closed ARCHIVE_EVIDENCE_POOL_DEPLETED behavior, that orientation does not affect selection, and a warning that the response is often 60-100KB+ and too large to resend as another call's input. It also clarifies that historical claims are templated only from fields the record states and surface assignment is editorial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and grouping semantics are front-loaded, examples follow, then workflow routing. It is long and dense, and a few clauses (e.g. the light_context/orientation aside) restate schema content, but most sentences carry non-obvious operational guidance that earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, yet the description still flags key response fields and the documented error mode. Combined with the schema and annotations, nothing an agent needs to call this correctly and chain to palette_pdf/palette_finalize is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter, including the detailed minimum_claim_strength fail-closed/relax logic and the orientation caveat. The description's orientation note ('it does not alter palette selection') largely restates the schema rather than adding new meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Generate a complete multi-room house colour scheme from a single archive') and enumerates the deliverables (colour cards, paint matches, LRV, light_context, WCAG). It explicitly distinguishes itself from the sibling interior_specify ('single room without cross-room grouping'). An agent can separate it from all other palette/interior tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool and the exact condition that selects it ('Use interior_specify instead for a single room without cross-room grouping'), and prescribes follow-on routing: pass house_ref (not the response) to palette_pdf, and call palette_finalize once with the agent's own final colours. It also states what not to do ('Never present the archive anchors ... as the colours you are recommending').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_briefGenerate Creative Brief from ImageARead-onlyInspect
Compound endpoint: one image in, full creative brief out. Extracts dominant colours, matches them to the Colour Memory archive with coherent cultural naming, understands the scene, identifies the style period, suggests product directions by category (textiles, interiors, fashion), generates an image generation prompt, and returns a swatch URL. Use instead of chaining palette_extract + palette_analyse + agent_brief separately. Pass style_context for coherent archive matching e.g. 'English cottage garden', 'Victorian', 'MarsColour'. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Number of colours to extract (3-12, default 6) | |
| model | No | Image model: midjourney | flux | dalle | stable_diffusion (default midjourney) | |
| archive | No | Explicit archive name override e.g. 'MarsColour', 'Japan' | |
| image_url | No | Public URL of the image | |
| image_base64 | No | Base64-encoded image data | |
| product_type | No | Product focus e.g. 'tea towel', 'wallpaper', 'ceramic', 'textile' | |
| grey_card_hex | No | Hex value from a grey/white card for white balance correction | |
| style_context | No | Plain English style e.g. 'English cottage garden', 'Victorian', 'Japanese', 'MarsColour'. Restricts archive matching to coherent cultural set. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnyHint=true, and the description goes far beyond that: it reveals the compound nature of the endpoint, states that the result carries rendered palette downloads (PNG, PDF, ASE, JSON, CSS), and adds two hard behavioral rules — never present archive anchor colours as recommendations, and call palette_finalize when recommending a palette of your own. These are exactly the non-obvious traps an agent needs disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but each sentence carries functional content — purpose, scope, alternative routing, param guidance, output contents, two caveats. Slight redundancy exists between 'returns a swatch URL' and 'carries the rendered palette and its ... downloads', and the palette_finalize sentence is a bit wordy, but for a compound endpoint of this complexity the density is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and readOny annotations covering safety, the description covers the essentials: full capability list, alternative routing, key param guidance, output artifacts, and two critical behavioral rules. The remaining gaps are minor but real for a tool with 8 optional params and no required ones — no precedence rule for image_url vs image_base64 when both are supplied, and no error/failure conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds real meaning for style_contex ('pass style_contex for coherent archive matching e.g. English cottage garden, Victorian, MarsColour') and ties product_type to the cited catagories (textiles, interiors, fashion). For the remaining params (k, model, archive, image_url, grey_card_hex) it adds nothing beyond the schema, which limits it to a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise compound-endpoint statement ('one image in, full creative brief out') and enumerates the full pipeline: colour extraction, archive matching, scene understanding, style-period identification, product directions, prompt generation, and swatch URL. It explicitly names the siblings it replaces (palette_extract + palette_analyse + agent_brief), so an agent can distinguish it without inspecting other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative-and-condition: 'Use instead of chaining palette_extract + palette_analyse + agent_brief separately'. Also instructs when to pass style_contex for coherent archive matching and when to hand off to palette_finalize ('If you go on to choose a final palette OF YOUR OWN... call palette_finalize'), which routes the agent cleady.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_paletteExtract and Name Colours from an ImageARead-onlyInspect
Upload an image (base64 encoded) and extract its dominant colour palette, with each colour matched to its nearest named archive entry with full cultural provenance. Uses K-means++ extraction; sRGB pixels are read as D65 CIELAB for matching. Returns up to 5 dominant colours, each with archive name, cultural story, nearest RAL standard, and WCAG accessibility data. Works for product photography, interior photos, artwork, brand assets, and mood boards. The image is never stored — processed in memory only. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| archive | No | Optional: restrict archive matching to a specific archive | |
| n_colours | No | Number of dominant colours to extract (default 5, max 5) | |
| media_type | No | Image MIME type e.g. 'image/jpeg' | image/jpeg |
| image_base64 | Yes | Base64 encoded image (JPEG, PNG, WebP) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly complements the readOnlyHint annotation by stating the image 'is never stored — processed in memory only,' explaining the K-means++ extraction and D65 CIELAB matching, and disclosing that the result carries downloadable PNG, PDF, ASE, JSON and CSS assets. It also surfaces important behavioural cautions about not presenting archive anchors as recommendations. This goes well beyond the structured annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but every sentence contributes operational value: purpose, algorithm, output contents, supported use cases, privacy, and downstream workflow. It is somewhat long, but the length is justified by the tool's behavioural complexity and the important customer-facing instructions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich output schema and readOnlyHint annotation, the description is nearly complete on its own. It covers what the tool returns, the matching method, privacy behaviour, supported image domains, and the required handoff to palette_finalize when the agent composes its own palette. No critical calling information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents image_base64, archive, n_colours, and media_type adequately. The tool description adds useful output context but does not materially enrich parameter-level meaning beyond what the schema already provides. Baseline 3 is therefore appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts and names a dominant colour palette from an uploaded image, with a specific matching behaviour ('nearest named archive entry with full cultural provenance'). It does not, however, explicitly distinguish itself from sibling tools such as palette_extract or extract_image_colours, so it relies on the reader to infer the differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context by listing applicable inputs: 'product photography, interior photos, artwork, brand assets, and mood boards.' It also gives downstream workflow guidance (call palette_finalize when choosing your own final palette), but it does not explicitly state when not to use this tool or which sibling should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_personalPersonal Colour Analysis — Find Your ColoursARead-onlyInspect
Upload a portrait photo and receive a full personal colour analysis. Determines your seasonal type (Spring, Summer, Autumn, or Winter), colour depth (light, medium, or deep), and undertone (warm, cool, or neutral). Returns a curated palette of archive colours that genuinely suit you — each with full historical provenance and cultural context — plus colours to avoid. Uses Claude Vision for skin, hair, and eye analysis, then matches to the archive by CIEDE2000 perceptual distance. The photo is never stored. Example: a Deep Winter might wear Ottoman Carbon Ink while a True Spring suits Kogi Mango.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional: person's name for the report e.g. 'Sarah' | |
| image_url | No | URL of a portrait photo hosted online. Easier than base64 for MCP use. Either image_url or image_base64 required. | |
| media_type | No | Image MIME type e.g. 'image/jpeg' | image/jpeg |
| image_base64 | No | Base64 encoded portrait photo (JPEG or PNG). Face should be clearly visible in natural light. Either image_base64 or image_url required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already discloses the read-only nature. The description adds valuable behavioral context: the photo is never stored, the analysis uses Claude Vision, and matching uses CIEDE2000 perceptual distance. It does not cover failure modes or limitations, but the combination of annotation and description provides a solid behavioral profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then systematically expands into outputs, method, privacy, and an example. Each sentence earns its place without redundancy or bloat, making it well-structured and highly scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema (present, though not shown), so the description does not need to detail return values. The description covers the input type, analysis dimensions, output highlights, underlying technique, and privacy guarantee, making it complete for an agent to understand when and how to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all four parameters with descriptions, including the conditional requirement that either image_url or image_base64 is needed. The description does not add parameter-specific details beyond what the schema states, so the baseline of 3 applies given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear action and object: 'Upload a portrait photo and receive a full personal colour analysis.' It then enumerates specific outputs (seasonal type, colour depth, undertone) and distinctive features (archive colours with provenance, colours to avoid), which clearly distinguishes it from sibling tools like image_palette or palette_extract. The concrete example further anchors the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes the tool's context explicitly (personal colour analysis from a portrait photo) and includes an illustrative example, making it obvious when to use it. However, it does not name alternative tools or state when not to use it, though the uniqueness of 'personal' analysis makes the usage guidance sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_resonanceResonance IndexARead-onlyInspect
Colour Memory's proprietary semantic metric. Score how tightly the material origin of a colour aligns with its social consequence. 1.00 = material and consequence are indistinguishable (blood as prognosis, ash as finality). 0.80 = institution mediates the colour (paint as deterrence, flag as authority). 0.50 = symbolic or associative only. Input: list of colour entries with name, hex, archive, source, notes. Output: resonance score, material origin, social function, alignment reason, confidence. Use for investigative reports, forensic briefs, museum content, editorial PDFs. This is the metric that separates Colour Memory from palette generators.
| Name | Required | Description | Default |
|---|---|---|---|
| entries | Yes | List of colour entries to score for resonance | |
| score_basis | No | Scoring basis (default: material_origin_to_social_consequence) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description adds meaningful behavioral detail by defining the scoring scale (1.00, 0.80, 0.50) and listing output components (resonance score, material origin, social function, etc.). This goes beyond the annotation, though it doesn't disclose potential edge cases or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. It includes the scoring thresholds and use cases, which are valuable, though the final marketing-style sentence ('This is the metric...') is slightly extraneous. Overall, every sentence contributes functional context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema and annotations, so the description doesn't need to detail return values. It provides a complete picture of input, output, scoring logic, and use cases. Minor gap: no mention of how scores are calculated beyond ordinal thresholds, but that's acceptable given the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions for 'entries' and 'score_basis'. The description restates the input structure ('list of colour entries with name, hex, archive, source, notes'), which mostly mirrors the schema and adds minimal additional semantics. It does clarify the default for score_basis ('material_origin_to_social_consequence') but this is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states a specific action ('Score how tightly the material origin of a colour aligns with its social consequence') on a defined resource (colour entries). It differentiates from simple palette tools by calling it a proprietary semantic metric, distinguishing it from siblings like palette_generate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly lists intended use cases: 'investigative reports, forensic briefs, museum content, editorial PDFs.' It also implies when not to use by noting 'This is the metric that separates Colour Memory from palette generators,' steering agents away from basic colour generation tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_imageIngest Image for ProcessingARead-onlyInspect
Upload an image to Colour Memory for ephemeral processing. Returns image_id valid 5 minutes. Pass image_id to palette_extract or image_brief. Use for any image over 50 KB.
| Name | Required | Description | Default |
|---|---|---|---|
| image | No | MCP file reference {download_url, mime_type, file_name} | |
| source_url | No | HTTPS URL of the image | |
| image_base64 | No | Base64-encoded image data. Use this for locally uploaded files with no public URL. No size limit here (unlike palette_extract's image_base64). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the safety profile is already known. The description adds valuable context: ephemerality (5-minute expiry), the return of image_id, and downstream usage patterns. This is meaningful behavioral context beyond what annotations provide, though it doesn't address potential failure modes or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three efficient sentences with zero waste. Each sentence adds distinct value: what it does, what it returns and its validity, and when to use it. The size threshold heuristic is compact and actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has 3 optional params, nested objects, and an output schema — moderate complexity. The description covers the purpose, output, validity window, downstream consumers, and size guidance. It doesn't document edge cases (what happens on invalid image, error responses), but the ephemeral design is simple enough that this is acceptable. The 'unlike palette_extract' contrast adds helpful cross-tool context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, establishing baseline 3. The description adds value by clarifying the image_base64 parameter is for locally uploaded files with no public URL, and notes 'No size limit here (unlike palette_extract)' — a cross-tool contrast that helps disambiguate. The ephemeral processing context also clarifies why ingestion matters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb+resource ('Upload an image to Colour Memory') and clearly states the output (ephemeral image_id valid 5 minutes). It also names downstream consumers (palette_extract, image_brief), distinguishing this as an ingest step from the many sibling analysis tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on lifecycle ('valid 5 minutes') and references downstream tools by name, but doesn't explicitly state when NOT to use it or name specific alternatives. The 'use for any image over 50 KB' hint gives size-based guidance, though the alternative path for smaller images isn't stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interior_specifyInterior Colour Specification — Full Room BriefARead-onlyInspect
Generate a complete interior colour specification from a concept or brief. Input a room concept, type, and style — receive a professionally structured colour scheme with 60/30/10 surface assignments, archive colour names with full cultural provenance, Farrow and Ball and Little Greene paint matches, three-illuminant light behaviour (D65 daylight, F11 atrium, Illuminant A incandescent), WCAG accessibility for digital use, and a written cultural rationale explaining why each colour belongs in this room. Examples: 'bold maximalist living room', 'calm Scandi bedroom', 'Victorian study', 'coastal kitchen', 'gallery hallway'. Pass archive to lock the whole scheme to one named archive (e.g. 'ArtsAndCrafts', 'GeorgianPleasures') -- every returned colour will belong to it, or you get a clear error listing valid archive names rather than a silent unrestricted search. Use /interior-specification/pdf for a downloadable branded PDF version. Use house_specify instead for a multi-room scheme with cross-room provenance grouping. This is the tool that replaces a colour consultation. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| avoid | No | Colours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection. | |
| style | No | Style direction e.g. 'heritage', 'contemporary', 'maximalist', 'minimal', 'scandi', 'industrial', 'coastal' | heritage |
| archive | No | 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 | Yes | Room concept or brief e.g. 'bold maximalist living room' or 'calm Scandi bedroom' | |
| n_colours | No | Number of colours in scheme (default 5, max 7) | |
| role_plan | No | 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 | No | Room type e.g. 'living', 'bedroom', 'kitchen', 'study', 'bathroom', 'hallway', 'dining' | living |
| orientation | No | Room orientation e.g. 'north', 'south', 'east', 'west' — affects light advice |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Only annotation is readOnlyHint=true, so the description carries most of the burden and does so well: it discloses the archive-restriction error path ('clear error listing valid archive names rather than a silent unrestricted search'), warns against misrepresenting archive anchors as recommendations, and clarifies target-vs-answer semantics and what surface the result is presented on.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and input/output contract are front-loaded, and the routing/warning sentences each carry weight. It is dense and long with a few rhetorical lines ('This is the tool that replaces a colour consultation') that could be trimmed, but nothing is misleading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Eight parameters with a nested-ish role_plan, plus an output schema that already covers return values. Despite that richness the description is complete: it describes what comes back, the error behaviour, and the correct downstream workflow. An agent can call and chain it correctly without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond by explaining the archive locking behaviour and its failure mode, and framing role_plan as a spatial hierarchy decided before retrieval. It adds meaningful framing but largely complements rather than extends the already-complete schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (generate an interior colour specification) and enumerates the concrete deliverables: 60/30/10 surface assignments, provenance, paint matches, illuminant behaviour, WCAG. It explicitly demarcates itself from siblings by naming house_specify for multi-room work and the PDF endpoint for downloads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names when to use it (room-level briefs, examples given), the alternative (house_specify for multi-room cross-room provenance), the follow-on tool (palette_finalize once you choose your own colours), and the download path. Routing is explicit rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_capabilitiesAPI Capabilities InventoryARead-onlyInspect
Return a live inventory of all active endpoints and MCP tools. Use this first to discover what the API can do before making calls. Returns tool count, endpoint list, MCP-exposed tools, and usage notes. Deterministic -- no LLM cost.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds useful context by noting it is 'Deterministic -- no LLM cost.' This goes beyond the annotation by explaining cost and predictability. It also mentions returning 'usage notes,' which adds behavioral context. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: purpose, usage, and return details plus a cost note. It is front-loaded with the core action and is appropriately sized for a simple no-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 params, read-only, output schema exists), the description is complete. It covers what it returns (tool count, endpoint list, MCP tools, usage notes), when to use it, and its deterministic/cost behavior. No critical information appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so the baseline is 4 per the rubric. The description does not need to explain parameters, and the input schema is empty. The focus on return values is appropriate and is backed by the presence of an output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Return a live inventory of all active endpoints and MCP tools.' It clearly distinguishes itself from sibling tools by being a meta-level discovery tool, while siblings are domain-specific (color, accessibility, etc.).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises 'Use this first to discover what the API can do before making calls,' giving clear when-to-use guidance. It does not mention when not to use it, but the meta-tool nature makes that less critical. No alternatives are named, but none exist for this purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_analyseAnalyse Palette Against ArchiveARead-onlyInspect
Analyse a palette of hex colours against the Colour Memory archive. For each colour returns the nearest named archive entry with cultural name, source, claim_strength (A-E), do_not_say guardrails, and alternatives when confidence is low. Palette-level deduplication ensures no two colours map to the same archive entry. Use after extracting colours from a photo or generating a palette. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Max alternatives per colour when confidence is low (1-3, default 1) | |
| archive | No | Optional: restrict to one archive e.g. China, Pigment, ArtsAndCrafts | |
| colours | Yes | Array of colour objects |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although readOnlyHint is already set, the description adds substantial behavioral context: per-colour nearest-match results, palette-level deduplication, embedded rendered palette and downloadable formats, and a guardrail against presenting archive anchor colours as recommendations. This goes well beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence carries operational value: purpose, output contents, placement in workflow, result handling, and downstream tool routing. It is front-loaded with the core purpose and avoids filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description is complete: it covers when to use it, what it returns, what the result includes, how to behave with the result, and what to do next. The output schema covers return structure, so the description need not duplicate that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all parameters, so the baseline is 3. The description adds minimal new parameter semantics; it only reinforces that alternatives appear 'when confidence is low', which the schema already states for n. It does not materially deepen understanding of the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: 'Analyse a palette of hex colours against the Colour Memory archive.' It clarifies the tool's output ('nearest named archive entry... claim_strength... alternatives') and differentiates it clearly from sibling tools like palette_extract, palette_generate, and palette_finalize by naming the workflow context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use after extracting colours from a photo or generating a palette.' It also names the fallback alternative, palette_finalize, and specifies when to invoke it ('If you go on to choose a final palette OF YOUR OWN... call palette_finalize once'). This leaves little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_auditPalette Quality AuditARead-onlyInspect
Full palette quality audit. Scores on accessibility, cultural risk, tonal balance, colour diversity, and archive naming strength. Returns overall score 0-100, grade, and prioritised fix list. Enterprise quality gate -- use before shipping any palette. Deterministic, no LLM cost. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | Target market | global |
| medium | No | digital | print | both | digital |
| palette | Yes | Hex values to audit | |
| use_case | No | Use case context | brand identity |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds meaningful behavioral context: deterministic execution, no LLM cost, result carrying rendered palette and downloadable PNG/PDF/ASE/JSON/CSS, and the archive-anchor presentation caveat. No contradiction with read-only semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and every sentence earns its place: scope, outputs, quality-gate usage, bundled deliverables, the archive-anchor warning, and the palette_finalize follow-up. There is no filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and all parameters documented in the input schema, the description supplies the missing context: expected outputs, customer-facing downloads, deterministic behavior, and the post-audit workflow. An agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level detail beyond the schema and does not explain how market, medium, or use_case affect the audit, but the schema already documents each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact verb+resource: 'Full palette quality audit' with explicit audited dimensions (accessibility, cultural risk, tonal balance, colour diversity, archive naming strength) and concrete outputs (0-100 score, grade, prioritised fix list). This clearly distinguishes it from sibling tools like palette_analyse or palette_verdict, reinforced by 'Enterprise quality gate'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'use before shipping any palette.' It also provides a conditional follow-up instruction to call palette_finalize when the agent chooses its own final palette, plus a critical negative guard: never present archive anchors as recommended colours. This is strong when-to-use and when-not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_compareCompare Two PalettesARead-onlyInspect
Deep perceptual, cultural, and commercial comparison between two palettes. Returns timelessness scores, commercial strength, cultural depth, emotional difference, and a winner verdict for the stated use case. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| markets | No | Target markets | |
| use_case | No | Context for comparison e.g. luxury packaging | |
| palette_a | Yes | First palette hex values | |
| palette_b | Yes | Second palette hex values |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds substantial behavior beyond that: the result payload carries the rendered palette plus PNG/PDF/ASE/JSON/CSS downloads, the agent must surface those to the customer, and a hard guardrail forbids presenting archive anchor colours as recommendations. No contradiction with readOnlyHint exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carrying distinct content: what it does, what the result contains and how to present it, a one-line guardrail, and the follow-up routing. The core purpose is front-loaded in the first sentence and no sentence is wasted, though the density is moderately high.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and readOnlyHint in annotations, the description need not restate return structure or safety. It nonetheless covers the payload contents, the presentation duty, a correctness guardrail, and the follow-up workflow, leaving nothing an agent needs to call the tool and act on the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without parameter detail in the description. The description adds only marginal parameter meaning — 'for the stated use case' ties use_case to the verdict — while palette_a, palette_b, and markets semantics are already fully documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'deep perceptual, cultural, and commercial comparison between two palettes' — and enumerates concrete outputs (timelessness scores, commercial strength, cultural depth, emotional difference, winner verdict). This specificity pins the tool down and distinguishes it from adjacent siblings like colour_compare or palette_verdict, whose purpose is not anchored to this multi-dimensional head-to-head verdict.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context ('for the stated use case') and gives explicit conditional routing to a sibling: call palette_finalize if you choose a final palette of your own from the evidence. It stops short of stating when not to use this tool versus its direct comparison siblings (colour_compare, palette_verdict), so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_conceptGenerate Heritage Palette from Cultural ConceptARead-onlyInspect
Generate a historically grounded colour palette from a cultural concept or theme. Returns 4-6 coordinated archive colours with hex values, proportions, and provenance. Examples: 'Victorian mourning', 'Ottoman court', 'Japanese wabi-sabi', 'Scandinavian winter', 'West African kente', 'Renaissance Florence'. Every colour returned is sourced from the archive with documented history. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| avoid | No | Colours, pigments or topics to exclude e.g. ['arsenic green']. Applied before selection. | |
| concept | Yes | Cultural theme or historical period e.g. 'Victorian mourning' or 'Ottoman court' | |
| n_colours | No | Number of colours to return (default 5, max 8) | |
| include_neutrals | No | Include neutral/background colours |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the readOnlyHint annotation: all colours come from the archive with documented history, the result carries PNG/PDF/ASE/JSON/CSS downloads, and there is a clear warning about archive anchors. One transparency issue is that the description says 4-6 colours while the schema allows up to 8 via n_colours.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence serves a purpose: purpose, examples, provenance, output formats, customer display, and the palette_finalize handoff. It is front-loaded with the core action and only becomes instructional later, though it could be tightened without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema and a readOnly annotation, the description covers the essential workflow and handoff completely, including the critical warning about anchors and finalize routing. It is incomplete only in not reconciling the stated '4-6 colours' with the schema's n_colours max of 8 and in not distinguishing itself from closely named palette_heritage/palette_generate siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline applies: the description does not need to repeat parameter definitions. It adds useful example values for concept and clarifies output provenance, but it adds no real semantics for avoid, n_colours, or include_neutrals beyond the schema, and the '4-6' phrase slightly conflicts with n_colours.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Generate a historically grounded colour palette from a cultural concept or theme' and gives concrete examples that clarify scope. It also names palette_finalize as a separate downstream action, helping distinguish this evidence-generation tool from a final decision tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong workflow guidance: show the rendered downloads to the customer, never present derived archive anchors as final recommendations, and call palette_finalize once if the agent assembles its own final palette. It does not explicitly contrast palette_concept with sibling generators such as palette_generate or palette_heritage, so exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_exportExport Palette to Design FormatsARead-onlyInspect
Export a palette to CSS custom properties, Figma design tokens, Tailwind config, ASE hex list, or JSON. Each colour is automatically named from the archive. Embeds Colour Memory directly into design workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | Optional custom names | |
| format | No | css | figma | ase_hex | tailwind | json | |
| prefix | No | Token prefix e.g. cm, brand (default: cm) | |
| palette | Yes | Hex values to export |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true, the description adds value by disclosing automatic colour naming from the archive and positioning the tool for embedding into design workflows. It doesn't contradict annotations and provides behavioral context beyond what the annotation alone conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action and formats. No repetition, no filler, every phrase contributes to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and annotations, the description covers the essential purpose and key behaviors (export formats, auto-naming). It is sufficiently complete for an agent to invoke the tool correctly without additional detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already explains all four parameters. The description adds only slight nuance (automatic naming for names, and enumerating formats already in the schema), which is marginally beneficial but not substantial beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Export') and resource ('a palette'), enumerating exact output formats (CSS, Figma, Tailwind, ASE, JSON). This clearly distinguishes it from sibling tools like palette_generate or palette_extract, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys a clear use case: exporting palettes into design-integrated formats. While it doesn't explicitly name alternatives or exclusions, the context is strong enough for an agent to infer when to select this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_extractExtract Dominant Palette ColoursARead-onlyInspect
Extract dominant colours from an image using k-means++ clustering. Accepts a public image URL or base64-encoded image. Returns hex values with proportional weights sorted by luminance. Optionally runs palette_analyse on the results. Use this instead of image_palette when you need hex values with proportions for palette_analyse or palette_swatch. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Number of colours to extract (3-12, default 6) | |
| analyse | No | If true, also run palette_analyse on the extracted colours and return archive names | |
| archive | No | Explicit single archive name to restrict matching to e.g. 'MarsColour', 'Japan', 'Victorian'. | |
| image_id | No | Ephemeral image_id from ingest_image (preferred for images over 50 KB) | |
| image_url | No | Public URL of the image to extract colours from | |
| image_base64 | No | Base64-encoded image data (small images only, under 50 KB) | |
| grey_card_hex | No | Hex value sampled from a grey or white card in the image for white balance correction e.g. #C8C8C8 | |
| style_context | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though readOnlyHint is already true, the description adds substantial behavioral context beyond the annotation: k-means++ clustering, luminance-sorted output, the optional palette_analyse behavior, the rendered palette with PNG/PDF/ASE/JSON/CSS downloads, and a warning not to present archive anchors as recommended colours. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then covers inputs, output, sibling distinction, and downstream workflow rules in five dense sentences. Every sentence earns its place; there is no fluff, repetition, or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema and existing output schema, the description is more than complete: it explains accepted input formats, output characteristics, when to pick this tool over image_palette, how to use the result with palette_analyse, and how to finalize a recommended palette. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all 8 parameters in detail. The description adds only general input guidance ('Accepts a public image URL or base64-encoded image') and the optional analyse behavior, but no additional parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Extract dominant colours from an image'), names the algorithm (k-means++ clustering), and defines the output (hex values with proportional weights sorted by luminance). It also distinguishes itself from image_palette by specifying when palette_extract is the right choice, so an agent can tell it apart from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this instead of image_palette when you need hex values with proportions for palette_analyse or palette_swatch', giving a concrete selection rule. It also provides downstream usage guidance about when to call palette_finalize if the agent chooses its own final palette, which is valuable routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_finalizeFinalise a chosen paletteARead-onlyInspect
Package a palette YOU HAVE ALREADY CHOSEN into a professional, visible, downloadable deliverable. Call this ONCE, after you have decided the final colours for the customer -- it verifies and packages your decision and returns the palette image plus PNG, SVG, PDF, ASE, JSON and CSS. It does not search, select, replace or improve anything: the colours you send are the colours that come back, in your order. Send every final colour with its name, and mark a colour source-backed only if it really is a Colour Memory archive record -- anything unverified is presented as your recommendation, which is the honest description of it.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | No | The customer's request, in their words. | |
| notes | No | Short usage guidance, in your words. | |
| title | No | What you are calling this palette. | |
| colours | Yes | The final palette, in the order you want it shown. | |
| source_anchors | No | Archive records that informed the palette but are not in it. Give the record's name so it can be verified. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description aligns with that by describing verification and packaging rather than mutation. It adds meaningful behavioral detail: colors are returned unchanged and in order, source-backed status is verified and downgraded if unsupported, and unverified colors are honestly presented as recommendations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than minimal but each sentence carries useful operational guidance. Core purpose and usage are front-loaded, followed by exclusions and parameter semantics. Minor redundancy exists between 'you have already chosen' and 'does not search, select, replace or improve,' but it is not wasteful enough to lower further.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a finalization tool with a rich input schema and an output schema: it covers when to call, what it returns, what status values mean, ordering semantics, and honesty expectations. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by specifying that every final color should include a name, that colors are returned in the order sent, and that source-backed status must only be used for genuine archive records. These details go beyond the schema's brief field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it packages an already-chosen palette into a deliverable. It distinguishes itself from palette generation/search tools by explicitly saying it does not search, select, replace, or improve colors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to call this ONCE, after final colors have been decided, and states what it does not do. It does not name specific sibling tools as alternatives, but the when-not guidance is clear enough to route an agent away from selection or improvement tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_generateLock-and-Fill Palette from ArchiveARead-onlyInspect
Send a palette of up to 12 slots, locking some with hex values and leaving others empty. Empty slots are filled with the nearest CIEDE2000 archive match, interpolated from the locked anchors. Optional archive filter restricts fills to one archive. Returns full citation — name, archive, primary source, colour notes — for every filled slot. Example: lock a client's existing wall colour and fill a 5-colour scheme from Oxfordshire. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | 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 | Yes | List of palette slots. Each has index (0-11), optional hex, and locked flag. | |
| archive | No | Optional: restrict fills to one archive e.g. 'Oxfordshire', 'Shakespeare', 'Japan' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the behavioral burden and meets it: it discloses the interpolation method, citation output, bundled download artifacts, and the important caveat about not presenting source anchors as recommendations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every section earns its place: capability, example, output implications, and a critical usage warning. It is front-loaded with the core mechanism and ends with actionable guidance; a slight trim would make it tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with an output schema, the description is complete: it explains the slot limits, fill logic, archive filtering, return contents, downloadable artifacts, and the correct next step. An agent has everything needed to invoke and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value by explaining how locked anchors drive interpolation, what 'empty' slots mean, and that the result includes rendered downloads. This goes beyond restating parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation — lock hex values in a palette and fill empty slots from the archive via CIEDE2000 interpolation — which precisely distinguishes it from siblings like palette_finalize and palette_specify. The title reinforces this with 'Lock-and-Fill Palette from Archive'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to follow up with palette_finalize, instructs not to present derived archive anchors as recommendations, and notes that large colour collections should use archive_search instead. This gives concrete selection and sequencing guidance beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_gradientArchive Gradient — Lab-Interpolated Colour JourneyARead-onlyInspect
Generate a perceptually smooth gradient between 2-5 archive anchor colours. Each interpolated stop snaps to the nearest real archive colour by CIEDE2000. Anchor stops are kept true to their source. Choose linear (physically accurate Lab interpolation) or chroma_preserved (LCh interpolation, short-arc hue, avoids desaturated midpoints). Returns stop array, CSS linear-gradient string, or SVG swatch bar. Use for design briefs, colour journey visualisations, and gradient systems. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | linear: straight Lab lerp (may have neutral midpoint). chroma_preserved: LCh short-arc, saturation maintained. | chroma_preserved |
| steps | No | Total stops including anchors (default 7, max 20) | |
| anchors | Yes | 2-5 hex values (#RRGGBB) or exact archive colour names | |
| archive | No | Restrict snapping to this archive name e.g. Victorian | |
| output_format | No | stops: array of colour objects. css: linear-gradient string. svg: swatch bar. | stops |
| snap_to_archive | No | Snap each stop to nearest archive colour (default true) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint annotation by explaining the snapping behavior (CIEDE2000 to nearest archive colour), anchor stop preservation, the difference between linear and chroma_preserved interpolation, and that the result already carries rendered palette plus PNG, PDF, ASE, JSON and CSS downloads. It also warns against presenting source anchors as recommendations, which is crucial behavioral guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but every sentence earns its place: core mechanism, interpolation choices, output forms, use cases, delivery behavior, and a critical customer-facing instruction. The most important facts are front-loaded, and the cautions are placed at the end where they are still actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the parameter schemas are fully described, and the tool has 6 parameters, this description is highly complete. It covers algorithm behavior, output formats, download carrying, and the exact follow-up action needed when an agent chooses its own palette. Nothing material is missing for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the interpolation paths beyond enum labels, mapping output_format to actual outputs ('stop array, CSS linear-gradient string, or SVG swatch bar'), and describing what 'snapping to archive colours' means for anchors and interpolated stops. This enriches the schema without replacing it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it generates a perceptually smooth, lab-interpolated gradient between 2-5 archive anchor colours, with each stop snapped to a real archive colour. This is far more than a restatement of the title and clearly distinguishes the tool's core function from siblings like palette_compare or palette_finalize.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: 'Use for design briefs, colour journey visualisations, and gradient systems.' It also gives a strong follow-up rule: if the agent chooses its own final palette, it must call palette_finalize with those exact colours. It does not explicitly name excluded alternatives, but the context and follow-up instruction are clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_heritageHeritage Palette EvolutionARead-onlyInspect
Given a legacy palette, generate an archive-grounded premium support system. For each existing colour: identifies its historical archive anchor, names it, and scores its provenance confidence. Detects palette gaps and fills them from the archive. Returns full palette with roles, confidence scores, CSS tokens, and production notes. Every addition has a named historical origin. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | Target market | |
| context | No | Brand context | |
| palette | Yes | Existing hex values | |
| brand_name | No | Brand name for CSS tokens | |
| n_additions | No | Archive colours to add (default 3) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description thoroughly discloses what the tool produces: full palette with roles, confidence scores, CSS tokens, production notes, and rendered downloads. It adds meaningful behavioral guardrails beyond the readOnlyHint annotation—'Never present the archive anchors a colour was derived from as the colours you are recommending'—and tells the agent to show the resulting downloads to the customer. No contradiction with the annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: the first sentence states the purpose, then subsequent sentences unpack outputs and usage guardrails without filler. Each sentence earns its place, and the long tail is justified by the tool's complexity and the need to prevent a specific presentational mistake.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only generation tool with an output schema, the description covers input context, output contents, downloadable assets, customer display expectations, and downstream tool routing. Edge cases such as unmatched archive entries are not described, but the provided detail is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some semantic context by tying 'existing colour' to the palette parameter and referencing archive additions, but it does not explain market, context, brand_name, or n_additions in detail. The schema already documents these adequately, so no further compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action—'Given a legacy palette, generate an archive-grounded premium support system'—and immediately lists concrete operations: identifying archive anchors, naming colours, scoring provenance confidence, and filling palette gaps. This clearly distinguishes it from sibling tools like palette_generate or palette_analyse by grounding the work in historical archive evidence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use context: apply it to a legacy palette when archive-grounded support is needed. It also provides explicit routing guidance for a downstream step—if the agent ends up choosing its own final palette, call palette_finalize once with those exact colours. It does not exhaustively compare against all palette_* siblings, but the included context is sufficient for correct orchestration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_iterateIterate and Refine a PaletteARead-onlyInspect
Refine an existing palette using natural language feedback. Submit your current palette and feedback such as more melancholic, too corporate add warmth, or better for Gen Z luxury. Returns a refined palette with archive grounding and change rationale. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| markets | No | Target markets | |
| palette | Yes | Current hex palette to refine | |
| feedback | Yes | Natural language refinement e.g. more melancholic | |
| use_case | No | Use case context e.g. luxury homewares | |
| direction | No | Alias for feedback — natural language direction e.g. more dangerous, more historical, warmer | |
| n_results | No | Number of variants to return (default 1) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint, but the description adds substantial behavioral detail: outputs include archive grounding, change rationale, rendered palette, and downloadable assets. It also discloses an important anti-pattern: never present archive anchors as recommended colors. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and stays relevant throughout. The examples of feedback and the explicit caveats about not presenting archive anchors and calling palette_finalize are valuable enough to justify the length. Slight redundancy between 'using natural language feedback' in sentence one and 'Submit ... feedback' in sentence two, but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with six parameters and an output schema, the description covers what an agent needs: it explains the inputs, the output format, the deliverables, and the downstream workflow. It also provides guardrails that prevent incorrect customer-facing behavior. The output schema handles detailed return structure, so no additional return documentation is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantic context for the two core parameters, palette and feedback, with concrete examples of acceptable feedback phrasing. It also clarifies that the result is a complete deliverable including downloads, which indirectly explains the value of n_results and use_case. The remaining parameters are adequately documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair, 'Refine an existing palette', which clearly distinguishes it from generating a new palette or finalizing one. It also explicitly names the follow-up tool, palette_finalize, reinforcing the tool's role in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states a clear use context: submit a current palette plus natural language feedback to get a refined palette, with concrete feedback examples. It provides strong routing guidance by instructing when to call palette_finalize instead of presenting intermediate results. It does not explicitly enumerate exclusion cases versus generate/specify tools, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_light_darkPalette Light and Dark Mode MapsARead-onlyInspect
Generate light-mode and dark-mode role maps from a palette. Analyses LRV, assigns background/surface/text/accent roles for each mode, checks body text contrast safety, and flags missing neutrals. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| palette | Yes | Array of hex values | |
| use_case | No | Use case context e.g. UI, dashboard, report | UI |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses what analysis is performed, what role categories are assigned, what safety checks occur, that rendered downloads are included, and adds an important warning about not presenting archive anchors as recommendations. These are meaningful behavioral constraints beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence earns its place: it states the action, the analysis, the output, a customer-facing instruction, and a workflow rule. It is front-loaded with the core purpose and remains readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the annotations mark this as read-only, the description covers the necessary usage context: inputs, processing, delivered outputs, show-to-customer behavior, and follow-up tool routing. Nothing critical is missing for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters well. The description adds general context about how the palette is used, but it does not add express parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Generate light-mode and dark-mode role maps from a palette') and details the analysis (LRV, role assignment, contrast safety, flagging missing neutrals). This clearly distinguishes it from sibling palette tools by its role-maping scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The first sentence gives clear context for when to use the tool: when a palette needs light/dark role maps. It also provides explicit follow-up guidance about calling palette_finalize if the agent selects its own final palette, though it does not enumerate exclusions or compare against sibling palette tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_pdfGenerate Palette PDFARead-onlyInspect
Generate a premium branded PDF specification sheet from a palette of archive entries. Returns a downloadable PDF with full-bleed colour panels, archive names, provenance notes, RAL nearest match, LRV, chroma, WCAG contrast data, and Colour Memory branding. Use this to create client deliverables, specification sheets, and print assets. Two supported entry sources: (1) the flat entries array from query_hex or palette_from_concept -- each item needs name, hex, archive_source, colour_notes, primary_source, zone; or (2) archive_report_brief's output -- pass report['presented_cards'] as entries, NOT report['colour_cards'] (the legacy field is kept only for backward compatibility and does not carry family-card presentation). presented_cards may mix three card shapes, all rendered as exactly one page each regardless of how many underlying records they represent: single_cultivar (a normal flat card), colour_family (card_type='colour_family', many near-identical records summarised as one card with member_count/supported_by/family_delta_e_max), and conservative-mode hero cards (a single_cultivar card carrying family_grouping_suppressed=true and also_supported_by, representing a larger natural family that was folded into one promoted cultivar instead of shown as a group). delivery controls how the PDF is returned: 'url' (default) gives a signed, time-limited R2 download link; 'base64' returns the PDF bytes inline in the response for callers that need the file directly rather than a link. Alternative input mode: pass sections instead of entries for a grouped, multi-section document (e.g. house_specify's rooms) instead of one page per flat colour card. Each section has a title, rationale, and its own entries. presentation.template picks the layout: 'sectioned_specification' (clean grid-per-section spec sheet) or 'colour_drenched_lookbook' (hero colour fills the page, swatches cover most of it, citations collected into a final appendix rather than shrunk onto every page). Third input mode: pass house (house_specify's full response object, unmodified) for the flagship document-plan pipeline -- a complete, editorial multi-archetype publication: a cover, a house_thesis argument page, a whole_house_progression chart, one room_hero + one implementation (practical specification) page per room, and a redesigned source_appendix, all sharing one design system. Takes priority over sections/entries when supplied.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Alternative to `entries`/`sections` -- pass house_specify's full response object unmodified (house_title, house_thesis, progression, shared_house_palette, rooms) to render the complete flagship document-plan publication instead of a flat or sectioned layout. PREFER `house_ref` instead when available -- a real house response is easily 60-100KB+, which can be rejected before it reaches this API; house_ref avoids sending it at all. | |
| query | No | Optional title for the palette e.g. Ottoman imperial luxury | |
| source | No | Optional source label e.g. brand, conceptual | archive |
| entries | No | 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. | |
| delivery | No | 'url' (default): signed, time-limited R2 download link. 'base64': PDF bytes returned inline as pdf_base64 for callers that need the file directly. | |
| sections | No | Alternative to `entries` -- one entry per document section, e.g. house_specify's rooms. Each: {title, subtitle?, rationale, grouping_basis?, hero_hex?, entries: [...colour cards...], application_notes?: [{surface, colour_name, instruction}]}. | |
| house_ref | No | Preferred alternative to `house` -- the house_ref string house_specify returns in its own response (valid for 30 minutes after that call, or per project_persistence for a durable/temporary project). Renders the identical flagship document without resending the (often large) house object over the wire. | |
| project_id | No | 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 | No | Used with `sections` or `house`. {template: 'sectioned_specification'|'colour_drenched_lookbook' (sections only), page_size?: 'A4-portrait'|'A4-landscape'|'16:9', minimum_colour_coverage?: number (default 0.55 for lookbook), source_display?: 'inline'|'appendix', max_body_words_per_page?: integer, min_body_font_pt?: number (default 10.5, rationale/application-note body text), 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 | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only provide readOnlyHint=true, but the description extensively discloses behavioral traits: delivery modes (url vs base64), precedence of the `house` parameter over sections/entries, how different card shapes are rendered (single_cultivar, colour_family, conservative-mode heroes), truncation with ellipsis for text overflow, and font-size floors. This exceeds the annotation by a wide margin and does not contradict the read-only hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very long and dense, covering many edge cases and modes. It is logically sequenced (purpose → entry sources → delivery → sections → presentation → house), but it is a wall of text that could be better formatted with bullets or shorter paragraphs. Some details are repeated in the schema (e.g., presented_cards), adding verbosity. It is adequate for the tool's complexity but not concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 optional parameters, multiple input modes, and a complex rendering pipeline, the description is exceptionally complete. It covers all input modes, the legacy-field warning, card-shape handling, delivery options, presentation templates, and font-size floors. Since an output schema exists, return values are adequately described, and no critical aspect of usage is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all 10 parameters have descriptions), so the baseline is 3. The tool description adds cross-parameter meaning not in the schema: the relationship between `house` and `sections`/`entries` (priority order), the distinction between `house` and `house_ref` (avoiding large payloads), and the caveat about `presented_cards` vs `colour_cards`. This elevates it beyond what each parameter description provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Generate a premium branded PDF specification sheet from a palette of archive entries,' which clearly states the verb ('generate') and the resource ('PDF specification sheet'). It enumerates the PDF's contents (colour panels, provenance notes, RAL match, LRV, etc.) and frames it for 'client deliverables, specification sheets, and print assets,' distinguishing it from sibling tools like palette_export or palette_swatch by emphasizing the branded spec-sheet purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool ('Use this to create client deliverables, specification sheets, and print assets') and provides rich guidance on input-mode selection: entries, sections, house, house_ref, and project_id. It also warns against using the legacy colour_cards field. However, it does not mention alternative sibling tools or explicitly state when not to use this tool, so it lacks the explicit exclusions needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_specifySpecify Colour Palette for a RoomARead-onlyInspect
Generate a complete interior specification from 2-8 hex values. Returns surface assignments, 60-30-10 proportions, lighting behaviour, and archive colour names. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| style | No | e.g. 'heritage', 'contemporary', 'minimal' | |
| colours | Yes | List of 2-8 hex values | |
| room_type | No | e.g. 'living', 'bedroom', 'kitchen', 'study' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds valuable behavioral context: the result already includes rendered palette and downloads, the agent should show those to the customer, must not present archive anchors as the recommended colours, and should call palette_finalize once if choosing its own palette. These are meaningful, non-obvious behaviors that guide invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: the primary function is front-loaded, followed by output contents, customer-facing instructions, and a critical workflow rule. Each sentence earns its place and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations declare read-only behaviour, the description is complete for a tool of this complexity. It explains what the tool returns, how to handle the results, the key anti-pattern to avoid, and the downstream palette_finalize step when needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all three parameters with descriptions, so the baseline is 3. The description reinforces the 2-8 hex value constraint and mentions room/surface outputs, but it does not add much beyond the schema for style or room_type semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: generating a complete interior specification from 2-8 hex values. It further clarifies the tool's outputs (surface assignments, 60-30-10 proportions, lighting behaviour, archive colour names), which clearly distinguishes it from siblings like palette_finalize or palette_generate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool (given 2-8 hex values to produce an interior specification) and gives an explicit conditional handoff to palette_finalize if the agent chooses its own final palette. It does not explicitly name when not to use alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_strictStrict Archive-Filtered Palette from ConceptARead-onlyInspect
Like palette_concept but with archive filtering and relevance controls. Use allowed_archives to restrict results to specific cultural traditions e.g. ['Japan'] for Japanese only. Use min_relevance to filter weak concept matches. Fixes cross-archive drift when cultural specificity matters. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| concept | Yes | Cultural concept e.g. Japanese wabi-sabi | |
| n_colours | No | Number of colours (default 5) | |
| min_relevance | No | Minimum relevance score 0-1 (default 0.3) | |
| allowed_archives | No | Archive names to restrict results e.g. ['Japan', 'China'] | |
| include_neutrals | No | Include neutral tones (default true) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint already covering safety, the description adds meaningful behavior: the result carries rendered palette and downloadable PNG, PDF, ASE, JSON, and CSS assets that should be shown to the customer. It also discloses the important warning not to present archive anchors as recommended colors, and instructs a palette_finalize call if the agent selects its own colors. These go beyond what annotations or schema convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every sentence carries information: comparison, parameter usage, output contents, and agent workflow warnings. It is front-loaded with the key differentiator and ends with essential precautions. There is no filler, though it is denser than the shortest possible version.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full schema coverage, a read-only annotation, and an output schema, the description still adds the selection criterion, output expectations, and a concrete downstream action. It references the relevant sibling tool and covers edge behavior by warning against presenting archive anchors as recommended colors. Nothing an agent needs to invoke the tool correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real value by explaining allowed_archives as cultural traditions with the example ['Japan'] and by describing min_relevance as a filter for weak concept matches. Other parameters are already fully described in the schema, so no important gaps remain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it is 'Like palette_concept but with archive filtering and relevance controls,' giving a clear purpose and distinguishing it from the closest sibling. The title reinforces this as a strict, archive-filtered palette from a concept. An agent can identify what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit operational guidance: use allowed_archives to restrict to cultural traditions and min_relevance to filter weak matches, and it frames the tool as fixing cross-archive drift when cultural specificity matters. It also names the downstream step, palette_finalize, for when the agent chooses its own final palette. It does not spell out an explicit 'do not use when...' exclusion, but the contrast with palette_cecept is implied clearly enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_swatchGenerate Palette Swatch ImageARead-onlyInspect
Generate a clean, text-free PNG swatch image from hex colours. Returns a URL to the PNG. Use for Midjourney --sref style references or design mood boards. Supports photo-proportional weights from palette extraction, equal distribution, grid layout, a true smooth LCh-interpolated gradient (no hard colour edges, best for mood/atmosphere/colour-grade references rather than literal composition), and 13 fixed design ratios (6310, 7020, triptych, quad, filmstrip, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | Output height in pixels (default 630) | |
| w | No | Output width in pixels (default 1200) | |
| hexes | Yes | Comma-separated hex values e.g. #d4a829,#1a5c6e,#0a0a0b | |
| layout | No | 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 | No | Comma-separated proportional weights from k-means extraction. Used only when layout=photo. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true annotation, the description aligns (generating an image is non-mutating). It adds valuable behavioral detail: the output is text-free, gradient uses true smooth LCh interpolation with no hard edges, and the photo layout relies on proportional weights from palette extraction. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: purpose first, then usage, then feature list. It is packed with information in a compact form, though the final sentence lists many layout types and parentheticals, making it slightly dense. Every sentence earns its place as it covers purpose, use, and key distinctions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, many layout options), the description covers the core functionality, use cases, and unique gradient behavior. It mentions the return of a URL and the photo-only weights. With an output schema present, not explaining return values is acceptable. It could mention default dimensions but schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the gradient layout's unique behavior ('true smooth perceptual blend with no hard edges, unlike every other layout here') and clarifying that weights are used only with 'layout=photo.' This enriches parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Generate a clean, text-free PNG swatch image from hex colours.' It clearly states the output (URL to PNG) and differentiates from sibling tools by emphasizing the swatch generation and layout features. This is more specific than generic palette tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: 'Use for Midjourney --sref style references or design mood boards.' It also provides context for the gradient layout, noting it is 'best for mood/atmosphere/colour-grade references rather than literal composition,' which implies when not to use it. It names no alternative tools directly but the use-case guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_translateTranslate Any Palette into a Named ArchiveARead-onlyInspect
Map any list of hex values into a target archive using CIEDE2000 nearest-neighbour matching. Each input hex is matched to the closest named colour in the chosen archive, with a delta-e relevance band (exact / close / approximate / loose) and full provenance. Use to translate a client's paint colours into Shakespeare language, map a brand palette into historical Japanese pigments, or find the nearest Oxfordshire equivalents to a French scheme. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| palette | Yes | List of hex values to translate e.g. ['#F5F0E8', '#8B6B3D'] | |
| max_delta_e | No | Max acceptable CIEDE2000 distance — above this is flagged out-of-threshold (default 40) | |
| target_archive | Yes | Archive to translate into e.g. 'Shakespeare', 'Japan', 'Oxfordshire' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true. The description adds substantial behavioral detail beyond this: nearest-neighbour matching with a delta-e relevance band (exact/close/approximate/loose), full provenance, and that the result already carries rendered palette plus PNG/PDF/ASE/JSON/CSS downloads. It also exposes a critical behavioral constraint about not presenting derived anchor colours as recommendations. This goes well beyond the annotation and materially changes how the agent should use the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: mechanism, use cases, output contents, guardrail, and downstream routing to palette_finalize. It is front-loaded with the core function and contains no filler or redundant restatements of the tool name. Despite its length, it is efficient and structured around decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only 3 parameters, a readOnly annotation, and an output schema, the description is complete. It covers purpose, concrete usage contexts, behavioral guardrails, return output contents, and the correct follow-up action when the agent personalizes the result. Nothing an agent needs to call this tool correctly or interpret its output is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 under the rubric. The description adds value by explaining the delta-e relevance bands, which directly relates the max_delta_e parameter to the qualitative classification of matches, and gives concrete examples for the target_archive parameter (Shakespeare, Japan, Oxfordshire). This is marginal but meaningful enrichment beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Map any list of hex values into a target archive using CIEDE2000 nearest-neighbour matching.' It clearly distinguishes this from sibling tools like palette_generate or archive_search by naming the exact mechanism and outlining concrete translation scenarios. An agent can immediately tell this is a palette translation tool, not a palette creation or archive exploration tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: translate client paint colours into Shakespeare language, map brand palettes into historical Japanese pigments, or find Oxfordshire equivalents to a French scheme. It also provides a clear exclusion ('Never present the archive anchors... as the colours you are recommending') and an alternative action ('call palette_finalize once with those exact colours') when the agent intends to choose its own final palette. This fully routes the agent between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palette_verdictIs This Palette Working?ARead-onlyInspect
Evaluate a palette of 2-8 hex values for a use case, market, and medium. Returns a verdict (strong / strong_with_adjustment / weak / avoid), a score 0-100, the role of each colour, the single biggest weakness, and a concrete suggestion for what to add to fix it. Each colour is matched to the nearest archive entry for cultural grounding. Examples: 'premium cushion collection UK ecommerce', 'hotel lobby interior', 'SaaS brand identity global digital'. The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | Optional: target market e.g. 'UK', 'Japan', 'global' | |
| medium | No | Application medium e.g. 'interior', 'digital', 'fashion', 'print' | general |
| palette | Yes | List of 2-8 hex values e.g. ['#31559B', '#E8D898', '#4A2A50'] | |
| use_case | Yes | What the palette will be used for e.g. 'luxury cushion collection', 'brand identity' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the readOnlyHint annotation: it explains the verdict schema, cultural grounding via archive matching, the embedded rendered palette with download formats, and the caution not to present archive anchors as recommendations. This gives the agent a clear picture of what the tool returns and how to behave.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries functional weight: core evaluation behavior, output contents, cultural grounding, rendering, download links, and the critical instruction to avoid presenting archive anchors. It is front-loaded with the verdict and returns. A small amount of redundancy exists, but it remains efficient for a tool with this much behavioral nuance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, a rich output schema, and a complex behavioral contract, the description is complete. It covers input constraints, output components, cultural grounding, downloadable assets, and the follow-up action (palette_finalize). An agent has enough context to invoke the tool correctly and interpret its result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by specifying the 2-8 hex value bound, providing realistic example values for use_case, market, and medium, and clarifying the relationship between palette, use case, and market. This enriches the schema definitions rather than merely repeating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: evaluate a palette of 2-8 hex values for a use case, market, and medium, and return a verdict with score, colour roles, weakness, and suggestion. It also names the distinct follow-up tool (palette_finalize), which helps separate this evaluation tool from a finalization tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes when to use the tool: when an existing palette needs evaluation against a use case, market, and medium. It also tells the agent to call palette_finalize when choosing its own final palette, which is useful routing. However, it does not explicitly name or exclude sibling alternatives like colour_verdict or palette_analyse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_deleteDelete a Durable ProjectADestructiveIdempotentInspect
Soft-delete a durable house project you own. Idempotent -- deleting an already-deleted, unknown, or not-owned project_id returns the same successful-shaped response either way, and never discloses which case occurred. Version rows are never physically erased. Once deleted, a project can no longer be resolved by project_id or house_ref.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project_id returned by house_specify for an authenticated (keyed) call. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: soft-delete semantics, idempotence across all edge cases, non-disclosure of which case occurred, explicit statement that version rows are never physically erased, and the post-delete resolution effects. These details are critical for an agent to trust and safely invoke the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no fluff, front-loaded with the core purpose, and every sentence adds meaningful behavioral detail. It is efficiently structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema and strong annotations, the description covers all essential behavioral context: ownership, idempotence, non-disclosure, physical row retention, and post-delete resolution. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for project_id, including its origin ('returned by house_specify for an authenticated (keyed) call'). The description adds context about ownership and house_ref effects, but does not need to elaborate on the parameter itself. Baseline 3 is appropriate given schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Soft-delete a durable house project you own,' clearly identifying the specific verb (soft-delete), resource (durable house project), and ownership constraint. It is immediately distinguishable from sibling tools like project_get, project_list, and project_versions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the tool applies to projects 'you own' and explains idempotent behavior for already-deleted, unknown, or not-owned IDs, setting expectations for when it can be safely invoked. It does not explicitly name alternatives, but the context is sufficient for a destructive single-resource operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_exportExport House Project as Editable DOCX or XLSXARead-onlyIdempotentInspect
Export the same house-flagship content palette_pdf renders as a genuinely editable Word document or Excel workbook -- for a client who needs to annotate the scheme, or a contractor building a materials/procurement schedule from it. Accepts exactly one of house, house_ref, or project_id (same resolution and ownership rules as palette_pdf: an authenticated project_id or house_ref requires its owner; an anonymous temporary house_ref works bearer-only). Never calls house_specify, never re-runs reasoning or re-matches archives -- it renders exactly what was already resolved and stored. DOCX mirrors the PDF flagship's structure (title page, house thesis, whole-house progression, one section per room, implementation details with the same historical/digital-estimate/commercial-candidate distinction, and a deduplicated source appendix) as real editable paragraphs and tables, never images. XLSX produces three sheets: Finishes Schedule (one row per room-surface-colour assignment), Evidence Register (one row per unique colour, the full citation/claim-strength/do_not_say trail), and Paint Procurement (one row per unique paint product, deduplicated for ordering). Every field left blank where the underlying stored data doesn't have it -- nothing is invented. delivery="url" (default) gives a signed R2 download link; delivery="base64" returns the file inline unless the encoded result is too large, in which case it fails closed with OUTPUT_TOO_LARGE_FOR_INLINE_DELIVERY and a repair instruction to use delivery="url" instead.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | house_specify's full response object, unmodified -- alternative to house_ref/project_id. PREFER house_ref or project_id when available. | |
| format | Yes | Which editable format to produce. | |
| delivery | No | '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. | url |
| house_ref | No | The house_ref string house_specify returns. For a durable (authenticated) project this also requires the same API key that created it. | |
| project_id | No | The project_id returned by house_specify for an authenticated (keyed) call. Requires the same API key that created the project. | |
| project_version | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and idempotentHint=true, and the description reinforces and enriches this by stating it 'renders exactly what was already resolved and stored' and never re-runs reasoning or re-matches archives. It also discloses the failure behavior for base64 delivery (fails closed with a repair instruction) and the 'nothing is invented' rule for blank fields, adding significant behavioral context well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the core action, use case, and constraints before detailing output structure. Every sentence carries substantive information, but the lengthy enumeration of DOCX and XLSX layouts could be trimmed or restructured for even faster scanning. Still, for a tool with this complexity, it is appropriately detailed and mostly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers identifier exclusivity and ownership rules, the exact content structure for both formats, delivery modes with fallback behavior, and the no-invention guarantee. An output schema exists, so the description appropriately avoids repeating return values. This is fully sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3, but the description adds critical semantics: 'Accepts exactly one of house, house_ref, or project_id' and explains ownership/resolution rules. It also clarifies the delivery enum's default and fallback behavior, and that project_version targets a specific immutable version. These details go beyond the schema descriptions, improving parameter understanding and correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Export the same house-flagship content palette_pdf renders as a genuinely editable Word document or Excel workbook', naming the specific verb, resource, and target formats. It distinguishes from sibling palette_pdf by explicitly targeting editable DOCX/XLSX rather than a PDF render, making the tool's unique purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear use cases ('for a client who needs to annotate the scheme, or a contractor building a materials/procurement schedule') and clarifies when it should not trigger re-reasoning ('Never calls house_specify, never re-runs reasoning or re-matches archives'). It also gives fallback guidance via the OUTPUT_TOO_LARGE_FOR_INLINE_DELIVERY error. However, it does not explicitly name alternative export tools for other scenarios, so it stops short of a fully explicit when/not-to-use matrix.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_getGet Durable Project (Summary Only)ARead-onlyInspect
Retrieve summary metadata for a durable house project you own -- title, project type, current version number, schema/archive revision, created/updated timestamps, and the content hash of the requested version. Requires an API key; the project must belong to the calling key. Does NOT return the full house specification (rooms, colours, sources) -- use house_ref with palette_pdf to render a document from a project, or project_versions to see its version history. An unknown, deleted, expired, or not-owned project_id all return the same generic not-found response, by design.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Specific version number to describe. Omit for the project's current version. | |
| project_id | Yes | The project_id returned by house_specify for an authenticated (keyed) call. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint, description adds meaningful behavioral context: requires API key, project ownership verification, and uniform generic not-found response for unknown/deleted/expired/not-owned IDs. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with main purpose, each sentence adds value: purpose, auth/ownership, exclusion, and error obfuscation. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description doesn't need to list return values; it covers auth, ownership, error behavior, and alternative tools. Complete for the tool's complexity and target use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3. The description adds minimal parameter insight beyond schema—only mentions 'requested version' which schema already explains. No additional semantics needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Retrieve summary metadata' identifies the operation and resource, lists fields, and explicitly distinguishes from siblings by stating what it does NOT return and pointing to house_ref/palette_pdf and project_versions for other use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states when to use (retrieve summary metadata) and explicitly excludes full specification rendering, directing to house_ref/palette_pdf and project_versions. Also mentions API key ownership requirement, giving clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_listList Your Durable ProjectsARead-onlyInspect
List durable house projects owned by the calling API key, most recently updated first. Anonymous (keyless) calls always return an empty list -- temporary anonymous projects are never listable, only resolvable directly by their house_ref. Requires an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max projects to return, default 50, capped at 200. | |
| cursor | No | Opaque pagination cursor -- pass the previous response's next_cursor to get the next page. | |
| project_type | No | Filter by project type, e.g. 'house'. Omit for all types. | |
| updated_since | No | ISO 8601 timestamp -- only return projects updated after this time. | |
| include_deleted | No | Include soft-deleted projects (still owner-scoped). Default false. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds meaningful behavioral details: anonymous calls return empty, durable vs temporary distinction, and the need for an API key. This goes well beyond annotations and helps the agent anticipate outcomes without making a call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the core purpose in the first sentence. Every subsequent sentence adds essential behavioral or auth context without repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a rich output schema and fully documented parameters, the description covers the key aspects: scope, ordering, anonymous behavior, and auth requirements. No critical gaps remain for selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters have rich descriptions in the schema (100% coverage), so the description adds no additional parameter-level meaning. The baseline of 3 applies since the schema does the heavy lifting and the description doesn't need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists durable house projects owned by the calling API key, with ordering by most recent update. It also distinguishes this from anonymous temporary projects, which are never listable, effectively differentiating it from sibling tools like project_get and project_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns that anonymous (keyless) calls return an empty list and that temporary anonymous projects are only resolvable directly by house_ref, implying the alternative tool. It also states that an API key is required, giving clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_versionsList a Project's Version HistoryARead-onlyInspect
List every stored version of a durable house project you own, oldest first, with each version's content hash, build/schema/archive revision, and creation time. Version 1 is always immutable and always present. Earlier versions remain renderable via palette_pdf's project_version input even after a newer version exists. Requires an API key and ownership.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project_id returned by house_specify for an authenticated (keyed) call. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true, and the description reinforces this by stating it lists versions. It adds behavioral details beyond annotations: the immutability of version 1, the guarantee of presence, the ordering, and the fact that earlier versions remain renderable. It also notes the API key and ownership requirement, which is useful context. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main function ('List every stored version...'), followed by important guarantees and links to other tools. Every sentence adds value, with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no nested objects) and has an output schema, so the description doesn't need to explain return structure. It covers ordering, immutability, cross-tool compatibility, and authentication requirements. This is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage: the only parameter (project_id) has a description explaining it comes from house_specify for an authenticated call. The tool description itself adds no additional parameter semantics, so it relies on the schema. Baseline 3 is appropriate because the schema fully documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every stored version of a house project, specifying the ordering (oldest first) and the exact fields returned (content hash, build/schema/archive revision, creation time). It uses a specific verb ('List') and resource ('version history'), and the scope ('house project you own') distinguishes it from sibling tools like project_get or project_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful context: version 1 is always present and immutable, and earlier versions remain renderable via palette_pdf's project_version input. This implies when to use this tool (to inspect version history before rendering) and mentions the alternative palette_pdf for rendering. However, it doesn't explicitly state when not to use this tool versus other listing tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_conceptualSearch Colours by Concept or CultureARead-onlyInspect
Ask a cultural, historical, or material colour question. Returns named archive colours with provenance and cultural context. Works for abstract queries like 'grief' (returns Ophelia Violet, Titan's Grief), 'toxic Victorian pigments' (returns Nightshade Poison Berry Purple, Victorian Arsenic Mirror Silver), or 'the sea at dusk' (returns Evening Sea, Thames Blue Dusk). Even a vague or personal-sounding query never comes back empty -- result_path in the response tells you honestly whether this was a 'direct' hit, a 'broadened' retry (relaxed match threshold), or a 'redirected' fallback (dropped an archive restriction or switched to full-corpus semantic search).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The colour concept or cultural question to search for | |
| archive | No | Optional: restrict to a named archive e.g. 'Japan', 'Pigment', 'OttomanEmpire' | |
| n_results | No | Number of results (default 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint annotation already covering safety, the description adds valuable behavioral context: it discloses that even vague queries never return empty, and explains the result_path field honestly indicates direct, broadened, or redirected match types. This goes beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: main purpose, return details, examples, and the honest fallback behavior. No repetition of schema, no fluff, well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, the description needn't explain return structure. It explains the crucial result_path behavior, gives rich examples, and covers the main edge case (vague queries). Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description enriches query semantics with specific examples and reveals that the archive parameter can be dropped in the 'redirected' fallback, giving additional meaning beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Ask'), a resource ('cultural, historical, or material colour question'), and what it returns ('named archive colours with provenance and cultural context'). Concrete examples like 'grief' and 'toxic Victorian pigments' distinguish it from hex-based siblings like query_hex.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use context through examples of abstract, cultural, and vague queries. It implies these are the intended use cases but does not explicitly name alternatives or state exclusions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_hexFind Named Colours by Hex CodeARead-onlyInspect
Find the closest named archive colours to a hex value using CIEDE2000 perceptual distance.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex value with or without # e.g. '#8B4513' | |
| archive | No | Optional: restrict to a named archive | |
| n_results | No | Number of results (default 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true, the safe read behavior is already disclosed. The description adds valuable behavioral context by mentioning the CIEDE2000 perceptual distance algorithm and 'closest', which implies ranked results. This goes beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the main action, input, and method without filler. Every word earns its place, making it highly concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description does not need to explain return values. The tool is simple (3 params, 1 required) and the description covers the core operation and algorithm. The reader understands what the tool does and how it behaves. Minor details like error handling are absent, but not essential for this read-only query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for all three parameters (hex, archive, n_results), with 100% coverage. The tool description only reinforces 'hex' and does not add detail about 'archive' or 'n_results', so it adds no significant meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Find'), the resource ('named archive colours'), the input ('hex value'), and the method ('CIEDE2000 perceptual distance'). This specific combination distinguishes it from sibling tools like colour_compare or colour_match_paint, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: when you have a hex value and need to map it to named archive colours. It does not explicitly mention alternatives or exclusions, but the purpose is specific enough that an agent can infer appropriate usage. No prerequisites are mentioned, but none are apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_colour_resultARead-onlyInspect
Show a finished colour result to the customer AS COLOUR. Call this last, once the palette, house scheme, brand system or audit you are going to hand over has been decided -- it presents what you already have and chooses nothing. Do not call it for a single contrast figure, a colour history question with no palette, or tool guidance. Send the story with it: one sentence on what the scheme IS, the design decision you made, and the one rule worth remembering. The colours cannot carry those on their own.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | palette, house, brand or audit. | |
| rooms | No | For a multi-room scheme: one short line per room, in your own words. What that room is doing with the palette. | |
| title | No | What this result is, in the customer's terms. | |
| bridge | No | 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 | No | ||
| colours | Yes | The colours you are handing over, in order. | |
| verdict | No | One sentence, shown under the colour. | |
| key_rule | No | The one rule worth remembering, short enough to repeat to a decorator. 'Boathouse Clay stays tiny. Never a wall.' | |
| design_move | No | 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 | No | 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 | No | 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 | No | Three to five short sources or references that shaped this. Orientation, not a bibliography. | |
| evidence_summary | No | ||
| evidence_boundary | No | What is source-backed and what is your interpretation. Say it plainly: 'Designed contemporary interpretation, not a measured historical paint specification.' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already supplied, the description goes beyond it by stating this tool 'presents what you already have and chooses nothing,' clarifying it is non-decisional presentation rather than a generative or mutating operation. It also reveals the behavioral expectation that narrative context must be included because 'the colours cannot carry those on their own.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but proportioned: four sentences carry purpose, usage timing, exclusions, and a mandatory narrative requirement. It is front-loaded with the core action, and no sentence is filler; even the closing metaphor explains why the story fields are required.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, the read-only annotation, and the absence of an output schema, the description covers what the agent needs to decide when to call it and what to include. It names the relevant domains, states the ordering rule, excludes the wrong use cases, and reinforces the story requirement. The remaining parameter detail is adequately handled by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (86%), so the schema already documents most parameters. The description adds value by mapping the required story to specific parameters: one sentence on what the scheme IS (story_thesis), the design decision (design_move), and the one rule worth remembering (key_rule). This is not just restating the schema; it tells the agent which narrative fields are essential at call time.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object: 'Show a finished colour result to the customer AS COLOUR.' It then clarifies this is the final presentation step for a decided palette, house scheme, brand system, or audit, and explicitly excludes single contrast figures, colour history questions without a palette, and tool guidance—so an agent can separate it from siblings like colour_compare, historical_colour_query, and tool_guide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-call guidance ('Call this last, once the palette... has been decided'), explains what the tool does not do ('presents what you already have and chooses nothing'), and lists what it is not for. It also tells the agent to send a story with three named components, which is concrete invocation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_briefForensic BriefARead-onlyInspect
Single-call forensic colour brief generator. Runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles (anchor/support/analogue/provocation/reject), auto-rejects stubs, generates editorial argument, act structure, pull quote, closing line, and image prompt via Claude. This replaces chaining coverage_gap + archive_report_brief + anachronism_guard + resonance_index + evidence_gap separately. Input: title, audience, themes, archives, period, tone. Output: complete deliverable package ready for PDF or editorial use. Tone options: forensic (default), editorial, clinical, narrative.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | forensic | editorial | clinical | narrative | |
| avoid | No | Themes to suppress | |
| title | No | Brief title e.g. 'The Colours of Pleasure' | |
| themes | Yes | Research themes | |
| archives | No | Archives to draw from | |
| audience | No | Target audience e.g. 'serious collector' | |
| n_colours | No | Number of colour cards (default 8) | |
| period_end | No | End year e.g. 1830 | |
| period_start | No | Start year e.g. 1714 | |
| target_period | No | Historical period e.g. 'Georgian England 1714-1830' | |
| strict_sources | No | Only include entries with named primary sources | |
| confidence_threshold | No | Min confidence 0-1 (default 0.6) | |
| minimum_claim_strength | No | Hard evidence-grade floor: A, B, C, D, or E. Never silently relaxed. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, so the description doesn't need to repeat that. It adds useful behavioral details beyond annotations: it 'runs coverage gap analysis, pulls best archive colours, checks for anachronisms, scores claim roles, auto-rejects stubs, generates... via Claude.' This discloses the computational pipeline and dependencies. It also notes tone options and the 'auto-rejects stubs' behavior. Not everything is fully detailed (e.g., what 'auto-rejects' entails), but it adds meaningful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with the purpose in the first sentence, followed by what it does, what it replaces, and input/output. It is a bit dense with many clauses, but every sentence adds value. It avoids fluff and maintains clear structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 parameters, pipeline of analyses, external Claude call), the description covers the key contextual points: what it does, what it replaces, input/output, tone options, and the fact that it is a single-call package. With an output schema present, it doesn't need to detail return values. It could mention edge cases or requirements for the 'auto-rejects stubs' behavior, but current level is adequate for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add significant new parameter semantics; it summarizes input as 'title, audience, themes, archives, period, tone,' which maps to existing schema fields but doesn't clarify the relationship between 'period' and the three period-related parameters (period_start, period_end, target_period). Tone options listed in the description duplicate schema values. Overall, no new insight beyond structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific and clear purpose: 'Single-call forensic colour brief generator.' It distinguishes itself from sibling tools by explicitly stating it replaces chaining several other tools (coverage_gap, archive_report_brief, anachronism_guard, resonance_index, evidence_gap). This makes the tool's unique role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit: 'This replaces chaining coverage_gap + archive_report_brief + anachronism_guard + resonance_index + evidence_gap separately.' This tells the agent exactly when to use this tool instead of alternatives. It also clarifies it is a single-call comprehensive generator, and lists input and output expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
style_matchStyle Match — Does This Go With That?ARead-onlyInspect
The colour question every stylist gets asked: does this bag go with this outfit? Submit your outfit items as hex values with labels (dress, bag, shoes, coat, belt, scarf, etc.) and receive a verdict on what works, what clashes, what is missing, and what to add. Every recommendation is backed by archive colour names and historical context — not generic colour theory, but documented cultural combinations. Also suggests one missing archive colour that would complete the look. Examples: 'I have a navy dress (#1C3A6E) and a tan bag (#C8A87A) — what shoes?' or 'Does this burgundy coat work with olive trousers?' The result already carries the rendered palette and its PNG, PDF, ASE, JSON and CSS downloads -- show them to the customer. Never present the archive anchors a colour was derived from as the colours you are recommending. If you go on to choose a final palette OF YOUR OWN from this evidence, call palette_finalize once with those exact colours so the customer can see and download what you actually recommended.
| Name | Required | Description | Default |
|---|---|---|---|
| ask | No | Optional: specific question e.g. 'what bag colour works?' or 'do the shoes work?' | |
| items | Yes | List of outfit items with label and hex colour | |
| occasion | No | Optional: occasion context e.g. 'daytime', 'evening', 'office', 'casual', 'wedding guest' | general |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that the result includes a rendered palette with PNG, PDF, ASE, JSON, and CSS downloads, and that recommendations are backed by historical context. It also calls out an important operational behavior: never present archive anchors as the recommended colours, and call palette_finalize if selecting a final palette.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than minimal, but nearly every sentence earns its place: it covers the core question, input format, output artifacts, a critical warning about archive anchors, and the downstream palette_finalize step. The opening hook is a bit florid but does not undermine clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with an output schema and readOnly annotation, the description is remarkably complete: it specifies required inputs, optional refinements, example use cases, output contents, and a required follow-up action if the agent makes its own palette choice. No critical invocation detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds value with concrete examples of items, hex values, and phrasing for the 'ask' parameter. It also clarifies how occasion context can be supplied ('daytime', 'evening', 'office', 'wedding guest') without contradicting the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb and resource: submit outfit items as hex values with labels and receive a style verdict on what works, clashes, is missing, and should be added. It clearly differentiates itself from sibling palette/colour tools by focusing on outfit coordination backed by archive colour names and cultural combinations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context with concrete examples of questions ('does this bag go with this outfit?') and tells agents not to present derived archive anchors as recommendations. It also instructs when to call palette_finalize for a final recommended palette, though it does not explicitly name alternative tools or state when not to use style_match.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
system_statusColour Memory Diagnostic / Version StatusARead-onlyInspect
Zero-argument diagnostic call: returns exactly what build is live right now (build_sha, schema_version, schema_hash, archive_revision, tool_count, generated_at, server_environment). Use this to confirm you're seeing the current deployed schema -- e.g. if a tool you expect (like house_specify) seems to be missing, call this first and compare schema_hash against another connection before assuming the server is wrong; a mismatch usually means one connection is holding a stale cached manifest, not a real deployment gap.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description reinforces this as a 'diagnostic' call. The description adds valuable transparency about what data is returned (enumerates all 7 fields) and the logical interpretation of that data (mismatch semantics). While it doesn't discuss rate limits or auth, the description meaningfully extends beyond the annotation for a benign zero-arg call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, well-structured and front-loaded with the core purpose before giving a practical use case. The second sentence is a bit long and runs into a single lengthy clause, but it earns its place by conveying a real-world diagnostic workflow. Slightly verbose relative to the simplest possible version, but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is an output schema available, the return-value enumeration is somewhat redundant with structured data, but the tool description still adds a complete diagnostic narrative. The tool is simple (zero args, benign), so the description is arguably complete. Minor gap: doesn't mention that this is the safe/cheap way to introspect the environment beyond schema staleness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so schema coverage is 100% with nothing to document. The description does not need to add parameter meaning since there are no parameters; however, it compensates by explaining the semantic meaning of the returned fields (schema_hash comparison workflow), which functions as the equivalent value-add here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Zero-argument diagnostic call' returning exactly the listed fields (build_sha, schema_version, etc.). The purpose is specific and unambiguous, and it distinguishes itself from sibling tools by being the one diagnostic/version-status function among a large set of domain tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call it ('confirm you're seeing the current deployed schema', 'if a tool you expect like house_specify seems to be missing, call this first'), provides a concrete workflow (compare schema_hash against another connection), and explains the diagnostic interpretation (mismatch = stale cached manifest, not deployment gap).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_guideTool Routing GuideARead-onlyInspect
Deterministic tool-routing lookup -- not an LLM call, always instant, never consumes archive or LLM credit. Give it a goal in plain words (e.g. 'I have a brand colour and want to check it against competitors', 'I want to paint a whole house', 'I have a photo and want the colours from it') and it returns exactly which tool to call first, what to call next, and which superficially-similar tools NOT to start with and why. Use this before guessing between similarly-named tools (e.g. palette_specify vs interior_specify vs house_specify, or colour_passport vs colour_dna).
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | Plain-English description of what you're trying to do. |
Output Schema
| Name | Required | Description |
|---|---|---|
| then | No | |
| reason | No | |
| start_with | No | |
| do_not_start_with | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description adds meaningful behavioral context: it's deterministic (not an LLM call), always instant, and never consumes archive or LLM credit. It also discloses the return behavior (returns which tool to call, what next, and what NOT to start with). This adds value well beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph, front-loaded with the core purpose and value proposition (deterministic, instant, no credit consumed). It packs substantial guidance efficiently, though it is slightly long near the end with the example goal enumeration and tool-name list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, deterministic routing tool with readOnlyHint annotation and an output schema, the description fully covers what the agent needs: what it does, when to invoke it (before guessing between similarly-named tools), the expected input format, and the nature of the output. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'goal' parameter, which is described as 'Plain-English description of what you're trying to do.' The tool description elaborates with concrete examples of valid goal phrasings, adding value beyond the bare schema. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this is a deterministic routing lookup that returns which tool to call first/next and which similar tools NOT to use. The verb+resource is specific ('give it a goal, returns exact routing'), and it explicitly distinguishes itself from sibling tools by naming them (palette_specify vs interior_specify vs house_specify).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('Use this before guessing between similarly-named tools') and provides concrete example goals ('I have a brand colour and want to check it against competitors'). It names the classifications of tools it disambiguates between, giving clear alternatives-defining context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_statesUI State Palette GeneratorARead-onlyInspect
Generate a complete WCAG-compliant UI state palette from a brand hex. Returns colours for: brand, hover, active, disabled, focus ring, success, warning, error, info, surface subtle, surface strong. All states computed for contrast against your background colour. Returns hex, contrast ratio, WCAG grade, and usage note for each state. Includes CSS custom properties ready to paste. Supports light and dark mode. Use before building any UI component system.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_hex | Yes | Brand colour hex e.g. '#D4A829' | |
| dark_mode | No | Generate for dark mode (default false) | |
| background_hex | No | Background hex (default #FFFFFF) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, but the description adds substantial behavioral context: it computes colors for contrast against the background, returns hex, contrast ratio, WCAG grade, and usage note per state, and includes CSS custom properties. This goes well beyond the annotation and fully discloses the tool's behavior and outputs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place. The description is front-loaded with the core purpose, then lists outputs, explains computation logic, and ends with usage guidance. It is compact yet information-dense, with no filler or redundant repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description is complete: it covers inputs (brand hex, background, dark mode), outputs (hex, contrast, WCAG grade, usage note, CSS variables), and usage context (before building UI component system). The presence of an output schema reduces the need to explain return structure, but the description still provides a useful overview.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining that 'all states computed for contrast against your background colour', clarifying the purpose of background_hex, and by stating 'Supports light and dark mode', which maps to dark_mode. It enriches the parameter semantics without over-explaining what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Generate a complete WCAG-compliant UI state palette') on a specific resource ('from a brand hex'), listing the exact outputs (brand, hover, active, disabled, etc.). This distinguishes it from sibling palette tools like palette_generate and colour_variants, which target broader or different palette generation tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context: 'Use before building any UI component system.' It also indicates support for light and dark mode, clarifying when the dark_mode parameter is relevant. However, it does not explicitly state when not to use this tool or name alternative tools, so it misses the full 'when-not/alternatives' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vanderpoel_pairingVanderpoel PairingARead-onlyInspect
Emily Noyes Vanderpoel's documented 'good' dyad/triad hue groupings (Color Problems, 1902, Plate XXXVI 'Good Dyads or Pairs' and Plate XXXVII 'Good Triads'), served from the build artefacts vanderpoel_dyads.json and vanderpoel_triads.json. Snaps an input hex to the nearest of Vanderpoel's eleven real hue-family labels, resolves that hex against the archive, and returns every documented dyad or triad the label belongs to -- each OTHER member carrying its own nearest real archive match (CIEDE2000), with hex_collision disclosed when the match is tied. Unlike hay_contrast, this carries NO proportional ratio -- only Vanderpoel's own categorical 'good' editorial judgement, printed verbatim on the plates. Returns groupings: null for a near-neutral input, where hue is not meaningfully defined, or when the nearest hue-family label is a member of no dyad or triad -- silence is the honest answer, not a forced match. Member names come from a transcriber's digitisation_alt_text (an accessibility description of the plate image), not verified printed captions; every response states this caveat explicitly (member_source_caveat), not just a code comment. The hue positions used to snap an input to a label are a modern matching convention, not a number Vanderpoel printed -- disclosed per response as label_placement_basis.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | Yes | Hex colour, e.g. '#CC1A14'. | |
| n_per_member | No | Archive candidates per partner member (1-5). Default 1, which returns a single archive_match object rather than a list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| reason | No | |
| covered | No | |
| groupings | No | 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 | No | |
| input_snapped_to | No | Vanderpoel hue-family label the input snapped to. |
| input_archive_match | No | Nearest real archive colour to the input itself, or null if nothing is near enough. |
| member_source_caveat | No | |
| label_placement_basis | No | States that the snap angles are a modern convention, not a number Vanderpoel printed. |
| degrees_from_nearest_named_hue | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint=true covering the non-destructive nature, the description adds substantial behavior: it discloses the transcription provenance caveat (member_source_caveat), the modern matching convention for label_placement_basis, tied-match disclosure via hex_collision, and the explicit null behavior instead of forced matches. These are exactly the kind of semantic and honesty-related behaviors an agent cannot infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but each clause earns its place given the tool's provenance, matching, nulling, and caveat requirements. It is front-loaded with the core operation and source before moving into caveats. A small amount of redundancy ('silence is the honest answer' restates the null behavior) keeps it from a perfect conciseness score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's source artefacts, algorithm, output shape (including archive_match and hex_collision), null semantics, transparency caveats, and differentiation from contrast tools. With full parameter coverage, an output schema, and a readOnly annotation, nothing necessary for correct invocation or interpretation is missing. The only minor gap is not naming additional sibling alternatives, but that is not required for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already explains hex and n_per_member, including the default's effect on the return shape. The description adds value by explaining how hex is interpreted: it is snapped to one of eleven hue-family labels, resolved against an archive, and nulled for near-neutral inputs. It does not duplicate the schema's parameter docs, but enriches the semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb-resource pair: it 'returns every documented dyad or triad' from Vanderpoel's plates for a hue label derived from an input hex. It further distinguishes itself from hay_contrast by stating it carries no proportional ratio, isolating its categorical editorial purpose. This is enough for an agent to select it over sibling harmony and contrast tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when the tool should and should not produce results: it returns null for near-neutral inputs, undefined hue, or unrepresented labels, and explicitly contrasts itself with hay_contrast on the absence of proportional ratios. It does not, however, provide an explicit use-this-when statement or enumerate alternatives beyond that single contrast tool, so it falls just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
why_connectedWhy ConnectedARead-onlyInspect
Are these two specific archive records connected -- and if so, exactly why? Traces the real path between them through Colour Memory's stored relationship graph (e.g. two Wada colours that share membership in the same published combination) and returns the actual path, not just a yes/no. States plainly when two records are NOT connected, and always states what a shared connection does not prove -- e.g. that two colours sharing a Wada combination were independently asserted as a pair, not just co-published in the same numbered plate. Get record_id values from archive_search or colour_card.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | First record id. | |
| b | Yes | Second record id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hops | No | |
| path | No | |
| connected | No | |
| explanation | No | |
| does_not_mean | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses important behavioral details: it returns the actual path rather than just a yes/no, explicitly states when records are NOT connected, and proactively explains what a shared connection does not prove. This gives an agent a realistic sense of the tool's output and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough yet focused, with every sentence contributing: it states core functionality, describes output behavior, covers negative cases, clarifies interpretive limits, and points to input sources. No content is redundant or extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential context needed to invoke the tool correctly: what input is expected, where to get that input, what the tool returns, how it handles negative cases, and what the result does and does not mean. With an output schema present and the readOnly annotation, nothing important is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter is described as a record id. The description adds some context by noting these are archive record ids and suggesting where to get them, but it does not add meaningful detail beyond what the schema already provides. This matches the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: determining whether two specific archive records are connected and explaining why, by tracing the actual path through the relationship graph. It emphasizes that the result is an explanation, not merely a boolean, which differentiates it from a simple lookup. This distinct purpose separates it from sibling tools like archive_search or colour_card.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when you have two specific record IDs and need to know if and why they are connected. It also directs the user to obtain record_id values from archive_search or colour_card, providing a practical entry point. It does not explicitly list alternative tools or when not to use it, but the intended usage is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
house_specify1 field changed- added
Input schema / properties / guidance_levelAdded value: +{ + "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.", + "enum": [ + "client", + "decorator" + ], + "type": "string" +}
- Changed
interior_specify1 field changed- added
Input schema / properties / role_planAdded value: +{ + "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).", + "items": { + "properties": { + "allow_contrast": { + "default": false, + "description": "Whether this role may contrast with the scheme rather than harmonise.", + "type": "boolean" + }, + "intent": { + "default": "", + "description": "What this role is for, in words.", + "type": "string" + }, + "proportion": { + "description": "ONLY when the plan genuinely specifies one. An ungrounded percentage reads as a measured area split that nobody computed.", + "type": "string" + }, + "role": { + "description": "The job this colour does in the room e.g. 'ground', 'joinery', 'accent'.", + "type": "string" + }, + "surfaces": { + "default": [], + "description": "Where it goes e.g. ['walls'], ['skirting', 'architrave'].", + "items": { + "type": "string" + }, + "type": "array" + }, + "target_hex": { + "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.", + "type": "string" + } + }, + "required": [ + "role" + ], + "type": "object" + }, + "type": "array" +}
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.169 npm1MIT
- AlicenseCqualityAmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs119 npm49 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.