Skip to main content
Glama

CI npm version Node brandsystem-mcp MCP server npm downloads MCP Badge

Use your brand guidelines with AI

@brandsystem/mcp turns the brand material you already have into context AI agents can use. Give it a website, PDF guide, Figma library, local files, or a Brandcode Studio brand. It produces a portable .brand/ runtime with design tokens, voice rules, provenance, and compliance checks.

Local-first. No account required. The default Core profile exposes 12 tools covering the complete adopt → use → check loop.

Start here

Install it for your agent, then ask: “How do I use my brand guidelines with AI?”

# Codex
npx @brandsystem/mcp install --client codex --write

# Claude Code, Cursor, Windsurf, or Claude Desktop
npx @brandsystem/mcp install --client claude-code --write

# Cline
npx @brandsystem/mcp install --client cline --write

install is a dry run unless you pass --write. Replace claude-code with cline, cursor, windsurf, or claude-desktop as needed. JSON-file targets preserve existing settings; Cline and Codex setup delegate to their official MCP commands so their current schemas remain authoritative. Agents can follow the compact installation guide without reading this entire README.

Already configured? Tell your agent:

Use my existing brand guidelines with AI. Start from this website/PDF/Figma library and show me what needs human confirmation.

Related MCP server: @forgespace/branding-mcp

What It Solves

AI tools default to category-average output because they have no brand context. Brand guidelines live in PDFs, Figma files, and people's heads — none of which AI tools can read at the moment of creation. The dominant failure mode isn't "broken output"; it's "correct but generic" — output that passes mechanical checks but reads like a competent generalist could have made it.

This MCP server is the authoring half of the "Two MCPs, One Brand" model. It extracts brand identity from live sources, compiles it into a .brand/ directory with structured governance (anti-patterns, proof-point status, voice rules, application rules) plus DTCG tokens, brand-runtime.json, and interaction-policy.json. That directory is the portable brand runtime — the artifact that travels with your brand from surface to surface.

  • Claude Design reads the .brand/ directory natively when pointed at a governed repo

  • Claude Code, Claude Desktop, Cursor, and Windsurf connect to this server directly over stdio and load brand-runtime.json at generation time

  • ChatGPT and other remote-first clients consume the same runtime as an uploaded artifact (brand-report.html / brand-runtime.json) or via a remote MCP connection — see Compatibility

  • @brandcode/mcp (the hosted Use MCP) serves the same runtime over HTTP for teams that want authenticated live reads at mcp.brandcode.studio/{slug}

With brand-runtime.json loaded, agent prompts collapse from 200-400 tokens of inline brand context to just the delta. First output is on-brand. No review bottleneck.


Quick Start

1. Add to your MCP config

Copy this into .mcp.json (Claude Code), .cursor/mcp.json (Cursor), or Windsurf MCP settings. Codex users can run npx @brandsystem/mcp install --client codex --write instead:

{
  "mcpServers": {
    "brandsystem": {
      "command": "npx",
      "args": ["-y", "@brandsystem/mcp"]
    }
  }
}

For project-level configs committed to a repository, pin a version ("@brandsystem/mcp@<version>") so collaborators never auto-run an unreviewed release; npx @brandsystem/mcp install writes a pinned spec for you.

2. Create your brand system

Tell your AI tool:

Run brand_start with client_name="Acme Corp", website_url="https://acme.com", and mode="auto"

That single command extracts colors, fonts, and logo from the website, escalates to rendered or deeper multi-page extraction when the cheap pass is weak, compiles DTCG tokens, generates design-synthesis.json + DESIGN.md, and generates a portable HTML brand report -- all in under 60 seconds.

3. What you get

.brand/
  brand.config.yaml          ← brand name, source URLs, session state
  core-identity.yaml         ← colors (with roles), fonts, logo specs
  tokens.json                ← DTCG design tokens
  brand-runtime.json         ← single-file brand context for any AI agent
  interaction-policy.json    ← anti-patterns, voice constraints, never-say words
  design-synthesis.json      ← spacing, radius, shadows, component signals
  DESIGN.md                  ← portable design brief (agent-readable)
  brand-report.html          ← visual report (paste into any AI chat)
  assets/logo/               ← extracted logo files (SVG/PNG)

Load brand-runtime.json into any sub-agent's context. First output is on-brand. No per-prompt boilerplate.

4. Use it

Run brand_write for a social-graphic about "Q3 product launch"

The AI now has your full brand context — colors, typography, logo, anti-patterns, voice rules — and generates on-brand content.

5. Go deeper (optional)

Session

What it adds

Command

1. Core Identity

Colors, fonts, logo, tokens

brand_start (done above)

2. Visual Identity

Composition, anti-patterns, illustration style

brand_deepen_identity

3. Messaging

Voice, tone, never-say words, brand story

brand_compile_messaging

4. Content Strategy

Personas, journey stages, themes

brand_build_personas

Each session enriches brand-runtime.json. Stop at any point — Session 1 alone is valuable.

6. Share with your team

Run brand_brandcode_connect to save on Brandcode Studio

Your brand persists on brandcode.studio. Teammates pull the same brand into their tools. One source of truth.


What It Does

Session 1: Core Identity -- Extract colors, fonts, and logo from a website or Figma file. Compile into DTCG tokens, a structured design synthesis layer, a portable DESIGN.md, and an HTML report.

Session 2: Visual Identity -- Define composition rules, pattern language, illustration style, and anti-patterns through a guided interview. Anti-patterns become enforceable compliance rules.

Session 3: Messaging -- Audit existing website voice, then define perspective, voice codex (tone, vocabulary, AI-ism detection), and brand story through a guided interview.

Session 4: Content Strategy -- Build buyer personas, journey stages, editorial themes, and a persona x stage messaging matrix.

Each session builds on the previous. Stop anywhere -- you get value immediately.

Two Ways To Use It

Local-first MCP flow -- Start from a website or Figma file, build a .brand/ directory locally, and use it immediately in chat or code tools with no account required.

Brandcode Studio-connected flow -- Connect an existing hosted brand from Brandcode Studio, pull the packaged brand into .brand/, and keep it synced over time.

Two MCPs, One Brand

The .brand runtime is the product. Two MCPs serve it:

@brandsystem/mcp — Build (this package). Author and compile the .brand runtime locally. Extract from websites, Figma, and PDFs. Compile governance (anti-patterns, proof-point status, voice rules, application rules) plus DTCG tokens, brand-runtime.json, and interaction-policy.json into a single .brand/ directory. Portable, versionable, ready to commit to any repo.

@brandcode/mcp — Use (hosted). Connect authorized MCP clients to the live Full Brand Runtime at https://mcp.brandcode.studio/{slug} with Brandcode bearer-key auth. Agents fetch the current runtime, search approved knowledge, check drafts, retrieve package-safe assets, leave append-only review feedback, and, with explicit capture scope, queue taste captures for human review — no per-tool guideline copy, no stale snapshots, no canonical mutation from the MCP. Tagline: "Your brand, live in every AI tool."

Same .brand runtime artifact. Two consumption paths. Build authors it; Use serves it.

Phase 0 for Brandcode MCP is locked in specs/brandcode-mcp-phase-0-lock.md as the original 8-tool read/append-only surface. The current hosted implementation adds capture_taste as a scoped contribute-tier tool: it requires explicit capture scope, queues a review candidate for human review, and never promotes canon.

Hosted availability: Brandcode MCP is pre-release and available to approved clients only — it is not yet publicly launched or registry-listed. Brand data on the hosted service is client-owned; feedback is append-only; agent history is scoped and redacted. Deletion and export requests are handled through your Brandcode Studio contact. Until public launch, use @brandsystem/mcp for local build/sync, and Live Mode (brand_brandcode_live) for connected reads that refresh from the hosted runtime within a short cache TTL.

Maintainers can verify a hosted deployment end-to-end with the smoke harness (npm run smoke:hosted-mcp with BRANDCODE_MCP_SMOKE_URL and scoped test keys). It verifies MCP initialize, tools/list, the locked hosted tool order, core hosted tool calls, and read-only insufficient-scope behavior. It never hardcodes keys; missing proof inputs are reported as blocked or skipped.

Claude Design integration

The .brand/ directory is engineered as a first-class input for Claude Design. Point Claude Design at a repo that contains .brand/ — governance YAML, narrative library, proof-point files, taste notes, DTCG tokens — and it grounds on the governed brand instead of improvising from uploaded assets. This is the Deploy path: author once with @brandsystem/mcp, then every Anthropic surface (Claude Design, Claude Code, Chat via compile packs) consumes the same runtime.


Tools Reference

Tool Profiles (0.10+)

By default the server registers the Core profile — 12 tools covering the complete loop: adopt → runtime/context → create → check → export, plus the Studio connector entry points and the clarify/promote path. This keeps first-tool selection sharp for agents.

The full profile registers the entire authoring system (all tools below). Opt in via env or args:

{
  "mcpServers": {
    "brandsystem": {
      "command": "npx",
      "args": ["-y", "@brandsystem/mcp", "--profile=full"]
    }
  }
}

Or set BRANDSYSTEM_PROFILE=full. Core tools: brand_start, brand_status, brand_runtime, brand_context, brand_check, brand_preflight, brand_report, brand_export, brand_clarify, brand_compile, brand_brandcode_auth, brand_brandcode_connect.

Entry Points

Tool

What it does

brand_start

Begin here. Creates a brand system from a website URL in under 60 seconds. Use mode='auto' for one-call setup with rendered and deep-site fallback on weak JS-rendered sites.

brand_status

Check progress, get next steps, or see a getting-started guide if no brand exists yet.

Session 1: Core Identity

Tool

What it does

brand_extract_web

Extract logo (SVG/PNG), colors, and fonts from any website URL.

brand_extract_visual

Screenshot the rendered page in headless Chrome and extract computed colors, fonts, and visual context from JS-heavy sites.

