Skip to main content
Glama

bind_taste_surface

Destructive

Persist a project's taste calibration for a surface, recording design notes, reference sites, and rule overrides, then apply them during audits for consistent feedback.

Instructions

Persist a project's surface calibration for a taste profile — the answers from get_taste_interview. A binding records: the surface string scoped rules match against (e.g. 'product-site'), URL hosts that identify the project in url-mode audits, per-rule severity overrides (block|warn|nit|off — 'off' silences a rule on this surface), an optional voice/tone note, per-dimension design_notes (typography, spacing, color, layout, motion, imagery, entrance, loading, navigation, aesthetic, libraries, special — the interview's design:* answers), and a first-class references array — the example sites the person pointed to. References are NOT lossy prose: each url is captured live and its PageTraits (scheme, luminance, animation/scroll motion, text density) are stored on the binding, then design_notes are consistency-checked against what the references ACTUALLY are. A 'dark, cinematic' color note against two references that both render light comes back as a consistency_warning to surface to the user. Upserts by project name (~/.raven/taste/.surfaces.json); on a re-bind, omitted references/design_notes/voice_note/overrides/hosts carry forward and are reported in carried_forward, while explicit empty values clear them. When the design_notes name an expensive technique (three.js/WebGL, GSAP scroll choreography, anime.js staggered motion, glassmorphism, a branded loader, lottie, kinetic display type…), the result carries build_hints — a concrete recipe + canonical public example sources per technique, so the builder sees the HOW at kickoff, BEFORE building; an expensive note is not license to drop it. After binding, audit_taste with project:'' or a bound url applies the calibration automatically: matching scoped rules run at full severity, non-matching ones are skipped, overrides re-tune the rest. ENFORCED: a bind whose RESULT has no calibration content (no design_notes/voice_note/references/overrides) is REFUSED — a brand-new surface bound bare (the fingerprint of a skipped kickoff interview) and a re-bind that explicitly clears every calibration field alike; a stored uncalibrated_ack carries forward on re-binds, so only a NEW clear-everything requires a fresh ack. Run get_taste_interview, ask the USER, and bind their answers; the uncalibrated_ack escape hatch exists only for a user who was interviewed and deliberately skipped every dimension.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
hostsNoURL hostnames that identify this project (e.g. ravenmcp.ai) — matched in url-mode audits, subdomains included.
profileYesTaste profile name.
projectYesProject identifier, e.g. 'raven-mcp', 'portfolio'.
surfaceYesWhat this surface IS, in scope-matchable words: 'monochrome portfolio', 'product-site', 'developer docs'. Scoped rules activate when their scope tokens overlap this string.
overridesNoPer-rule re-tuning for this surface (e.g. relax a voice rule to nit on a product site).
referencesNoFirst-class reference examples the person pointed to. Each url is captured live (traits stored on the binding), and design_notes are consistency-checked against them — contradictions come back as consistency_warnings.
voice_noteNoShort tone guidance for this surface (e.g. 'Product register: benefits may be stated plainly; still no hype verbs'). Echoed as voice_note in audit results.
design_notesNoPer-dimension design preferences from the interview's design:* questions — keys are short dimension names (typography, spacing, color, layout, motion, imagery, entrance, loading, navigation, aesthetic, libraries, special; trimmed + lowercased, must match ^[a-z][a-z0-9_-]{0,31}$ after normalization, no two keys may collide), values are the user's non-empty answers. Echoed as design_notes in every audit so generation is shaped by them, and treated as ACCEPTANCE CRITERIA a build must visibly satisfy.
uncalibrated_ackNoESCAPE HATCH — leave unset in the normal flow. Binding a BRAND-NEW surface with no calibration content (no design_notes/voice_note/references/overrides) is REFUSED, because that is the fingerprint of a skipped kickoff interview. Only if the user was genuinely interviewed and chose to skip every optional dimension, set this to a one-line note affirming that (e.g. 'user interviewed 2026-07-04, declined all dimension calibration'). It is recorded on the binding so the deliberate skip is auditable. Never set it to work around asking the user.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.2.9

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses a lot beyond the annotations: upsert semantics, carried-forward behavior for omitted fields and clearing for explicit empty values, live capture of references, consistency checks that produce consistency_warnings, build_hints for expensive techniques, and the enforced refusal when no calibration content results. Even with destructiveHint and idempotentHint=false in annotations, the description adds concrete failure modes and mutation semantics. The behavior is described in enough specificity that the agent can predict side effects before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is long and dense, but it is coherently organized around core purpose, then upsert semantics, then build hints, then enforcement/escape hatch. Almost every sentence adds a new behavioral fact, though a few clauses repeat details already present in the schema. It is not short, but it earns most of its length given the complexity of a 9-parameter, nested-object write operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description thoroughly covers what the result carries: consistency warnings, carried_forward fields, build_hints, refusal errors, and how audit_taste later uses the binding. It also covers edge cases like re-binding, uncalibrated_ack carry-forward, explicit empty clears, and consistency-checking against captured references. The most important pitfalls are all front of the agent: persistence location, refusal conditions, and post-bind effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema is fully covered, but the description still adds high-value parameter nuance beyond field names: that references are not prose but captured live and consistency-checked against design_notes, that overrides use 'off' to silence a rule, that design_notes keys are normalized and trimmed dimension names, and that uncalibrated_ack is an escape hatch with strict gatekeeping. It tells the agent how parameters combine and what result they inform. This goes well above the baseline 3 one would expect for 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and object — 'Persist a project's surface calibration for a taste profile' — and immediately ties the input to the outputs of get_taste_interview. It distinguishes the tool from siblings like audit_taste by explaining that this is the binding step, not the audit application step. It also enumerates exactly what is stored (surface, hosts, overrides, voice_note, design_notes, references), leaving no ambiguity about the tool's role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit workflow: 'Run get_taste_interview, ask the USER, and bind their answers.' It also names audit_taste as the later step that consumes the binding, and warns against using uncalibrated_ack as a workaround. The escape hatch is precisely scoped to users who were interviewed and deliberately skipped every dimension, which is strong when-versus-when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools