Skip to main content
Glama

Extract brand identity

extract_brand
Read-onlyIdempotent

Use when the user wants a site's brand: its colors, fonts, logo, theme or social links - 'what colors does stripe use', 'match this brand', 'build something in the style of X'. Returns role colors (primary, accent, background, text) as hex with human-readable names, the wider palette, fonts by role, logo candidates, social profiles, dark/light theme, and a 0-1 confidence score with signals explaining where the colors came from: read signals.explanation and tell the user whether they were declared by the site ('css-var'/'theme-color') or inferred from usage frequency ('usage', a guess) - never present inferred colors as the official palette. Not for: markup or layout (use extract_code) or the full token list (use extract_design_tokens).

Input Schema

NameRequiredDescriptionDefault
urlYesThe website URL, e.g. stripe.com
freshNoSkip the 24-hour cache and re-extract the live page - use when the site just changed and a cached result would be stale. Charged normally; the fresh result replaces the cached copy.
renderNoForce a real browser so the page's JavaScript runs before it is read. Slower, and adds 5 credits. Usually not needed: when the plain read comes back as a JavaScript app shell or the site refuses it (401/403/406) or timed out, the server already re-runs the page in a browser by itself at no extra cost, and usage.autoRender says so. Pass it for images, videos or Lottie that only load on scroll, with screenshot=true, or when a result is still thin after that automatic pass. If a 403 says the browser was refused too, the site cannot be extracted - do not retry. extract_code always runs in a real browser at no extra cost, so render=true is not needed there (only together with screenshot=true). On extract_design_tokens, render=true only permits the browser: the plain read still runs first, and the 5 credits are charged only if the browser was actually needed.
screenshotNoRequires render=true. Adds a screenshot field to the result: a public URL of a capture of the page (live 7 days), taken by the same browser that rendered it. Pass true for the 1440x900 viewport or 'full' for the entire page height. No extra credits beyond the render surcharge. Useful for showing the user what the extracted site looks like.
response_formatNoHow much to return. 'concise' keeps lists to 10 entries and strings short - right for a summary or a chat answer. 'detailed' returns everything the tool has (same as limit=200 + full_output=true). Omit for the default, which fits a typical chat context. The generated code is never trimmed in any mode.

Output Schema

NameRequiredDescriptionDefault
urlYes
logoNoThe site's real logo when we found one: the wordmark from its header, read in a real browser and hosted by MiroMiro (permanent URL, safe to embed); otherwise its best declared icon. Show this one to the user.
nextNoThe most likely follow-up call for this result, with the tool and arguments to use. Offer it to the user when it fits what they are doing.
fontsNo
logosNoAll logo/icon candidates, tagged by source: header (the wordmark, hosted, with background light|dark it is drawn for), icon, apple-touch-icon, mask-icon, og
themeNodark | light
titleNoPage/og title - the brand name
usageNoCredit usage for the authed key (spent, remaining, monthly limit).
colorsNoRole colors as hex: primary, accent, background, text
ogImageNo
paletteNoThe wider brand palette
signalsNoWHY the result looks the way it does - the provenance behind `confidence`. Read `signals.explanation` and tell the user what it says instead of quoting the confidence number, which means nothing to them on its own. `primarySource` is the key field: 'css-var' or 'theme-color' means the site declared these colors and they are its real tokens; 'logo' means they were sampled from its logo; 'usage' means nothing was declared and the colors are a frequency-based GUESS - say so rather than presenting them as the brand's official palette.
socialsNoSocial profiles found on the page
siteNameNo
colorNamesNoHuman-readable names for the role colors ("Royal Blue")
confidenceNo0-1: how much the site declared vs how much was inferred
themeColorNoThe site's own declared theme-color
typographyNoFonts split by role: primary, mono
descriptionNo
logoVariantsNoThe header logo per background: onLight is the file for a light background, onDark for a dark one. A one-color logo gets a recolored copy for the other background; a multi-color one only has its original. null when no header logo was found.
truncation_noteNoPresent when the result was trimmed to fit chat context - says what was dropped and how to get more (limit / full_output arguments, or the REST API).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered. The description goes beyond them by disclosing the confidence score and the meaning of `signals.explanation` ('css-var'/'theme-color' vs 'usage'), which is genuine interpretive guidance. However, it omits caching behavior and the credit costs that the schema documents for fresh/render, leaving a gap that a 3 reflects.

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 trigger condition, then the return shape, then the presentation caveat, then the exclusions — a clean triage order. Despite its length, every clause carries distinct information (trigger, output, interpretation warning, sibling boundaries).

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?

The output schema covers return values, and the description still supplies the one thing an agent would otherwise get wrong: not to present inferred colors as the official palette. Combined with sibling routing for extract_code and extract_design_tokens, an agent has everything needed to call and report 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 all five parameters are already documented in detail, including the render surcharge and cache semantics. The description adds nothing about url, fresh, render, screenshot or response_format, so the baseline 3 applies.

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 ('a site's brand: its colors, fonts, logo, theme or social links') and grounds it in concrete user phrasings like 'what colors does stripe use'. The 'Not for:' clause explicitly separates it from extract_code and extract_design_tokens, so an agent can route without opening either 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 both when-to-use ('Use when the user wants a site's brand') and when-not-to-use with named alternatives for markup/layout and the full token list. The alternative routing is explicit rather than inferred.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.