brand_extract_site

Discover representative pages, render them across desktop and mobile, capture screenshots, sample multiple components, and persist extraction-evidence.json.

brand_generate_designmd

Generate design-synthesis.json and DESIGN.md from extracted evidence or the current brand state.

brand_extract_figma

Extract from Figma design files (higher accuracy). Two-phase: plan then ingest.

brand_set_logo

Add/replace logo via SVG markup, URL, or data URI.

brand_compile

Generate DTCG design tokens, brand runtime contract, and interaction policy from extracted data.

brand_clarify

Resolve ambiguous brand values interactively (color roles, font confirmations).

brand_audit

Validate .brand/ directory for completeness and correctness.

brand_report

Generate portable HTML brand report. Upload to any AI chat as instant guidelines.

brand_init

Low-level directory scaffolding. Prefer brand_start instead.

Session 2: Visual Identity

Tool

What it does

brand_deepen_identity

Define composition rules, patterns, illustration style, and anti-patterns (6 interview sections).

brand_ingest_assets

Scan and catalog brand assets with MANIFEST.yaml metadata.

brand_preflight

Check HTML/CSS against brand rules -- catches off-brand colors, wrong fonts, anti-pattern violations.

Session 3: Messaging

Tool

What it does

brand_extract_messaging

Audit existing website voice -- fingerprint, vocabulary, claims, AI-isms, gaps.

brand_compile_messaging

Define perspective, voice codex (tone, vocabulary, AI-ism detection), and brand story.

Session 4: Content Strategy

Tool

What it does

brand_build_personas

Build buyer personas through a 7-question guided interview.

brand_build_journey

Define buyer journey stages (ships with 4 proven defaults).

brand_build_themes

Define editorial content themes balanced across awareness, engagement, and conversion.

brand_build_matrix

Generate messaging variants for every persona x journey stage combination.

Content Scoring

Tool

What it does

brand_audit_content

Score content against brand rules (0-100) across multiple dimensions.

brand_check_compliance

Quick pass/fail compliance gate before publishing.

brand_audit_drift

Detect systematic brand drift across multiple pieces of content.

Runtime + Utilities

Tool

What it does

brand_runtime

Read the compiled brand runtime contract (single-document brand context for AI agents).

brand_context

Select a task-scoped slice of the runtime deterministically (task_type → sections, audience → persona match, compact budget). Returns matched selectors and explicit no-match — never silent fallback.

brand_write

Load full brand context (visual + voice + strategy) for content generation.

brand_export

Generate portable brand files for Chat, Code, team sharing, or email.

brand_feedback

Report bugs, friction, or feature ideas to the brandsystem team.

Brandcode Studio Connector

Tool

What it does

brand_brandcode_connect

Connect a local .brand/ directory to a hosted Brandcode Studio brand and pull the current package.

brand_brandcode_sync

Pull updates from a previously connected hosted brand using sync-token-aware delta behavior.

brand_brandcode_status

Inspect the current Brandcode Studio connection, sync history, and local package summary.

brand_brandcode_live

Toggle connected read tools to refresh from the hosted runtime within a short cache TTL.

Tool Flow

Tools auto-chain -- each tool's response tells the LLM what to run next:

Session 1: brand_start → brand_extract_web or brand_extract_visual or brand_extract_site → brand_generate_designmd → brand_compile → brand_clarify → brand_report
Session 2: brand_deepen_identity (interview x 6) → brand_compile (generates VIM)
Session 3: brand_extract_messaging → brand_compile_messaging (interview x 3) → brand_write
Session 4: brand_build_personas → brand_build_journey → brand_build_themes → brand_build_matrix

brand_status can be called at any point. brand_preflight runs after any content generation.

CLI Commands

The npm package ships a CLI entrypoint for setup, diagnostics, and the hosted-brand connector:

npx @brandsystem/mcp doctor                      # local checkup: Node, profile, .brand/ state, credential permissions, client configs
npx @brandsystem/mcp install --client claude-code # write MCP config (dry-run by default; add --write to apply, existing config backed up)
npx @brandsystem/mcp install --client cline --write
npx @brandsystem/mcp install --client cursor --profile full
npx @brandsystem/mcp inspect                     # version, profile, tool list, .brand/ artifact inventory

npx @brandsystem/mcp brandcode connect https://brandcode.studio/start/brands/pendium
npx @brandsystem/mcp brandcode sync
npx @brandsystem/mcp brandcode status

install never overwrites other servers' entries: it deep-merges, backs up the existing file first, and refuses invalid JSON. It pins the spec to the version you ran (@brandsystem/mcp@<version>), including for Codex and Cline; pass --unpinned to write the floating @brandsystem/mcp instead. For protected hosted brands, add --share-token=TOKEN.

Trusted Studio origins. Credentials (session, admin, and share tokens) are only ever sent to a trusted Brandcode Studio origin — https://www.brandcode.studio and https://brandcode.studio by default — and only an approval declared by a package from a trusted origin can mark a brand production_approved. Other hosts can still be read for public packages (https only, SSRF-guarded, no credentials), but their approval claims are ignored. For local development or staging, add origins with BRANDCODE_STUDIO_TRUSTED_ORIGINS (comma-separated; https required, except http://localhost, http://127.0.0.1, or http://[::1] when listed explicitly).


The .brand/ Directory

After running the full pipeline, your .brand/ directory looks like this:

.brand/
  brand.config.yaml              # Client name, industry, source URLs, session state
  core-identity.yaml             # Colors, typography, logos with confidence scores
  extraction-evidence.json       # Multi-page rendered evidence bundle (optional)
  design-synthesis.json          # Structured design synthesis (radius, shadow, layout, personality)
  DESIGN.md                      # Portable agent-facing design brief
  tokens.json                    # DTCG design tokens (compiled output)
  brand-runtime.json             # Compiled runtime contract (single-doc brand context)
  interaction-policy.json        # Enforceable rules (anti-patterns, voice, claims)
  needs-clarification.yaml       # Items requiring human review
  brand-report.html              # Portable HTML brand report
  visual-identity.yaml           # Session 2: composition, patterns, anti-patterns
  visual-identity-manifest.md    # Session 2: compiled VIM document
  system-integration.md          # Session 2: CLAUDE.md / .cursorrules setup guide
  messaging.yaml                 # Session 3: perspective, voice, brand story
  messaging-audit.md             # Session 3: voice fingerprint analysis
  brand-story.md                 # Session 3: compiled brand narrative
  assets/
    logo/
      logo-wordmark.svg          # Extracted logo files
    illustrations/               # Brand illustrations with MANIFEST.yaml
    stickers/                    # Brand stickers with MANIFEST.yaml
    patterns/                    # Brand patterns with MANIFEST.yaml

File Details

File

Format

Purpose

brand.config.yaml

YAML

Project metadata: client name, industry, website URL, Figma file key, session number, schema version

core-identity.yaml

YAML

All extracted brand data: colors (with roles and confidence), typography (with families and weights), logo specs (with inline SVG and data URIs), spacing

extraction-evidence.json

JSON

Multi-page rendered evidence captured from representative pages and viewports. Contains screenshots, computed elements, and CSS custom properties used to ground synthesis

design-synthesis.json

JSON

Structured design interpretation of the brand. Includes radius, shadow, spacing, layout, component, motion, and personality signals derived from evidence and current identity

DESIGN.md

Markdown

Portable agent-facing design brief synthesized from the evidence bundle and current brand state

tokens.json

JSON

DTCG design tokens. Includes colors and typography plus synthesis-driven radius, shadow, layout, spacing, and motion groups when available

brand-runtime.json

JSON

Single-document brand contract for AI agents. Merges all 4 session YAMLs into flat, fast-access format. Only medium+ confidence values. Compiled by brand_compile, read by brand_runtime

interaction-policy.json

JSON

Enforceable rules engine. Visual anti-patterns, voice constraints (never-say, AI-ism patterns), and content claims policies. Used by preflight and scoring tools

needs-clarification.yaml

YAML

Prioritized list of items the system could not resolve confidently: missing primary color, low-confidence values, unassigned roles

brand-report.html

HTML

Self-contained brand report. Works offline, embeds all assets inline. Paste into any AI tool as brand guidelines

assets/logo/

SVG/PNG

Extracted logo files. SVGs include inline path data in core-identity.yaml for portability


Platform Setup

Codex

Use the package installer, which delegates to Codex's official MCP configuration command:

npx @brandsystem/mcp install --client codex --write

Start a new Codex task after installation. Codex CLI, the Codex app, and the IDE extension share the same MCP configuration.

Cline

Use the package installer, which delegates to Cline's official non-interactive MCP command:

npx @brandsystem/mcp install --client cline --write

Start a new Cline task, then ask: “How do I use my brand guidelines with AI?” Cline CLI and the IDE extension share the same global configuration at ~/.cline/data/settings/cline_mcp_settings.json.

Claude Code

Create .mcp.json in your project root:

{
  "mcpServers": {
    "brandsystem": {
      "command": "npx",
      "args": ["-y", "@brandsystem/mcp"]
    }
  }
}

Cursor

Create .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "brandsystem": {
      "command": "npx",
      "args": ["-y", "@brandsystem/mcp"]
    }
  }
}

Windsurf

Create ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "brandsystem": {
      "command": "npx",
      "args": ["-y", "@brandsystem/mcp"]
    }
  }
}

Claude Desktop

Open Settings > Developer > Edit Config (claude_desktop_config.json):

{
  "mcpServers": {
    "brandsystem": {
      "command": "npx",
      "args": ["-y", "@brandsystem/mcp"]
    }
  }
}

Compatibility at a glance

Three distinct ways to get your brand into an AI tool — don't conflate them:

Path

Clients

What it takes

Direct local MCP (stdio)

Claude Code, Claude Desktop, Cursor, Windsurf

The .mcp.json config above — the server runs on your machine

Remote hosted MCP

ChatGPT (developer mode) and other remote-MCP clients

An approved Brandcode Studio brand + bearer key (pre-release, approved clients only). ChatGPT connects to remote MCP servers, not local stdio processes; OpenAI documents a secure-tunnel option for private servers

Runtime artifact copy

Any AI tool

Upload brand-report.html or brand-runtime.json to the conversation — no MCP connection needed

Claude Chat (no MCP)

If you are using Claude Chat without MCP support:

  1. Run the pipeline in a code environment first to generate brand-report.html

  2. Upload the HTML file to your Claude Chat conversation

  3. Say: "Use this as my brand guidelines for everything we create"

The report HTML is self-contained and works as a standalone brand reference in any AI tool.


Troubleshooting

"No .brand/ directory found"

Every tool except brand_start, brand_init, and brand_feedback requires a .brand/ directory. Run brand_start first.

If you are using the hosted-brand flow instead of local extraction, brand_brandcode_connect also scaffolds .brand/ automatically on first connect.

Empty extraction (no colors or fonts found)

This usually means the website loads CSS dynamically via JavaScript. brand_extract_web only parses static CSS from <style> blocks and linked stylesheets. Solutions:

  • Run brand_extract_visual to analyze a single rendered page with headless Chrome and computed styles

  • Run brand_extract_site to sample representative pages across desktop and mobile and save extraction-evidence.json

  • Run brand_generate_designmd after extraction or manual edits to regenerate design-synthesis.json and DESIGN.md

  • Try a different page that uses more inline/linked CSS (e.g., the homepage, a blog post)

  • Use Figma extraction (brand_extract_figma) for higher accuracy

  • Set values manually using brand_clarify after extraction

brand_start in mode='auto' already tries this visual fallback when extraction quality is low and Chrome/Chromium is available, then generates design-synthesis.json and DESIGN.md from the best available evidence.

Figma extraction fails

brand_extract_figma doesn't connect to Figma directly. It works in two phases:

  1. Plan returns instructions for what data to fetch (variables, styles, logo)

  2. Ingest processes data you pass back from the Figma MCP tools

Make sure you have a separate Figma MCP server connected (e.g., @anthropics/figma-mcp) and pass the fetched data to brand_extract_figma in ingest mode.

Logo not detected

Web extraction looks for <img>, <svg>, and <link rel="icon"> elements. If your logo is rendered via JavaScript or embedded as a CSS background, use brand_set_logo to add it manually with SVG markup, a URL, or a data URI.

"Response size exceeds 5K target" (console warning)

This is a soft warning, not an error. Some tools (brand_write, brand_deepen_identity) return rich conversation guides that exceed 5K characters. The hard limit is 50K, which triggers truncation.

Server won't start

# Verify Node.js >= 22.13.0
node --version

# Test the server manually
npx @brandsystem/mcp

# Check for port conflicts (stdio transport shouldn't have any)
# The server uses stdio, not HTTP -- it reads from stdin and writes to stdout

Reporting feedback

Use brand_feedback to report bugs, friction, or ideas:

brand_feedback with category="bug", summary="Logo SVG has empty gradient stops",
  detail="The extractor found the SVG structure but <linearGradient> stops have no
  stop-color attributes. Logo renders as a black rectangle.",
  tool_name="brand_extract_web", severity="degrades_experience"

For agent telemetry, use category="agent_signal" with signal, tool_used, and signal_context. Brand context is auto-populated from .brand/config.


How It Works

Confidence Scoring

Every extracted value carries a confidence level:

Level

Meaning

Token Behavior

confirmed

Human-verified

Included in tokens

high

Strong signal (e.g., Figma variable, CSS custom property named --brand-primary)

Included in tokens

medium

Reasonable inference (e.g., most-frequent chromatic color in CSS)

Included in tokens

low

Weak signal (e.g., color appears once in a generic property)

Excluded from tokens, added to needs-clarification.yaml

Source Precedence

When the same brand element is found in multiple sources, the higher-precedence source wins:

figma > manual > web

A Figma-sourced primary color will replace a web-extracted one. A manually confirmed value overrides both automated sources. Within the same source, higher confidence wins.

Web Extraction

brand_extract_web fetches the target URL and:

  1. Parses all <style> blocks and up to 5 linked stylesheets

  2. Extracts color values from CSS properties and custom properties

  3. Infers color roles from property names (e.g., --primary, --brand-accent)

  4. Promotes the most-frequent chromatic color to "primary" if no explicit primary is found

  5. Extracts font families and ranks by frequency

  6. Finds logo candidates from <img>, <svg>, and <link rel="icon"> elements

  7. Downloads and embeds logos as inline SVG or base64 data URIs

Visual Extraction

brand_extract_visual launches headless Chrome against the target URL and:

  1. Captures a 2x DPR screenshot of the rendered page

  2. Extracts computed styles from semantic elements such as body, header, hero, links, cards, and buttons

  3. Reads CSS custom properties from :root

  4. Infers likely color roles from visual context (for example, button background → primary)

  5. Returns the screenshot as an MCP image block so the calling agent can do qualitative visual analysis

This is the fallback path for JS-rendered apps and page builders where static CSS parsing misses key brand signals.

Deep Site Extraction

brand_extract_site extends the rendered-path beyond the homepage:

  1. Discovers representative pages on the same domain

  2. Captures desktop and mobile screenshots for each selected page

  3. Samples multiple instances of buttons, cards, links, inputs, sections, and other components

  4. Persists the results to .brand/extraction-evidence.json

  5. Feeds that evidence into brand_generate_designmd / brand_compile to produce .brand/design-synthesis.json and .brand/DESIGN.md

  6. Merges additional colors and fonts back into core-identity.yaml when merge=true

Use this when the homepage is not enough to understand the brand system, or when you want richer evidence before token compilation.

Figma Extraction

brand_extract_figma works in two steps to bridge between the Figma MCP and brandsystem:

  1. Plan mode -- Returns specific instructions for what data to fetch from Figma (variables, text styles, logo components)

  2. Ingest mode -- Processes the collected Figma data, maps variable names to roles, and merges into core-identity.yaml at high confidence

DTCG Token Compilation

brand_compile transforms core-identity.yaml into Design Tokens Community Group format:

  • Colors become $type: "color" tokens keyed by role

  • Typography becomes grouped tokens with fontFamily, dimension (size), and fontWeight entries

  • Spacing becomes dimension tokens with scale values

  • Each token includes $extensions["com.brandsystem"] with source and confidence metadata

  • Only values with medium or higher confidence are included


The Bigger Picture

Four verbs stack — Build, Use, Evolve, Deploy. @brandsystem/mcp owns Build. The .brand runtime is what moves between them.

 Build                    Use                        Deploy
 ─────                    ───                        ──────
 @brandsystem/mcp   ────►  @brandcode/mcp     ────►   Every surface
 (this package)            (mcp.brandcode.studio)      Claude Design
                                                       Claude Code
 authors the ─────────►  .brand/ runtime  ─────────►  Cursor
 portable runtime           (portable artifact)        ChatGPT
                                                       NotebookLM
                           ▲                           Gemini
                           │                           ...any MCP client
                           │
                    Evolve ─── Brandcode Studio
                    (governance promotion,
                     taste compilation,
                     memory wall)

Build — this package. Extract identity. Compile governance. Produce a .brand/ directory.

Use — @brandcode/mcp hosted at mcp.brandcode.studio/{slug}. Authorized MCP clients fetch the live Full Brand Runtime by default.

Evolve — Brandcode Studio. Taste notes graduate from memory to formal governance. Anti-patterns accumulate. The runtime sharpens with every production cycle.

Deploy — the governed .brand repo travels with you. Point Claude Design at it. Compile packs for Claude Code, Chat, Gemini, NotebookLM. Every surface consumes the same runtime.

Progressive Depth

Each stage builds on the previous. Stop anywhere — you get value immediately.

Stage

What You Get

How

1. Free scan

Brand tokens + DESIGN.md + HTML report with platform setup guides

brand_start (auto) or brand_extract_web / brand_extract_visual / brand_extract_site → brand_generate_designmd → brand_compile → brand_report

2. MCP depth

Figma extraction, clarification, full audit

Session 1 with brand_extract_figma + brand_clarify

3. Visual identity

Composition rules, patterns, anti-patterns, VIM

Session 2: brand_deepen_identity → brand_compile

4. Core messaging

Voice profile, perspective, brand story

Session 3: brand_extract_messaging → brand_compile_messaging

5. Studio sync

Hosted package pull, sync history, shared distribution

brand_brandcode_connect → brand_brandcode_sync → brand_brandcode_live for Live Mode reads

6. Live Use MCP

Authorized agents hit mcp.brandcode.studio/{slug} for current runtime, knowledge search, draft checks, asset fetch

@brandcode/mcp connects once with bearer-key auth; reads stay fresh across agent sessions

7. Deploy to Claude Design

Claude Design grounds on the .brand/ directory natively — governance, narratives, proof points, taste notes all load without translation

Point Claude Design at a repo containing .brand/; output is on-brand from the first generation

Stages 1–4 are the standalone local MCP flow. Open source, fully portable, no account required.

Stages 5–7 are the Deploy path — where the .brand runtime becomes shared, served live, and consumed by every generation surface. Available through Brandcode Studio and Column Five Media.

What's Portable

Artifact

Portable?

Owned By

@brandsystem/mcp (authoring tool)

Fully — open source, any brand

MIT license

.brand/ directory (the runtime)

Fully — the portable artifact that travels with your brand

Client

Brandcode framework (schema + stances + U-mech)

Fully — universal layer imported by every brand instance

Open

Client claims, narratives, rules (I-content)

Per-instance — unique to each brand

Client

@brandcode/mcp (hosted Use MCP)

Serves the runtime — authorized MCP clients connect

Brandcode


Development

# Install dependencies
npm install

# Build TypeScript
npm run build

# Watch mode for development
npm run dev

# Run tests
npm test

# Watch mode for tests
npm run test:watch

# Type check without emitting
npm run lint

# Start the server (stdio transport)
npm start

Project Structure

src/
  index.ts              # Entry point -- stdio transport
  cli.ts                # CLI entry point for brandcode connect/sync/status
  server.ts             # MCP server creation and tool registration (all tools, priority order)
  tools/                # One file per tool
    brand-start.ts              # Entry point (Session 1)
    brand-status.ts             # Progress dashboard
    brand-extract-web.ts        # Website extraction
    brand-extract-figma.ts      # Figma extraction (plan/ingest)
    brand-set-logo.ts           # Manual logo add/replace
    brand-compile.ts            # Token + VIM + runtime compilation
    brand-clarify.ts            # Interactive clarification
    brand-audit.ts              # Schema validation
    brand-report.ts             # HTML report generation
    brand-init.ts               # Low-level directory scaffolding
    brand-deepen-identity.ts    # Session 2: visual identity interview
    brand-ingest-assets.ts      # Session 2: asset cataloging
    brand-preflight.ts          # Session 2: HTML compliance checking
    brand-extract-messaging.ts  # Session 3: voice/messaging audit
    brand-compile-messaging.ts  # Session 3: perspective + voice interview
    brand-build-personas.ts     # Session 4: buyer personas
    brand-build-journey.ts      # Session 4: buyer journey stages
    brand-build-themes.ts       # Session 4: editorial themes
    brand-build-matrix.ts       # Session 4: messaging matrix
    brand-audit-content.ts      # Content scoring (0-100)
    brand-check-compliance.ts   # Binary pass/fail compliance gate
    brand-audit-drift.ts        # Batch drift detection
    brand-runtime.ts            # Read compiled brand runtime contract
    brand-brandcode-connect.ts  # Hosted brand connect
    brand-brandcode-sync.ts     # Hosted brand sync
    brand-brandcode-status.ts   # Hosted brand status
    brand-write.ts              # Content generation context loader
    brand-export.ts             # Portable brand file export
    brand-feedback.ts           # Bug reports + feedback
  connectors/
    brandcode/                  # Hosted brand client, persistence, and URL resolution
  lib/                  # Shared utilities
    brand-dir.ts        # .brand/ directory I/O (YAML, JSON, markdown, assets)
    confidence.ts       # Confidence scoring and source precedence
    css-parser.ts       # CSS color and font extraction
    dtcg-compiler.ts    # DTCG token compilation
    color-namer.ts      # Human-readable color name generation
    content-scorer.ts   # Brand compliance scoring engine
    logo-extractor.ts   # Logo candidate detection
    svg-resolver.ts     # SVG inlining and base64 encoding
    report-html.ts      # HTML report generation
    vim-generator.ts    # Visual Identity Manifest + system integration markdown
    runtime-compiler.ts # Compile brand-runtime.json from 4 source YAMLs
    interaction-policy-compiler.ts  # Compile interaction-policy.json (enforceable rules)
    response.ts         # Structured MCP response builder
    version.ts          # Package version reader
  types/
    index.ts            # TypeScript type definitions
  schemas/
    index.ts            # Zod schemas for validation (7 schema files)
bin/
  brandsystem-mcp.mjs   # CLI entry point
specs/
  brand-runtime-schema.md         # Runtime contract documentation
  interaction-policy-schema.md    # Interaction policy documentation
test/
  lib/                  # Library unit tests (9 files)
  tools/                # Tool tests (2 files: export + smoke)
  server.test.ts        # Server creation smoke test

Agent Evaluation Suite

The eval/ directory ships fixtures, methodology, and a runnable harness measuring what matters to agents: first-tool selection on real prompts, response token budgets, envelope conformance, compliance-check accuracy against labeled cases, and whether a second agent can use a generated runtime with no explanation. Run the deterministic tier with npm run eval; the model-dependent tier (first-tool selection) is opt-in via ANTHROPIC_API_KEY. Results are published only from actual runs with stated model versions and dates — the repo ships evidence machinery, not claims. See eval/README.md.

Security

  • Report vulnerabilities privately via the repository's Security page → Advisories → "Report a vulnerability". See SECURITY.md. Please don't open public issues for suspected vulnerabilities.

  • Local-first by design. Extraction and compilation run on your machine. Network activity is limited to: fetching the sources you point the tools at (websites, Figma via your own Figma MCP), optional Brandcode Studio connector calls when you connect a hosted brand, and optional brand_feedback reports.

  • What gets written locally: everything lands in .brand/ inside your working directory. Connector credentials are stored in .brand/brandcode-auth.json (gitignored).

License

MIT

Available Tools

12 tools
brand_brandcode_authBrandcode Studio authA
Destructive

Activate Brandcode Studio connection for saving and pushing brands. Preferred mode: "activate" displays a short code (e.g. BRAND-7K4X) for the user to enter at brandcode.studio/activate — no copy-paste of tokens needed. Also supports: "status" (check auth), "login" (magic link fallback), "set_key" (manual token), "logout" (clear credentials). Use when the user wants to save their brand to Studio or says "activate", "connect to Brandcode", or "save my brand online". NOT needed for extraction, preview, or brand_check — those work without auth.

NameRequiredDescriptionDefault
keyNoSession token from magic link verification. Required when mode="set_key". Format: JWT from /api/auth/verify.
modeYesAuth action. "activate" (recommended) starts device code flow — displays a short code for the user to enter at brandcode.studio/activate, then polls for completion. No copy-paste needed. "status" checks if authenticated. "login" starts magic link flow (fallback). "set_key" stores token manually. "logout" removes credentials.
emailNoEmail address for login. Required when mode="login".
studio_urlNoBrandcode Studio base URL. Defaults to "https://www.brandcode.studio". Must be a trusted Studio origin; self-hosted/staging origins are added via the BRANDCODE_STUDIO_TRUSTED_ORIGINS environment variable.

Output Schema

NameRequiredDescription
_metadataYes

TDQS

A4.3/5.0
Behavior4/5

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

Goes beyond annotations by explaining the device-code flow (displays a short code like BRAND-7K4X, then polls for completion), that no token copy-paste is required, that login is a magic-link fallback, and that studio_url must be a trusted origin configured via an env var. The one gap is that the 'logout'/credential-clearing and destructiveHint=true side effects are not elaborated on, and the description never references the write/destructive profile the annotations declare.

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?

Front-loaded with the primary action and the preferred mode before the alternatives, and the exclusion sentence is well placed at the end. Some redundancy exists between the prose mode list and the enum descriptions, but no sentence is wasted overall.

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

Completeness4/5

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

With an output schema, full annotation coverage, and 100% schema description coverage, the description supplies the remaining needed context: mode selection strategy, trigger phrases, exclusions, and the trusted-origin constraint. Only the consequences of the destructive 'logout' path are left implicit.

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

Parameters3/5

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

Schema description coverage is 100% and the enum descriptions already explain each mode, so the description's mode rundown largely repeats structured data. It adds only light context (the example code format and the preferred/fallback ordering), not new semantics for key, email, or studio_url.

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?

States a specific verb and resource ('Activate Brandcode Studio connection for saving and pushing brands') and enumerates the five supported modes. It also explicitly carves out sibling capabilities ('NOT needed for extraction, preview, or brand_check'), so an agent can distinguish it from brand_check, brand_compile, brand_export, etc. 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.

Usage Guidelines5/5

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

Gives explicit when-to-use triggers ('save their brand to Studio', 'activate', 'connect to Brandcode') and when-not ('NOT needed for extraction, preview, or brand_check'). It also names 'activate' as the preferred mode and positions 'login' as a fallback, which is exactly the routing guidance an agent needs across the 5-value enum.

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

brand_brandcode_connectConnect to Brandcode StudioA

Connect a local .brand/ to Brandcode Studio. Two modes: "pull" (default) downloads an existing hosted brand by URL/slug. "save" uploads the local .brand/ to Studio (requires prior auth via brand_brandcode_auth). THE tool when the user says "make our brand available to my whole team", "share our brand with the team", "connect to Brandcode", "pull from Studio", "save brand to Studio", or "upload my brand". Returns brand name, slug, sync token, and connection details.

NameRequiredDescriptionDefault
urlNoBrandcode Studio brand URL or slug. Required for mode="pull". Examples: "https://brandcode.studio/start/brands/pendium", "pendium"
modeNo"pull" connects to an existing hosted brand and downloads it. "save" uploads the local .brand/ to Studio (requires auth via brand_brandcode_auth).pull
share_tokenNoShare token for protected brands (x-brand-share-token)

Output Schema

NameRequiredDescription
_metadataYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare it is not read-only, is open-world, and is destructive=false. The description adds useful behavior beyond annotations: pull downloads an existing hosted brand, save uploads the local .brand/ to Studio, save requires prior auth, and it returns brand name, slug, sync token, and connection details.

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

Conciseness5/5

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

The description is front-loaded with the core action and modes, then provides trigger phrases and return information. The sentences are dense but each adds useful selection or invocation context.

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 3-parameter tool with an output schema and annotations, the description covers the important gaps: mode behavior, default mode, auth prerequisite for save, trigger phrases, and return fields. Nothing critical is missing for an agent to invoke it correctly.

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

Parameters3/5

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 url, mode, and share_token in detail. The description reinforces the mode semantics and the url requirement for pull, but mostly repeats structured schema information and does not add much about share_token.

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 states a specific verb and resource: connect a local .brand/ to Brandcode Studio. It clearly distinguishes the two modes and names the related auth sibling, so an agent can distinguish this from general brand tools.

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

Usage Guidelines4/5

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

It gives explicit user-language triggers such as 'connect to Brandcode', 'pull from Studio', and 'save brand to Studio', and notes that save mode requires prior auth via brand_brandcode_auth. It does not specify when-not to use it or name an alternative connect tool, so it is strong but not fully exhaustive.

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

brand_checkQuick brand checkA
Read-onlyIdempotent

Inline brand linter — call this WHILE writing content or code, the way you call a type-checker. <50ms pass/fail on any combination of text (voice/never-say/AI-isms), color (palette match with ΔE distance), font (typography match), or css (anti-pattern violations). Designed for tight loops: write a sentence, brand_check it, fix, continue. Returns specific actionable fixes per failed input. Requires brand_compile to have run first. NOT a publish-time gate — use brand_check_compliance for the single PASS/FAIL verdict before shipping. NOT for 0-100 scoring — use brand_audit_content. NOT for HTML/CSS rule violations — use brand_preflight.

NameRequiredDescriptionDefault
cssNoCSS snippet to check for visual anti-pattern violations (shadows, gradients, etc.). Example: "box-shadow: 0 2px 4px rgba(0,0,0,0.1)"
fontNoFont family name to check against brand typography. Example: "Helvetica"
textNoText to check for voice violations (never-say words, anchor term misuse, AI-isms). Example: "We leverage cutting-edge AI solutions"
colorNoHex color to check against the brand palette. Returns nearest brand color with perceptual distance (ΔE). Example: "#3b82f6"

Output Schema

NameRequiredDescription
passNo
errorNo
flagsNo
checkedNo
_metadataYes
brand_paletteNo

TDQS

A5/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, closed-world, non-destructive), yet the description still adds non-obvious behavior: the <50ms latency budget, the hard prerequisite that brand_compile ran first, and that failures return specific actionable fixes rather than a bare verdict. The latency and prerequisite facts are not derivable from any structured field and materially affect how an agent should call this.

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

Conciseness5/5

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

Front-loaded with the one-line identity, then behavior, then an explicit alternative-routing block. Sentences are dense but every clause carries routing or prerequisite information; nothing is padding.

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 4-param read-only linter with a full output schema, the only gaps an agent could hit are the prerequisite and the return shape, and both are covered. Sibling disambiguation is fully handled, so the description is complete enough to call correctly on first attempt.

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?

Schema coverage is 100%, so baseline would be 3, but the description adds real semantic depth per input: text is checked for voice/never-say/AI-isms, color for palette match with ΔE perceptual distance, font for typography match, css for anti-pattern violations. It also makes clear the parameters are composable (any combination) rather than mutually exclusive, which the schema's flat property list does not convey.

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?

"Inline brand linter" plus a concrete verb-and-scope statement: a sub-50ms pass/fail check over any combination of text, color, font, or css. It goes further and names the three sibling tools it is NOT (brand_check_compliance, brand_audit_content, brand_preflight), so an agent can discriminate it without opening any schema.

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?

Explicit when-to-use is given as a workflow pattern ("call this WHILE writing content or code, the way you call a type-checker... write a sentence, brand_check it, fix, continue"), plus a stated prerequisite (brand_compile must have run first). Three explicit when-NOT clauses route the agent to the correct alternative for publish gating, 0-100 scoring, and HTML/CSS rule violations.

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

brand_clarifyClarify brand valuesA

Resolve an ambiguous brand value interactively. After brand_compile, some values need human confirmation — wrong primary color, unknown font, unassigned color roles. Pass the clarification item ID and the user's answer (hex color, role name, font name, or 'yes'/'no'). Supports natural language: 'the purple one is accent' or '#5544f2 is secondary'. Returns updated identity and remaining clarification count.

NameRequiredDescriptionDefault
idYesClarification item ID from needs-clarification.yaml (e.g. 'clarify-1')
answerYesThe user's answer: a hex color (#ff0000), a role name (primary, secondary, accent, neutral, surface, text, action, tint, overlay, border, gradient, highlight), a font name, 'yes'/'no', or natural language ('the purple one is accent, the pink transparents are tint')

Output Schema

NameRequiredDescription
_metadataYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag this as a non-readonly, non-idempotent mutation, and the description adds genuinely new context: it is a human-in-the-loop step, it consumes a clarification item ID, and it returns updated identity plus remaining count. It does not say what happens on an invalid or already-answered item, which is the main remaining gap.

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?

Front-loaded with the purpose, then prerequisites, then parameter forms, then return. Four sentences, all functional, though the answer-format sentence partly duplicates the schema and could be trimmed.

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

Completeness4/5

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 need no elaboration, and the description correctly avoids dwelling on them beyond a one-line summary. Prerequisite state and input flexibility are covered; only error and idempotency behavior for repeat answers is unstated.

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

Parameters3/5

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

Schema coverage is 100% and the description's list of accepted answer forms (hex, role name, font, yes/no, natural language) restates what the schema already documents, including the identical example style. Baseline 3 is appropriate — no net new parameter meaning is added.

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?

States a specific verb and resource ('resolve an ambiguous brand value interactively') and immediately scopes it to the post-brand_compile state, which separates it from compile/status/report siblings. An agent knows exactly what this 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.

Usage Guidelines4/5

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

The prerequisite is explicit ('after brand_compile, some values need human confirmation') and the triggering conditions are enumerated (wrong primary color, unknown font, unassigned color roles). It lacks an explicit 'do not use if…' or a named alternative, so it stops short of full when/when-not coverage.

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

brand_compileCompile brand tokensA
Idempotent

Generate DTCG design tokens, design-synthesis.json, DESIGN.md, brand runtime, and interaction policy from extracted brand data. Transforms core-identity.yaml into tokens.json, brand-runtime.json (single-document brand contract for AI agents), and interaction-policy.json (enforceable rules). When Session 2+ data exists, also generates visual-identity-manifest.md and system-integration.md. Use after brand_extract_web, brand_extract_site, brand_extract_visual, or brand_extract_figma. Returns token counts, clarification items, and file list.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
_metadataYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the safety profile is covered; the description adds which files are written, the conditional Session 2+ branch producing visual-identity-manifest.md and system-integration.md, and what is returned. It stops short of saying whether existing outputs are overwritten or what failures look like.

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 main action and its artifacts are front-loaded, and the prerequisite/return information follows in a logical order. The enumeration of five-plus filenames is dense but each item conveys real information about outputs, so it largely earns its space.

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

Completeness4/5

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

With an output schema present, the description needn't explain return values, yet it still summarizes them (token counts, clarification items, file list). Prerequisites, input file, conditional outputs, and the 'brand contract for AI agents' framing are all covered; only overwrite/failure behavior is left implicit.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The description instead usefully characterizes the implicit input source (core-identity.yaml) and the Session 2+ data condition.

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 states a specific verb (generate/compile) plus the exact artifacts produced (tokens.json, brand-runtime.json, interaction-policy.json, DESIGN.md) and the source it transforms (core-identity.yaml). This clearly separates it from siblings like brand_runtime, brand_export, or the brand_extract_* family.

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

Usage Guidelines4/5

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

It explicitly names the prerequisite extract tools (brand_extract_web, brand_extract_site, brand_extract_visual, brand_extract_figma) and the 'Use after' ordering, which is strong context. It does not state when-not to use it or how it relates to downstream siblings such as brand_export or brand_report.

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

brand_contextGet task-scoped brand contextA
Read-onlyIdempotent

Select a task-scoped brand context from the compiled runtime. THE tool to call first when the user says 'write this in our voice', 'write this LinkedIn post in our brand voice', 'make an on-brand social graphic', or 'build a landing page' — it returns only the governed rules relevant to that task instead of the full runtime. Deterministic: task_type maps to sections via a fixed table, audience matches governed personas exactly or reports no-match — no inference. Returns context (the selected brand slices), output_contract (required delivery shape), matched_selectors (what was chosen and why), and no_governed_match. NOT for reading the entire runtime (use brand_runtime) or checking finished content (use brand_check).

NameRequiredDescriptionDefault
budgetNo'standard' returns the selected sections in full. 'compact' returns identity colors/typography plus hard rules only (anti-patterns + never_say) — for tight sub-agent contexts.standard
channelNoOptional channel label (e.g. 'LinkedIn'). Recorded in matched_selectors for the agent; does not alter governed rules.
audienceNoOptional audience label (e.g. 'security leaders'). Matched against governed persona names by normalized substring — an explicit no-match is returned rather than guessing.
task_typeYesWhat is being created. Deterministically selects runtime sections: visual tasks (code-ui, image-graphic) get identity+visual; copy tasks (blog-article, email, video-script) get voice+strategy; mixed tasks get both.

Output Schema

NameRequiredDescription
errorNo
contextNo
approvalNo
_metadataYes
output_contractNo
matched_selectorsNo
no_governed_matchNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavior beyond that: deterministic fixed-table mapping, no inference, and explicit no-match reporting rather than guessing — which tells the agent how to interpret a thin result. It loses a point only because it recaps the return fields (context, output_contract, matched_selectors, no_governed_match) that the output schema already declares.

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?

Front-loaded with the core purpose and the primary routing instruction, and the NOT-clause closes it well. The middle is dense — four example trigger phrases plus a determinism paragraph — so it is slightly longer than needed, but every sentence carries routing or behavioral information.

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 read-only 4-parameter selector with a full output schema, this covers everything an agent needs: what it returns, what determinism guarantees, how misses surface, and which sibling to use instead. No gap remains that would cause a wrong call.

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

Parameters4/5

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 meaning on top: it explains that task_type drives selection via a fixed table with visual-vs-copy-vs-mixed routing, and that audience matching is normalized-substring against governed persona names with an explicit no-match. It does not further explain budget or channel beyond the schema.

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?

States a specific verb and resource ("select a task-scoped brand context from the compiled runtime") and immediately contrasts it with the two siblings that do something else (brand_runtime for the full runtime, brand_check for auditing finished content). An agent can distinguish this from all 11 siblings 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.

Usage Guidelines5/5

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

Gives explicit trigger phrases ("write this in our voice", "build a landing page") plus a clear negative clause naming the alternatives: "NOT for reading the entire runtime (use brand_runtime) or checking finished content (use brand_check)". When-to-use and when-not-to-use are both present.

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

brand_exportExport brand guideA
Idempotent

Bundle the compiled brand system into a portable artifact for a specific destination. Use when asked 'share my brand', 'export for ChatGPT/Cursor/team', 'generate brand guidelines', 'make a one-pager', or 'create a brand PDF'. Target 'chat': self-contained markdown for upload to any AI conversation (Claude, ChatGPT, Gemini). Target 'code': MCP server config + CLAUDE.md/.cursorrules snippet. Target 'team': human-readable brand guidelines for designers/writers/marketers. Target 'email': ~500-word summary for Slack or email. Target 'claude-skill': SKILL.md with embedded logo + rules for persistent Claude artifacts. Target 'pdf': branded PDF with swatches, type, anti-patterns, and voice. Set include_logo=false to drop the embedded SVG/data URI when size matters. Writes to .brand/exports/ and returns the full content (markdown targets) or a generation summary (pdf). Requires brand_compile to have run first. NOT for previewing one section — use brand_preview.

NameRequiredDescriptionDefault
targetYesWhere this export will be used. 'chat': upload to AI conversation (Claude/ChatGPT/Gemini). 'code': paste into CLAUDE.md or .cursorrules. 'team': share with designers/writers. 'email': send via Slack or email. 'claude-skill': persistent Claude skill file with embedded logo + brand rules. 'pdf': brand guide PDF with color swatches, typography, visual rules, and voice summary — no browser needed.
include_logoNoEmbed logo SVG/data URI in the export. Set false to reduce file size. Default: true.

Output Schema

NameRequiredDescription
_metadataYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations mark this non-readOnly but idempotent and non-destructive; the description adds valuable context beyond that: it writes files to .brand/exports/<file>, returns full content for markdown targets versus a generation summary for pdf, and has a prerequisite compile step. It doesn't state overwrite behavior for existing files at the same path, which is the one remaining ambiguity.

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?

Front-loaded with purpose, then triggers, then per-target semantics — a sensible order. The target enumeration is long and partly redundant with the enum, but each clause is information-dense rather than filler.

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

Completeness4/5

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

With an output schema present, the description needn't explain return shapes, yet it helpfully notes that markdown targets return full content while pdf returns a summary. Prerequisite, write location, and sibling exclusion are all covered; only overwrite/collision behavior on repeated exports is unaddressed.

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

Parameters3/5

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

Schema coverage is 100% and the enum already documents every target value, so the target enumeration mostly repeats structured data. The include_logo guidance ('set false to drop the embedded SVG/data URI when size matters') does add a decision rationale beyond the schema's terser 'reduce file size.' Baseline 3 is appropriate.

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?

Opens with a specific verb+resource ('Bundle the compiled brand system into a portable artifact') and enumerates each target destination with what each produces. This makes the export capability fully distinguishable from siblings like brand_compile and brand_preview.

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?

Gives concrete trigger phrases ('share my brand', 'export for ChatGPT/Cursor/team'), states a prerequisite (brand_compile must have run), and explicitly excludes the sibling case: 'NOT for previewing one section — use brand_preview.' Both when-to-use and when-not are covered.

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

brand_preflightPreflight brand checkA
Read-onlyIdempotent

Check HTML/CSS against brand rules — catches off-brand colors, wrong fonts, missing logo, and anti-pattern violations (drop shadows, gradients, etc.). Pass an HTML string or file path. Mode 'check' (default) runs all compliance checks and returns pass/warn/fail per rule. Mode 'rules' lists all active preflight rules without checking content. Use after generating any visual content to validate brand compliance. Returns overall status and per-check details. NOT for scoring content copy — use brand_audit_content. NOT for brand directory validation — use brand_audit.

NameRequiredDescriptionDefault
htmlYesHTML to validate: either a full HTML string (with <style> blocks) or a file path ending in .html (e.g. 'output.html')
modeNo'check' (default): validates HTML against all brand rules. 'rules': lists all active rules without running checks.check

Output Schema

NameRequiredDescription
_metadataYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare this as a safe, read-only, idempotent operation, and the description adds meaningful behavioral context: what 'check' returns (pass/warn/fail per rule), what 'rules' does without checking content, and the overall return shape. 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.

Conciseness5/5

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

The description is front-loaded with the core action and scope, then mode behavior, use timing, and exclusions. Every sentence contributes useful routing or behavioral information.

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?

With rich annotations, full parameter schema coverage, and an output schema, the description fills the remaining gaps: mode semantics, when to use it, and which sibling alternatives to use instead. An agent has enough to call it correctly.

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

Parameters3/5

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 the html string/file-path behavior and the mode enum. The description restates these semantics but adds no additional parameter nuance beyond the schema.

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

Purpose4/5

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

The description gives a specific verb and resource — checking HTML/CSS against brand rules — and lists concrete violation types. It also distinguishes itself from brand_audit_content and brand_audit, but does not explicitly differentiate from the sibling tool brand_check.

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?

It states exactly when to use the tool (after generating visual content), explains both modes, and explicitly names two non-use cases with alternative tools. The agent has clear routing guidance.

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

brand_reportGenerate brand reportA
Idempotent

Generate a portable HTML brand identity report with embedded logos, color swatches, typography, and tokens. The HTML is self-contained and works offline — upload it to any AI chat (Claude, ChatGPT, Gemini) as instant brand guidelines. Written to .brand/brand-report.html. Use after brand_compile. Returns file path, report summary (color/font/logo counts), and a ready-to-copy Brand Instructions text block.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
_metadataYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and idempotentHint=true; the description adds useful behavior beyond that — output is a written file at a specific path, the HTML is self-contained and works offline. It doesn't discuss whether re-running overwrites the prior report, though idempotentHint implies it. No contradiction with the write annotation.

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

Conciseness5/5

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

Three front-loaded sentences: what it produces, how it behaves (offline/self-contained) and where it writes, then the sequencing prerequisite and return contents. No filler or repetition of the title.

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 zero-parameter tool with an output schema and full annotations, this covers everything an agent needs: prerequisite order, write location, artifact portability, and what comes back. Nothing critical is missing.

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

Parameters4/5

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

Zero parameters, so the baseline is 4. The description correctly presents this as a no-argument operation and focuses on output artifacts instead of inventing configuration options.

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?

States a specific verb and artifact: 'Generate a portable HTML brand identity report' with the exact contents (logos, color swatches, typography, tokens). The output location '.brand/brand-report.html' makes it unmistakable versus siblings like brand_export or brand_compile.

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

Usage Guidelines4/5

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

Gives an explicit prerequisite ('Use after brand_compile') and a concrete downstream use case (upload to an AI chat as brand guidelines). It does not name when to skip it or contrast with brand_export, which is the main remaining gap.

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

brand_runtimeRead brand runtimeA
Read-onlyIdempotent

Read the compiled brand runtime contract (brand-runtime.json). Returns the brand system that AI agents load as context for on-brand output. Supports slicing: 'full' (~1200 tokens, everything), 'visual' (~200 tokens, colors + fonts + anti-patterns), 'voice' (~400 tokens, tone + vocabulary + perspective), 'minimal' (~100 tokens, primary color + heading font). Use slices when passing brand context to sub-agents — smaller context reduces token cost and agent satisficing. Live Mode aware: when enabled via brand_brandcode_live, the runtime refreshes from the hosted Brandcode runtime on each call (subject to cache TTL). Falls back silently to the local mirror on network error. Read-only. Run brand_compile to refresh.

NameRequiredDescriptionDefault
sliceNoWhich slice of the runtime to return. 'full': everything (~1200 tokens). 'visual': colors, typography, logo, anti-patterns, composition (~200 tokens). 'voice': tone, vocabulary, never-say, perspective (~400 tokens). 'minimal': primary color, heading font, logo reference only (~100 tokens). Use slices to reduce prompt size when handing off to sub-agents that only need part of the brand.full

Output Schema

NameRequiredDescription
errorNo
runtimeNo
approvalNo
_metadataYes
agent_tipNo
runtime_originNo

TDQS

A4.6/5.0
Behavior5/5

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

Far exceeds the annotations: it discloses Live Mode behavior (refresh from hosted runtime per call, subject to cache TTL) and a silent fallback to the local mirror on network error, which is the kind of failure-mode detail an agent cannot get from the schema. It also quantifies token cost per slice and restates read-only in prose, consistent with readOnlyHint=true.

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?

Front-loaded with the resource identity and the slicing contract, with live-mode caveats and the refresh pointer at the end where they belong. Slightly over-dense: the per-slice token counts are repeated almost verbatim from the schema, costing a sentence that earns little.

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?

An output schema exists, so return values need no explanation, and the description covers everything else an agent needs: how to size the response, where the data comes from in live vs offline mode, and how to force a refresh. Nothing material is missing for a zero-required-parameter read tool.

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

Parameters4/5

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 rationale beyond the enum docs — why to slice (token cost, agent satisficing) and the approximate payload sizes. The slice contents themselves are essentially a restatement of the schema descriptions.

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?

States a specific verb and resource (read the compiled brand runtime contract, brand-runtime.json) and immediately describes what the content is: the brand system agents load as context. The closing 'Run brand_compile to refresh' implicitly separates it from the compile sibling, so an agent can tell read-from-cache apart from rebuild.

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

Usage Guidelines4/5

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

Gives concrete usage guidance for the slice parameter ('Use slices when passing brand context to sub-agents — smaller context reduces token cost and agent satisficing') and names the prerequisite tool for refreshing. It does not explicitly contrast with brand_context or brand_export, so the when-not case for the closest siblings is left to inference.

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

brand_startStart a brand systemA
Idempotent

Adopt a brand into a portable .brand/ runtime from whatever source already exists: existing brand guidelines (PDF), a website URL, a Figma library, or a hosted Brandcode Studio brand. THE entry point when the user says 'use my existing brand guidelines with AI', 'I have a PDF brand guide', 'use our Figma library', 'create a brand system', 'extract brand from website', or 'set up brand guidelines'. Pass website_url, guideline_pdf, figma_file_key, or brandcode_url — or pass no source and it discovers local candidates and presents a menu with a privacy explanation. Set mode='auto' with a website_url to run the full pipeline (extract, compile DTCG tokens + design-synthesis.json + DESIGN.md + brand runtime + interaction policy, generate HTML report) in one call. If .brand/ already exists, returns current status with next steps. NOT for reading an already-compiled brand (use brand_runtime or brand_context) or for sharing an existing brand with a team (use brand_brandcode_connect).

NameRequiredDescriptionDefault
modeNo'auto' (recommended): runs full pipeline in one call when website_url is provided. 'interactive': assesses available sources (including files discovered in the working directory) and presents a source menu.interactive
industryNoIndustry vertical for smarter extraction (e.g. 'fintech', 'healthcare', 'content marketing')
client_nameYesCompany or brand name (e.g. 'Acme Corp')
website_urlNoCompany website URL to extract brand identity from (e.g. 'https://acme.com')
brandcode_urlNoBrandcode Studio brand URL for adopting an existing hosted brand (e.g. 'https://brandcode.studio/start/brands/acme'). Routes adoption through brand_brandcode_connect.
guideline_pdfNoPath to a PDF brand guideline in or under the working directory (e.g. './brand-guidelines.pdf'). Routes adoption through brand_extract_pdf.
figma_file_keyNoFigma file key for design-file extraction. Routes adoption through brand_extract_figma.

Output Schema

NameRequiredDescription
_metadataYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare it is a non-destructive, idempotent, open-world write, but the description goes well past that: it names the exact artifacts produced in auto mode (DTCG tokens, design-synthesis.json, DESIGN.md, brand runtime, interaction policy, HTML report) and explains the already-exists behavior. The privacy explanation on local discovery is additional context an agent needs before prompting the user.

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?

Front-loaded with purpose, then triggers, then parameter contract, then exclusions — a sensible order. It is dense rather than padded, though the long trigger-phrase enumeration and the parenthetical artifact list make it longer than strictly necessary for an agent that already sees a 100% covered schema.

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?

An output schema exists, so return values need not be explained, and the description instead covers the decision-relevant surface: which source param to pick, what auto mode does, what happens when .brand/ already exists, and where to go for adjacent intents. Nothing needed to invoke it correctly is missing.

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

Parameters4/5

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 semantics on top by explaining the mutual exclusivity of the four source parameters, the no-source fallback, and the specific interaction of mode='auto' with website_url. It does not repeat the enum or URI formats, which the schema already carries.

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?

Opens with a specific verb+resource ('Adopt a brand into a portable .brand/ runtime') and enumerates the four source types it accepts. The closing sentence explicitly distinguishes it from brand_runtime, brand_context, and brand_brandcode_connect, so an agent can route correctly without opening any schema.

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?

States when to use it in the user's own phrasing ('use my existing brand guidelines with AI', 'I have a PDF brand guide', 'use our Figma library'), and gives explicit exclusions pointing to the named alternatives. It also covers the degenerate case (no source passed → discovery menu) and the idempotent case (.brand/ exists → status returned).

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

brand_statusBrand statusA
Read-onlyIdempotent

Check brand system progress and get next steps. Shows what has been extracted (colors, fonts, logo), confidence levels, session completion status, and what to do next. Use when resuming a previous session, checking readiness, or when the user asks 'what's the state of my brand?' If no .brand/ exists, returns a full getting-started guide with all available tools. Returns structured status data.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
errorNo
statusNo
recoveryNo
_metadataYes
tool_sessionsNo
getting_startedNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile needs no restating. The description adds real behavior beyond them: the full getting-started guide returned when no .brand/ exists, and the confidence/completion dimensions reported. It stops short of describing caching, cost, or size of the returned status payload.

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?

Front-loaded with the core action, then details, then usage triggers, then the fallback. Minor waste: 'get next steps' is repeated as 'what to do next,' and 'Returns structured status data' is filler given an output schema exists.

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?

Output schema is present, so return values need no prose explanation, and the annotations cover the safety profile. With no parameters and a documented no-state fallback, an agent has everything needed to decide to call it and to interpret the result.

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

Parameters4/5

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

Zero parameters, so there is no schema semantics to compensate for; baseline 4 applies. The description correctly implies a no-argument, state-inspection call rather than hinting at inputs that do not exist.

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

Purpose4/5

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

Specific verb+resource: reports brand system progress and enumerates exactly what is surfaced (extracted colors/fonts/logo, confidence levels, session completion, next steps). An agent knows precisely what comes back. It does not, however, distinguish itself from similarly named siblings like brand_check, brand_report, or brand_preflight.

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

Usage Guidelines4/5

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

Gives concrete triggers: resuming a previous session, checking readiness, or the user asking 'what's the state of my brand?', plus the no-.brand/ fallback case. Clear context for invocation, but no explicit exclusions telling the agent when a sibling such as brand_check is the better choice.

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.

  1. 12 tool updatesv0.17.0
    • Addedbrand_brandcode_auth
    • Addedbrand_brandcode_connect
    • Addedbrand_check
    • Changedbrand_clarify2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / _metadata / additionalProperties
        Previous value: -trueNew value: +{}
    • Addedbrand_compile
    • Addedbrand_context
    • Addedbrand_export
    • Addedbrand_preflight
    • Addedbrand_report
    • Addedbrand_runtime
    • Addedbrand_start
    • Addedbrand_status
  2. 5 tool updatesv0.14.1
    • Addedbrand_clarify
    • Removedbrand_compile
    • Removedbrand_report
    • Removedbrand_start
    • Removedbrand_status
  3. 10 tool updatesv0.13.4
    • Removedbrand_brandcode_auth
    • Removedbrand_brandcode_connect
    • Removedbrand_check
    • Addedbrand_compile
    • Removedbrand_context
    • Removedbrand_export
    • Removedbrand_preflight
    • Removedbrand_runtime
    • Addedbrand_start
    • Addedbrand_status
  4. 6 tool updatesv0.12.0
    • Changedbrand_check5 fields changed
      • addedOutput schema / properties / brand_palette
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "hex": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "hex"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / checked
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / error
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / flags
        Added value: +{
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "fix": {
        +        "type": "string"
        +      },
        +      "message": {
        +        "type": "string"
        +      },
        +      "severity": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / pass
        Added value: +{
        +  "type": "boolean"
        +}
    • Removedbrand_clarify
    • Removedbrand_compile
    • Changedbrand_runtime5 fields changed
      • addedOutput schema / properties / agent_tip
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / approval
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / error
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / runtime
        Added value: +{
        +  "additionalProperties": {},
        +  "type": "object"
        +}
      • addedOutput schema / properties / runtime_origin
        Added value: +{
        +  "type": "string"
        +}
    • Removedbrand_start
    • Removedbrand_status
  5. 44 tool updatesv0.11.0
    • Removedbrand_audit
    • Removedbrand_audit_content
    • Removedbrand_audit_drift
    • Changedbrand_brandcode_auth1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "_metadata": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "next_steps": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "what_happened": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "what_happened",
        +        "next_steps"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "_metadata"
        +  ],
        +  "type": "object"
        +}
    • Changedbrand_brandcode_connect1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "_metadata": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "next_steps": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "what_happened": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "what_happened",
        +        "next_steps"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "_metadata"
        +  ],
        +  "type": "object"
        +}
    • Removedbrand_brandcode_live
    • Removedbrand_brandcode_status
    • Removedbrand_brandcode_sync
    • Removedbrand_build_journey
    • Removedbrand_build_matrix
    • Removedbrand_build_personas
    • Removedbrand_build_themes
    • Changedbrand_check1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "_metadata": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "next_steps": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "what_happened": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "what_happened",
        +        "next_steps"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "_metadata"
        +  ],
        +  "type": "object"
        +}
    • Removedbrand_check_compliance
    • Changedbrand_clarify1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "_metadata": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "next_steps": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "what_happened": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "what_happened",
        +        "next_steps"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "_metadata"
        +  ],
        +  "type": "object"
        +}
    • Changedbrand_compile1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "_metadata": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "next_steps": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "what_happened": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "what_happened",
        +        "next_steps"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "_metadata"
        +  ],
        +  "type": "object"
        +}
    • Removedbrand_compile_messaging
    • Removedbrand_connect_repo
    • Addedbrand_context
    • Removedbrand_deepen_identity
    • Removedbrand_enrich_skill
    • Changedbrand_export1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "_metadata": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "next_steps": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "what_happened": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "what_happened",
        +        "next_steps"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "_metadata"
        +  ],
        +  "type": "object"
        +}
    • Removedbrand_extract_figma
    • Removedbrand_extract_messaging
    • Removedbrand_extract_pdf
    • Removedbrand_extract_site
    • Removedbrand_extract_visual
    • Removedbrand_extract_web
    • Removedbrand_feedback
    • Removedbrand_feedback_review
    • Removedbrand_feedback_triage
    • Removedbrand_generate_designmd
    • Removedbrand_ingest_assets
    • Removedbrand_init
    • Changedbrand_preflight1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "_metadata": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "next_steps": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "what_happened": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "what_happened",
        +        "next_steps"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "_metadata"
        +  ],
        +  "type": "object"
        +}
    • Removedbrand_preview
    • Removedbrand_repo_status
    • Changedbrand_report1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "_metadata": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "next_steps": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "what_happened": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "what_happened",
        +        "next_steps"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "_metadata"
        +  ],
        +  "type": "object"
        +}
    • Removedbrand_resolve_conflicts
    • Changedbrand_runtime1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "_metadata": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "next_steps": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "what_happened": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "what_happened",
        +        "next_steps"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "_metadata"
        +  ],
        +  "type": "object"
        +}
    • Removedbrand_set_logo
    • Changedbrand_start5 fields changed
      • addedInput schema / properties / brandcode_url
        Added value: +{
        +  "description": "Brandcode Studio brand URL for adopting an existing hosted brand (e.g. 'https://brandcode.studio/start/brands/acme'). Routes adoption through brand_brandcode_connect.",
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedInput schema / properties / figma_file_key
        Added value: +{
        +  "description": "Figma file key for design-file extraction. Routes adoption through brand_extract_figma.",
        +  "type": "string"
        +}
      • addedInput schema / properties / guideline_pdf
        Added value: +{
        +  "description": "Path to a PDF brand guideline in or under the working directory (e.g. './brand-guidelines.pdf'). Routes adoption through brand_extract_pdf.",
        +  "type": "string"
        +}
      • changedInput schema / properties / mode / description
        Previous value: -"'auto' (recommended): runs full pipeline in one call when website_url is provided. 'interactive': presents source menu for user to choose extraction method."New value: +"'auto' (recommended): runs full pipeline in one call when website_url is provided. 'interactive': assesses available sources (including files discovered in the working directory) and presents a source menu."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "_metadata": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "next_steps": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "what_happened": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "what_happened",
        +        "next_steps"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "_metadata"
        +  ],
        +  "type": "object"
        +}
    • Changedbrand_status1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "_metadata": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "next_steps": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "what_happened": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "what_happened",
        +        "next_steps"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "_metadata"
        +  ],
        +  "type": "object"
        +}
    • Removedbrand_write
  6. 12 tool updatesv0.9.2
    • Addedbrand_brandcode_auth
    • Changedbrand_brandcode_connect3 fields changed
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "pull",
        +  "description": "\"pull\" connects to an existing hosted brand and downloads it. \"save\" uploads the local .brand/ to Studio (requires auth via brand_brandcode_auth).",
        +  "enum": [
        +    "pull",
        +    "save"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / url / description
        Previous value: -"Brandcode Studio brand URL or slug. Examples: \"https://brandcode.studio/start/brands/pendium\", \"pendium\""New value: +"Brandcode Studio brand URL or slug. Required for mode=\"pull\". Examples: \"https://brandcode.studio/start/brands/pendium\", \"pendium\""
      • removedInput schema / required
        Removed value: -[
        -  "url"
        -]
    • Addedbrand_brandcode_live
    • Changedbrand_brandcode_sync2 fields changed
      • addedInput schema / properties / direction
        Added value: +{
        +  "default": "pull",
        +  "description": "\"pull\" (default) fetches the latest from Studio. \"push\" uploads local .brand/ to Studio (requires auth).",
        +  "enum": [
        +    "pull",
        +    "push"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / share_token / description
        Previous value: -"Share token for protected brands (only needed if not stored)"New value: +"Share token for protected brands (only needed for pull)"
    • Addedbrand_check
    • Addedbrand_connect_repo
    • Addedbrand_enrich_skill
    • Changedbrand_export2 fields changed
      • changedInput schema / properties / target / description
        Previous value: -"Where this export will be used. 'chat': upload to AI conversation (Claude/ChatGPT/Gemini). 'code': paste into CLAUDE.md or .cursorrules. 'team': share with designers/writers. 'email': send via Slack or email. 'claude-skill': persistent Claude skill file with embedded logo + brand rules — the gold standard for automatic brand application in every artifact."New value: +"Where this export will be used. 'chat': upload to AI conversation (Claude/ChatGPT/Gemini). 'code': paste into CLAUDE.md or .cursorrules. 'team': share with designers/writers. 'email': send via Slack or email. 'claude-skill': persistent Claude skill file with embedded logo + brand rules. 'pdf': brand guide PDF with color swatches, typography, visual rules, and voice summary — no browser needed."
      • changedInput schema / properties / target / enum
        Previous value: -[
        -  "chat",
        -  "code",
        -  "team",
        -  "email",
        -  "claude-skill"
        -]New value: +[
        +  "chat",
        +  "code",
        +  "team",
        +  "email",
        +  "claude-skill",
        +  "pdf"
        +]
    • Changedbrand_extract_figma8 fields changed
      • addedInput schema / properties / design_context
        Added value: +{
        +  "description": "Raw output from get_design_context - colors and fonts parsed from generated code",
        +  "type": "string"
        +}
      • changedInput schema / properties / figma_file_key / description
        Previous value: -"Figma file key (required for plan mode)"New value: +"Figma file key from URL"
      • addedInput schema / properties / figma_url
        Added value: +{
        +  "description": "Full Figma URL - file key and node ID extracted automatically",
        +  "type": "string"
        +}
      • changedInput schema / properties / logo_svg / description
        Previous value: -"Raw SVG of logo component (for ingest mode)"New value: +"Raw SVG of logo component"
      • changedInput schema / properties / mode / description
        Previous value: -"\"plan\" to get instructions, \"ingest\" to process Figma data"New value: +"\"plan\" to get extraction instructions, \"ingest\" to process collected Figma data"
      • changedInput schema / properties / styles / description
        Previous value: -"Figma text styles (for ingest mode)"New value: +"Figma text styles"
      • addedInput schema / properties / variable_map
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "Simple { name: hex } map from get_variable_defs",
        +  "type": "object"
        +}
      • changedInput schema / properties / variables / description
        Previous value: -"Figma variables (for ingest mode)"New value: +"Figma variables in structured format"
    • Addedbrand_preview
    • Addedbrand_repo_status
    • Changedbrand_runtime3 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / slice
        Added value: +{
        +  "default": "full",
        +  "description": "Which slice of the runtime to return. 'full': everything (~1200 tokens). 'visual': colors, typography, logo, anti-patterns, composition (~200 tokens). 'voice': tone, vocabulary, never-say, perspective (~400 tokens). 'minimal': primary color, heading font, logo reference only (~100 tokens). Use slices to reduce prompt size when handing off to sub-agents that only need part of the brand.",
        +  "enum": [
        +    "full",
        +    "visual",
        +    "voice",
        +    "minimal"
        +  ],
        +  "type": "string"
        +}
  7. 36 tool updatesv0.5.0
    • First observedbrand_audit
    • First observedbrand_audit_content
    • First observedbrand_audit_drift
    • First observedbrand_brandcode_connect
    • First observedbrand_brandcode_status
    • First observedbrand_brandcode_sync
    • First observedbrand_build_journey
    • First observedbrand_build_matrix
    • First observedbrand_build_personas
    • First observedbrand_build_themes
    • First observedbrand_check_compliance
    • First observedbrand_clarify
    • First observedbrand_compile
    • First observedbrand_compile_messaging
    • First observedbrand_deepen_identity
    • First observedbrand_export
    • First observedbrand_extract_figma
    • First observedbrand_extract_messaging
    • First observedbrand_extract_pdf
    • First observedbrand_extract_site
    • First observedbrand_extract_visual
    • First observedbrand_extract_web
    • First observedbrand_feedback
    • First observedbrand_feedback_review
    • First observedbrand_feedback_triage
    • First observedbrand_generate_designmd
    • First observedbrand_ingest_assets
    • First observedbrand_init
    • First observedbrand_preflight
    • First observedbrand_report
    • First observedbrand_resolve_conflicts
    • First observedbrand_runtime
    • First observedbrand_set_logo
    • First observedbrand_start
    • First observedbrand_status
    • First observedbrand_write

TDQS

A4.1/5.0

Scored across 12 tools

Disambiguation3/5

Descriptions work hard to draw boundaries ("NOT for X — use Y"), and the core pipeline stages (start, compile, runtime, context, check) are mostly distinguishable. However, brand_report and brand_export ('team'/'pdf' targets) both produce brand guideline documents, and brand_check's 'css' mode overlaps directly with brand_preflight's anti-pattern checks. Worse, several descriptions redirect to tools that do not exist (brand_check_compliance, brand_audit, brand_audit_content, brand_preview), so an agent following the signposting hits dead ends.

Naming Consistency4/5

All names are snake_case under a consistent 'brand_' prefix, with the related pair brand_brandcode_auth/connect grouped sensibly. The only deviation is a mix of verb-first (brand_start, brand_compile, brand_clarify) and noun-only (brand_status, brand_report, brand_runtime, brand_context, brand_preflight) forms, which is slightly inconsistent since brand_report and brand_preflight are actions despite being noun-shaped.

Tool Count4/5

Twelve tools is well within a reasonable range for a brand-system lifecycle spanning ingest, compile, validate, and distribute. A couple of pairs (brand_report vs brand_export, brand_check vs brand_preflight) could plausibly be merged, but no tool is obviously redundant enough to feel padded.

Completeness3/5

The main lifecycle — adopt source, status, extract/compile, clarify, report, lint, export, share — is covered end to end. But the surface has real dead ends: brand_check_compliance, brand_audit, brand_audit_content, and brand_preview are explicitly referenced as the correct tool for certain tasks yet are absent, and there is no token-level edit/update or delete/reset operation beyond interactive clarification.

Maintenance

ActivityNo data
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Generates complete brand identity systems including colors, typography, logos, and design tokens with 58 MCP tools. Supports multi-format export and AI-assisted refinement.
    22 npm
    2
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Deterministically generates brand and design artefacts (logo SVG, colour palette, type system, design tokens) with signed, 0G-anchored provenance receipts, plus paid tools for social kits, revisions, and verification.
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Serves an editable folder of plain brand files—identity, colours, fonts, rules, formats and examples—to any AI tool over MCP, so generated designs and copy come out on-brand. It also checks HTML, CSS, SVG and text against those rules, and can read a public site's CSS to extract its real palette, fonts and spacing.
    MIT